Skip to content
STACK IT FAST

Appsmith

Curated OSSClassicLow-Code Internal Tool Platform21-100 people

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
Frontend & UI
  • 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`).
Backend & APIs
  • 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.
Data & Persistence
  • MongoDBPrimary application database, bundled in the image as `server/mongo/server.jar`; migrations run with Mongock.
  • RedisReactive caching and sessions (`spring-boot-starter-data-redis-reactive`); Heroku config adds a Redis add-on.
Infrastructure & Deploy
  • 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.
Tooling, Testing & Ops
  • 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 SVG
Appsmith architecture diagramApp builder → Reverse proxy (HTTPS); Reverse proxy → API server (/api); Reverse proxy → RTS & MCP (realtime); API server → Datasource plugins (run queries); API server → Git sync (commit · pull); API server → MongoDB (Spring Data); API server → Redis (cache); Datasource plugins → Your data sources (queries); Git sync → Git remote (push / pull)CLIENTSSERVICESWORKERS & JOBSDATA & STORAGEEXTERNALApp builderReact · TypeScriptAPI serverSpring Boot · WebFluxReverse proxyCaddy (in image)RTS & MCPNode.jsDatasource pluginsPF4JGit syncJGitMongoDBapps · MongockRedisreactive cache · sessionsYour data sourcesSQL · APIs · SaaS · AIGit remoteSSH/apirealtimeHTTPSrun queriescommit · pullSpring Datacachequeriespush / pull
How the main components of Appsmith connect, drawn from the audited repository.
Diagram 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
  1. 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 MongoDB server.jar. Self-hosters get a single docker run; scaling out is done with external MongoDB and Redis plus the Helm chart.

  2. 02

    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. 03

    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. 04

    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. 05

    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. 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.yml and mcp-build.yml for the Node services.
  • Images: docker-base-image.yml, build-docker-image.yml, test-build-docker-image.yml, on-demand deploy previews and ghcr-citest-retention.yml; Trivy and Docker Scout scripts feed test-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

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
Tech stack of Appsmith
[![Tech stack of Appsmith on STACK IT FAST](https://stackitfast.com/badge/appsmith.svg)](https://stackitfast.com/project/appsmith)

Paste it into your README. It shows your current stack and links to this page.

Use this stack

Scaffold it with your agent

Paste this prompt into Claude Code, Cursor, Windsurf or AGY to start a project with Appsmith's architecture.

  1. 1Copy the promptThe full markdown spec, with every layer and decision.
  2. 2Open your AI toolClaude Code, Cursor, Windsurf or Copilot, in a new repo.
  3. 3Paste and scaffoldUse it as the first instruction; review before you ship.
use-this-stack.md · 61 lines · 8.0 KB
# 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.
Scaffolded something with this prompt?
Would you pick this stack for a low-code internal tool platform project?

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.

use-this-stack.md