Skip to content

FAQ

Frequently asked questions about ACMS.

Any Content Management System. It’s designed to work with any JavaScript framework, any storage backend, and any editing environment.

How is ACMS different from other CMS platforms?

Section titled “How is ACMS different from other CMS platforms?”

Traditional CMS platforms (Contentful, Sanity, Strapi) require you to define a content schema before using it. ACMS generates the schema automatically from your code. You write acms.hero.title and the field exists — no configuration, no dashboard setup, no schema definitions.

ACMS is framework-agnostic. It works with any JavaScript framework:

  • React / Next.js
  • Vue / Nuxt
  • Svelte / SvelteKit
  • Astro
  • Solid.js
  • Vanilla JavaScript
  • Any framework that runs JavaScript

The core libraries (@useacms/client and @useacms/cli) are open source. The self-hosted model is completely free. The hosted SaaS platform has subscription pricing.

During development, the CLI provides a local dev server. In production, you choose a storage adapter — some require no backend at all (GitHub Gist), while others use existing infrastructure (Vercel Edge Config, Cloudflare KV).

ACMS uses JavaScript’s Proxy object to intercept property access. When you access acms.hero.title, the proxy checks if the field exists. If not, it registers the field with the dev server. The proxy is recursive, so each level of nesting returns another proxy.

Two field names are reserved:

  • displayName — Used internally when migrating a string field to an object
  • _meta — Stores field metadata (types, timestamps, labels)

Yes. ACMS auto-generates acms.d.ts with TypeScript definitions for your content schema. This provides full IDE autocomplete and type checking. See the TypeScript guide.

Yes. ACMS works with both server-side rendering and static site generation. For SSR, use the runtime strategy to fetch content on each request. For SSG, use build-time to fetch once during the build.

The dev server uses a promise queue to process field registrations sequentially. This prevents race conditions when multiple fields are registered simultaneously (e.g., when a page first renders and all fields are accessed at once).

What happens if I rename a field in my code?

Section titled “What happens if I rename a field in my code?”

When you change acms.hero.title to acms.hero.heading, a new field hero.heading is registered. The old hero.title field remains in acms.json. Use acms purge to clean up unused fields based on their lastAccessed timestamps.

Yes. There’s no limit to nesting depth. acms.section.subsection.group.field works fine and creates the full nested structure in acms.json.

No. The dashboard is optional. You can edit content by:

  1. Editing acms.json directly in any text editor
  2. Using the REST API programmatically
  3. Using the self-hosted dashboard
  4. Building a custom UI
  5. Using the hosted SaaS platform

Can multiple people edit content at the same time?

Section titled “Can multiple people edit content at the same time?”

With the self-hosted dashboard and SSE, multiple users can edit simultaneously and see each other’s changes in real-time. With the SaaS platform, this is built-in. With direct file editing, you’d use Git for collaboration.

Set a field’s type to image in the metadata. The field value is a URL string. The dashboard shows an image preview. In your code, use it as a normal string:

<img src={acms.hero.image} alt={acms.hero.imageAlt} />
  1. Configure a production storage adapter in acms.config.ts.
  2. Push content with acms push.
  3. Deploy your application normally.

See the deployment guides for Vercel, Netlify, and Cloudflare Pages.

Can I preview content changes before publishing?

Section titled “Can I preview content changes before publishing?”

With the build-time strategy, content changes take effect on the next build. You can preview by building locally. With the runtime strategy, changes take effect immediately after acms push.

No. Your content is stored in a standard JSON format. You can export it at any time with acms pull and switch between storage adapters freely. The client library is decoupled from the storage layer.