Appsmith
Audited from github.com/appsmithorg/appsmith
Appsmith is an open-source low-code platform for building admin panels, dashboards and internal tools on top of existing databases and APIs, with a React builder, a reactive Java server and a plugin system for datasources.
- Language
- TypeScript
- Database
- MongoDB
- Hosting
- Docker
- License
- Apache-2.0
- Running for
- 5 years
- Team
- 21-100 people
Why this architecture
A reactive Spring Boot server with PF4J plugins isolates dozens of datasource integrations, MongoDB stores app definitions as documents, and a single supervisord-managed image keeps self-hosting to one container.
Tech stack by layer
10 technologies · audited Sep 17, 2026- ReactThe app builder and runtime UI in `app/client`, started with Create-React-App-style `scripts/start.js` and `REACT_APP_*` environment flags.
- TypeScriptLargest language in the repo; the client is a Yarn 3 workspace (`packages/**`) on Node 24.
- StorybookComponent development and visual regression via Chromatic (`build-storybook.yml`, `build-chromatic.yml`).
- JavaAPI server in `app/server` on Java 25 as a Maven multi-module build.
- Spring BootSpring Boot 3.5 parent POM; WebFlux and Project Reactor in `reactive-caching` make the server reactive end to end.
- PF4JDatasource integrations are PF4J plugin modules under `appsmith-plugins` (SQL, NoSQL, warehouses, S3, GraphQL, REST, AI providers).
- Node.jsThe RTS (real-time service) and MCP packages in `app/client/packages` are Node services bundled into the image.
- JGit`appsmith-git` implements git sync for apps with JGit over SSH (Apache MINA).
- OpenTelemetryTracing in the server via the OpenTelemetry BOM.
- DockerSingle `appsmith-ce` image runs editor, RTS, MCP, server and MongoDB under `supervisord` with a health check and Watchtower hooks.
- KubernetesHelm chart under `deploy/helm` with `helm-release.yml`, `helm-unittest.yml` and `helm-docs.yml` workflows.
- CaddyReverse proxy inside the image; routes are tested by `caddy-routes-test.yml`.(inferred)
- AnsibleCloud install recipes under `deploy/` for AWS (AMI + Packer), DigitalOcean, Heroku and Ansible.
- PlaywrightE2E suites with smoke, sanity and regression projects (`test:pw:*` scripts, `playwright-e2e.yml`).
- CypressLegacy E2E suite still run in CI (`pr-cypress.yml`, `app/client/cypress/Dockerfile`).
- JestClient unit tests across workspaces (`test:unit:ci` runs `yarn workspaces foreach`).
- GitHub ActionsFifty-plus workflows: client/server builds, lint, spotless, vulnerability scans, deploy previews, release drafting.
Appsmith architecture diagram
Open SVGDiagram as text
- App builder (React · TypeScript) → Reverse proxy (Caddy (in image)): HTTPS
- Reverse proxy (Caddy (in image)) → API server (Spring Boot · WebFlux): /api
- Reverse proxy (Caddy (in image)) → RTS & MCP (Node.js): realtime
- API server (Spring Boot · WebFlux) → Datasource plugins (PF4J): run queries
- API server (Spring Boot · WebFlux) → Git sync (JGit): commit · pull
- API server (Spring Boot · WebFlux) → MongoDB (apps · Mongock): Spring Data
- API server (Spring Boot · WebFlux) → Redis (reactive cache · sessions): cache
- Datasource plugins (PF4J) → Your data sources (SQL · APIs · SaaS · AI): queries
- Git sync (JGit) → Git remote (SSH): push / pull
Key architectural decisions
6 decisions- 01
One container that runs the whole stack
The Dockerfile copies the React build, the RTS and MCP Node services and the Spring server into one image and starts them with
supervisord, even bundling a MongoDBserver.jar. Self-hosters get a singledocker run; scaling out is done with external MongoDB and Redis plus the Helm chart. - 02
Datasource integrations as PF4J plugins in Java
appsmith-pluginslists more than twenty Maven modules, each a PF4J plugin: relational databases, document stores, warehouses, S3, GraphQL, REST, SMTP, AWS Lambda and AI providers. New integrations are added as modules without touching the server core. - 03
Reactive Java server on WebFlux
The server extends Spring Boot 3.5 with WebFlux and Project Reactor, and
reactive-cachinglayers reactive Redis caching on top. Query execution against many datasources is I/O bound, which is why the non-blocking model was chosen. - 04
Git-native app versioning
appsmith-gituses JGit with SSH support so applications can be committed to and pulled from git repositories; the image reserves/dev/shm/git-storagefor working copies. - 05
MongoDB as the system of record
Application definitions are documents, stored in MongoDB and migrated with Mongock.
app.jsonfor Heroku makes the dependency explicit by requiring a Mongo URI, and async-release-to-pg.ymlworkflow indicates ongoing work around PostgreSQL support. - 06
Security hardening baked into the image
The Dockerfile strips setuid/setgid bits, pins CVE-affected Java dependencies in
app/server/pom.xml(commons-lang3, httpcore5, jackson), runs Trivy and Docker Scout scripts, and ships Watchtower lifecycle hooks for safe auto-updates.
How Appsmith is built
How Appsmith is structured
The repository has two main applications under app/: app/client, a Yarn 3 workspace (packages/**) containing the React builder plus the Node-based rts and mcp packages, and app/server, a Maven multi-module Java project with the modules reactive-caching, appsmith-interfaces, appsmith-plugins, appsmith-server and appsmith-git. app/util holds shared tooling. deploy/ contains every installation path (Docker, Helm, Ansible, AWS AMI and Packer, DigitalOcean, Heroku), and contributions/ documents client and server setup for contributors. The default branch is release.
Frontend
app/client is a React and TypeScript application. It is started through scripts/start.js with Create-React-App conventions (REACT_APP_ENVIRONMENT, BROWSER=none) and built by build.sh; an build-airgap script downloads assets for offline installs. Storybook and Chromatic cover component work, Jest covers unit tests per workspace, and end-to-end testing has moved to Playwright with smoke, sanity, regression and regression-git projects while a Cypress suite (with its own Dockerfile) is still run in CI. The client also produces the rts and mcp Node packages that the image runs beside the Java server.
Backend & APIs
The server is Spring Boot 3.5 on Java 25. reactive-caching pulls in WebFlux, Project Reactor and reactive Redis, which makes the request pipeline non-blocking. appsmith-interfaces defines shared contracts and depends on PF4J, sshj and JJWT. appsmith-plugins is the integration layer: each datasource is a PF4J plugin module (Postgres, MySQL, MSSQL, Oracle, Mongo, Redis, Elasticsearch, DynamoDB, Firestore, Redshift, Snowflake, Databricks, ArangoDB, S3, Google Sheets, GraphQL, REST, SaaS, SMTP, JS, AWS Lambda, OpenAI, Anthropic, Google AI, Appsmith AI). appsmith-server hosts the API and imports the Mongock and OpenTelemetry BOMs; graphql-java is wired at the server level for the GraphQL plugin. appsmith-git provides git synchronisation through JGit with Apache MINA SSH.
Data & persistence
MongoDB is the system of record for applications, pages, actions and users; schema migrations run with Mongock. The official image bundles a MongoDB server.jar so a single container is self-contained, while Heroku's app.json shows the externalised form: APPSMITH_DB_URL as a Mongo URI plus a Redis add-on. Sensitive datasource credentials are encrypted at rest with APPSMITH_ENCRYPTION_PASSWORD and APPSMITH_ENCRYPTION_SALT. Redis backs caching and sessions.
Build, test & deploy
- Client:
client-build.yml,client-lint.yml,client-prettier.yml,client-unit-tests.yml,ci-client-cyclic-deps-check.yml, Playwright and Cypress workflows. - Server:
server-build.yml,server-spotless.yml,server-integration-tests.yml;rts-build.ymlandmcp-build.ymlfor the Node services. - Images:
docker-base-image.yml,build-docker-image.yml,test-build-docker-image.yml, on-demand deploy previews andghcr-citest-retention.yml; Trivy and Docker Scout scripts feedtest-vulnerabilities-data.yml. - Releases:
github-release.yml,release-drafter.yml,helm-release.yml.
Self-hosting notes
The appsmith-ce image exposes ports 80 and 443, runs supervisord as its main process, executes /opt/appsmith/entrypoint.sh and reports health through /opt/appsmith/healthcheck.sh. Watchtower labels let the container update itself safely. For production, point the image at external MongoDB and Redis and use the Helm chart in deploy/helm; the AWS, DigitalOcean and Ansible assets under deploy/ automate VM installs.
What to copy (and what not to)
Copy the PF4J plugin-per-datasource layout if your product integrates with many external systems: it isolates driver dependencies and makes each integration independently testable. Copy the all-in-one image for the community edition and the externalised services for scale. Think carefully before bundling a database inside the application image as Appsmith does; it lowers the barrier to a first run but complicates upgrades and backups, which is why the Helm path uses external MongoDB.
Sources & repo audit
- Audited
- Sep 17, 2026
- Commit
- 09a7581
- License
- Apache-2.0
- app/server/pom.xml (Spring Boot 3.5 parent, Java 25, modules)
- app/server/appsmith-plugins/pom.xml (PF4J plugin modules)
- app/server/reactive-caching/pom.xml (WebFlux, reactive Redis)
- app/client/package.json (yarn 3 workspaces, Playwright, Cypress, Jest)
- Dockerfile (single image: editor, rts, mcp, server, mongo, supervisord)
- app.json (Heroku: Mongo URI, Redis add-on)
Independent analysis of repository at github.com/appsmithorg/appsmith. Spotted an inaccuracy? Use the claim form to request a correction.
Show this stack on your README or website
[](https://stackitfast.com/project/appsmith)Paste it into your README. It shows your current stack and links to this page.
Scaffold it with your agent
Paste this prompt into Claude Code, Cursor, Windsurf or AGY to start a project with Appsmith's architecture.
- 1Copy the promptThe full markdown spec, with every layer and decision.
- 2Open your AI toolClaude Code, Cursor, Windsurf or Copilot, in a new repo.
- 3Paste and scaffoldUse it as the first instruction; review before you ship.
# MISSION: Scaffold "Appsmith" Production Architecture
You are an expert Senior Staff Software Architect and Full-Stack Engineer. Your mission is to scaffold and implement a production-grade, highly reliable, and modular codebase following the proven architecture of **Appsmith**.
---
## 1. PROJECT SPECIFICATIONS & BENCHMARK
- **Reference Architecture**: Appsmith
- **What It Does**: Appsmith is an open-source low-code platform for building admin panels, dashboards and internal tools on top of existing databases and APIs, with a React builder, a reactive Java server and a plugin system for datasources.
- **Domain & Category**: Low-Code Internal Tool Platform
- **Production Scale**: 21-100 people
- **Development Mode**: CLASSIC
- **Architectural Rationale**: A reactive Spring Boot server with PF4J plugins isolates dozens of datasource integrations, MongoDB stores app definitions as documents, and a single supervisord-managed image keeps self-hosting to one container.
- **Live Website Reference**: https://www.appsmith.com
- **Source Repository**: https://github.com/appsmithorg/appsmith
---
## 2. PRODUCTION TECH STACK
- **Full Stack Array**: TypeScript, React, Java, Spring Boot, MongoDB, Redis, Node.js, Docker, Kubernetes, Playwright
- **Primary Language(s)**: TypeScript, Java
- **License of the reference repo**: Apache-2.0
- **Frontend**: React — The app builder and runtime UI in `app/client`, started with Create-React-App-style `scripts/start.js` and `REACT_APP_*` environment flags.; TypeScript — Largest language in the repo; the client is a Yarn 3 workspace (`packages/**`) on Node 24.; Storybook — Component development and visual regression via Chromatic (`build-storybook.yml`, `build-chromatic.yml`).
- **Backend & APIs**: Java — API server in `app/server` on Java 25 as a Maven multi-module build.; Spring Boot — Spring Boot 3.5 parent POM; WebFlux and Project Reactor in `reactive-caching` make the server reactive end to end.; PF4J — Datasource integrations are PF4J plugin modules under `appsmith-plugins` (SQL, NoSQL, warehouses, S3, GraphQL, REST, AI providers).; Node.js — The RTS (real-time service) and MCP packages in `app/client/packages` are Node services bundled into the image.; JGit — `appsmith-git` implements git sync for apps with JGit over SSH (Apache MINA).; OpenTelemetry — Tracing in the server via the OpenTelemetry BOM.
- **Data & persistence**: MongoDB — Primary application database, bundled in the image as `server/mongo/server.jar`; migrations run with Mongock.; Redis — Reactive caching and sessions (`spring-boot-starter-data-redis-reactive`); Heroku config adds a Redis add-on.
- **Infrastructure & deploy**: Docker — Single `appsmith-ce` image runs editor, RTS, MCP, server and MongoDB under `supervisord` with a health check and Watchtower hooks.; Kubernetes — Helm chart under `deploy/helm` with `helm-release.yml`, `helm-unittest.yml` and `helm-docs.yml` workflows.; Caddy — Reverse proxy inside the image; routes are tested by `caddy-routes-test.yml`.; Ansible — Cloud install recipes under `deploy/` for AWS (AMI + Packer), DigitalOcean, Heroku and Ansible.
- **Tooling, testing & ops**: Playwright — E2E suites with smoke, sanity and regression projects (`test:pw:*` scripts, `playwright-e2e.yml`).; Cypress — Legacy E2E suite still run in CI (`pr-cypress.yml`, `app/client/cypress/Dockerfile`).; Jest — Client unit tests across workspaces (`test:unit:ci` runs `yarn workspaces foreach`).; GitHub Actions — Fifty-plus workflows: client/server builds, lint, spotless, vulnerability scans, deploy previews, release drafting.
---
## 3. KEY ARCHITECTURAL DECISIONS (audited from https://github.com/appsmithorg/appsmith @ 09a7581)
1. **One container that runs the whole stack**: The Dockerfile copies the React build, the RTS and MCP Node services and the Spring server into one image and starts them with `supervisord`, even bundling a MongoDB `server.jar`. Self-hosters get a single `docker run`; scaling out is done with external MongoDB and Redis plus the Helm chart.
2. **Datasource integrations as PF4J plugins in Java**: `appsmith-plugins` lists more than twenty Maven modules, each a PF4J plugin: relational databases, document stores, warehouses, S3, GraphQL, REST, SMTP, AWS Lambda and AI providers. New integrations are added as modules without touching the server core.
3. **Reactive Java server on WebFlux**: The server extends Spring Boot 3.5 with WebFlux and Project Reactor, and `reactive-caching` layers reactive Redis caching on top. Query execution against many datasources is I/O bound, which is why the non-blocking model was chosen.
4. **Git-native app versioning**: `appsmith-git` uses JGit with SSH support so applications can be committed to and pulled from git repositories; the image reserves `/dev/shm/git-storage` for working copies.
5. **MongoDB as the system of record**: Application definitions are documents, stored in MongoDB and migrated with Mongock. `app.json` for Heroku makes the dependency explicit by requiring a Mongo URI, and a `sync-release-to-pg.yml` workflow indicates ongoing work around PostgreSQL support.
6. **Security hardening baked into the image**: The Dockerfile strips setuid/setgid bits, pins CVE-affected Java dependencies in `app/server/pom.xml` (commons-lang3, httpcore5, jackson), runs Trivy and Docker Scout scripts, and ships Watchtower lifecycle hooks for safe auto-updates.
---
## 4. NON-NEGOTIABLE ARCHITECTURAL GUARDRAILS
1. **Monorepo & Modular Separation**:
- Structure as a Turborepo monorepo with strict package boundaries:
- `apps/web`: Application UI, routing, layouts, and server endpoints.
- `packages/ui`: Shared design tokens, CSS variables, and Radix UI primitive components.
- `packages/db`: Database schemas, client singleton, declarative migrations, and seed scripts.
- `packages/config`: Shared TypeScript, ESLint, and build configurations.
2. **Strict Type Safety & Zero `any` Policy**:
- Enable `strict: true`, `noImplicitAny: true`, and `strictNullChecks: true`.
- Validate ALL external inputs, API request bodies, and query parameters with **Zod** schemas before execution.
3. **Frontend & Rendering Guidelines**:
- Isolate interactive UI state to leaf components. Keep core pages lightweight and performant.
4. **Design System & Aesthetics**:
- Keep every color, radius, shadow and font in a single token file (CSS variables) and consume tokens everywhere; never hardcode hex values in components.
- Prefer crisp 1px borders and one subtle shadow scale over blurry default shadows. Pair one sans-serif for body/headings with one monospace for tags, badges, metrics, and code.
5. **Data Layer & Reliability**:
- Write declarative schema definitions with foreign keys, composite indexes on queried filters, and automated timestamp triggers.
- Use connection pooling and prepared statements for serverless database execution.
---
## 5. STEP-BY-STEP SCAFFOLDING ROADMAP
- **Phase 1: Workspace & Root Config**: Initialize package manager, monorepo configuration (`turbo.json`, `tsconfig.base.json`, `package.json`).
- **Phase 2: Database Schema & Client**: Set up the data layer (MongoDB, Redis): client, connection pool, models, and migration scripts.
- **Phase 3: Design Tokens & UI Primitives**: Build accessible `Button`, `Input`, `Card`, `Badge`, and layout wrappers inside `packages/ui`.
- **Phase 4: Core Application Routes & Handlers**: Implement primary authentication, user session handling, and application routes.
- **Phase 5: Quality Assurance & Build Verification**: Run `tsc --noEmit`, ESLint, Prettier, and smoke test suites to ensure zero compilation or runtime errors.
---
## 6. EXECUTION INSTRUCTIONS
1. Review all specifications, architectural guardrails, and stack choices above.
2. Present the full monorepo directory tree structure.
3. Systematically generate the complete, production-ready codebase according to the 5-phase roadmap above — starting with the root workspace setup, followed by the database schema, UI design system package, and full-stack application routes until the repository is fully scaffolded and ready to run.Frequently asked about Appsmith
What is Appsmith built with?
Appsmith has a React and TypeScript frontend (the app builder) and a Java backend on Spring Boot 3.5 with WebFlux. It stores application definitions in MongoDB, uses Redis for caching and sessions, runs datasource integrations as PF4J plugins, and includes Node.js services for realtime and MCP. Everything ships in one Docker image with a Helm chart for Kubernetes.
Which databases and APIs can Appsmith connect to?
The plugin modules in the repository cover PostgreSQL, MySQL, MSSQL, Oracle, MongoDB, Redis, Elasticsearch, DynamoDB, Firestore, Redshift, Snowflake, Databricks, ArangoDB, Amazon S3, Google Sheets, GraphQL, REST APIs, SMTP, AWS Lambda and AI providers such as OpenAI, Anthropic and Google AI.
Can I self-host Appsmith?
Yes. The appsmith-ce Docker image runs the complete stack under supervisord, and the deploy/ directory provides a Helm chart, Ansible playbooks, AWS AMI and Packer templates, DigitalOcean and Heroku configurations.
Does Appsmith need MongoDB?
Yes, MongoDB is the primary database for application data and the official image bundles a MongoDB server. Redis is also used for caching. The repository contains a workflow named sync-release-to-pg, which suggests PostgreSQL support is being worked on, but MongoDB is what the current build expects.
How does Appsmith version apps with git?
The appsmith-git server module uses JGit with SSH support to commit application definitions to git repositories and pull changes back, enabling branch-based workflows for internal tools.
One email a month: new deep dives and stack trends
New source-audited architectures, head-to-head comparisons and the monthly stack report. No spam, unsubscribe anytime.
Similar architectures
- BudibaseClassicInternal Tool Builder · 6-20 peopleShares TypeScript · Redis · Docker
- ToolJetHybridLow-Code Developer Tool Platform · 6-20 peopleShares TypeScript · React · Redis
- NovuHybridNotification Infra · 6-20 peopleShares TypeScript · React · MongoDB
- Rocket.ChatClassicOpen-Source Team Communications & WebRTC · 20+ peopleShares TypeScript · React · Node.js
- NocoDBHybridSmart Database Spreadsheet · 6-20 peopleShares TypeScript · Redis · Docker
- LibreChatHybridMulti-Model AI Agent & Chat Workspace · 6-20 PeopleShares TypeScript · React · MongoDB