Penpot Project Structure

The open-source design and prototyping tool. A rare example of a large-scale, full-stack Clojure/ClojureScript application.

Updated 2025-12-30

#penpot #clojure #clojurescript #design #svg #functional-programming
PNGPDF

Project Directory

penpot/
backend/
Clojure API Server
src/app/
Core business logic
http/
API Handlers
db/
Database queries
deps.edn
Dependencies
frontend/
ClojureScript UI
src/app/
Client logic
shadow-cljs.edn
Build config
package.json
JS libs
common/
Shared Clojure(Script)
src/app/
Shared models & specs
exporter/
Export Service
src/
package.json
Puppeteer-based
docker/
Infrastructure
images/
Dockerfiles
devenv/
Dev environment

Repository Info

  • Repository-penpot/penpot
  • Stars-30k+
  • License-MPL-2.0
  • Last Analyzed-December 2025

Tech Stack

  • Backend-Clojure (JVM)
  • Frontend-ClojureScript (Shadow-cljs)
  • Database-PostgreSQL
  • Cache-Redis
  • Export-Puppeteer (Node.js)

Architecture Notes

Penpot is a monolith but split into clear logical components (backend, frontend, common). It relies heavily on the 'Data Oriented' nature of Clojure. The common directory is crucial, allowing the backend and frontend to share data schemas and validation logic seamlessly. The frontend uses an SVG-based rendering engine.

Key Directories

  • backend/src/-The JVM-based server. Handles API requests, authentication, and database interactions.
  • frontend/src/-The browser application. It compiles to JavaScript but is written in ClojureScript. Contains the complex logic for the design canvas.
  • common/-Code shared between backend and frontend. This is a superpower of full-stack Clojure, enabling shared validation and domain models.

Why This Structure?

Penpot is a unique specimen in the open-source world. It proves that functional programming (Clojure) can scale to build complex, highly interactive GUI applications like a design tool.

Share this template

Related Templates

© 2025 FolderStructure.dev