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
- [Code of Conduct ](#code-of-conduct )
- [Directory Structure ](#directory-structure )
- [Development Setup ](#development-setup )
- [Development Cycle ](#development-cycle )
- [Create Custom Nodes ](#create-custom-nodes )
2019-10-02 09:01:59 -07:00
- [Create a new node to contribute to n8n ](#create-a-new-node-to-contribute-to-n8n )
2020-04-28 02:58:17 -07:00
- [Checklist before submitting a new node ](#checklist-before-submitting-a-new-node )
2019-10-02 09:01:59 -07:00
- [Extend Documentation ](#extend-documentation )
2020-04-28 02:58:17 -07:00
- [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:
2020-09-02 00:23:26 -07:00
- [/docker/image ](/docker/images ) - Dockerfiles to create n8n containers
2019-08-13 23:30:54 -07:00
- [/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
2021-09-14 22:52:23 -07:00
workflows. **Contact n8n before
starting on any changes here**
2021-08-29 04:36:17 -07:00
- [/packages/design-system ](/packages/design-system ) - Vue frontend components
2019-08-13 23:30:54 -07:00
- [/packages/editor-ui ](/packages/editor-ui ) - Vue frontend workflow editor
2020-06-18 01:08:31 -07:00
- [/packages/node-dev ](/packages/node-dev ) - CLI to create new n8n-nodes
2019-08-13 23:30:54 -07:00
- [/packages/nodes-base ](/packages/nodes-base ) - Base n8n nodes
2019-11-16 11:18:52 -08:00
- [/packages/workflow ](/packages/workflow ) - Workflow code with interfaces which
2019-08-13 23:30:54 -07:00
get used by front- & backend
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-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:
2019-08-13 23:30:54 -07:00
```
apt-get install -y build-essential python
```
2020-09-03 03:45:54 -07:00
CentOS:
```
yum install gcc gcc-c++ make
```
2019-08-13 23:30:54 -07:00
Windows:
```
npm install -g windows-build-tools
```
#### lerna
n8n is split up in different modules which are all in a single mono repository.
2019-08-14 04:45:18 -07:00
To facilitate those modules management, [lerna ](https://lerna.js.org ) gets
2019-08-13 23:30:54 -07:00
used. It automatically sets up file-links between modules which depend on each
2019-08-14 00:14:24 -07:00
other.
2019-08-13 23:30:54 -07:00
So for the setup to work correctly lerna has to be installed globally like this:
```
npm install -g lerna
```
### Actual n8n setup
2019-10-25 06:28:39 -07:00
> **IMPORTANT**: All the steps bellow have to get executed at least once to get the development setup up and running!
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
1. Clone your forked repository
2019-08-13 23:30:54 -07:00
```
2021-09-14 22:52:23 -07:00
git clone https://github.com/< your_github_username > /n8n.git
```
1. Add the original n8n repository as `upstream` to your forked repository
```
git remote add upstream https://github.com/n8n-io/n8n.git
2019-08-13 23:30:54 -07:00
```
2019-08-14 04:45:18 -07:00
1. Go into repository folder
2019-08-13 23:30:54 -07:00
```
cd n8n
```
2019-08-14 04:45:18 -07:00
1. Install all dependencies of all modules and link them together:
2019-08-13 23:30:54 -07:00
```
lerna bootstrap --hoist
```
2019-08-14 04:45:18 -07:00
1. Build all the code:
2019-08-13 23:30:54 -07:00
```
npm run build
```
### Start
To start n8n execute:
```
npm run start
```
2019-08-14 00:14:24 -07:00
2020-09-01 05:41:29 -07:00
To start n8n with tunnel:
```
./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
2019-08-14 04:45:18 -07:00
While iterating on n8n modules code, you can run `npm run dev` . It will then
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:
```
npm run dev
```
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
```
npm run build
npm run start
```
1. Create tests
2021-09-14 22:52:23 -07:00
1. Run all [tests ](#test-suite )
2019-08-14 04:45:18 -07:00
```
npm run test
```
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:
```
npm run test
```
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
2021-09-14 22:52:23 -07:00
## Create custom nodes
2019-08-21 14:15:22 -07:00
2021-09-14 22:52:23 -07:00
> **IMPORTANT**: Avoid use of external libraries to ensure your custom nodes can be reviewed and merged quickly.
2019-08-21 14:15:22 -07:00
2021-04-07 05:33:16 -07:00
Learn about [using the node dev CLI ](https://docs.n8n.io/nodes/creating-nodes/node-dev-cli.html ) to create custom nodes for n8n.
2019-08-21 14:15:22 -07:00
2021-09-14 22:52:23 -07:00
More information can be found in the documentation of [n8n-node-dev ](https://github.com/n8n-io/n8n/tree/master/packages/node-dev ), a small CLI which helps with n8n-node-development.
2019-10-02 09:01:59 -07:00
## Create a new node to contribute to n8n
2021-04-07 05:33:16 -07:00
Follow this tutorial on [creating your first node ](https://docs.n8n.io/nodes/creating-nodes/create-node.html ) for n8n.
2019-10-02 09:01:59 -07:00
2020-04-28 02:58:17 -07:00
## Checklist before submitting a new node
2020-04-28 02:50:20 -07:00
2021-04-07 05:33:16 -07:00
There are several things to keep in mind when creating a node. To help you, we prepared a [checklist ](https://docs.n8n.io/nodes/creating-nodes/node-review-checklist.html ) that covers the requirements for creating nodes, from preparation to submission. This will help us be quicker to review and merge your PR.
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.