docker.recipes

ToolJet

intermediate

Open-source low-code platform for internal tools.

Overview

ToolJet is an open-source low-code platform designed for building internal tools and business applications without extensive coding. Created to bridge the gap between no-code limitations and full development complexity, ToolJet enables teams to rapidly create dashboards, admin panels, CRUD applications, and workflow automation tools using a visual drag-and-drop interface. The platform supports over 40 data source integrations including databases, APIs, and SaaS tools, making it particularly valuable for organizations that need to consolidate data from multiple systems into unified interfaces. This stack combines ToolJet with PostgreSQL to create a production-ready internal tool development environment. PostgreSQL serves as ToolJet's metadata store, managing application configurations, user permissions, data source connections, and component definitions, while also functioning as a primary data source for applications built within the platform. The combination leverages PostgreSQL's robust transaction support and JSON capabilities to handle ToolJet's complex application schemas and dynamic query requirements. This configuration is ideal for development teams, IT departments, and growing companies that need to rapidly prototype and deploy internal applications. Unlike SaaS alternatives, this self-hosted setup provides complete data control, unlimited users, and the ability to integrate with internal systems behind firewalls, making it particularly valuable for organizations with strict data governance requirements or those seeking to avoid recurring subscription costs.

Key Features

  • Visual drag-and-drop application builder with 45+ pre-built UI components including tables, charts, forms, and custom widgets
  • Native integrations with 40+ data sources including PostgreSQL, MySQL, MongoDB, REST APIs, GraphQL, Slack, and Google Sheets
  • JavaScript code editor for custom business logic, data transformations, and complex workflows within low-code applications
  • Multi-user workspace management with granular permissions, role-based access control, and application sharing capabilities
  • Real-time collaboration features allowing multiple developers to work on applications simultaneously with version control
  • Custom component marketplace and plugin system for extending functionality beyond built-in components
  • PostgreSQL-backed application metadata storage with full ACID compliance for configuration integrity
  • Mobile-responsive application deployment with automatic scaling for different screen sizes and devices

Common Use Cases

  • 1Building internal dashboards that aggregate data from multiple databases, APIs, and third-party services into unified views
  • 2Creating CRUD applications for managing customer data, inventory systems, and employee databases without full stack development
  • 3Developing approval workflow systems for expense reports, leave requests, and procurement processes with automated notifications
  • 4Prototyping data visualization tools and business intelligence reports before investing in enterprise BI solutions
  • 5Building admin panels for managing application settings, user accounts, and system configurations across multiple services
  • 6Creating customer support tools that integrate ticketing systems, knowledge bases, and communication channels
  • 7Developing content management interfaces for marketing teams to update websites, campaigns, and product catalogs

Prerequisites

  • Minimum 2GB RAM and 10GB storage space for ToolJet application runtime and PostgreSQL data storage
  • Docker and Docker Compose installed with support for multi-container networking and persistent volumes
  • Basic understanding of SQL and database concepts for configuring data sources and building queries
  • Familiarity with environment variables and secure secret management for database passwords and encryption keys
  • Port 3000 available for ToolJet web interface access and understanding of reverse proxy setup for production use
  • Knowledge of JavaScript fundamentals for implementing custom logic and data transformations within applications

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 tooljet:
3 image: tooljet/tooljet-ce:latest
4 container_name: tooljet
5 restart: unless-stopped
6 environment:
7 TOOLJET_HOST: http://localhost:3000
8 PG_HOST: postgres
9 PG_DB: tooljet
10 PG_USER: tooljet
11 PG_PASS: ${DB_PASSWORD}
12 SECRET_KEY_BASE: ${SECRET_KEY}
13 LOCKBOX_MASTER_KEY: ${LOCKBOX_KEY}
14 ports:
15 - "3000:3000"
16 depends_on:
17 - postgres
18 networks:
19 - tooljet
20
21 postgres:
22 image: postgres:15-alpine
23 container_name: tooljet-postgres
24 restart: unless-stopped
25 environment:
26 POSTGRES_USER: tooljet
27 POSTGRES_PASSWORD: ${DB_PASSWORD}
28 POSTGRES_DB: tooljet
29 volumes:
30 - postgres_data:/var/lib/postgresql/data
31 networks:
32 - tooljet
33
34volumes:
35 postgres_data:
36
37networks:
38 tooljet:
39 driver: bridge

.env Template

.env
1DB_PASSWORD=changeme
2SECRET_KEY=generate-a-secret-key
3LOCKBOX_KEY=generate-a-lockbox-key

Usage Notes

  1. 1Access at http://localhost:3000
  2. 2Visual app builder
  3. 340+ data source integrations

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

tooljet
tooljet:
  image: tooljet/tooljet-ce:latest
  container_name: tooljet
  restart: unless-stopped
  environment:
    TOOLJET_HOST: http://localhost:3000
    PG_HOST: postgres
    PG_DB: tooljet
    PG_USER: tooljet
    PG_PASS: ${DB_PASSWORD}
    SECRET_KEY_BASE: ${SECRET_KEY}
    LOCKBOX_MASTER_KEY: ${LOCKBOX_KEY}
  ports:
    - "3000:3000"
  depends_on:
    - postgres
  networks:
    - tooljet
postgres
postgres:
  image: postgres:15-alpine
  container_name: tooljet-postgres
  restart: unless-stopped
  environment:
    POSTGRES_USER: tooljet
    POSTGRES_PASSWORD: ${DB_PASSWORD}
    POSTGRES_DB: tooljet
  volumes:
    - postgres_data:/var/lib/postgresql/data
  networks:
    - tooljet

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 tooljet:
5 image: tooljet/tooljet-ce:latest
6 container_name: tooljet
7 restart: unless-stopped
8 environment:
9 TOOLJET_HOST: http://localhost:3000
10 PG_HOST: postgres
11 PG_DB: tooljet
12 PG_USER: tooljet
13 PG_PASS: ${DB_PASSWORD}
14 SECRET_KEY_BASE: ${SECRET_KEY}
15 LOCKBOX_MASTER_KEY: ${LOCKBOX_KEY}
16 ports:
17 - "3000:3000"
18 depends_on:
19 - postgres
20 networks:
21 - tooljet
22
23 postgres:
24 image: postgres:15-alpine
25 container_name: tooljet-postgres
26 restart: unless-stopped
27 environment:
28 POSTGRES_USER: tooljet
29 POSTGRES_PASSWORD: ${DB_PASSWORD}
30 POSTGRES_DB: tooljet
31 volumes:
32 - postgres_data:/var/lib/postgresql/data
33 networks:
34 - tooljet
35
36volumes:
37 postgres_data:
38
39networks:
40 tooljet:
41 driver: bridge
42EOF
43
44# 2. Create the .env file
45cat > .env << 'EOF'
46DB_PASSWORD=changeme
47SECRET_KEY=generate-a-secret-key
48LOCKBOX_KEY=generate-a-lockbox-key
49EOF
50
51# 3. Start the services
52docker compose up -d
53
54# 4. View logs
55docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/tooljet/run | bash

Troubleshooting

  • ToolJet fails to start with 'PG connection refused': Verify postgres container is running and PG_HOST environment variable matches the PostgreSQL service name in docker-compose
  • Applications load slowly or timeout: Increase PostgreSQL shared_buffers and work_mem settings, or add database indexes for frequently queried ToolJet metadata tables
  • Secret key errors during startup: Generate proper SECRET_KEY_BASE and LOCKBOX_MASTER_KEY values with sufficient entropy (64+ characters) and ensure they remain consistent across restarts
  • Data source connections fail within ToolJet: Check that external services are reachable from the Docker network and verify firewall rules allow container-to-host communication
  • User authentication issues or session timeouts: Verify TOOLJET_HOST environment variable matches the actual access URL including protocol and port number
  • PostgreSQL disk space errors: Monitor postgres_data volume usage and implement log rotation or increase available storage for the Docker volume

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Components

tooljetpostgres

Tags

#tooljet#lowcode#internal#builder

Category

Development Tools
Ad Space