Skip to main content

npx cms-create-site my-site What would you like to build today?

Find out

What Vertex is

A content site is a config file. Everything else is the framework's problem.

Vertex CMS is a Vue 3 framework built on vite-ssg. You write JSON describing what each page contains; it hands back a pre-rendered static site with routing, metadata, theming, and images already handled. There is no application code to write and no server to run.

  • Pages are data, not code

    A page is a list of components and the content those components need. Add a section by adding a line. Nobody has to open a .vue file to change a headline, and content edits can't break the build.

  • Design is a token manifest

    A theme is one JavaScript object of design tokens — palette, type, surfaces, focus rings, elevation. The framework compiles it to CSS custom properties, so re-skinning a whole site is one file, not a stylesheet audit.

  • Static output, real SEO

    Every route pre-renders to its own HTML with canonical URLs, hreflang alternates, JSON-LD, Open Graph tags, a sitemap, and a robots.txt derived from your draft settings. Deploy the folder anywhere that serves files.

Quickstart

From nothing to a deployable site in four commands.

Vertex ships as a single npm package plus a Vite plugin. The scaffolder writes a working site you can build immediately; from there you're editing JSON.

  1. Scaffold a site

    Creates the site directory, a starter theme, and a home page that already builds.

    terminal
    npx cms-create-site my-site
    cd my-site
    npm install
  2. Describe a page

    Flat dot-notation keys with array indices. The framework inflates them into the nested object your components read at render time.

    site/content/en/pages/home.json
    {
      "components[0]": "Header",
      "components[1]": "Hero",
      "components[2]": "Footer",
    
      "content.hero.headline": "Welcome",
      "content.hero.subhead": "Built with Vertex CMS.",
      "content.hero.cta.text": "Get in touch",
      "content.hero.cta.href": "/contact",
    
      "path": "/"
    }
  3. Preview it

    Vite dev server with hot reload. Content edits reload instantly; so do image and theme changes.

    terminal
    npm run dev
  4. Build the static site

    Pre-renders every route to its own HTML file in dist/, generates responsive image variants, and writes sitemap.xml, robots.txt, manifest.json, and a 404 page.

    terminal
    npm run build:ssg

That's the whole loop. For the full content model, theming tokens, and deploy targets, read the documentation →

What's included

The parts every content site needs, already built.

These aren't plugins to go find. They're in the framework, on by default, and configured from the same JSON as everything else.

  • Pre-rendered routing

    Routes are derived from your page files. Each one renders to its own HTML at build time — no SPA rewrite, no homepage shell served for real content URLs.

  • Multi-locale content

    Per-locale directories that mirror each other. The base locale loads first and each locale overrides only the keys it defines, so a partial translation is a valid one.

  • Responsive images

    Drop an original into site/assets/img/. The build generates AVIF, WebP, and JPEG at six widths, caches them outside your repo, and serves them through a <picture> srcset.

  • SEO metadata

    Canonical URLs, hreflang alternates, Open Graph and Twitter cards, JSON-LD, auto-derived breadcrumbs, sitemap.xml, robots.txt, and a web app manifest — all generated, none hand-maintained.

  • Draft gating

    Gate a page, a path prefix, or the whole site behind a password. Gated pages ship with noindex, stay out of the sitemap, and render no body until unlocked.

  • Themes and extensions

    Themes are token manifests. Extensions are validated component bundles. Both can live inside your repo or be published to npm and shared across sites.

  • Three-tier components

    Site-local components override extension components, which override the bundled set. Most-specific wins, and source-qualified names disambiguate when they collide.

  • A real 404

    The framework pre-renders /404.html with your site's own chrome, so unmatched URLs get a branded page carrying noindex instead of an empty response body.

Get started

So — what would you like to build today?

Vertex CMS is MIT licensed and published to npm. Scaffold a site, read the docs, or read the source.

terminal
npx cms-create-site my-site