mcpField
N
n8n-conventions

n8n-conventions

github.com/n8n-ioDevelopment208.9k433 installsUpdated today
Repository

About n8n-conventions

A quick-reference skill for n8n contributors, summarizing key TypeScript, frontend, backend, testing, database, and command conventions.

Key features

  1. 01TypeScript and error-handling rules
  2. 02Frontend and backend patterns
  3. 03Testing and database guidance
  4. 04Common package and command references

Use cases

  1. 01Checking conventions while editing n8n
  2. 02Choosing project patterns for a change
  3. 03Finding relevant commands and packages

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/n8n-io/n8n --skill n8n-conventions

After installing, type/n8n-conventionsin Claude Code to confirm it loaded.

Details

From the project README

n8n Quick Reference

📚 Full Documentation:

  • General: /AGENTS.md - Architecture, commands, workflows
  • Frontend: /packages/frontend/AGENTS.md - CSS variables, timing

Use this skill when you need quick reminders on critical patterns.

Critical Rules (Must Follow)

TypeScript:

  • Never any → use unknown
  • Prefer satisfies over as (except tests)
  • Shared types in @n8n/api-types

Error Handling:

import { UnexpectedError } from 'n8n-workflow';
throw new UnexpectedError('message', { extra: { context } });
// DON'T use deprecated ApplicationError

Frontend:

  • Vue 3 Composition API (<script setup lang="ts">)
  • CSS variables (never hardcode px) - see /packages/frontend/AGENTS.md
  • All text via i18n ($t('key'))
  • data-testid for E2E (single value, no spaces)

Backend:

  • Controller → Service → Repository
  • Dependency injection via @n8n/di
  • Config via @n8n/config
  • Zod schemas for validation

Testing:

  • Vitest (unit), Playwright (E2E)
  • Mock external dependencies
  • Work from package directory: pushd packages/cli && pnpm test

Database:

  • SQLite/PostgreSQL only (app DB)
  • Exception: DB nodes (MySQL Node, etc.) can use DB-specific features

Commands:

pnpm build > build.log 2>&1  # Always redirect
pnpm typecheck               # Before commit
pnpm lint                    # Before commit

Key Packages

PackagePurpose
packages/cliBackend API
packages/frontend/editor-uiVue 3 frontend
packages/@n8n/api-typesShared types
packages/@n8n/dbTypeORM entities
packages/workflowCore interfaces

Common Patterns

Pinia Store:

import { STORES } from '@n8n/stores';
export const useMyStore = defineStore(STORES.MY_STORE, () => {
  const state = shallowRef([]);
  return { state };
});

Vue Component:

<script setup lang="ts">
type Props = { title: string };
const props = defineProps<Props>();
</script>

Service:

import { Service } from '@n8n/di';
import { Config } from '@n8n/config';

@Service()
export class MyService {
  constructor(private readonly config: Config) {}
}

📖 Need more details? Read /AGENTS.md and /packages/frontend/AGENTS.md

Comments

Markdown supported