Model or dataset
arthelokyo/astrowind avatar
arthelokyo/astrowind

AstroWind: an Astro 7 and Tailwind CSS 4 starter theme for static sites

⭕️ AstroWind: A free template using Astro v7 and Tailwind CSS v4. Astro starter theme.

6,006 stars1,683 forksAstroMIT

At a glance

What is it?
AstroWind is a free MIT-licensed Astro template with 30+ typed page-section widgets, an MDX blog with RSS, and shadcn/ui-style design tokens. It suits teams that want a static marketing site plus blog without writing layout code, and it is the wrong choice if you need server-rendered dynamic pages.
Who is it for?
Adopt AstroWind if you are building a static marketing site or blog and want widgets, MDX, RSS and sitemap generation already wired up. Do not adopt it if your pages need server rendering, since the README states the template uses output: 'static' and the blog only works with prerender = true.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 18 days ago.
What is it written in?
Mainly Astro, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What AstroWind solves, and who it is actually for

AstroWind is a starter theme, not a framework. The README describes it as a free and open-source template for making a website with Astro v7 and Tailwind CSS v4, and the repository is tagged as an Astro starter theme, blog and landing-page template. The problem it removes is the first two weeks of a static site: layout, navigation, SEO tags, an RSS feed, a sitemap, image handling and a set of section components that a marketing page needs.

The intended user is a developer who already knows Astro or is willing to learn it, and who wants to spend time on content rather than on a design system. The README states that very little vanilla JavaScript is used, only for basic functionality, so that each developer decides which framework (React, Vue, Svelte, Solid JS) to add. That is a deliberate constraint: AstroWind ships no UI framework, so you are not inheriting a React runtime you did not ask for.

It is a weaker fit for anyone who wants a CMS-driven site out of the box. Content lives as Markdown and MDX files under src/data/post/, and the README's own structure listing shows post-slug-1.md and post-slug-2.mdx as the starting points. There is no admin interface in the README.

How the template is put together: routes, widgets and content collections

The architecture is plain Astro. The README states that Astro looks for .astro or .md files in src/pages/ and exposes each page as a route based on its file name. The blog is a catch-all route tree: src/pages/[...blog]/ contains [category]/, [tag]/, [...page].astro and index.astro, which is how pagination, category listing and tag listing are produced without separate hand-written pages.

Layout is split across src/layouts/Layout.astro, MarkdownLayout.astro and PageLayout.astro. Reusable sections sit in src/components/widgets/, with Header.astro named as one example, and the README puts the count at 30+ page-section widgets: heroes, features, bento, tabs, pricing with a comparison table, FAQ accordion, testimonials, team, timeline, gallery, projects, countdown and newsletter. The README says these are typed and composable, which matters because a widget with a typed props interface is something you can refactor without reading its internals.

Styling runs through src/assets/styles/tailwind.css and shadcn.css. The README states the design tokens are shadcn/ui-compatible (bg-background, text-foreground, border-border) and derived from the theme variables, with dark mode and RTL supported. Site-wide settings live in src/config.yaml, and navigation is defined in src/navigation.ts. Images are handled by Astro Assets plus Unpic, which the README describes as a universal image CDN layer.

One detail in the README is easy to miss and worth repeating: the template currently uses output: 'static', but the blog only works with prerender = true. If you change the output mode without touching the blog routes, you are on your own.

Installing AstroWind and getting a first page running

The README gives a single-command install through the Astro CLI. Run it from the directory where you want the project created; the CLI scaffolds the template and then asks its usual setup questions.

bash
npm create astro@latest -- --template arthelokyo/astrowind

After scaffolding, install dependencies and start the dev server. The README lists npm install as the dependency step and npm run dev as the local dev server, which it says runs at localhost:4321.

bash
npm install
npm run dev

You should see the Astro dev server report a local URL on port 4321. The README notes the project requires Node.js >= 22.22.3 and points at .nvmrc, so check your Node version before blaming the template if install fails.

The first real edit is configuration, not code. The README names ./src/config.yaml as the basic configuration file and shows the site block with name, site and base keys. Replace those values before you deploy, because they feed the canonical URL and sitemap generation.

yaml
site:
  name: 'Example'
  site: 'https://example.com'
  base: '/'

Commands beyond dev are listed in the README: npm run build writes the production site to ./dist/, npm run preview serves that build locally, npm run check runs the Astro, ESLint and Prettier checks, and npm run fix applies ESLint and Prettier fixes. If you would rather not build the image yourself, the repository also ships a Dockerfile and a docker-compose.yml that maps port 8080 to 8080 and serves the built dist/ through nginx.

Where AstroWind gets in the way

The static output constraint is the first real limitation, and the README states it plainly rather than hiding it. A site that needs per-request rendering, authenticated dashboards or API routes at runtime does not fit this template without rework, because the blog depends on prerender = true. Astro itself supports those modes, but AstroWind is configured for static output.

Version churn is the second. The releases shown for the repository are all v1.0.0 betas: v1.0.0-beta.65 on 2026-09-05, v1.0.0-beta.60 and v1.0.0-beta.52 on 2026-05-11. The package.json version is 1.0.0-beta.66. A template that has not cut a stable 1.0.0 is telling you the API surface of its own config and widgets is still moving. If you fork it and heavily customize src/config.yaml and the widgets, expect to spend time on merges when you pull upstream changes. The README does not document a migration or upgrade path between beta versions.

Third, the widget count is a starting inventory, not a guarantee of fit. Thirty-plus sections means selection work: you will delete more than you keep. And because the template deliberately ships almost no JavaScript, anything interactive beyond what the widgets provide (a search box, a filtering gallery, a form with client-side validation) is code you write and a framework you choose.

Finally, the README does not document rollback, a changelog, or a support channel beyond the contributing section. If you need a vendor to call, this is not that.

AstroWind compared with AstroPaper and Astroship

The two names that come up alongside AstroWind are AstroPaper and Astroship, and the difference is scope rather than quality. AstroPaper is a blog theme: its centre of gravity is posts, tags and reading experience. AstroWind is a marketing-site template that also carries a blog. If your project is a personal blog and nothing else, AstroWind hands you a large widget library and a landing-page structure you will strip out, while a blog-first theme starts closer to the finish line.

Astroship sits in the same landing-page-plus-blog territory, which makes the comparison about the styling layer and the component model rather than the feature list. AstroWind's distinguishing choice, per the README, is Tailwind CSS v4 with shadcn/ui-compatible design tokens (bg-background, text-foreground, border-border) derived from theme variables, plus dark mode and RTL. If your team already writes shadcn-style class names, that token vocabulary transfers; if you use a different design system, it is a layer you either adopt or replace.

A fourth option is to skip templates entirely and start from a bare Astro project, adding @astrojs/rss, @astrojs/sitemap and Tailwind yourself. That is more work up front and less code you did not write. AstroWind's value proposition is precisely that it has already made those integration choices for you, including the less obvious ones such as Unpic for image CDN handling and Partytown among the dev dependencies.

Maintenance, upgrades and what the MIT licence means here

The repository is not archived, and the last push was on 2026-09-12, which is recent enough that the project is being worked on. The release history shows a gap between May and September 2026, with beta.52 and beta.60 both landing on 2026-05-11 and beta.65 arriving on 2026-09-05. Cadence is irregular, so pinning a version and upgrading deliberately is more sensible than tracking main.

Upgrade cost concentrates in three places: src/config.yaml, the widgets under src/components/widgets/, and the Tailwind and shadcn token files under src/assets/styles/. Anything you have edited in those files is merge surface. The README does not describe a codemod or an upgrade guide, so the practical approach is to keep your content in src/data/post/ and your changes in as few files as possible.

On licensing: the repository ships an MIT licence, which is permissive and generally allows commercial use, modification and redistribution provided the copyright notice and permission notice are retained. This is a description of the licence text, not legal advice, and the README points to LICENSE.md as the authoritative file. Note that MIT covers the template code; the fonts, icons and any images you add carry their own terms, and the README does not enumerate those.

Editorial conclusion

Adopt AstroWind if you are building a static marketing site or blog and want widgets, MDX, RSS and sitemap generation already wired up. Do not adopt it if your pages need server rendering, since the README states the template uses output: 'static' and the blog only works with prerender = true. Before committing, run npm install and npm run check against the current beta tag, confirm Node.js >= 22.22.3 on your build machine, and open src/config.yaml to see which site fields you must replace.

Frequently asked questions

Is AstroWind free to use?

Yes. The repository is licensed under MIT, and the README describes AstroWind as a free and open-source template. The MIT terms generally permit commercial use and modification as long as the copyright and permission notices are kept.

What is the AstroWind alternative if I only need a blog?

AstroPaper is the closest comparison in the related searches, and the difference is scope: AstroPaper is a blog theme, while AstroWind is a marketing-site template that also includes a blog with MDX, categories, tags and RSS. If you do not need landing-page widgets, a blog-first theme starts closer to what you want.

Does AstroWind work with Astro and Tailwind CSS?

Yes. The README states the template is built with Astro v7 and Tailwind CSS v4, and package.json lists astro ^7.3.1 and @tailwindcss/vite ^4.3.3 among the dependencies. It also supports dark mode and RTL through the Tailwind layer.

Official sources

  1. arthelokyo/astrowind on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/arthelokyo-astrowind.svg)](https://hysenlabs.com/projects/arthelokyo-astrowind)