§ 01 / Start

Start a project

$ npm create zn

Or pnpm, yarn, bun.

In your CLI terminal write without quotes "npm create zn". The installer asks what you are building, picks relevant questions and skips every question that cannot change the answer. (If you get a scary error, perhaps you don't yet have Node.js)

§ 03 / Limits

What zenness Is Not For

  • A content system for non-technical editors

    Content is Markdown in version control. Pair it with a hosted editor, or keep WordPress.

  • A plugin marketplace

    A deliberate trade: it is the mechanism behind the security incident rate, and also why you cannot install a slider from a menu.

  • A heavy in-browser application

    If the product is a canvas editor or a spreadsheet, start somewhere else.

  • Your own checkout

    The commerce option scaffolds no payment, tax or fraud code. Shopify does those, and is liable for them.

  • An upgrade path for an existing project

    A scaffolded project diverges from its template the moment it exists. What you generate is yours to maintain.

  • A complete accounts system

    No single sign-on, no multi-factor, no password reset. It scaffolds the part that is only boilerplate.

§ 04 / Positioning

Against the Alternatives

  • vs WordPress

    No third-party code in the runtime

    Static files or one small server, instead of a server that must stay patched and a database hit per request.

  • vs Next.js

    No single framework required

    React, Vue and Svelte are options rather than the premise, and the setup is a conversation rather than a configuration exercise.

  • vs Nuxt

    The same backend, without the Vue requirement

    Both run on Nitro. zenness pairs it with a template-first frontend aimed at content, not at applications.

§ 05 / Use Case 0X

Editorial That Sells, and Proves It

A store publishes real articles and cannot say which article sold what. The usual setup puts the writing in one system and the selling in another, with a seam the customer can see and the analytics cannot cross.

  • The article is the merchandising

    A piece lists the products it features; a Shop the Look block renders them. No shortcodes in the prose.

  • Prices that are never stale

    The article caches hard; price and stock are fetched separately. Inventory moving invalidates nothing.

  • Attribution that survives ad blockers

    First-party throughout, with the join arriving on the order webhook. No third-party pixel to switch off.

  • A number you can defend

    The report prints its own coverage next to every revenue figure, and never blends a guess into a measurement.

Every vendor in this category quotes revenue; the useful question is how much of it they could actually see.

§ 06 / Use Cases

Eight Starting Points

  1. Editorial that sells, and proves which article sold it

  2. A marketing site with a blog, and nothing to pay for while it sits there

  3. A headless API behind an app someone else built

  4. Documentation people can actually search

  5. A small application with accounts, uploads and email

  6. Agency work, scaffolded the same way every time

  7. Getting off WordPress, with clear eyes about the trade

  8. A prototype you are allowed to throw away

Each is one command, and the installer skips every question that cannot change the answer.

§ 07 / Configuration

Configuration by Example

Each configuration file ships beside a sibling listing every option zenness supports, commented out with its default.

  • astro.config.mjs
  • astro.config.mjs.example
  • nitro.config.ts
  • nitro.config.ts.example

Changing a setting is uncommenting a line, not opening a documentation tab. The example file is never loaded — it is a learning tool bundled with your exact version.

§ 08 / Features

Features You Choose at the Start

None are on by default. Each is a set of ordinary files you own, rather than a dependency to configure.

  • rss

    A feed built from your content, linked from every page

  • seo

    Social preview tags and structured data, so a shared link does not look broken

  • search

    Site search built during the build. No service to run, no index to keep in sync

  • auth

    Register, log in, log out, and who-am-I — deliberately small and readable end to end

  • media

    Uploads stored once per file, with a record of where each asset is used

  • forms

    A validating endpoint that sends mail, with a trap for bots

§ 09 / Default Inclusions

Every Project Ships the Same Foundation

Astro
Pages and components for the site itselfsrc/pages/
Nitro
The API layer, and the server in productionserver/routes/
Vite
Instant updates while developing, optimised production builds
Partytown
Third-party scripts kept off the main thread, so analytics cannot slow the page
Zod
Validation, so bad input is refused at the edge rather than storedsrc/content.config.ts
Consola
One tagged logger, used in this page's frontmatter at build time and in its client script alikesrc/lib/logger.ts
ofetch
JSON in and out, and a thrown FetchError carrying the server's own parsed bodysrc/lib/api.ts
magic-regexp
Readable, type-safe patterns. This one validates the slug a dynamic route was handedsrc/lib/slug.ts

TypeScript works with no configuration, and the command-line tool supports multiple bundlers.

§ 010 / Architecture

One Origin

Nitro serves /api (backend/logic) and Astro renders this page you are on (web-frontend/visuals), and both come off one origin. In development Astro proxies /api to the Nitro dev server; in production Nitro serves Astro's built output directly. No CORS, one deployment, two parts at their best.

  1. Frontend

    Astro

    Pages, layouts and content, rendered ahead of time

  2. Backend

    Nitro

    The API, the database and anything that must run on a server

  3. Result

    One build

    One base to manage. One base to release data from.

API

src/lib/api.ts is an ofetch client pointed at /api on this origin, so the button below calls this project's ownserver/routes/api/hello.ts. Open the browser console first — the same Consola logger runs on both sides of the call.

Click the button to call the API.

§ 11 / Guarantees

What the Installer Will Not Do

  • Ask questions that are not relevant to your build

    Choose the backend alone and it won't asks about CSS frameworks.

  • Quietly downgrade what you asked for

    A request it cannot honour stops and says why, rather than scaffolding something else.

  • Accept a typo in silence

    A misspelled option is refused, with the spelling it thinks you meant.

Every answer is echoed before anything is written, and each thing it wires up is named as it happens — so an automated run reports exactly what an interactive one does.

§ 12 / The Whole Setup

One Command, Eleven Decisions

$ npm create zn

Or pnpm, yarn, bun.

  1. Project location

    Where to scaffold? Defaults to creating zensite folder to your current folder.

  2. Parts

    Frontend, backend, or both

  3. CSS framework

    Tailwind CSS, Bootstrap, shadcn/ui, Ant Design

  4. Processors

    Sass/SCSS, PostCSS, or neither

  5. UI components

    Bring your own components from React, Vue, Svelte, or none

  6. Development tools

    Prettier, Autoprefixer, Stylelint, Biome

  7. Deploy preset

    Vercel, Firebase, Cloudflare, Zephyr, manual

  8. Basic features

    Feed, SEO, search, accounts, media, forms

  9. Database

    None, SQLite or PostgreSQL

  10. Sitemap and site URL

    Generated, if you want them

§ 13 / The Setup Problem

The Cost of Starting

Before any product work begins, a new web project needs all of this decided and wired together — repeatedly, on every project, by hand.

  • A frontend and a backend that agree on one origin
  • Cross-origin rules, in development and again in production
  • A styling stack, a formatter, and a linter that do not fight
  • Logging, validation and an HTTP client, chosen and configured
  • A database, its migrations, and somewhere to run them
  • A hosting target, and a build that matches it

None of it is the thing anyone set out to build.

Every question the installer asks is a decision that is cheap now and expensive in six months.

A modern full-stack JavaScript framework

zenness

The one command, that starts your next project.

Astro pages and a Nitro API, on one origin.

  • Astro
  • Nitro
  • Vite
  • TypeScript