undb is a self-hosted, no-code database platform that lets users create and manage structured data without writing code. Designed for developers and non-technical teams, it solves the problem of relying on SaaS tools like Airtable by providing full control over data privacy, storage, and deployment. Built with TypeScript and powered by SQLite (with PostgreSQL support), it offers a SvelteKit frontend and Bun-based backend for fast, lightweight operation.
undb can be deployed via Docker, packaged into a single binary using Bun, or run in a browser-based playground. It supports progressive deployment from local single-file setups to cloud-scale stacks, with OpenAPI integration for external app connectivity and full UI-based table management.
What You Get
- SQLite & PostgreSQL Backend - Supports both SQLite for lightweight local use and PostgreSQL for scalable production deployments.
- No-Code Table Management UI - Visual interface to create, edit, and manage database tables with fields, relationships, and views without SQL.
- Formula Fields - Excel/Airtable-style formula system supporting math operations, date functions, and custom expressions in fields.
- Multiple View Types - Includes List, Kanban, Gallery, Calendar, and Pivot views for flexible data visualization and organization.
- OpenAPI RESTful API - Auto-generated REST endpoints for all tables, enabling integration with external apps and custom frontends.
- Docker & Binary Deployment - Deploy via Docker containers or package the entire backend into a single executable binary using Bun.
- Playground Mode - Try undb directly in the browser without installation or setup, ideal for demos and testing.
- Offline-First Design - Data stored locally by default, with options to sync or migrate to remote servers later.
- Form Builder & Submission - Create custom data entry forms and submit data via OpenAPI endpoints for web and mobile integration.
- Date Range & Duration Fields - Specialized field types for managing time intervals and durations with built-in validation and macros.
Common Use Cases
- Running a private CRM - A small business owner uses undb to build a customer database with Kanban and gallery views, hosted on their own server to avoid SaaS fees and data leaks.
- Building internal tools without dev teams - A marketing team creates a campaign tracker with forms, calendar views, and formula fields to calculate ROI, all without writing code.
- Developing a BaaS for client projects - A freelance developer packages undb into a binary to deliver a custom backend to clients who need a secure, self-hosted data layer.
- Prototyping a product with real data - A startup founder uses the playground mode to rapidly mock up a product database with formulas and views before writing any backend code.
Under The Hood
Architecture
- Monorepo structure powered by Turbo enables isolated development of desktop, backend, and frontend applications while sharing utilities across domains
- Backend services are abstracted via environment-driven configuration, allowing seamless switching between databases and storage providers without code changes
- Dependency injection is implemented through environment variables rather than formal containers, reducing runtime coupling but limiting test isolation
- CI/CD pipelines are scaffolded with Docker Compose and Turbo workflows, though service contracts and interfaces remain undocumented in the sampled codebase
Tech Stack
- Node.js 22 backend with Bun as the runtime and package manager, leveraging DrizzleKit for cross-database schema management
- Hybrid frontend stack combining Vue and Next.js for server-side rendering and desktop integration, with Houdini handling GraphQL data fetching
- MinIO and Turso form the core storage and database layers, orchestrated via Docker Compose alongside Maildev for email simulation
- Biome and Husky enforce code formatting and Git hooks, while Tini ensures stable container initialization in production
- Multi-stage Docker builds optimize image size by separating build, install, and runtime phases with asset bundling via Bun
Code Quality
- Extensive test coverage exists across core modules but lacks meaningful assertions and snapshot verification, reducing confidence in correctness
- Error handling is generic and unstructured, with no custom error classes, leading to opaque failure modes and poor debuggability
- Inconsistent naming conventions and redundant test patterns increase cognitive load and reduce maintainability
- TypeScript is used but undermined by frequent use of ‘any’ in critical paths like formula evaluation, weakening type safety
- Linting and code quality practices are inconsistently applied, with empty test files and untested edge cases present in key utilities
What Makes It Unique
- Native integration of headless table libraries with Svelte stores enables reactive data grids without DOM manipulation overhead
- Custom aggregate function picker uses command palette patterns to enable dynamic, client-side calculations without backend roundtrips
- Decoupled view system (grid, form, gallery) derives all rendering from a single schema via declarative pipelines
- Context-aware UI primitives auto-configure based on parent state, eliminating hardcoded prop dependencies
- I18n-aware components inject translations via typed client-side namespaces, preventing template string fragmentation
- Deep Svelte store integration with TanStack Query and URL state enables persistent, navigation-reactive views without manual sync logic