# Free vs Pro

> The MIT free edition and the paid starter, what separates them, and how the free edition is derived from the same source by deleting files rather than by forking.

You are reading one page of the ZeroDirs documentation. ZeroDirs is a paid Astro + Cloudflare Workers starter for directory sites: every page is rendered to static HTML at build time, the site ships no client JavaScript outside `/search/`, and one file — `site.config.ts` — carries roughly 80% of the customisation.

Two things to hold on to before you act on anything below:

- `site.config.ts` is validated by a zod schema with ten cross-field rules. After any edit to it, run `pnpm check:config`; every problem is reported as `site.config.ts › <path>: <message>` and the whole file is checked at once.
- The repository ships its own `AGENTS.md` with twenty hard rules, and a machine-checked test suite behind them. If you are working inside a ZeroDirs project, read that file first — it overrides anything general you infer from this page.

Source: https://zerodirs.com/docs/about/free-vs-pro/

---

There are two editions and one codebase. The free edition is **MIT-licensed** and is produced from
the paid starter by a script that deletes files — not by a fork, and not by stripping marked
regions out of shipped source.

The line between them, in one sentence: **free is the presentation layer, paid is the
monetisation layer.** Free builds a real, good static directory. Paid turns that directory into a
business that takes submissions, charges for them, and publishes itself.

## The split

| | Free (MIT) | Paid |
| --- | --- | --- |
| Data source | Markdown files | Markdown **or** D1, with the whole submit → pay → approve → publish loop |
| Pages | listings, detail, categories, tags, search, blog | same |
| SEO | meta templates, chunked sitemap, RSS, static OG image, file-budget check | **plus** programmatic SEO, the internal-link engine, generated OG images, the build-time SEO report |
| Monetisation | none | paid submission plans, featured placements, click tracking, the review-queue wait estimate with an upgrade offer |
| Ads | the four placements and the `/advertise/` page | same |
| Submitters | none — there is no form | the two-step form, sign-in by emailed link or Google, an `/account/` page listing their submissions |
| Admin | none — it does not even deploy a Worker | review queue, transactional email, a daily digest, a config-gap checklist |
| Themes | 1 preset | 3 presets |
| Tooling | a basic `AGENTS.md` | the CLI, the agent skills, this documentation site, lifetime updates |
| Newsletter | third-party embed slot | self-hosted D1 signup |

The two strongest reasons to pay are on the paid side of that line and nowhere else: taking paid
submissions, and capturing long-tail search traffic with generated pages. The free edition is not
crippled to make a point — it is genuinely useful, and its job is to be good enough that the code
quality speaks for itself.

## How the free edition is derived

This matters more than it looks, because it is what stops the two editions from drifting apart.

There are **no `@pro-start` / `@pro-end` markers** anywhere in the source, and none may be added.
The free edition is produced by deleting whole files, listed in one manifest, with three
facade modules — the listings loader, the feature registry and the integration list — each having
a `.free` twin that replaces it wholesale.

Every entry in that manifest **asserts**. A delete path that matched nothing, a find-and-replace
that matched nothing, a config field that was not there: all fatal. When the paid source moves
underneath the derivation, it fails loudly rather than shipping a paid file inside the MIT tree or
leaving an import pointing at a directory it just removed.

## The assets-only claim, measured

The free edition deletes every route with `prerender = false`, the whole server layer, the Worker
entry point and the database. What is left is files. `wrangler deploy --dry-run` is the proof:

| | Free edition | Paid starter |
| --- | --- | --- |
| Worker script uploaded | **none** | yes |
| Upload size | 0.34 KiB | 2,074 KiB |
| Bindings | none | three |

Zero bytes of Worker script means there is nothing to invoke, nothing to cold-start and nothing
that can consume the request quota. It also means there is no submissions endpoint, which is the
trade.

The free tree runs 524 of the paid tree's tests — the suites whose subject was deleted go with it.

## Which one to start from

Start free if you want to read the code before paying for it, or if a static directory from
Markdown is genuinely all you need. `create-zerodirs` gives you the free edition by default and
the paid one with `--pro`.

Moving from free to paid later is not a migration you have to plan for. Your content, your
`site.config.ts` and your `public/` directory are the same in both, and those are the three things
that are actually yours.

## Licences

The free edition is MIT: do what you like, including commercially.

The paid starter is licensed per buyer — a perpetual licence to build unlimited sites for yourself
or for clients. Reselling or redistributing the starter itself is not permitted. The demo content
is separate again: the sample listings describe real products and are not licensed to you as
editorial.
