Skip to content

Contributing

If you wish to contribute to the yantrix codebase or documentation, feel free to fork the repository and submit a pull request. We use Turborepo and PNPM to manage the monorepository, therefore, for completeness of perception, we recommend that you familiarize yourself with the official documentation of each of them.

⌨️ Prerequisites

Before you start working with the repository, make sure that you have the following tools globally installed:

🚀 Quick Start

When working with the repository, do the following steps:

  1. Fork and clone the repository (make sure you're on the main branch).
  2. Run pnpm install --frozen-lockfile.
  3. Run pnpm build to build local packages.
  4. Сode whatever your heart desires.
  5. Run pnpm run test to make sure you haven't messed up.
  6. Push your local changes to your remote repository.
  7. Submit a pull request (make sure you follow the conventional commit format).
  8. Voilà, you're in business.

For advanced repository management, you can read this article.

Common Operations

CommandWhat it does
pnpm buildFull monorepo build (all 4 steps) + build summary table
pnpm testRun all tests + print test summary table
pnpm run build:yantrixBuild only @yantrix/* packages
pnpm run build:restBuild non-@yantrix packages
pnpm run build:affectedBuild packages changed vs origin/main
pnpm run test:affectedTest packages changed vs origin/main
pnpm turbo run build --filter=@yantrix/<pkg>Build a single package
pnpm turbo run test --filter=@yantrix/<pkg>Test a single package
cd packages/<pkg> && pnpm buildBuild a single package (shorter form)
cd packages/<pkg> && pnpm testTest a single package (shorter form)
pnpm run summary:buildPrint build stats table without rebuilding
pnpm run summary:testPrint test results without re-running tests
pnpm run lintLint the entire monorepo
pnpm run formatAuto-fix lint issues
pnpm cleanRemove all dist/, coverage/, generated outputs

If you use Claude Code as your AI assistant, optional slash commands for common tasks (safe commits, changelog generation) are documented here.

Adding a New Dialect

To add a new target language (dialect) to codegen, follow the step-by-step guide in Adding a Dialect.

Testing the Code Generator

For an explanation of the two-layer test model, utilities, naming conventions, and worked examples for all dialects (including Python subprocess tests), see Testing the Code Generator.

Patching Codegen Dialects

When fixing TypeScript errors in generated files, read Patching Codegen Dialects first. It covers the hasTypes pipeline, the expression serializer chain, strict-mode suppression patterns, turbo cache cascade behavior, and the rule against patching core libraries to fix generated output.

Codegen Internals

For architecture diagrams and dialect-specific implementation references, see: