Skip to main content

Configure GitSync via Environment Variables

IconPaid feature
Self Hosted
BETA

Configuring Git Sync using environment variables is currently in beta and is not recommended for production use.

GitSync can be configured using environment variables instead of the ToolJet UI. This allows you to supply Git credentials directly on the host machine, scoped per workspace, and is particularly useful for self-hosted deployments where configuration needs to be reproducible and automated.

This approach supports two primary use cases:

  • Static configuration: Credentials are defined once via environment variables, making it easy to spin up new ToolJet instances with preconfigured GitSync settings.
  • Dynamic credential management: Sensitive credentials such as GitHub App private keys or access tokens are often rotated periodically due to security and compliance requirements. Managing these through environment variables enables seamless integration with external secret management systems (e.g., AWS Secrets Manager, Vault, CI/CD pipelines), allowing automated rotation without manual updates through the UI.

Setup

1. Create the Environment File

On your host machine, create a file named .tj_env.<workspace-slug-or-uuid>. This file uses the standard dotenv format (KEY=VALUE) and holds the git credentials for a specific workspace.

You can name the file using the workspace slug or UUID:

Naming styleExample
By workspace slug.tj_env.my-workspace
By workspace UUID.tj_env.550e8400-e29b-41d4-a716-446655440000

You can place multiple .tj_env.* files in the same directory which will be one per workspace.

2. Add Your Git Provider Credentials

Populate the file with the required keys for your git provider. ToolJet supports the following providers:

GitHub (HTTPS)

KeyDescription
GITHUB_URLThe HTTPS URL of your GitHub repository. (e.g. https://github.com/your-org/your-repo)
GITHUB_BRANCHThe branch to sync with.
GITHUB_APP_IDYour GitHub App ID.
GITHUB_INSTALLATION_IDThe installation ID for your GitHub App.
GITHUB_PRIVATE_KEYThe private key generated when creating the GitHub App. Escape newlines as \n.

For self-hosted GitHub Enterprise, you can additionally include:

KeyDescription
GITHUB_ENTERPRISE_URLThe domain of your self-hosted GitHub instance. (e.g. https://github.your-company.com)
GITHUB_ENTERPRISE_API_URLThe API endpoint of your self-hosted GitHub instance. (e.g. https://api.github.your-company.com)

GitLab

KeyDescription
GITLAB_URLThe URL of your GitLab repository. (e.g. https://gitlab.com/your-org/your-repo)
GITLAB_BRANCHThe branch to sync with. Defaults to main.
GITLAB_PROJECT_IDYour GitLab project ID.
GITLAB_PROJECT_ACCESS_TOKENA project access token with read/write permissions.

For self-hosted GitLab, you can additionally include:

KeyDescription
GITLAB_ENTERPRISE_URLThe domain of your self-hosted GitLab instance. (e.g. https://gitlab.your-company.com)

Git (SSH)

KeyDescription
GIT_SSH_URLThe SSH URL of your Git repository (e.g. [email protected]:org/repo.git).
GIT_SSH_BRANCHThe branch to sync with.
GIT_SSH_PRIVATE_KEYThe SSH private key used for authentication. Ensure newlines are escaped as \n.
GIT_SSH_PUBLIC_KEYThe corresponding SSH public key.
GIT_SSH_KEY_TYPEThe SSH key type (e.g. ed25519, rsa).
note

Only one provider can be active per workspace at a time. If any required key for a provider is missing, ToolJet will skip that provider. Double check your key list if the configuration does not activate.

3. Make the File Available to the Server

The .tj_env.* file must be accessible at /app/ inside the container at the time the server starts. How you get it there depends on your deployment setup. For Docker Compose, refer to the Docker Compose setup guide.

4. Restart the Server

Once the file is mounted, restart the ToolJet server. On startup, ToolJet reads all .tj_env.* files from /app/ and maps them to their respective workspaces.

If the file is removed, ToolJet will automatically deactivate the configuration on the next restart.

note

Environment files are only read at startup. Any changes made to a .tj_env.* file while the server is running will not take effect until the server is restarted.

Docker Compose Setup

Mount the .tj_env.* file from your host machine into the container at /app/. You can mount individual files or an entire directory.

To mount a single workspace file:

services:
tooljet:
image: tooljet/tooljet:latest
volumes:
- ./.tj_env.my-workspace:/app/.tj_env.my-workspace

To mount multiple workspace files at once:

services:
tooljet:
image: tooljet/tooljet:latest
volumes:
- ./workspace-envs:/app
Sample Docker Compose configuration
name: tooljet-production

services:
tooljet:
image: tooljet/tj:v1
container_name: tooljet-app
platform: linux/amd64
restart: always
env_file: .env.production
ports:
- "80:80"
depends_on:
- postgres
environment:
SERVE_CLIENT: "true"
PORT: "80"
command: npm run start:prod
volumes:
- ./.tj_env.devs-workspace:/app/.tj_env.devs-workspace

postgres:
container_name: postgres
image: postgres:16
restart: always
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres

volumes:
postgres_data:
driver: local
note

Only one git provider (GitHub HTTPS, Git SSH, or GitLab) can be active per workspace at a time.