This is a TinaCMS starter project.
Edit your site visually in the browser, ship it as fast static HTML.
Create the project:
pnpm dlx create-tina-app@latest --template tina-astro-starterInstall dependencies:
Note
Which package manager is best for Node.js? The right one makes a real difference to your workflow. We recommend pnpm for its speed and efficient dependency handling — this SSW rule explains why.
pnpm installStart the dev server, then edit visually at localhost:4321/admin/:
pnpm devFigure: Homepage UI
- Visual editing via
@tinacms/astro— a vanilla-JS bridge, with no React in the page tree - Tailwind CSS v4 block builder: Hero, CTA, Features, Stats, Testimonial, Callout, Content, Split, and Video
- Light/dark theme toggle with a Tina-ember space theme
- Markdown and MDX with
<TinaMarkdown>rich-text rendering - Collections for Pages, Blog, and global Config
- Astro view transitions, SEO meta, OpenGraph, sitemap, and RSS
- Icons via
astro-iconand the Tabler set
The starter is host-neutral — it isn't tied to any one platform. Every content page is prerendered to static HTML; the only on-demand route is the /tina-island endpoint that powers live visual editing.
astro.config.mjs picks the right adapter automatically from the platform's build environment — Vercel, Cloudflare (Pages or Workers) and Netlify are detected and configured with no changes, and anywhere else falls back to a portable Node server you can run with node ./dist/server/entry.mjs. The bundled wrangler.jsonc targets Cloudflare Workers and enables nodejs_compat, which the editing route's node:async_hooks needs.
Set SITE_URL to your production URL — it feeds the sitemap, RSS, and OpenGraph tags; see .env.example. Most platforms inject their own deploy URL as a fallback, but Cloudflare Workers exposes none, so set SITE_URL there to avoid localhost canonicals.
react and react-dom@^18.3.1 are pinned in devDependencies for the TinaCMS admin UI build only — the site itself ships zero React. Without the pin, pnpm resolves react@19 against react-dom@18 and the admin crashes on init. This is tracked in tinacms#6985; remove the pin once that lands.
Read the TinaCMS documentation and the Astro documentation, or come and say hello in the TinaCMS Discord server. "# Test"
