Guides

Deployment

A Meno project is a normal Astro project, so it builds and deploys exactly like any other Astro site. There is no proprietary build step and no special export — you run astro build, you get a folder of static files, and you upload that folder to a host.

The one piece that is already wired for you is the meno() integration in astro.config.mjs. It handles Meno-specific concerns at build time — generating CSS from your style() calls and mapping project.config.json's i18n into Astro's locale routing — so there is nothing extra to configure before you deploy.

import { defineConfig } from 'astro/config';
import meno from 'meno-astro/integration';

export default defineConfig({
  integrations: [meno()],
});

Building the site

Run the project's build script from the project root:

npm run build

That script is just astro build, defined in package.json:

{
  "scripts": {
    "dev": "astro dev",
    "build": "astro build",
    "preview": "astro preview"
  }
}

The build renders every page under src/pages/ to static HTML, pre-renders one HTML file per CMS item for each dynamic route (src/pages/<collection>/[slug].astro), emits locale-prefixed copies when i18n is configured, and bundles the generated CSS and any component <script> JavaScript. The output is written to dist/ — a plain folder of HTML, CSS, JavaScript, and assets, ready to upload anywhere.

To check the output before you ship it, preview it locally with npm run preview (which runs astro preview), then open the URL it prints and click through your pages.

Deploy targets

Because dist/ is just static files, any static host works — Cloudflare Pages, Netlify, Vercel, GitHub Pages, or a plain file server. The settings are the same everywhere:

Setting

Value

Build command

astro build (or npm run build)

Output directory

dist

Node version

22

The simplest workflow is to connect your Git repository to the host. When you push, the host runs astro build and publishes dist/ automatically — so every commit redeploys your site. This is also how changes you make in the Meno editor reach production: the editor writes .astro files, you commit, and the host rebuilds. See GitHub for connecting a repository, and Project structure for what lives in the repo.

If you would rather not set up a host yourself, Meno can build and publish for you with one click. See Publishing.

Static hosting config files

Two optional files in your project root let you control how the host serves the site. If they exist, the build copies them verbatim into dist/, where Cloudflare Pages and Netlify read them natively.

_headers sets custom HTTP headers — caching rules, a Content Security Policy, and similar. Each block starts with a path pattern, followed by indented Header: value lines:

/*
  X-Frame-Options: DENY
  Content-Security-Policy: default-src 'self'; img-src 'self' data: https:

_redirects defines URL redirects, one rule per line as source destination status:

/old-page    /new-page          301
/blog/*      /articles/:splat    302

A 301 is a permanent redirect, 302 is temporary, and a 200 rewrite serves the destination without changing the URL. Note that GitHub Pages does not support these two files; on that host, handle redirects at the DNS or CDN level instead.

Setting the public origin

Set siteUrl in project.config.json to your site's public origin. Meno uses it to build absolute URLs at deploy time — canonical link tags, hreflang alternates for localized pages, and the sitemap:

{
  "siteUrl": "https://example.com"
}

Set this before your first production build so search engines and locale routing reference the right domain. For the rest of the file's options, see Project config.


Once a host is connected and siteUrl is set, deployment is hands-off: edit visually or by hand, commit, and the static build ships. To let Meno handle building and publishing for you instead, see Publishing.

Building the future of digital experiences, one website at a time

Product

Resources

Comparisons

© 2026 Meno. All rights reserved.