Skip to main content

Lowcoder

Low-code platform for building internal and customer-facing apps — continues from the abandoned Openblocks project. Its pitch over Appsmith is native embedding (no iframe) for apps you hand to people outside the stack, not just internal dashboards.

Containers​

ContainerRole
lowcoder-frontendnginx serving the built app — the only one Caddy routes to
lowcoder-api-serviceJava/Spring API backend
lowcoder-node-serviceNode sandbox that executes JS queries/transformers
lowcoder-mongodbApp data (users, apps, datasource configs)
lowcoder-redisSession/query cache — no persistence (--save "")

lowcoder-mongodb and lowcoder-redis are dedicated to this service — every service in this stack that needs a database or a cache brings its own (firecrawl, immich, lowcoder, nextcloud), and none of them share.

Access​

Browser access is https://lowcoder.<domain> via Caddy, which routes to lowcoder-frontend:3000. lowcoder-api-service:8080 and lowcoder-node-service:6060 have no Caddy hostname and no host port by default (both are commented out in docker-compose.exist.yml for direct debugging) — the frontend is the only container meant to be reached from outside the exist network.

Enable​

EXIST_IS_SERVICES_LOWCODER=true

Then ./existential.sh && docker compose up -d from the repo root.

Notes​

Credentials, two different lifetimes. LOWCODER_MONGO_ROOT_USERNAME/_PASSWORD seed mongo's root user only on a genuinely empty volume (the official mongo image's own behavior) — changing them in .env after first boot does nothing until the volume is reset, same caveat as every other bundled database here. LOWCODER_SUPERUSER_PASSWORD is different: api-service re-applies it to the existing superuser account on every boot (verified by changing it against an already-initialised volume and confirming the stored password hash changed after a restart). LOWCODER_API_KEY_SECRET and LOWCODER_DB_ENCRYPTION_PASSWORD/_SALT sit in between — nothing stops you rotating them, but existing API keys stop verifying and existing stored datasource credentials stop decrypting once you do.

Backup. lowcoder_mongo_data (db: true — WiredTiger, never NFS) is covered by lowcoder-db-backup-{nightly,weekly}.md, and lowcoder_data + lowcoder_assets_data by lowcoder-volume-backup-{nightly,weekly}.md — both already exist in services/automation/backup/cron.example/. Copy them into cron/ and restart automation-backup to activate; nothing else is needed.

Memory. lowcoder-api-service and lowcoder-node-service are both JVM/V8 processes that size their default heap off the container's memory limit, not off actual load — the limits in docker-compose.exist.yml are set from measured idle usage on a fresh install (see the comments there), not upstream's defaults, which leave both unbounded.