Contribution Guide
This section contains documentation for developers and contributors working on n8n-as-code.
๐ Available Documentationโ
Architecture & Designโ
- Architecture Overview: Understand the n8n-as-code monorepo architecture, component interactions, and design decisions.
Internal Packagesโ
- Sync Engine: Internal documentation for the sync engine embedded in
n8nacand reused by the VS Code extension. - Skills Library: Internal documentation for
@n8n-as-code/skills, the internal library exposed throughn8nac skills. - Claude Adapter: Internal documentation for the Claude adapter generated from the Skills library.
๐ Development Setupโ
Prerequisitesโ
- Node.js 18+
- npm 9+
- Git
Getting Startedโ
- Clone the repository
- Run
npm installin the root directory - Build all packages with
npm run build - Run tests with
npm test
๐ฆ Package Structureโ
n8n-as-code is organized as a monorepo with the following packages:
| Package | Purpose | Primary Users |
|---|---|---|
CLI (n8nac) | Command-line interface + embedded sync engine | Terminal users, automation |
Skills Library (@n8n-as-code/skills) | Internal AI tooling library exposed through n8nac skills | AI assistants, developers |
Transformer (@n8n-as-code/transformer) | TypeScript workflow decorators, conversion, and code generation primitives | Workflow authors, package maintainers |
VS Code Extension (n8n-as-code) | Integrated editor experience built on top of n8nac and @n8n-as-code/skills | VS Code users |
There is no longer a standalone Claude Skill package in packages/. Claude-specific distribution is generated from packages/skills as an adapter artifact.
๐งช Testingโ
Test Structureโ
- Unit Tests: Individual component testing with Jest
- Integration Tests: End-to-end workflow tests
- Snapshot Tests: Ensure generated files match expected format
Running Testsโ
# Run all tests
npm test
# Run tests for specific package
cd packages/skills && npm test
cd packages/cli && npm test
๐ง Buildingโ
Development Buildโ
npm run build
Watch Mode (Development)โ
# CLI watch mode
cd packages/cli && npm run watch
# Rebuild the VS Code extension
cd packages/vscode-extension && npm run build
๐ฆ Version Managementโ
n8n-as-code uses a custom commit-driven release flow with independent package versioning. Each package evolves independently while the release automation keeps internal dependencies aligned.
Current Package Versionsโ
Packages evolve independently with their own version numbers:
- @n8n-as-code/transformer:
0.2.9 - n8nac:
0.11.4(embeds sync engine, exposesn8nac skills) - @n8n-as-code/skills:
0.16.16(internal library, consumed byn8nacand the VS Code extension) - VS Code Extension:
0.20.1
Note: Each package has its own version number. The release workflow updates internal dependency pins automatically whenever an upstream package version changes.
Package Publication Strategyโ
The project uses a custom commit-driven release flow.
| Package | Published To | Version Source |
|---|---|---|
@n8n-as-code/transformer | NPM Registry | Conventional commits + dependency propagation |
@n8n-as-code/skills | NPM Registry | Conventional commits + dependency propagation |
n8nac | NPM Registry | Conventional commits + dependency propagation |
n8n-as-code (VS Code Extension) | VS Code Marketplace / Open VSX | packages/vscode-extension/package.json with even-minor stable lines and odd-minor prerelease lines |
| Claude adapter artifacts | GitHub repository / plugin distribution flow | Built from packages/skills/scripts/build-claude-adapter.js |
n8n-as-code-monorepo (root) | Not published | Not released |
docs | Not published | Not released |
Release Workflowโ
Push to nextโ
- Every push to
nextcomputes prerelease bumps from commit messages. - Internal dependency versions are re-pinned automatically.
- Changed public packages are published to npm with the
nextdist-tag. - The VS Code extension follows the official Marketplace recommendation: stable releases use even minor lines and prereleases use odd minor lines.
- The prerelease line is intentionally kept above the stable version that the same changes will later publish from
main, so preview users are not forced back to stable. - Example: if the current stable extension is
0.21.0, the next stable release becomes0.22.0and prereleases onnextbecome0.23.1,0.23.2,0.23.3, and so on. - Open VSX prereleases remain disabled.
Push to mainโ
- If any package version in
package.jsonis already ahead of its latest stable tag,mainpublishes that version directly instead of opening a new release PR. - A push to
maincreates or updates a single release PR only when no package is already ahead of its latest stable tag and commit history requires version bumps. - The release PR updates package versions and internal dependency versions together.
- For the VS Code extension, stable releases always land on patch
0of the next even minor line. - Example: after prereleases on
0.23.x, the next stable extension release becomes0.22.0, and the following cycle starts with prereleases on0.25.x.
Merge the release PRโ
- The merged
package.jsonversions become the stable source of truth. - Changed npm packages are published in dependency order.
- The VS Code extension is published from the exact version committed in
packages/vscode-extension/package.json. - Stable git tags are pushed for each released package.
- The workflow force-aligns
nextback tomain, or recreatesnextif it was deleted.
Example: How Internal Dependencies Stay Synchronizedโ
Let's say you fix a bug in the sync engine (embedded in n8nac):
# 1. Push a conventional commit to next
git commit -m "fix(cli): handle sync edge case"
# 2. Merge next into main
# 3. Let the release PR bump versions automatically
Result:
n8nac:0.11.4โ0.11.5โ@n8n-as-code/skills: (unchanged, no dependency on n8nac) โVS Code Extension:0.21.0โ0.22.0onmain, whilenextprereleases are published on0.23.xโ
All packages that depend on n8nac will have their package.json updated to reference the newly released stable version.
Workflow Summary Diagramโ
Developer pushes conventional commits to next
โ
CI publishes prereleases from next
โ
next is merged into main
โ
CI creates or updates a release PR
โ
Maintainer merges the release PR
โ
CI automatically:
โโโ Publishes stable npm packages in dependency order
โโโ Tags released package versions
โโโ Publishes the VS Code extension from package.json
โโโ Re-aligns next on top of main
Key Rulesโ
- Never manually edit release versions in PRs by hand unless you are intentionally repairing the release flow
- Use conventional commits so the CI can derive
major,minor, orpatchautomatically - Package-scoped
docs(...)commits also count as patch releases when they touch files inside a released package - The VS Code extension uses even minor lines for stable releases and odd minor lines for prereleases
- The prerelease line must stay numerically above the stable release that will be published next
- The VS Code extension version line is driven from
packages/vscode-extension/package.json - Internal dependencies are automatically re-pinned whenever an upstream package is bumped
- Private packages remain safe - they can participate in version orchestration without npm publication
- Use
npm run check-versionsto verify all internal dependencies are up-to-date - Git tags are created automatically for each published NPM package
- Each package has independent releases - No global monorepo release
๐ Contribution Guidelinesโ
Code Styleโ
- Use TypeScript with strict type checking
- Follow ESLint configuration
- Write comprehensive tests for new features
Pull Request Processโ
- Create a feature branch from
main - Make your changes with tests
- Ensure all tests pass
- Submit a pull request with clear description
Documentationโ
- Update relevant documentation when adding features
- Include JSDoc comments for public APIs
- Keep the contributors documentation up to date
๐ Related Resourcesโ
โ Need Help?โ
- Check the existing documentation in this section
- Look at the source code for examples
- Open an issue on GitHub for specific questions
- Join discussions in the GitHub forum
This documentation is maintained by the n8n-as-code development team.