七种可切换主题共用同一套语义标记契约,通过 html 的 data-theme 属性切换
aether-themes — Astro 作品集模板
作者 robeshell
Aether 是一套以 AI 引导搭建、可整体替换 CSS 主题的个人站点主题工具包,提供七种主题与语义化标记契约,默认以 Astro 作为起步工作流。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
主题层为框架无关 CSS,可配合 Astro、Eleventy、纯 HTML 等静态站点工具使用
提供 AI 引导的搭建与更新提示词,以及仓库内可被发现的 Skill 入口
支持按配置生成导入包,只打包站点实际提供的主题
npm 包无运行时依赖,Persona 标题与 SVG 标记以原生 ESM 片段提供
cyber、terminal、wilds 主题的背景图通过可选 CSS 变量开启,默认不加载素材
模板详细介绍
Aether 由 robeshell 维护,采用 MIT 许可,是一个面向个人站点的主题工具包,而非完整的博客主题、站点生成器或 CMS。它由两层组成:一是与框架无关的 CSS 主题层,包含设计令牌、语义化标记契约和可选的原生 JS 片段;二是 AI 构建层,通过仓库内的 Skill 与提示词,向使用者询问站点名称、描述、作者、栏目、语言和主题等需求,再创建或更新可编辑模板并校验结果。主题层从 W.Site 中抽取而来,内置 minimal、magazine、terminal、cyber、island、wilds、persona 七种可切换主题,全部作用于同一套语义钩子,通过修改 html 根元素的 data-theme 属性即可切换视觉系统。
使用方式上,Aether 以 npm 包形式安装,先引入 foundation.css,再按需引入具体主题;也可通过 aether.config.mjs 配置所需主题并生成导入包,从而只打包站点实际提供的主题。包本身没有运行时依赖,不提供路由、内容模型或后台面板。默认的引导式起步工作流使用 Astro,但包本身不依赖 Astro 运行时,任何能加载全局 CSS、输出 HTML 并接入主题契约的框架或静态站点生成器都可集成;Eleventy 或纯 HTML 可直接接入 CSS,其他框架需要先按契约映射模板,已有的 CMS 或博客标记则不能直接套用,需要编写模板适配层或本地覆盖。
站点自身负责内容集合与 frontmatter、路由与页面结构、主题选择器的状态与持久化、站点文案与标签,以及素材许可与站点级覆盖。Persona 主题的逐字标题、分隔线 SVG 路径和列表箭头路径以原生 ESM 提供,可在非 Astro 环境中导入;cyber、terminal、wilds 主题通过可选的图片变量暴露背景图,默认值为 none,因此不额外提供素材也能正常使用。仓库不附带抓取或属于特定 IP 的图片素材。
适合你的项目吗?
适用场景
- 为个人站点搭建可切换多套视觉风格的作品集或博客页面
- 在 Astro 项目中按引导式工作流从零生成站点模板并接入主题
- 在 Eleventy 或纯 HTML 站点中直接引入 Aether 的 CSS 主题层
- 为已有站点增加主题选择器,并只打包需要提供的主题
- 借助 AI 代理按语义契约创建或更新站点模板并校验结果
适合人群
- 能直接编辑模板与样式的个人站点开发者
- 使用 Astro 并希望由 AI 代理协助搭建站点的使用者
- 需要同一套标记支持多套视觉主题的作品集或博客项目
- 愿意自行负责内容、路由、主题选择器与素材许可的站点维护者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
通过 npm install aether-themes 安装,先引入 foundation.css,再按需引入主题 CSS
- 2
使用 aether.config.mjs 配置 themes 与 defaultTheme,并用 npx aether-themes 生成导入包
- 3
AI 引导搭建时应在独立的网站目录中进行,不要将 Aether 主题仓库作为站点工作目录
- 4
站点需自行实现主题选择器 UI 与状态持久化,并在 data-theme 变化时调用 applyThemeEnhancements
- 5
cyber、terminal、wilds 的背景图变量默认为 none,仅添加自己拥有或有权分发的素材
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 默认的引导式起步工作流使用 Astro;若站点不使用 Astro,需要自行按主题契约映射模板。
- 已有的 CMS 或博客标记不能直接套用,必须编写模板适配层或本地覆盖。
- 不提供路由、内容模型、后台面板,也不为各博客平台提供现成模板,这些需站点自行实现。
- 站点需自行负责标记、内容、路由与交互逻辑。
- 主题选择器的界面与状态持久化需由站点自行实现。
- cyber、terminal、wilds 的可选背景图需自行提供,且只能添加自己拥有或有权分发的素材。
- 使用 AI 引导搭建时,不能把 Aether 主题仓库当作网站工作目录,需另建独立站点目录。
- 当工作目录为 Aether 主题仓库时,起步提示词会拒绝创建文件。
- 素材许可与站点级覆盖由使用方自行负责。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
The guided starter workflow uses Astro by default.
README 原文
Existing CMS or blog markup | Not drop-in; requires a template adapter or local overrides
README 原文
It does not provide routes, a content model, an admin panel, or ready-made templates for every blogging platform.
README 原文
The consuming site remains responsible for its markup, content, routes, and interactions.
README 原文
The site still owns the theme picker UI and persistence.
README 原文
Only add imagery that you own or have permission to redistribute.
README 原文
Do not open the Aether theme repository as the website's working directory
README 原文
It refuses to create files when the current workspace is the Aether theme repository.
README 原文
https://github.com/robeshell/aether-themes/blob/main/LICENSEhttps://github.com/robeshell/aether-themes/blob/main/README.mdasset licensing and site-specific overrides.
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-13。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 85 / 100
- 技术栈
- Astro · Eleventy
- 网站类型
- 作品集 · 博客
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-08-28
- 截图检查日期
- 2026-10-13
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: [email protected] · 2026-10-13
查看当时使用的来源资料
SHA-256: b55944904628652956533383fc4af921d148e5028fcf1ae98e61210dad32ba6a
2026-10-13T00:57:48.654Z
来源文件 / 仓库# Aether
[English](./README.md) · [简体中文](./README.zh-CN.md) · [日本語](./README.ja.md)
[](https://www.npmjs.com/package/aether-themes)
[](https://www.npmjs.com/package/aether-themes)
[](https://github.com/robeshell/aether-themes/actions/workflows/check.yml)
[](./LICENSE)
**An AI-first, template-driven theme kit for customizable personal sites.**
Aether combines a swappable CSS theme layer with AI-guided setup and maintenance workflows. It helps an agent create or update editable site templates without coupling the visual system to one person's content, routes, or framework. The theme layer was extracted from [W.Site](https://robeshell.github.io/).
[Browse the demo site](https://robeshell.github.io/) · [Read the AI starter prompt](./STARTER_PROMPT.md) · [View the npm package](https://www.npmjs.com/package/aether-themes)
## What Aether is (and is not)
Aether is an AI-first, template-driven theme kit, not a complete blog theme, site generator, or CMS. It combines two layers:
1. **Theme layer** — framework-agnostic CSS, optional vanilla JS snippets, design tokens, and a semantic markup contract.
2. **AI builder layer** — prompts and a Skill that ask for the site's requirements, create or update editable templates, configure themes, and validate the result.
It does not provide routes, a content model, an admin panel, or ready-made templates for every blogging platform. The generated site remains a normal project that can run without an AI service at runtime.
Aether is intended for sites whose templates can be edited by an AI agent or a developer. It is not a universal adapter that can restyle arbitrary hosted-blog markup without template access.
The guided starter workflow uses Astro by default. The package itself has no Astro runtime dependency and can be integrated with any framework or static-site generator that can load global CSS, emit HTML, and add the semantic hooks documented in [`THEME_CONTRACT.md`](./THEME_CONTRACT.md).
| Environment | Integration level |
| --- | --- |
| Astro | First-class starter and template workflow |
| Eleventy or plain HTML | Direct CSS integration |
| Other HTML-producing frameworks or static-site generators | Compatible after mapping templates to the contract |
| Existing CMS or blog markup | Not drop-in; requires a template adapter or local overrides |
In other words, Aether is portable, but it is not universally plug-and-play. The consuming site remains responsible for its markup, content, routes, and interactions.
## Why Aether
- **Seven swappable themes** using one semantic markup contract.
- **Selective loading** so a site only ships the themes it offers.
- **Framework-agnostic CSS** that works with Astro, Eleventy, plain HTML, and other static-site tools.
- **AI-first setup and maintenance** through a repository-discoverable Skill and copy-and-paste prompts.
- **No npm runtime dependencies.** Optional vanilla JS snippets cover Persona titles and shared SVG markup. No bundled franchise artwork or scraped assets.
## Themes
| Theme | Direction |
| --- | --- |
| `minimal` | Quiet whitespace and editorial order |
| `magazine` | Paper, columns, and print rhythm |
| `terminal` | Phosphor green, grids, and command-line cues |
| `cyber` | Hazard yellow, cyan diagnostics, and hard panels |
| `island` | Bright island life and soft rounded surfaces |
| `wilds` | Earth tones, ruins, and wide landscape space |
| `persona` | Red-black cut-paper poster composition |
All themes style the same semantic hooks. Change the root attribute to switch the visual system:
```html
<html data-theme="persona">
```
## Quick start
Install the package in your site:
```sh
npm install aether-themes
```
Import the foundation first, then the themes you want:
```css
@import 'aether-themes/foundation.css';
@import 'aether-themes/themes/minimal.css';
@import 'aether-themes/themes/persona.css';
```
If your site offers every built-in theme, use the convenience bundle:
```css
@import 'aether-themes/all.css';
```
The package only provides the visual layer. Your site owns the HTML, content, routes, theme picker, and interaction logic.
## Load only the themes you need
Copy [`aether.config.example.mjs`](./aether.config.example.mjs) to your site as `aether.config.mjs`, then remove themes you do not want:
```js
export default {
themes: ['minimal', 'persona'],
defaultTheme: 'minimal',
};
```
Generate an import bundle for that configuration:
```sh
npx aether-themes \
--config aether.config.mjs \
--output src/styles/aether-themes.css
```
The generator validates theme names, duplicate entries, and `defaultTheme`. Use the same `themes` array for your theme picker so disabled themes are not offered in the UI. Keep labels and descriptions in the consuming site so Aether stays content-agnostic.
## Build a site with an AI agent
For a guided, from-scratch setup, open an empty directory that will become your website and give the AI agent this repository as a reference. Do not open the Aether theme repository as the website's working directory: Aether is the dependency and visual layer, while your website owns its files, content, routes, and configuration.
The agent's job is to create or modify the site's editable templates so they use Aether's semantic hooks. Aether does not infer arbitrary markup or rewrite a locked-down hosted blog automatically.
The root [`AGENTS.md`](./AGENTS.md) and [`skills/aether-blog/SKILL.md`](./skills/aether-blog/SKILL.md) make the setup entry point discoverable in agents that support repository conventions.
If you are new to terminal-based development, copy [`STARTER_PROMPT.md`](./STARTER_PROMPT.md). It asks a short setup questionnaire about the site name, description, author, sections, language, and themes, then creates the formal website directly in the current workspace after you confirm the plan. It refuses to create files when the current workspace is the Aether theme repository.
The shortest handoff message is:
```text
Read https://github.com/robeshell/aether-themes/blob/main/STARTER_PROMPT.md. Ask me the setup questions first, wait for my confirmation, then create and start the formal website directly in the current workspace. Do not create `aether-ai-smoke-test` or any other test directory. If the current workspace is the `aether-themes` repository, stop and ask me to switch to a separate website directory.
```
If you are maintaining the Aether package itself, use [`SMOKE_TEST_PROMPT.md`](./SMOKE_TEST_PROMPT.md). It creates an isolated `aether-ai-smoke-test/site` inside the repository for package and generator checks; it is not a user-site setup workflow.
If you already have an Aether site, use [`UPDATE_PROMPT.md`](./UPDATE_PROMPT.md). It gives the agent a one-line update command plus a cautious full workflow that preserves content, configuration, local snapshots, and uncommitted work before rebuilding and checking the site.
## Markup contract
Aether styles semantic hooks rather than page-specific routes. Read [`THEME_CONTRACT.md`](./THEME_CONTRACT.md) for the required hooks, rich-content hooks, and optional runtime snippets.
The consuming site owns:
- content collections and frontmatter;
- routes and page structure;
- theme-picker state and persistence;
- site copy and labels;
- asset licensing and site-specific overrides.
Persona per-character titles, divider SVG paths, and list-arrow paths live in vanilla ESM so any site can import them without an Astro component:
```js
import { applyThemeEnhancements } from 'aether-themes/scripts/persona-titles.js';
import { createDivider, ENTRY_ARROW_PATH } from 'aether-themes/scripts/markup.js';
applyThemeEnhancements(document.documentElement.dataset.theme);
```
Call `applyThemeEnhancements` whenever `html[data-theme]` changes. The site still owns the theme picker UI and persistence.
## Optional imagery
Aether does not ship scraped or franchise-owned imagery. The `cyber`, `terminal`, and `wilds` themes expose optional image variables instead:
```css
:root[data-theme="cyber"] {
--aether-cyber-dots-image: url('/assets/cyber/dots-yellow.png');
}
:root[data-theme="terminal"] {
--aether-terminal-rain-image: url('/assets/terminal/matrix-rain.svg');
}
:root[data-theme="wilds"] {
--aether-wilds-header-image: url('/images/wilds-header.png');
}
```
These variables default to `none`, so the themes work without extra assets. Only add imagery that you own or have permission to redistribute.
## Development
The package has no runtime dependency. Review the publish contents locally with:
```sh
npm pack --dry-run
```
The same check runs in [GitHub Actions](https://github.com/robeshell/aether-themes/actions/workflows/check.yml) for every push and pull request.
## Contributing
Changes should target the semantic hooks in [`THEME_CONTRACT.md`](./THEME_CONTRACT.md), keep the foundation content-agnostic, and preserve the consuming site's ability to opt into only the themes it needs. Before opening a pull request, run `npm pack --dry-run` and check the generated package contents.
For release steps, see [`PUBLISHING.md`](./PUBLISHING.md). Every published change needs a version bump.
## License
MIT. See [`LICENSE`](./LICENSE).
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

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

astro-paper
基于 Astro 的博客主题,使用 Markdown/MDX 内容、Tailwind 样式和 Pagefind 搜索。搜索属于博客功能,不代表独立工具站产品。
Astro · 博客

fuwari
✨A static blog template built with Astro.
Astro · 博客

Firefly
Firefly 是一款基于 Astro 的静态博客主题,由 CuteLeaf 在 saicaca 的 Fuwari 模板基础上二次开发,主打清新美观的视觉风格。
Astro · 博客

astro-theme-cactus
面向博客与笔记发布的 Astro 启动模板,支持 Markdown/MDX 内容、Tailwind 样式与 Pagefind 搜索,主要用途是发布文章和笔记。
Astro · 博客

astrofy
Astrofy is a free and open-source template for your Personal Portfolio Website built with Astro and TailwindCS…
Astro · 作品集
