Skip to content

Roadmap

VexCMS is under active development. Everything ships as 0.1.0-alpha until the core feature set is stable enough for a v0.1.0 release.

Status key: βœ… Shipped Β· πŸ”„ In progress Β· πŸ“‹ Planned Β· ⏳ Future Β· πŸ”­ Exploring

  • βœ… 16 field types β€” text, number, checkbox, select, date, url, email, textarea, json, relationship, upload, array, group, blocks, color, richtext (Plate.js via @vexcms/richtext-plate, with inline images from the media library)
  • βœ… Versioning & drafts β€” draft/publish workflow, autosave, version history, restore, and unpublish
  • βœ… Convex schema + type codegen
  • βœ… Real-time admin panel
  • βœ… DataTable with pagination and totalDocs
  • βœ… Media library
  • βœ… RBAC with document-level access, indexed rules (withIndex ranges and where predicates), and per-call access.action / access.bypass
  • βœ… Access index resolution β€” a rule’s withIndex range and where predicate apply inside the Convex query itself
  • βœ… anonRole fallback for unauthenticated callers
  • βœ… Globals (defineGlobal)
  • βœ… Database-driven theming β€” themes collection, active-theme selector, buildThemeCss custom-property injection
  • βœ… Better Auth integration
  • βœ… Convex file storage
  • βœ… TypeDoc API reference
  • βœ… CLI β€” vex dev / vex generate / vex deploy
  • βœ… create-vexcms scaffolder
  • βœ… Field-level RBAC permissions β€” a filter callback may return a field map instead of a boolean
  • βœ… Static prerendering, path-based revalidation, sitemap.xml / robots.txt
  • βœ… Exported React test kit β€” run the admin panel’s own component suite against your config
  • βœ… Lifecycle hooks β€” beforeChange / beforeDelete (inline, may reject a write) and afterChange / afterDelete (via convex-helpers triggers), wired by default in create-vexcms’s base-nextjs template and both hand-maintained apps
  • βœ… Custom validate() β€” async, server-side, database-aware (uniqueness checks and cross-document rules), enforced on every write. A dedicated lifecycle-hooks guide covering both of the above is still to write; see @vexcms/core’s README until then.
  • βœ… Live preview β€” the admin panel streams unsaved form state onto your real route, for collections and globals alike. Preview settings declare per collection/global or in one root admin.livePreview map; url takes a literal path, a (doc) => string resolver, or a { server } resolver that reads the database. Origin-allowlisted and gated per request by a session-verified cookie
  • βœ… email, textarea, and json fields β€” textarea adds a character counter, json is a CodeMirror editor
  • βœ… tabs, collapsible, row, and ui layout fields β€” organize sibling fields into tabs, collapsible sections, and side-by-side rows, or drop in a non-persisted display/action component, all legal anywhere a fields record is
  • βœ… Conditional fields β€” admin.condition({ data, siblingData }) => boolean shows or hides any field (data or layout), enforced identically on the client and the server
  • βœ… Input masks β€” admin.mask on text / email / number / url, with project-wide defaults at fields.inputMasks.<type>
  • βœ… Block clipboard β€” copy/paste blocks across fields, documents, and collections from a localStorage clipboard validated against the target block definition
  • βœ… Admin extension points (experimental) β€” per-field and project-wide component overrides and additive action-menu contributions, documented in the admin customization guide
  • βœ… List views β€” per-collection search, sort, an AND/OR filter builder with per-field filter inputs, column visibility/order/pinning/resizing, page size, local and shared saved views (admin.view / admin.views), a peek panel, row and bulk actions, server-prerendered first paint. See the list views guide
  • βœ… commitTs() field β€” Convex’s own commit timestamp, read-only and auto-indexed; the auto-injected updatedAt uses it
  • βœ… Edit-view overhaul β€” reorganized header with a β‹― actions menu, every built-in action a replaceable admin.components.edit slot contribution, an unsaved-changes guard, duplicate for documents and blocks, and collection URLs under /admin/collections/<slug>. See the admin customization guide

These are the v0.1.0 launch track, in the order they ship.

  • πŸ”„ Localization design β€” the storage model and versioning interaction decided before anyone has data to migrate. Localization ships free in the core
  • πŸ”„ Field input consistency pass β€” relationship field and others get consistent interaction and loading patterns
  • πŸ”„ Responsive pass across the admin panel, marketing template, and docs
  • πŸ“‹ Form builder
  • πŸ“‹ Block group categorization
  • πŸ“‹ Content scheduling
  • πŸ“‹ API keys
  • πŸ“‹ Team management
  • πŸ“‹ TanStack Start adapter
  • πŸ“‹ S3 / R2 storage adapters
  • πŸ“‹ Presence β€” avatars of everyone viewing a document, on every edit view

Committed, but not yet scheduled β€” distinct from Exploring, which is still open research. These are the items the site’s roadmap block marks future.

  • ⏳ Plugin system β€” custom field types
  • ⏳ Localization β€” field variants and locale-aware versioning, free in the core
  • ⏳ Auto-migration β€” schema diffing and field backfill on deploy
  • πŸ”­ Multi-component workspaces
  • πŸ”­ Analytics adapter β€” per-document and per-block metrics surfaced directly in the admin panel

Paid add-ons, shipped as separate packages under a flat annual licence and running entirely in your own Convex deployment. The core stays Apache-2.0, and nothing free today moves behind the licence.

  • πŸ”­ Real-time collaboration β€” per-field editing indicators, live cursors, follow mode, collaborative rich-text editing, and concurrent-edit conflict resolution
  • πŸ”­ SAML / OIDC single sign-on
  • πŸ”­ Audit log with retention and export
  • πŸ”­ Approval workflows
  • πŸ”­ Content branching between environments

Assessed and deliberately excluded, so you do not have to wonder:

  • imageUrl field. Use upload with the media library, or a url field.