(开源)VeryGood
约 2566 字大约 9 分钟
2026-09-10
VeryGood 是一个为 GitHub Pages 定制定制的开源博客主题。写作发生在 GitHub Issue 里,标签即状态机,关闭 Issue 即下线文章——你只需要专注内容,剩余的交换自动化。
VeryGood · 莫兰迪粉博客开源主题
使用Issue写博客,让GitHub Actions帮你发布。粉色·极简·顶级SEO·超高可玩性。
VeryGood 是一个为 GitHub Pages 定制定制的开源博客主题。写作发生在 GitHub Issue 里——标签即状态机,关闭 Issue 即下线文章。你只管写,剩余的迁移自动化。
当前版本:v1.6.1 — 侧壁栏杆固定不动、彻底移除滑动功能、静态资源版本迭代v=7。
特性一览
| 维度 | 能力 |
|---|---|
| 🌟颜值 | 低玫瑰灰结局(莫兰迪粉#C0778E),不甜腻、不过气;深浅双主题后续系统+手动切换并记忆 |
| 🧱 布局 | 桌面三栏:左侧固定信息栏 / 中间正文 / 右侧 Widget;移动端顶栏吸顶,窄屏优雅降级 |
| ✍️写作 | Gmeek 式 Issue 写作,标签即状态机;也支持直接推 Markdown 到source/posts/,两种方式互不干扰 |
| 🚀 部署 | 一条 GitHub Actions 工作流程完成全仓库:问题同步 → 构建 → 部署页面 |
| 🔍 SEO | 格式化数据(BlogPosting / BreadcrumbList / WebSite+SearchAction)、Sitemap(含图片)、RSS、Open Graph、Twitter Card、canonical、百度个体 |
| ⚡ 性能 | 纯静态零框架、图片懒加载、CSS构建压缩、环形回顶图纸 |
| 💬互动 | 公告弹窗、朋友圈动态(站长问题个体)、giscus / utterances 评论 |
| 🔌可玩性 | 插件生态:5个内置插件+用户自动发现,短/钩子/模板注入/Jinja过滤器全流程API |
| 🔒 署名锁定 | 五层防线:构建层加密 + 运行时 SHA-256 + MutationObserver + CSS 防篡改 + CSS 元素伪备份 |
快速开始
1.创建仓库
点击右上角使用此模板创建你自己的仓库(或直接分叉),仓库名称建议为用户名.github.io。
2.修改配置
编辑config.yml,至少改三处:
site:
title: My Blog
url: https://用户名.github.io # 无末尾斜杠
author:
name: 你的名字3. 启用页面
仓库Settings → Pages:来源选择GitHub Actions。
4.用Issue写第一篇文章
- 仓库问题 → 新问题,直接写下打开 Markdown 正文;
- 给Issue打标签
Article即发布(首次部署后Actions自动创建标签); - 等动作运行完成,打开
https://用户名.github.io看效果。
关闭Issue = 删除文章;重新打开= 恢复发布;编辑正文 = 更新站点。评论交流直接在Issue 里进行,天然留档。
标签即状态机
| 标签 | 作用 |
|---|---|
Article | 发布这篇文章 |
Draft | 存为草稿,线上不发布 |
Page | 生成独立页面(如「关于」) |
Moment | 发一条好友圈动态,在/board/时间线上展示 |
分类:技术 | 归入「技术」分类(外国人分类:/category:职工) |
| 其他任意标签 | 自动成为文章标签 |
v1.6.1 更新内容
左侧栏保持固定不动—彻底删除v1.5.x的图片链接幻灯片功能和v1.6.0尝试的心电图效果,左侧栏恢复简洁的固定状态:position: fixed,不随页面滚动移动,视觉稳定。
稳定性提升——不再依赖任何外部图片域名或复杂动画,不再有任何视觉效果带来的潜在问题,左边栏始终保持干净、可靠。
静态资源版本迭代—v=7,确保浏览器服务器正确更新。
v1.6.0 更新内容(已退退)
v1.6.0 曾尝试在左侧栏增加纯 CSS/SVG 心电图效果,v1.6.1 已删除该效果,恢复干净简洁的左侧栏。
v1.5.2 更新内容
右侧栏音乐播放器—在右侧栏“微语”上方新增音乐功能配合:封面旋转动画、进度条拖拽寻找、上一/下一切换、自动播放下一、加载微光效果、播放错误提示友好。通过config.yml的music配置段自定义曲目列表。
署名五层防线—在v1.5.1四层防线基础上新增:①CSS伪元素::after备份(即使主元素被隐藏,伪元素仍强制显示版权信息);②CSS z-index: 2147483647+position: relative防止被其他元素隐藏;③运行时定时独立时钟(3条独立调度链+requestAnimationFrame循环备份+用户交互事件触发检查),防clearTimeout单点清除攻击;④iframe内部检测。
静态资源版本迭代— v=5,确保浏览器服务器正确更新。
v1.5.1 更新内容
幻灯片轮播(已删除) — 曾在栏杆新增图片链接幻灯片轮播功能,后因PC端浏览器追踪防护拦截外部图床域名导致图片不显示,v1.6.1彻底删除。
工具栏独立—主题切换 / 搜索 / RSS 从导航底部移至头像下方独立容器,层次更清晰。
左侧栏杆固定优化—删除滚动过渡,消除提示。
署名四层防线—在原有三层(构建层 + 运行时 SHA-256 + MutationObserver)基础上新增 CSS 层防护:user-select/ visibility/opacity阻塞样式层窃听改。
静态资源版本迭代— v=4,确保浏览器服务器正确更新。
配置示例
音乐播放器
music:
enabled: true
tracks:
- title: "歌曲名"
artist: "艺术家"
url: "https://example.com/song.mp3"
cover: "https://example.com/cover.jpg"核心配置速查
site:
title: My Blog # 站点名(必填)
url: https://xxx.github.io # 站点地址(必填,无末尾斜杠)
language: zh-CN
timezone: Asia/Shanghai
announcement: # 公告弹窗
enabled: true
title: "欢迎来访"
text: "🎉 欢迎来访"
link: "/board/"
rightbar: # 右侧栏(≥1760px 显示)
enabled: true
show_toc: true # 文章目录
show_recent: true # 近期文章
show_tags: true # 标签云
show_categories: true # 分类
show_links: true # 友链缩略
author:
name: 你的名字
avatar: "https://..."
bio: 一句话介绍自己
social:
github: yourname
posts:
per_page: 10 # 首页每页文章数
pinyin_slug: true # 中文标题自动转拼音 URL(标题"你好"→/article/ni-hao/)
toc: true # 文章目录
excerpt_length: 150
comments: # none / giscus / utterances
provider: none
seo:
sitemap: true
rss: true
baidu_push: false # 百度收录主动推送
noindex_page_2plus: true # 分页第 2+ 页 noindex
plugins: [] # 用户插件路径列表
plugins_disabled: [] # 禁用插件(内置名/目录名)完整配置请查看config.yml内部的中文注释和使用文档。
署名锁定(五层防线)
页脚「Powered by TechSauce & VeryGood」为强制署名,不可移除:
| 体系 | 手段 |
|---|---|
| ① 构建层 | 四重加密:标记存在+类精确匹配+双指纹(data-vg-fp/ data-vg-sig)+链接域名白名单+文本逐字符比对 |
| ② 运行时 | SHA-256重+隐藏检测(display / opacity / 倍数 / 倍数)+ 倍数检测 + 倍数独立定时器 + rAF 循环备份 |
| ③ 突变观察者 | 监听署名元素与页脚结构变更,删除 / 替换 / 电梯立即可用 |
| ④ CSS 防侵入改 | user-select////爆发visibility样式层窃听改opacity``z-index``position |
| ⑤ CSS 伪元素备份 | ::after元素伪强制显示版权信息,即使主元素被隐藏仍可见(v1.5.2新增) |
任何删除、改名、改字、偷换链接都会导致构建直接失败或页面运行时立即无法使用。请保留域名行。
与 Gmeek 的对照
| 格米克 | 非常好 | |
|---|---|---|
| 书写方式 | 期刊 + 标签 | Issue + Label(同理念) |
| 发布渠道 | 动作同步+构建 | Actions 同步 + 构建(可审计、可 fork 改进) |
| 主题风格 | 面向开发商 | 程序员+生活向通用,莫兰迪粉高级感 |
| 布局 | 单栏/双栏 | 桌面三栏(信息栏 / 正文 / 右栏),窄屏自适应 |
| SEO | 基础 | 整合:构建数据+图片站点地图+百度个体 |
| 互动 | 评论 | 评论+公告+圈友动态 |
| 扩展 | 改主题 | 插件系统+主题复制机制,双重扩展 |
| 署名保护 | — | 五层防线 |
目录结构
VeryGood/
├── config.yml # 站点配置(唯一需要经常改的文件)
├── requirements.txt
├── verygood/ # 构建引擎(纯 Python + Jinja2)
│ ├── builder.py # 构建:分页/标签/分类/归档/SEO/署名校验
│ ├── config.py # 配置加载与默认值
│ ├── content.py # Markdown / front matter 解析
│ ├── mdrender.py # 渲染扩展:TOC / 懒加载 / 短代码
│ ├── seo.py # sitemap / rss / robots / OG
│ ├── cli.py # build / serve / plugins 命令
│ └── plugins/ # 内置插件系统
├── plugins/ # 用户插件自动发现目录(即装即用)
├── themes/verygood/ # 主题(整套可复制自定义)
│ ├── theme.yml # 主题元数据
│ ├── templates/ # Jinja2 模板
│ └── static/ # css / js / img
├── source/ # 内容源
│ ├── posts/ # 文章(issue-*.md 由 Actions 生成)
│ ├── pages/ # 独立页面
│ ├── moments/ # 朋友圈动态
│ └── assets/ # 资源文件(发布到 /assets/)
├── scripts/
│ └── sync_issues.py # Issue → Markdown 同步
├── docs/ # 使用 / 开发 / 插件文档
└── .github/workflows/build.yml # 部署工作流(核心)本地开发
pip install -r requirements.txt
pip install pypinyin # 中文标题转拼音依赖
python -m verygood build # 构建到 dist/
python -m verygood build --drafts # 构建(含草稿)
python -m verygood serve --port 8000 # 本地预览(文件变更自动重建)
python -m verygood plugins # 查看插件清单自定义主题
cp -r themes/verygood themes/my-theme- 改
config.yml里theme.name: my-theme - 改元
theme.yml数据与static/css/main.css顶部的CSS变量:
:root {
--rose-500: #C0778E; /* 主粉色(莫兰迪,不高饱和) */
--bg: #FBF8F9; /* 页面底色 */
--ink: #3A2A31; /* 正文色 */
}插件开发
插件 =plugins/下的一个目录(含plugin.py)或单个文件,即装即用,无需改配置:
# plugins/my-plugin/plugin.py
__title__ = "我的插件"
__description__ = "一句话说明"
__version__ = "1.0.0"
def setup(ctx):
ctx.register_shortcode("box", box) # 短代码
ctx.hook("post_parsed")(on_post) # 生命周期钩子
ctx.inject("sidebar_data", '<div>...</div>') # 模板注入
ctx.add_global("build_year", 2026) # 全局变量
ctx.add_filter("wc", lambda s: len(s)) # Jinja 过滤器插件内置:shortcodes(视频插入)、reading_time(阅读时长)、random_post(随机文章)、site-stats(站点数据)、whisper(时间调整 + 微语)。完整 API / 钩子清单见插件开发文档。
文档
| 文档 | 致 |
|---|---|
| 使用文档 | 博主 |
| 开发文档 | 开发者 |
| 改进开发文档 | 改进/扩展者 |
| 插件开发文档 | 插件开发者 |
| 插件使用文档 | 使用用户的内置插件 |
技术栈
Python 静态站点生成器 · Jinja2 模板 · PyYAML 配置 · Markdown 渲染 · Pygments 代码高亮 · pypinyin 拼音转换
许可证
喜欢就点个⭐,欢迎Issue/PR。
