- NocoDB has just one version that is free & open source.
- In it you will notice advanced features are all available for free.
- ACL
@ -53,8 +59,15 @@ PackageVersion: **0.11.6**
- And we would never move these features from free to an enterprise version of NocoDB.
- There is no limitations to number of projects, rows or columns either.
## What is the difference between Auth Token and API Token ?
Auth Token is a JWT Token generated based on the logged-in user. By default, the token is only valid for 10 hours. However, you can change the value by defining it using environment variable `NC_JWT_EXPIRES_IN`. If you are passing Auth Token, make sure that the header is called `xc-auth`.
API Token is a Nano ID with a length of 40. If you are passing API Token, make sure that the header is called `xc-token`.
## Do you plan to have enterprise edition ?
## Do you plan to have Enterprise Edition ?
For features that make sense for enterprises like below - yes
- SSO, SLA, Organisation wide reports and analytics,
- Advanced Audit or ACL,
@ -63,6 +76,7 @@ For features that make sense for enterprises like below - yes
And increasing number of our customers are requesting it.
## How do we decide if a feature is enterprise or not ?
## How do we decide if a feature is Enterprise or not ?
- Depends on the effort and whether the intended users are enterprises.
Auth Token is a JWT Token generated based on the logged-in user. By default, the token is only valid for 10 hours. However, you can change the value by defining it using environment variable NC_JWT_EXPIRES_IN. If you are passing Auth Token, make sure that the header is called xc-auth.
We introduced a Caching layer to store meta data by utilising Redis. By default, caching is enabled. If you prefer not to cache, you can configure it by setting environment variable `NC_DISABLE_CACHE` to `true`. You can also use your own Redis instance by setting environment variable `NC_REDIS_URL` (e.g. `redis://:authpassword@127.0.0.1:6380/4`). If you don't specify it, by default, it will be cached in memory.
GraphQL APIs, unfortunately, has been deprecated form v0.90 onwards - which means
- Users won't be able to create a GraphQL project nor use the GraphQL queries.
- For projects created before v0.90, we will convert it to REST API projects.
- The rationale behind is that GraphQL is a really small use case of NocoDB users and smart spreadsheet are usually flat representation of data (may be one level nested) which means there will be additional wrangling of json and GQL schema when users are changing the schema dynamically.
The version 0.84.8 will be used as an example. Please change it during the release.
</alert>
## 1. Merge ```develop``` to ```master```
- When several features are included in ``develop`` branch and they are ready to be released, make a PR with the title ``0.84.8 Pre-Release`` from `develop` branch to `master` branch. At least one NocoDB team member approval is required.
## 2. Publish frontend
- Navigate to `packages/nc-gui` and execute following command.
```bash
npm run build:copy:jsdeliver
```
## 3. Install frontend
- Install the latest published version of `nc-lib-gui` in `packages/nocodb`, package version can be extracted from result of step 1 or copy it from `packages/nc-lib-gui/package.json`. While installing, add `-E` to install exact version of the package.
- Example: for latest published version `0.84.8`
```bash
npm i -E nc-lib-gui@0.84.8
```
## 4. Publish backend
- Bump package version in `packages/nocodb/package.json` file.
- Publish the npm package by running following npm command in `packages/nocodb` folder.
```
npm run obfuscate:build:publish
```
## 5. Close all issues
- Go to Issue page and close all issues with tags ``Fixed`` or ``Resolved``.
## 6. Commit release changes
- Commit those changes made by previous steps with the commit message ``chore(publish): v0.84.8``.
## 7. Prepare release notes
- Populate release note by running following github action (on `master` branch) - `Release : Draft Notes`. While running the action you have to provide 2 inputs:
- **Tag** : Provide current package version
- **Previous Tag** : Provide previously released tag version
## 8. Publish docker & release
- Publish docker image by running `Release : Docker` action in github (on `master` branch), where you have to provide the package version/tag. It may take half an hour. Test it locally after it is done.
- Update the populated release (remove issues which is not related to release) draft and publish. In release note you can use `Auto-generate release notes` button to populate release content from commits & PR.
## 9. Sync the changes back to develop branch
- Pull the latest chagnes for both branches to your local
- Existing schemas can help to create APIs quickly.
- An example database schema can be found <aclass="grey--text"href="https://github.com/lerocha/chinook-database/tree/master/ChinookDatabase/DataSources"><u>here</u></a>.
- An example database schema can be found <aclass="grey--text"href="https://github.com/lerocha/chinook-database/tree/master/ChinookDatabase/DataSources"><u>here</u></a>.
## Quick try
### 1-Click Deploy to Heroku
Before doing so, make sure you have a Heroku account. By default, an add-on Heroku Postgres will be used as meta database. You can see the connection string defined in `DATABASE_URL` by navigating to Heroku App Settings and selecting Config Vars.
@ -109,56 +104,24 @@ And connection params for this database can be specified in `NC_DB` environment
</code-block>
</code-group>
<alert>
If you plan to input some special characters, you may need to change the character set and collation yourself when creating the database. Please check out the examples for <ahref="https://github.com/nocodb/nocodb/issues/1340#issuecomment-1049481043"target="_blank">MySQL Docker</a> and <ahref="https://github.com/nocodb/nocodb/issues/1313#issuecomment-1046625974"target="_blank">MySQL Docker Compose</a>.
<alerttype="success">
Tip 1: To persist data in docker you can mount volume at `/usr/app/data/` since 0.10.6. In older version mount at `/usr/src/app`. Otherwise your data will be lost after recreating the container.
| NC_TOOL_DIR | No | App directory to keep metadata and app related files | Defaults to current working directory. In docker maps to `/usr/app/data/` for mounting volume. |
| NC_PUBLIC_URL | Yes | Used for sending Email invitations | Best guess from http request params |
| NC_AUTH_JWT_SECRET | Yes | JWT secret used for auth and storing other secrets | A Random secret will be generated |
| NC_JWT_EXPIRES_IN | No | JWT token expiry time | `10h` |
| NC_CONNECT_TO_EXTERNAL_DB_DISABLED | No | Disable Project creation with external database | |
| NC_INVITE_ONLY_SIGNUP | No | Allow users to signup only via invite url, value should be any non-empty string. | |
| NC_BACKEND_URL | No | Custom Backend URL | ``http://localhost:8080`` will be used |
| NC_REQUEST_BODY_SIZE | No | Request body size [limit](https://expressjs.com/en/resources/middleware/body-parser.html#limit) | `1048576` |
| NC_EXPORT_MAX_TIMEOUT | No | After NC_EXPORT_MAX_TIMEOUT csv gets downloaded in batches | Default value 5000(in millisecond) will be used |
| NC_GOOGLE_CLIENT_ID | No | Google client id to enable google authentication | |
| NC_GOOGLE_CLIENT_SECRET | No | Google client secret to enable google authentication | |
| NC_MIGRATIONS_DISABLED | No | Disable NocoDB migration | |
| NC_ONE_CLICK | No | Used for Heroku one-click deployment | |
| NC_MIN | No | If set to any non-empty string the default splash screen(initial welcome animation) and matrix screensaver will disable | |
| PORT | No | For setting app running port | `8080` |
| NC_SENTRY_DSN | No | For Sentry monitoring | |
| NC_DISABLE_ERR_REPORT | No | Disable error reporting | |
| AWS_ACCESS_KEY_ID | No | For Litestream - S3 access key id | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 |
| AWS_SECRET_ACCESS_KEY | No | For Litestream - S3 secret access key | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 |
| AWS_BUCKET | No | For Litestream - S3 bucket | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 |
| AWS_BUCKET_PATH | No | For Litestream - S3 bucket path (like folder within S3 bucket) | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 |
<alerttype="success">
Tip 2: If you plan to input some special characters, you may need to change the character set and collation yourself when creating the database. Please check out the examples for <ahref="https://github.com/nocodb/nocodb/issues/1340#issuecomment-1049481043"target="_blank">MySQL Docker</a>.
</alert>
### Docker Compose
We provide different docker-compose.yml files under <ahref="https://github.com/nocodb/nocodb/tree/master/docker-compose"target="_blank">this directory</a>. Here are some examples.
<code-group>
<code-blocklabel="MySQL"active>
```bash
git clone https://github.com/nocodb/nocodb
cd nocodb
cd docker-compose
cd mysql
cd nocodb/docker-compose/mysql
docker-compose up -d
```
@ -168,9 +131,7 @@ If you plan to input some special characters, you may need to change the charact
```bash
git clone https://github.com/nocodb/nocodb
cd nocodb
cd docker-compose
cd pg
cd nocodb/docker-compose/pg
docker-compose up -d
```
@ -180,15 +141,64 @@ If you plan to input some special characters, you may need to change the charact
```bash
git clone https://github.com/nocodb/nocodb
cd nocodb
cd docker-compose
cd mssql
cd nocodb/docker-compose/mssql
docker-compose up -d
```
</code-block>
</code-group>
<alerttype="success">
Tip 1: To persist data in docker you can mount volume at `/usr/app/data/` since 0.10.6. In older version mount at `/usr/src/app`.
</alert>
<alerttype="success">
Tip 2: If you plan to input some special characters, you may need to change the character set and collation yourself when creating the database. Please check out the examples for <ahref="https://github.com/nocodb/nocodb/issues/1313#issuecomment-1046625974"target="_blank">MySQL Docker Compose</a>.
</alert>
## Production Setup
By default, SQLite is used for storing meta data. However, you can specify your own database. The connection params for this database can be specified in `NC_DB` environment variable. Moreover, we also provide the below environment variables for configuration.
| AWS_ACCESS_KEY_ID | No | For Litestream - S3 access key id | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 | |
| AWS_SECRET_ACCESS_KEY | No | For Litestream - S3 secret access key | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 | |
| AWS_BUCKET | No | For Litestream - S3 bucket | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 | |
| AWS_BUCKET_PATH | No | For Litestream - S3 bucket path (like folder within S3 bucket) | If Litestream is configured and NC_DB is not present. SQLite gets backed up to S3 | |
| NC_TOOL_DIR | No | App directory to keep metadata and app related files | Defaults to current working directory. In docker maps to `/usr/app/data/` for mounting volume. | |
| NC_PUBLIC_URL | Yes | Used for sending Email invitations | Best guess from http request params | |
| NC_AUTH_JWT_SECRET | Yes | JWT secret used for auth and storing other secrets | A Random secret will be generated | |
| NC_JWT_EXPIRES_IN | No | JWT token expiry time | `10h` | |
| NC_CONNECT_TO_EXTERNAL_DB_DISABLED | No | Disable Project creation with external database | | |
| NC_INVITE_ONLY_SIGNUP | No | Allow users to signup only via invite url, value should be any non-empty string. | | |
| NC_BACKEND_URL | No | Custom Backend URL | ``http://localhost:8080`` will be used | |
| NC_REQUEST_BODY_SIZE | No | Request body size [limit](https://expressjs.com/en/resources/middleware/body-parser.html#limit) | `1048576` | |
| NC_EXPORT_MAX_TIMEOUT | No | After NC_EXPORT_MAX_TIMEOUT csv gets downloaded in batches | Default value 5000(in millisecond) will be used | |
| NC_DISABLE_TELE | No | Disable telemetry | | |
| NC_GOOGLE_CLIENT_ID | No | Google client id to enable google authentication | | |
| NC_GOOGLE_CLIENT_SECRET | No | Google client secret to enable google authentication | | |
Updating nocodb docker container is similar to updating [any other docker container](https://www.whitesourcesoftware.com/free-developer-tools/blog/update-docker-images/).
Updating nocodb docker container is similar to updating [any other docker containers](https://www.whitesourcesoftware.com/free-developer-tools/blog/update-docker-images/).
### Example docker upgrade
### Example: Docker Upgrade
![Screen Shot 2021-09-16 at 09 23 07](https://user-images.githubusercontent.com/5435402/133578984-53c6b96b-3e8b-4a96-b6c2-36f3c09ffdde.png)
## Node
Updating docker container is similar to updating a npm package.
From your root folder
#### Uninstall nocodb package
#### Uninstall NocoDB package
```bash
npm uninstall nocodb
```
#### Install nocodb package
#### Install NocoDB package
```bash
npm install --save nocodb
```
## Heroku
### Using the Heroku CLI login
```
```bash
heroku container:login
docker pull nocodb/nocodb:latest
docker tag nocodb/nocodb:latest registry.heroku.com/<HerokuAppName>/web
- ⚡ Access Control : Fine-grained access control even at database, table & column level
### App Store for workflow automations
- ⚡ Chat : Microsoft Teams, Slack, Discord, Mattermost
@ -35,15 +41,14 @@ Also NocoDB's app store allows you to build business workflows on views with com
- ⚡ Any 3rd Party APIs
### Programmatic API access via
- ⚡ REST APIs (Swagger)
- ⚡ GraphQL APIs.
- ⚡ REST APIs
- ⚡ Includes JWT Authentication & Social Auth
- ⚡ API tokens to integrate with Zapier, Integromat.
- ⚡ API tokens to integrate with Zapier, Integromat
## Why are we building this? 🎯
## Why are we building this?
Most internet businesses equip themselves with either spreadsheet or a database to solve their business needs. Spreadsheets are used by a Billion+ humans collaboratively every single day. However, we are way off working at similar speeds on databases which are way more powerful tools when it comes to computing. Attempts to solve this with SaaS offerings has meant horrible access controls, vendor lockin, data lockin, abrupt price changes & most importantly a glass ceiling on what's possible in future.
## Our Mission : ❤
## Our Mission
Our mission is to provide the most powerful no-code interface for databases which is open source to every single internet business in the world. This would not only democratise access to a powerful computing tool but also bring forth a billion+ people who will have radical tinkering-and-building abilities on internet.
## Architecture - Simple Overview
@ -78,6 +83,8 @@ We use ``Lerna`` to manage multi-packages. We have the following [packages](http
- ``packages/noco-docs``: NocoDB Documentation which will be auto-released to [nocodb/noco-docs](https://github.com/nocodb/noco-docs).
- ``packages/noco-docs-prev``: NocoDB Documentation for previous versions which will be auto-released to [nocodb/noco-docs-prev](https://github.com/nocodb/noco-docs-prev) and will be completely removed on 30 Jun 2022.
- ``packages/nocodb``: NocoDB Backend, hosted in [NPM](https://www.npmjs.com/package/nocodb).
Sorting allows you to order contents alphabetically (A->Z) / (Z->A)
(OR) in ascending/ descending order
NocoDB allows nested sorting. You can choose column fields & order in which to apply nested sorting
Sorting allows you to order contents alphabetically (A -> Z) / (Z -> A) (OR) in ascending / descending order. NocoDB allows nested sorting. You can choose column fields & order in which to apply nested sorting. Lookup, Formula, Nested Data are also supported in Sorting.
Filters allow you to restrict/organize your data on the view as per your needs.
NocoDB allows nested filters. You can choose multiple columns and conditions to apply filter.
Between filters, you can opt for either `and` or `or` mode operation.
Filters allow you to restrict/organize your data on the view as per your needs. NocoDB allows nested filters. You can choose multiple columns and conditions to apply filter. Between filters, you can opt for either `and` or `or` mode operation. Lookup, Formula, Nested Data are also supported in Filtering.
Currently we support filter types - `is equal`, `is not equal`, `is like`, `is not like`, `is null`, `is not null` for string fields. We also support filter types - `>`, `<`, `>=`, and `<=` for numeric fields. Also we provide `is empty` and `is not empty` for checking if the column is empty or not.
If you start your application without specifying `NC_DB`. A local SQLite will be created in root folder. Your data will be stored there.
If you are using Docker, it is recommended to mount `/usr/app/data/` for persistent volume (since `v0.10.6`), otherwise your data will be lost after recreating the container.
Example:
```
docker run -d -p 8080:8080 --name nocodb -v /local/path:/usr/app/data/ nocodb/nocodb:latest
```
## Initialize your first project
## Initialize Your First Project
Once you have logged into NocoDB, you should see `My Projects`.
@ -44,15 +34,20 @@ To create a project, you can click `New Project`.
Click `Test Database Connection` to see if the connection can be established or not. NocoDB create's a new **empty database** with specified parameters, if the database doesn't exist.
### Creating Project from Excel
Click `Create Project from Excel`, you can either upload / drag and drop Excel file (OR) specify Excel file URL.
NocoDB supports multiple lanuages on dashboard. By default, English will be used. However, if you prefer to display in other languages, you can do the following steps to change the language.
If you want to help translate, please check out <ahref ="../engineering/translation"target="_blank">i18n</a>. If you want to request a new language, please create an issue on <ahref="https://github.com/nocodb/nocodb/issues"target="_blank">Github</a>.
On top of the previous structure, let's introduce one more table - `Project` which contains `ProjectName` and each employee can be assigned with multiple projects. If we want to include the lookup column `TeamCode` from Employee in Project, we can create a nested lookup.
We can apply the same steps to create the lookup column `TeamCode` in table `Project`. This time we choose the lookup column created previously in table `Employee` as a child table.
The metadata is stored in meta directory in project level, database level, and API level.
The metadata is stored in meta directory in project level, database level, and API level.
Under ``Project Metadata``, you can perform the following operations.
@ -31,34 +35,29 @@ Under ``Project Metadata``, you can perform the following operations.
Import / Export will only transfer metadata and files related to the project and not any table data in the project.
</alert>
## Migration example
### Export metadata
Source project : Under ``Meta Management`` tab, select ``Export zip``, click ``Submit``. This step extracts project metadata and stores it in compressed (zip) format
Destination project : Under ``Meta Management`` tab, select ``Import zip``, select ``meta.zip`` file stored in previous step. This step imports project metadata from compressed file (zip) selected and restarts project.
From the source project, go to `Project Metadata`. Under ``Export / Import Metadata`` tab, select ``Export zip``, click ``Submit``. This step extracts project metadata and stores it in compressed (zip) format.
From the destination project, go to `Project Metadata`. Under ``Export / Import Metadata`` tab, select ``Import zip``, select ``meta.zip`` file stored in previous step. This step imports project metadata from compressed file (zip) selected and restarts the project.
Go to `Project Metadata`, under ``Metadata``, you can see your metadata sync status. If it is out of sync, you can sync the schema. See <ahref="./sync-schema">Sync Schema</a> for more.
The relations of all tables are listed under ``Relations``.
NocoDB allows you to sync schema changes if you have made changes outside NocoDB GUI. However, it has to be noted then you will have to bring your own
schema migrations for moving from environment to other.
## How to sync schema changes to NocoDB
NocoDB allows you to sync schema changes if you have made changes outside NocoDB GUI. However, it has to be noted then you will have to bring your own schema migrations for moving from environment to others.
Below are the steps to sync schema changes.
1. Under `Settings` menubar, click `Project Metadata`
2. Under `Meta Management` tab, click on `Metadata` sub tab.
3. Changes carried outside GUI, identified by NocoDB are listed under `Sync state`
4. Click `Sync Now` to complete Schema sync procedure.