The problem with undb in 2025–2026
An open source project is not condemned simply because it slows down. Some reach stable maturity and no longer need much change. undb does not fit that profile: it is a young tool in a fast-moving category, with short-lived JavaScript dependencies.
The warning signs that accumulated by late 2025 are specific. The last published tag was more than sixty days old by year end. The number of open issues without a maintainer comment exceeded thirty. Several reported regressions on core features — formulas, filtered views, CSV import — without acknowledgment. The last npm dependency update was months old, leaving known CVEs unpatched in the dependency chain.
The concern is not only technical. A database tool holds operational data. When maintenance weakens, the question shifts from 'does it work today' to 'will it work in six months, and will my data be accessible if it does not.' With undb in its current state, that answer is uncertain.
Why migrate now rather than in six months
- Active security risk: unmaintained npm dependencies accumulate known CVEs; an undb instance exposed to the internet without a hardened reverse proxy is an expanding attack surface.
- Unpatched production bugs: regressions in CSV import and formulas reported in late 2025 have no fix; if your usage touches these features, the situation only worsens.
- Frozen dependencies: Node.js LTS advances, Docker base images change; a project without maintenance eventually fails to build, blocking host security updates.
- Community moving on: discussions in self-hosted forums (Reddit r/selfhosted, awesome-selfhosted) show a clear migration trend toward Teable, NocoDB, and Grist; staying on undb means losing access to active integrations and community scripts.
- Orphaned data: the longer you wait, the higher the probability of an undocumented internal schema change; exporting now, while the output format is known and stable, is safer than waiting for a future incompatibility.
- A clean migration window: your data is fresh and consistent now; a forced migration — because the instance fails to start after a Docker update — always happens under worse conditions.
Teable: the actively maintained Rust NoCode database
Teable positions itself as a self-hosted Airtable alternative, but the technical positioning is more precise. The backend is written in Rust with NestJS for the API layer, and the frontend is a React application. This yields a backend binary consuming roughly 150–200 MB of RAM at idle, compared to 400–600 MB for undb on a comparable instance.
The REST API is documented and designed to be compatible with Airtable patterns: same core concepts (tables, views, fields, records), same HTTP verbs, similar JSON structures. If you have scripts that queried undb via its API, adapting them to Teable amounts to a handful of route and field name adjustments.
The AGPL-3.0 license restricts redistribution of modified Teable builds, but imposes no restrictions on internal use or deploying Teable for your own clients on your own infrastructure — the standard regime for serious self-hosted tools.
The release cadence is the most important factor for a production tool: weekly to biweekly releases with detailed changelogs, critical bugs addressed within 72 hours, and a public roadmap that is kept current. This is the level of maintenance expected of a tool trusted with operational data.
undb vs Teable: technical comparison
Scroll the table
| Criterion | undb | Teable |
|---|---|---|
| Backend language | TypeScript (Node.js) | Rust + NestJS |
| License | AGPL-3.0 | AGPL-3.0 |
| RAM at idle (Docker) | ~400–600 MB | ~150–200 MB |
| Airtable-compatible API | Partial, undocumented | Yes, documented |
| CSV/JSON import | Yes (regressions reported late 2025) | Yes, stable |
| GitHub stars (autumn 2026) | ~3,500 | ~12,000+ |
| Maintenance activity | Stalled (>60 days without release, late 2025) | Active (weekly releases) |
Preparing the migration: exporting from undb
Before installing anything, export your undb data from a still-functioning instance. Do not defer this until after Teable is installed: if something goes wrong between the two steps, you want your data already in hand.
Exporting your data from undb
Access the export interface
In undb, open each table you want to migrate. The table context menu (the '…' icon or right-click on the tab) exposes an 'Export' option. undb offers two formats: CSV and JSON. Choose JSON for tables with relation or formula fields — CSV flattens relations into strings, complicating remapping. For simple tables (no relations), CSV is sufficient.
Export table by table
undb does not offer a global database export at this version. Each table must be exported separately. Organize your files in a folder named after the database: for example
export-undb-crm/orexport-undb-projects/. Note the import order for later: tables referenced by others must be imported into Teable first.Verify export integrity
For each exported JSON file, verify it is not truncated: open it in an editor or run
python3 -m json.tool my-export.json > /dev/null— no output means valid JSON. For CSV files, count lines withwc -l export.csvand compare against the record count displayed in undb. A discrepancy of more than a few lines (headers, trailing blank line) warrants investigation before proceeding.Keep an archive copy
Before continuing, archive everything:
tar czf undb-export-$(date +%Y%m%d).tar.gz export-undb-*/. Keep this archive for thirty days after the migration. If Teable reveals a data inconsistency two weeks after import, the original undb export is your ground truth.
Installing Teable on a ServOrbit VPS
ServOrbit offers a Teable template in its marketplace at /marketplace/bases-de-donnees/teable. The template automatically configures Docker Compose, base environment variables, and the reverse proxy. For a fully manual install that keeps you in control, the steps below cover the complete procedure on Debian 12 or Ubuntu 22.04.
Install Teable via Docker Compose
Create the working directory
Connect via SSH to your VPS. Create a dedicated directory and navigate into it:
mkdir -p /opt/teable && cd /opt/teableDownload the official Compose file from the Teable repository:
curl -O https://raw.githubusercontent.com/teableio/teable/main/dockers/docker-compose.ymlConfigure environment variables
Create a
.envfile in/opt/teable/. The minimum required variables are:POSTGRES_PASSWORD=change-me-strong TEABLE_SECRET_KEY=a-random-32-character-string PUBLIC_ORIGIN=https://teable.your-domain.tldGenerate the secret key with
openssl rand -hex 16. Do not reuse the PostgreSQL password from another instance.Start the services
Start the stack in the background:
docker compose up -dWait thirty seconds, then verify all containers are
healthy:docker compose psThe
teableservice must showhealthy. Ifteable-dbis not ready yet, wait a few more seconds — PostgreSQL takes longer on the first start (schema initialization).Configure the reverse proxy
Teable listens on port 3000 by default. Configure your reverse proxy (nginx or Caddy) to route HTTPS traffic to
localhost:3000. Minimal nginx example:server { listen 443 ssl; server_name teable.your-domain.tld; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }If using the ServOrbit template, this configuration is generated automatically.
First access and admin account creation
Open
https://teable.your-domain.tldin a browser. On first login, Teable prompts you to create an admin account. This account is local to your instance — there is no external registration. Choose a strong password and store it in your secrets manager.Create a workspace
After login, create a workspace (equivalent to an organization in Airtable) that will hold your bases migrated from undb. Give it a descriptive name —
undb Migrationfor example — to distinguish imported data from new bases you will create directly in Teable.
Importing your undb data into Teable
Teable offers two import paths: CSV for simple tables, and structured JSON for tables with complex field types. The import interface is accessible from the '+' menu of a workspace or from the 'Import table' button inside an existing base.
Import and verify your data
Create the target base in Teable
In your workspace, click 'New base' and give it the same name as the original database in undb. This naming consistency makes cross-verification easier during migration. If you are migrating multiple databases, process them one at a time.
Import tables from CSV or JSON
Inside the target base, click '+ Add table' then 'Import from file'. Select your CSV or JSON export. For CSV, Teable auto-detects column types — verify that date columns are interpreted as
Daterather thanText. For JSON, the mapping is more direct if the undb export format is standard.Import tables without relations first (the leaf tables in your data graph), then those that reference them.
Map and adjust field types
After import, review each column in Teable and verify its type. Common issues when migrating from undb:
- undbformulafields have no direct import equivalent — they arrive as frozen computed values. Recreate formulas in Teable manually.
-attachmentfields do not migrate via CSV; if undb stored files, handle them separately.
- Boolean fields exported as the stringtrue/falseneed to be converted toCheckboxtype in Teable.Verify relationships and data integrity
If your undb tables had relationships (link-type fields), these arrive flattened in the CSV export. Recreate link fields in Teable once all tables are imported, then use the filter view to verify that record counts match the originals. A persistent discrepancy indicates an encoding issue in the export (special characters, Windows line endings) — re-export using JSON in that case.
Test on a non-critical database first
Before migrating your production data, run the complete procedure on a secondary database — test data, an archived project, or an anonymized copy. This surfaces field type mapping issues and edge cases specific to your usage without risking operational data integrity.
Keep the undb export archive for at least thirty days after migration. If a data inconsistency surfaces two weeks after import — a missing field, a corrupted value — the original export is your only source of truth. Once that period has passed and the migration is fully validated, you can shut down the undb instance with confidence.