An Astro monorepo,
already set up
A starter with a landing page and a blog on Astro 7, Tailwind v4 and Svelte 5. Linting, E2E tests, build audit, CSP and deployment to Cloudflare Workers are configured. MIT-licensed.
The setup every project otherwise repeats.
Astro ships static HTML and loads JavaScript only for islands you add explicitly. The template adds the toolchain that otherwise gets rebuilt in every project: linting and formatting, tests, audits, security headers, multiple languages and deployment. A new app is a folder under apps/ that shares tokens and components from shared/.
- 01Two apps —
starterwith a landing page and contact form,blogwith MDX and RSS - 02Shared base — tokens, components, layouts and utilities in
shared/ - 03Central versions — one pnpm catalog for every app
- 04Tracks Astro 7 — the template is updated with Astro 7 releases
Clone, install, run.
- 1Clone
Get the repository
Requires Node.js 22.12.0 or later and pnpm 11 or later.
git clone https://github.com/casoon/astro-v7-template.git - 2Install
Fetch dependencies
One install for all apps; versions come from the catalog.
pnpm install - 3Develop
Start the dev server
Starter on port 4321, blog on port 4322.
pnpm dev · pnpm dev:blog - 4Deploy
Ship to Cloudflare
Builds the app and runs
wrangler deploy.pnpm deploy:starter
Configured, not just installed.
Tailwind v4
CSS-first configuration through the Vite plugin, OKLCH colours, dark mode from the system setting plus a toggle.
Svelte 5 runes
Reactive islands with $state and $derived. Pages without an island ship no framework JavaScript.
i18n (en/de)
Astro i18n routing: English without a prefix, German under /de/, hreflang in the sitemap.
Security
Astro’s built-in Content Security Policy with SHA-256 hashes, plus checkOrigin against CSRF.
Astro Actions
A contact form with server-side handling and Zod validation.
OG images
Generated at build time with Satori and resvg, per page and language.
Playwright + axe-core
15 spec files across both apps: navigation, SEO, i18n, form, theme and accessibility scans.
Code analysis
fallow finds unused files, exports and dependencies, complexity hotspots and duplication.
Blog app
MDX with content collections, a table of contents with scrollspy, a reading progress bar and an RSS feed at /rss.xml.
What Astro 7 changes in the template.
| Criterion | Astro 7 | Astro 6 |
|---|---|---|
| Bundler | Vite 8 + Rolldown | Vite 7 + Rollup |
| .astro compiler | Rust, rejects unclosed tags | Go |
| Markdown | Sätteri, GFM and heading IDs built in | remark/rehype with plugins |
| compressHTML (default) | 'jsx' | true |
| @astrojs/cloudflare | v14, workerd in every stage | v13 |
| src/fetch.ts | reserved for advanced routing | free to use |
As of September 2026, according to the template’s README. With compressHTML: 'jsx', whitespace between inline elements can disappear – add {" "} where needed.
One workspace, clearly split.
astro-v7-template/
├── apps/
│ ├── starter/ # landing page, contact form, i18n
│ └── blog/ # MDX blog, RSS, i18n
├── shared/ # tokens, components, layouts, SEO
├── integrations/ # custom integrations
├── e2e/
│ ├── starter/ # Playwright tests
│ └── blog/
├── .github/workflows/ # CI pipeline
├── biome.json
├── playwright.config.ts
└── pnpm-workspace.yaml # workspace + catalog# pnpm-workspace.yaml
catalog:
astro: ^7.3.2
"@astrojs/cloudflare": ^14.3.1
"@astrojs/svelte": ^9.0.1
tailwindcss: ^4.3.3
svelte: ^5.57.0
typescript: ^6.0.3
zod: ^4.5.4
"@biomejs/biome": ^2.5.12
"@casoon/astro-post-audit": ^0.6.0
"@casoon/astro-structured-data": ^2.0.1Six CASOON packages, already wired up.
Build audit
Checks SEO, links, HTML and accessibility rules after every build. Only real errors fail the build.
@casoon/astro-site-filesSite files
Generates robots.txt, sitemap.xml with hreflang, llms.txt, security.txt and humans.txt.
JSON-LD
Typed schema components; with generateMeta they also produce Open Graph and Twitter tags.
Build metrics
Measures build time per integration, Vite plugin and page.
@casoon/astro-webvitalsWeb Vitals
Measures LCP, CLS and INP in the browser. In production, 10 % of sessions report to a typed endpoint.
@casoon/nosecretsSecret scanning
A pre-commit hook and a workspace scan that keep API keys and tokens out of the repository.
Worth knowing up front.
A template makes decisions for you. These ones are deliberate.
Cloudflare by default
Other platforms need three changes per app: swap the adapter, enable Sharp as the image service, delete wrangler.toml.
TypeScript stays on 6
astro check relies on an API that TypeScript 7 does not expose yet, so the version is pinned to ^6.0.3.
Web Vitals without storage
The endpoint validates the metrics and answers with 204. Where the data goes is up to your project.
English as the default locale
English lives at the root without a prefix, German under /de/. Adjust the i18n config if you need it the other way round.
- Marketing websites
- Blogs and content sites
- Landing pages
- Agency starters
- Multi-app monorepos
- Cloudflare projects
Frequently asked questions.
Why a monorepo instead of a single project?
Several apps – say a website, a blog and landing pages – share design tokens, components and tooling while staying individually deployable. A new app is a folder under apps/ that imports from shared/.
Do I have to use Cloudflare?
No. The template is preconfigured for Cloudflare Workers. For Node.js, Vercel or Netlify you swap the adapter, enable Sharp as the image service and remove wrangler.toml.
What changes with Astro 7?
Vite 8 with Rolldown as the bundler, a Rust compiler for .astro files that rejects unclosed HTML tags, and Sätteri as the markdown processor with GFM built in. compressHTML is set to jsx, so whitespace between inline elements can disappear.
How does my project stay up to date?
The template is a starting point, not a package: once cloned, the code belongs to your project. Versions live centrally in the pnpm catalog, and a Renovate configuration is included.
Is the template prepared for coding agents?
Yes. CLAUDE.md holds the project rules, .claude/mcp.json an MCP configuration, and the .ai/ folder prompts and knowledge files. Astro 7 also adds astro dev --background for agents and CI.
Which licence applies?
MIT. You may use it commercially, modify it and redistribute it.
Start with a ready-made toolchain.
Astro 7, Tailwind v4, Svelte 5, tests and audits – MIT-licensed and ready for Cloudflare Workers.