Penpot is a full-stack, open-source collaborative design and prototyping platform. The codebase is a polyglot monorepo comprising a Clojure backend (REST/RPC API, PostgreSQL, Redis, S3 storage), a ClojureScript frontend (React-based UI with custom text editor and design system), a Rust WebAssembly renderer (Skia-based shape rendering and export), a Node.js media processor (image/font conversion), a TypeScript MCP server (AI integration via Model Context Protocol), and a plugin ecosystem (SES-sandboxed JavaScript runtime with Angular/TypeScript example plugins). The architecture follows a microservices-like pattern with separate deployable components, real-time collaboration via WebSocket/Redis message bus, and background task processing. The system is designed for self-hosting and enterprise deployment with features like SSO, audit logging, webhooks, and rate limiting.
Reagent is a ClojureScript library that provides a minimal, efficient interface to React, enabling developers to define UI components using Hiccup-like vectors and manage state with reactive atoms. The library's architecture centers around three core concepts: reactive atoms (ratoms) for state, a Hiccup-to-React element compiler, and lifecycle macros like `with-let` and `defc`. Under the hood, Reagent implements its own reactive state management system (RAtom, RCursor, Reaction) that triggers automatic re-rendering of components when dereferenced state changes. The codebase demonstrates deep integration with React internals, including support for hooks, contexts, fragments, portals, error boundaries, server-side rendering, and concurrent mode. It is fully compatible with both React 18 and 19, and provides a seamless interop path with existing React libraries via `adapt-react-class` and `:>` syntax. The test suite is comprehensive, covering functional components, lifecycle behavior, reactive updates, and performance benchmarks. While primarily a UI library, the reactive state management components are designed with sufficient abstraction to be studied as a standalone pattern for reactive programming in ClojureScript.
taoensso/encore is a foundational Clojure/ClojureScript utility library rather than an end-user application. It provides a broad collection of general-purpose cross-platform primitives: macros for control flow and aliasing, predicates and coercions, collection/string/time helpers, concurrency constructs, caching and memoization, rate limiting, async runners, environment configuration, Ring helpers, and ClojureScript AJAX support. The core functionality lives in a single large namespace, with additional experimental namespaces for byte manipulation, statistics, signal handling, and timers. It is designed to be embedded in other libraries and applications, not run standalone. The architecture is modular at the namespace level: `taoensso.encore` is the core grab-bag, while `taoensso.encore.bytes`, `taoensso.encore.stats`, `taoensso.encore.signals`, and `taoensso.encore.timers` provide focused, self-contained subsystems. A small Java class supplies high-performance NanoId/HexId generation. The code is heavily optimized for cross-platform behavior and performance, using reader conditionals, custom deftypes, CAS loops, and transient collections. It has a robust test suite and CI coverage for Clojure, ClojureScript, GraalVM, and Babashka. Although it contains statistical and byte-level utilities that could support data work, the repository is not a data pipeline or research project. There are no datasets, notebooks, or ETL flows. The stats module is a reusable library component, not an analytical schema. This is a dependency-first library with high reuse value for Clojure developers needing battle-tested utilities.
Logseq is a privacy-first, open-source knowledge management platform built as a monorepo containing an Electron desktop app, Capacitor-based mobile apps (iOS/Android), a web app, and a Node.js db-sync server. The codebase is predominantly ClojureScript (CLJS) with React/Rum for the UI, DataScript for the in-memory graph database, and SQLite (via better-sqlite3 and sqlite-wasm) for persistence. It uses shadow-cljs for CLJS compilation, webpack for JS bundling, and Tailwind CSS for styling. A separate OCaml-based CLI (logseq-cli) built with Melange provides graph inspection, sync, and CRUD operations against the same db-worker-node backend. The architecture separates concerns into deps/ subprojects (db, outliner, graph-parser, db-sync, common, publishing, shui) that are compiled as separate shadow-cljs targets and shared across Electron, browser, mobile, and CLI runtimes. The system has two graph types: file-based graphs (Markdown/Org) and DB graphs (SQLite-backed with DataScript in-memory querying). DB graphs enable real-time collaboration (RTC) via a Cloudflare Worker-based sync server (deps/db-sync) using WebSockets and D1 SQLite. The db-worker-node is a long-lived Node.js process that manages SQLite connections and sync state, communicating with the UI via a thread-api IPC mechanism. The outliner module handles block tree operations with structural invariants, while the graph-parser handles Markdown/Org parsing via mldoc. The publishing module generates static HTML sites from graphs. Key architectural patterns include: missionary for reactive async flows, promesa for promise composition, malli for schema validation, datascript for Datalog queries, and a component-based UI with Rum/React. The codebase has extensive test coverage via cljs.test, Playwright E2E tests (clj-e2e), and Python-based CLI E2E tests (cli-e2e). The repository is actively maintained with recent commits, 43k+ stars, and active issue triage, though the large monorepo complexity and multi-language surface (CLJS, OCaml, Swift, Kotlin, Python, JS) create maintenance challenges.
ClojureScript is a compiler and toolchain that translates Clojure (a Lisp dialect) into JavaScript, targeting the Google Closure Compiler for advanced optimization. In production, it takes ClojureScript source files, analyzes them (macro expansion, type inference, namespace resolution), emits JavaScript, and optionally invokes the Closure Compiler for bundling, minification, and dead-code elimination. The system also provides a REPL (browser and Node.js), a self-hosted compiler (ClojureScript compiling ClojureScript), a full standard library (cljs.core, clojure.string, clojure.set, etc.), a testing framework (cljs.test), a specification system (cljs.spec.alpha), source-map support, and dependency management for npm/foreign JavaScript libraries. The architecture is a library/toolchain rather than a deployed service: it runs on the JVM via Clojure and can also self-host on JavaScript runtimes. Key entry points include the CLI (cljs.main), the build API (cljs.closure/build), the compiler API (cljs.compiler.api), and the analyzer API (cljs.analyzer.api). External dependencies include Clojure, Google Closure Compiler, Google Closure Library, tools.reader, Transit, and test.check. The codebase is large and mature, with extensive regression tests and a detailed changelog, though some samples and design documents are outdated.