# Build Modes

sitemd has two modes: **trial (unactivated)** for free localhost development and **activated** for deployable builds. Trial gives you the full experience to evaluate the product. Activated requires a paid account and produces clean, standalone HTML output.

## Trial (unactivated)

Trial mode is active when the site has not been activated. It's the default for new projects.

**What you get:**
- All features work on `localhost:4747` — pages, themes, cards, embeds, images, forms, analytics, auth, data, gating, SEO
- Live build sync with hot reload
- Dev panel for in-browser editing
- MCP server integration

**What's different from activated:**
- Output is memory-only — no `site/` directory written to disk
- A "SITEMD TRIAL (UNACTIVATED)" banner appears on every page
- The sitemd badge is always visible in the footer
- `sitemd build` and `sitemd deploy` are not available

No authentication required. You don't need a sitemd account to use trial mode.

## Activated

A site is activated after running [site activation](/docs/how-to-activate-site). Activation permanently locks your site's identity fingerprint and consumes one site slot on your account.

This requires a paid sitemd account. Run `sitemd auth login` to authenticate. Every build and deploy calls the sitemd API to verify your site identity — network access is required.

**What you get:**
- Clean HTML output to `site/` directory — host anywhere
- No dev banner. Badge shown by default but [can be hidden](/docs/built-with-badge#hiding-the-badge)
- Full SEO output: sitemap.xml, robots.txt, llms.txt, OG image files, favicons
- Image optimization with WebP generation, media hosting via CDN, card auto-images
- Deploy with `sitemd deploy` to Cloudflare Pages, Netlify, Vercel, or GitHub Pages

## All features work in both modes

Every feature works identically in trial and activated. The dev server renders everything — there are no placeholder cards or degraded features during local development.

| Feature | What it includes |
|---------|-----------------|
| **SEO** | OG tags, canonical URLs, Twitter cards, JSON-LD structured data |
| **OG image generation** | Satori/Sharp rendering of per-page open graph images |
| **Forms** | Webhook submission, field types, multi-page forms, conditional logic, honeypot anti-spam |
| **Analytics** | Google Analytics, Plausible, Fathom, Umami, Simple Analytics, PostHog, Matomo, GTM, ad pixels |
| **User auth** | 5 provider adapters: custom API, Supabase, Firebase, Clerk, Auth0 |
| **Dynamic data** | 4 provider adapters: Supabase, Firebase, Airtable, REST API |
| **User-type gating** | Role-based access control for pages and inline sections |
| **Image optimization** | Build-time resize, compression, WebP generation, `<picture>` tag injection |
| **Media hosting** | R2/S3 CDN sync at build time, HTML `/media/` URL rewriting to CDN prefix |
| **Card auto-images** | Auto-generated gradient/illustrated card images |
| **Deploy** | Cloudflare Pages, Netlify, Vercel, GitHub Pages upload integrations |
| **Badge removal** | Option to hide the "built with sitemd.cc" footer badge (shown by default, even when activated) |
| **Email templates** | Transactional email compilation |

## Activated-only outputs

These files are only written to disk during activated builds (`sitemd build` or `sitemd deploy`):

- `sitemap.xml`
- `robots.txt`
- `llms.txt` and `llms-full.txt`
- RSS feed XML files
- Compiled email templates (`_emails.json`)
- Search index (`search-index.json`)
- `500.html` error page

The features that generate these outputs (SEO, feeds, email) still render in the dev server — they just don't produce standalone files until you activate.

## Site slots

Site slots control how many sites you can activate. See [Deploy](/docs/deploy#site-slots) for the full breakdown.

**Quick summary:**
- Each activated site = **1 site slot**
- Activations are permanent — no deactivation, no slot reassignment
- Exceeding your slot limit falls back to trial mode — you can keep working locally

## How modules work

All feature code is bundled with the sitemd binary — nothing is fetched from the API at build time. The binary contains the full engine: form builder, data connectors, SEO generator, analytics injection, auth runtime, deploy targets, and image processing.

## CI environments

For non-interactive builds in CI, set `SITEMD_TOKEN` as an environment variable:

```bash
export SITEMD_TOKEN=sk_abc123...
sitemd deploy
```

Generate an API key with `sitemd auth api-key`. See [CLI Config](/docs/cli-config#ci--environment-variables) for the full list of environment variables.

## Graceful fallback

If a build can't proceed (no auth, no slots, or API unreachable), it **falls back to trial mode** instead of failing. You'll see a message like:

```text
No available site slots — building in trial mode (unactivated).
Purchase additional sites at https://sitemd.cc/add-ons
```

You can keep working locally. Buying more slots or authenticating unlocks activated output.