2019-08-13 23:30:54 -07:00
# Contributing to n8n
Great that you are here and you want to contribute to n8n
2019-08-21 14:18:09 -07:00
## Contents
2022-11-09 08:32:05 -08:00
- [Contributing to n8n ](#contributing-to-n8n )
- [Contents ](#contents )
- [Code of conduct ](#code-of-conduct )
- [Directory structure ](#directory-structure )
- [Development setup ](#development-setup )
- [Requirements ](#requirements )
- [Node.js ](#nodejs )
2023-02-21 05:04:35 -08:00
- [pnpm ](#pnpm )
- [pnpm workspaces ](#pnpm-workspaces )
- [corepack ](#corepack )
2022-11-09 08:32:05 -08:00
- [Build tools ](#build-tools )
- [Actual n8n setup ](#actual-n8n-setup )
- [Start ](#start )
- [Development cycle ](#development-cycle )
- [Test suite ](#test-suite )
2023-02-21 05:04:35 -08:00
- [Releasing ](#releasing )
2022-11-09 08:32:05 -08:00
- [Create custom nodes ](#create-custom-nodes )
- [Extend documentation ](#extend-documentation )
- [Contributor License Agreement ](#contributor-license-agreement )
2019-08-21 14:18:09 -07:00
2021-09-14 22:52:23 -07:00
## Code of conduct
2019-08-13 23:30:54 -07:00
This project and everyone participating in it are governed by the Code of
Conduct which can be found in the file [CODE_OF_CONDUCT.md ](CODE_OF_CONDUCT.md ).
By participating, you are expected to uphold this code. Please report
unacceptable behavior to jan@n8n.io.
2021-09-14 22:52:23 -07:00
## Directory structure
2019-08-13 23:30:54 -07:00
n8n is split up in different modules which are all in a single mono repository.
The most important directories:
2022-08-19 06:34:02 -07:00
- [/docker/image ](/docker/images ) - Dockerfiles to create n8n containers
- [/docker/compose ](/docker/compose ) - Examples Docker Setups
- [/packages ](/packages ) - The different n8n modules
- [/packages/cli ](/packages/cli ) - CLI code to run front- & backend
- [/packages/core ](/packages/core ) - Core code which handles workflow
execution, active webhooks and
workflows. **Contact n8n before
starting on any changes here**
- [/packages/design-system ](/packages/design-system ) - Vue frontend components
- [/packages/editor-ui ](/packages/editor-ui ) - Vue frontend workflow editor
- [/packages/node-dev ](/packages/node-dev ) - CLI to create new n8n-nodes
- [/packages/nodes-base ](/packages/nodes-base ) - Base n8n nodes
- [/packages/workflow ](/packages/workflow ) - Workflow code with interfaces which
get used by front- & backend
2019-08-13 23:30:54 -07:00
2021-09-14 22:52:23 -07:00
## Development setup
2019-08-13 23:30:54 -07:00
If you want to change or extend n8n you have to make sure that all needed
dependencies are installed and the packages get linked correctly. Here a short guide on how that can be done:
### Requirements
2021-10-14 15:21:04 -07:00
#### Node.js
2023-01-19 01:41:44 -08:00
[Node.js ](https://nodejs.org/en/ ) version 16.9 or newer is required for development purposes.
2022-11-09 08:32:05 -08:00
2023-01-19 01:41:44 -08:00
#### pnpm
[pnpm ](https://pnpm.io/ ) version 7.18 or newer is required for development purposes. We recommend installing it with [corepack ](#corepack ).
##### pnpm workspaces
n8n is split up in different modules which are all in a single mono repository.
To facilitate the module management, [pnpm workspaces ](https://pnpm.io/workspaces ) are used.
This automatically sets up file-links between modules which depend on each other.
#### corepack
2023-01-27 01:18:15 -08:00
We recommend enabling [Node.js corepack ](https://nodejs.org/docs/latest-v16.x/api/corepack.html ) with `corepack enable` .
2023-01-19 01:41:44 -08:00
2023-01-27 01:18:15 -08:00
With Node.js v16.17 or newer, you can install the latest version of pnpm: `corepack prepare pnpm@latest --activate` . If you use an older version install at least version 7.18 of pnpm via: `corepack prepare pnpm@7.18.0 --activate` .
2022-11-09 08:32:05 -08:00
**IMPORTANT**: If you have installed Node.js via homebrew, you'll need to run `brew install corepack` , since homebrew explicitly removes `npm` and `corepack` from [the `node` formula ](https://github.com/Homebrew/homebrew-core/blob/master/Formula/node.rb#L66 ).
**IMPORTANT**: If you are on windows, you'd need to run `corepack enable` and `corepack prepare pnpm --activate` in a terminal as an administrator.
2021-10-14 15:21:04 -07:00
2021-09-14 22:52:23 -07:00
#### Build tools
2019-08-13 23:30:54 -07:00
2019-08-14 04:45:18 -07:00
The packages which n8n uses depend on a few build tools:
2019-08-13 23:30:54 -07:00
2020-09-03 03:45:54 -07:00
Debian/Ubuntu:
2022-08-19 06:34:02 -07:00
2019-08-13 23:30:54 -07:00
```
apt-get install -y build-essential python
```
2020-09-03 03:45:54 -07:00
CentOS:
2022-08-19 06:34:02 -07:00
2020-09-03 03:45:54 -07:00
```
yum install gcc gcc-c++ make
```
2019-08-13 23:30:54 -07:00
Windows:
2022-08-19 06:34:02 -07:00
2019-08-13 23:30:54 -07:00
```
2022-11-09 08:32:05 -08:00
npm add -g windows-build-tools
2019-08-13 23:30:54 -07:00
```
2023-01-19 01:41:44 -08:00
MacOS:
2019-08-13 23:30:54 -07:00
2023-01-19 01:41:44 -08:00
No additional packages required.
2019-08-13 23:30:54 -07:00
### Actual n8n setup
2022-01-15 11:29:27 -08:00
> **IMPORTANT**: All the steps below have to get executed at least once to get the development setup up and running!
2019-10-25 06:28:39 -07:00
2019-08-13 23:30:54 -07:00
Now that everything n8n requires to run is installed the actual n8n code can be
checked out and set up:
2021-09-14 22:52:23 -07:00
1. [Fork ](https://guides.github.com/activities/forking/#fork ) the n8n repository
2022-08-06 13:55:51 -07:00
2. Clone your forked repository
2022-08-19 06:34:02 -07:00
```
git clone https://github.com/< your_github_username > /n8n.git
```
2021-09-14 22:52:23 -07:00
2022-09-02 07:13:17 -07:00
3. Go into repository folder
2022-08-19 06:34:02 -07:00
```
2022-09-02 07:13:17 -07:00
cd n8n
2022-08-19 06:34:02 -07:00
```
2019-08-13 23:30:54 -07:00
2022-09-02 07:13:17 -07:00
4. Add the original n8n repository as `upstream` to your forked repository
2022-08-19 06:34:02 -07:00
```
2022-09-02 07:13:17 -07:00
git remote add upstream https://github.com/n8n-io/n8n.git
2022-08-19 06:34:02 -07:00
```
2019-08-13 23:30:54 -07:00
2022-08-06 13:55:51 -07:00
5. Install all dependencies of all modules and link them together:
2022-08-19 06:34:02 -07:00
```
2022-11-09 08:32:05 -08:00
pnpm install
2022-08-19 06:34:02 -07:00
```
2019-08-13 23:30:54 -07:00
2022-08-06 13:55:51 -07:00
6. Build all the code:
2022-08-19 06:34:02 -07:00
```
2022-11-09 08:32:05 -08:00
pnpm build
2022-08-19 06:34:02 -07:00
```
2019-08-13 23:30:54 -07:00
### Start
To start n8n execute:
```
2022-11-09 08:32:05 -08:00
pnpm start
2019-08-13 23:30:54 -07:00
```
2019-08-14 00:14:24 -07:00
2020-09-01 05:41:29 -07:00
To start n8n with tunnel:
2022-08-19 06:34:02 -07:00
2020-09-01 05:41:29 -07:00
```
./packages/cli/bin/n8n start --tunnel
```
2019-08-14 00:14:24 -07:00
2021-09-14 22:52:23 -07:00
## Development cycle
2019-08-14 00:14:24 -07:00
2022-11-09 08:32:05 -08:00
While iterating on n8n modules code, you can run `pnpm dev` . It will then
2019-08-14 04:45:18 -07:00
automatically build your code, restart the backend and refresh the frontend
(editor-ui) on every change you make.
2019-08-14 00:14:24 -07:00
2019-08-14 04:45:18 -07:00
1. Start n8n in development mode:
2022-08-19 06:34:02 -07:00
```
2022-11-09 08:32:05 -08:00
pnpm dev
2022-08-19 06:34:02 -07:00
```
2021-04-07 05:33:16 -07:00
1. Hack, hack, hack
2019-08-14 04:45:18 -07:00
1. Check if everything still runs in production mode
2022-08-19 06:34:02 -07:00
```
2022-11-09 08:32:05 -08:00
pnpm build
pnpm start
2022-08-19 06:34:02 -07:00
```
2019-08-14 04:45:18 -07:00
1. Create tests
2021-09-14 22:52:23 -07:00
1. Run all [tests ](#test-suite )
2022-08-19 06:34:02 -07:00
```
2022-11-09 08:32:05 -08:00
pnpm test
2022-08-19 06:34:02 -07:00
```
2021-09-14 22:52:23 -07:00
1. Commit code and [create a pull request ](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork )
2019-08-14 00:14:24 -07:00
### Test suite
2019-08-14 04:45:18 -07:00
The tests can be started via:
2022-08-19 06:34:02 -07:00
2019-08-14 04:45:18 -07:00
```
2022-11-09 08:32:05 -08:00
pnpm test
2019-08-14 04:45:18 -07:00
```
If that gets executed in one of the package folders it will only run the tests
of this package. If it gets executed in the n8n-root folder it will run all
tests of all packages.
2019-08-21 14:15:22 -07:00
2023-02-21 05:04:35 -08:00
## Releasing
To start a release, trigger [this workflow ](https://github.com/n8n-io/n8n/actions/workflows/release-create-pr.yml ) with the SemVer release type, and select a branch to cut this release from. This workflow will then
1. Bump versions of packages that have changed or have dependencies that have changed
2. Update the Changelog
3. Create a new branch called `release/${VERSION}` , and
4. Create a new pull-request to track any further changes that need to be included in this release
Once ready to release, simply merge the pull-request.
This triggers [another workflow ](https://github.com/n8n-io/n8n/actions/workflows/release-publish.yml ), that will
1. Build and publish the packages that have a new version in this release
2. Create a new tag, and GitHub release from squashed release commit
3. Merge the squashed release commit back into `master`
2021-09-14 22:52:23 -07:00
## Create custom nodes
2019-08-21 14:15:22 -07:00
2023-01-10 07:18:01 -08:00
Learn about [building nodes ](https://docs.n8n.io/integrations/creating-nodes/ ) to create custom nodes for n8n. You can create community nodes and make them available using [npm ](https://www.npmjs.com/ ).
2020-04-28 02:50:20 -07:00
2021-09-14 22:52:23 -07:00
## Extend documentation
2019-10-02 01:00:28 -07:00
2021-04-07 05:33:16 -07:00
The repository for the n8n documentation on [docs.n8n.io ](https://docs.n8n.io ) can be found [here ](https://github.com/n8n-io/n8n-docs ).
2019-10-25 13:21:18 -07:00
## Contributor License Agreement
That we do not have any potential problems later it is sadly necessary to sign a [Contributor License Agreement ](CONTRIBUTOR_LICENSE_AGREEMENT.md ). That can be done literally with the push of a button.
2020-06-18 01:08:31 -07:00
We used the most simple one that exists. It is from [Indie Open Source ](https://indieopensource.com/forms/cla ) which uses plain English and is literally only a few lines long.
2019-10-25 13:21:18 -07:00
A bot will automatically comment on the pull request once it got opened asking for the agreement to be signed. Before it did not get signed it is sadly not possible to merge it in.