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 buildThat 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 |
|
Output directory |
|
Node version |
|
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 302A 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.