Limitations and honest notes
- It is young. No long production history, one main author. Treat it as early-stage. If a quiet data bug would be costly, test your own queries against it thoroughly first.
- Primary keys are auto-generated strings, not sequential numbers, by default. forge fills in a UUID (or ObjectId on Mongo) when you omit
id. An auto-incrementing integer key is SQL-only viaf.id({ type: 'bigserial' }). - One schema per process.
createDb({ schema })sets the active schema for the whole process. That fits one schema per service. For several different schemas at once, run them in separate processes. - Some nested writes are partial. Deeply nested
upsert,update, andsetcover the common cases but not every Prisma shape. - MSSQL upsert is not implemented in 2.3 — it throws
NotImplementedpointing at v2.4 (MERGErewrite). INSERT / UPDATE / DELETE / SELECT work today. - Mongo cross-field geo
nearTo— anearfilter on field A combined with anearToorderBy on field B will only honor B (single$geoNearstage limit). Same field on both sides works fine. - MultiPolygon, GeometryCollection, holes — single-polygon
withinPolygonworks. Multi-ring shapes need raw queries. - 3D / Z coordinates — not modelled. Store altitude as a separate scalar.
- SRID reprojection — WGS84 only. UTM, state-plane, or other CRSes need raw queries.
- MySQL 5.7 — spatial works but without SRID enforcement;
forge doctorwarns. - DuckDB — no FK enforcement (forge's app-side cascade walker handles it); no
SAVEPOINT(a failing migration batch can't partially recover); no partial indexes /INCLUDEcolumns /ctid(replaced withrowidwhere needed); unique constraints cover soft-deleted rows since there are no partial indexes. - No GUI, no plugin system. If you need a data browser or middleware, this is not that.