PoLaris7 downloadsPlan fiction with a bilingual ten-step Snowflake Method workspace backed by portable Markdown notes.
English · 简体中文
Turn a story idea into a draft-ready plan, one Snowflake step at a time.
A bilingual, Markdown-native fiction planning workspace for Obsidian. Your projects stay local, portable, and readable even when the plugin is disabled.
Installation · Guide · Privacy · Roadmap · Development
Randy Ingermanson's Snowflake Method takes its name from the Koch Snowflake, a fractal that grows from an equilateral triangle by repeatedly adding smaller triangular details to every side. He uses that step-by-step growth as a metaphor for designing a novel: begin with a one-sentence summary, then expand the plot, characters, and scenes through ten revisable steps until the story is ready to draft. The method organizes creativity rather than imposing a rigid rulebook: you can keep what helps, skip what does not, and return to earlier steps as the story develops. Read Ingermanson's original Snowflake Method article for the complete method.
This plugin turns that iterative workflow into a focused, Markdown-native workspace. Instead of scattering summaries, character sheets, and scene plans across separate documents and spreadsheets, you can develop them together in one guided dashboard while still opening every piece as an ordinary Obsidian note.
Your writing stays local, linkable, portable, and editable without the plugin. The workflow provides structure without enforcing it: hints never block progress and every step can be revisited.
This is an independent, open-source community project. It is NOT affiliated with, authorized by, or endorsed by Randy Ingermanson or Advanced Fiction Writing.
| Feature | What it provides |
|---|---|
| Guided dashboard | Navigate all ten steps and control progress without blocking validation rules. |
| Obsidian-native projects | Store summaries, characters, scenes, and drafts as ordinary local notes. |
| Revision awareness | Receive non-blocking reminders when upstream material changes. |
| Safe repair tools | Detect damaged structure and repair missing managed files without overwriting prose. |
| Bilingual workspace | Use English or Simplified Chinese independently for the interface and each project. |
Work from a compact premise toward a scene-level plan. Each stage keeps the earlier material visible, so you can expand or revise without losing the shape of the story.

Click any screenshot to open the full-resolution view.
ZzPoLariszZ/obsidian-snowflake-method.main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/snowflake-method/.| Command | Purpose |
|---|---|
| Add character | Add a shared character note to the current project. |
| Add scene | Add a shared scene note to the current project. |
| Create project | Create a new Markdown-native Snowflake project. |
| Open character base | Open the Bases view of the current project's characters. |
| Open dashboard | Open or reveal the current project dashboard. |
| Open health checker | Inspect project structure and repair safe issues. |
| Open project manager | Create, rename, open, or trash projects. |
| Open scene base | Open the Bases view of the current project's scenes. |
| Toggle managed boundary protection | Temporarily change protection for managed section markers. |
| Toggle notes beside dashboard | Choose between a companion pane and regular tabs. |
| Toggle reduced animations | Switch between animated and reduced-motion visuals. |
| Setting | Default | Purpose |
|---|---|---|
| Project root folder | Vault root | Choose the Vault-relative parent folder for projects. |
| Interface language | Follow project | Follow the current project, Obsidian, English, or Simplified Chinese. |
| Default project language | System language | Set the language used when creating projects. |
| Open notes beside dashboard | On | Reuse a companion pane for notes. |
| Reduce animations | Off | Replace animations with static visuals. |
| Protect managed boundaries | On | Prevent accidental edits to synchronization markers. |
Snowflake Method for Obsidian is local-first. Project files and plugin settings remain in your Vault, and the plugin does not transmit your writing or configuration.
Each project is stored as a direct child of the configured project root. Its folders, filenames, and starter notes are localized to the language selected when the project is created.
<project root>/
└── My Novel/
├── 00_System/
│ ├── 001_Project_Metadata.md
│ └── ...
├── 10_Summary/
│ ├── 11_One_Sentence_Summary.md
│ └── ...
├── 20_Character/
│ └── Characters.base
├── 30_Synopsis/
├── 40_Scene/
│ └── Scenes.base
├── 50_Manuscript/
│ └── Draft.md
└── ...
The dashboard synchronizes only the text enclosed by paired managed section boundaries:
<!-- snowflake:section:one-sentence-summary:start -->
Your writing remains editable here.
<!-- snowflake:section:one-sentence-summary:end -->
These HTML comments are structural markers rather than story content. Boundary protection is enabled by default to prevent accidental edits to the marker lines. Text inside the pair is synchronized with the dashboard; Markdown outside it remains under your control and is not replaced by the plugin. If markers are missing, duplicated, reversed, or overlapping, the plugin reports the problem and avoids an unsafe write.
Continuous integration currently verifies the project on Node.js 20, 22, and 24 under Ubuntu.
git clone https://github.com/ZzPoLariszZ/obsidian-snowflake-method.git
cd obsidian-snowflake-method
npm ci
npm ci installs the exact dependency versions recorded in package-lock.json. The generated main.js is a build artifact and should not be edited directly.
| Command | Purpose |
|---|---|
npm run dev |
Watch the TypeScript sources and rebuild main.js with an inline source map. |
npm test |
Run the complete Vitest suite once. |
npm run test:watch |
Run Vitest in watch mode during development. |
npm run build |
Type-check the project and create a minified production bundle without a source map. |
npm run lint |
Run ESLint across the repository. |
npm run check |
Run the required test, production build, and lint sequence. |
Run npm run check before every commit intended for review. For local Obsidian testing, place the generated main.js together with manifest.json and styles.css in <vault>/.obsidian/plugins/snowflake-method/, then reload Obsidian. Use a separate development Vault rather than production writing data.
Every push and pull request runs the test, build, and lint jobs on each supported Node.js version. A change is ready to merge only after the full matrix succeeds. CI builds the distributable bundle from source; local build output is not treated as verification evidence.
main with a clean working tree and confirm that npm run check succeeds.npm version patch, npm version minor, or npm version major.package.json, manifest.json, and versions.json, then creates a release commit and a numeric tag such as 0.2.0. Tags must not use a v prefix.git push origin main --follow-tags.manifest.json, installs dependencies with npm ci, and repeats the test, production build, and lint checks.main.js, manifest.json, and styles.css, then attaches them to a draft GitHub release with generated release notes.The distributable plugin consists of exactly main.js, manifest.json, and styles.css. Do not include source files, development dependencies, or a containing directory in the release assets.
MIT License. The Snowflake Method name and source material belong to their respective owners.
English · 简体中文
从一句话灵感到可动笔的小说方案,一步步完成雪花写作法。
一个中英双语、以 Markdown 为原生存储格式的 Obsidian 小说规划工作台。所有项目均保存在本地,即使停用插件,笔记依然可读、可编辑。
Randy Ingermanson 的雪花写作法得名于科赫雪花:这种分形从等边三角形开始,通过在每条边上反复添加更小的三角形结构而逐层生长。他把这种由简入繁的过程借作小说设计的比喻:先用一句话抓住故事全貌,再通过十个可以反复修订的步骤逐层扩展情节、角色与场景,直到可以开始初稿。雪花写作法旨在组织创意,而非强加必须照搬的规则:你可以保留有用的部分、跳过不合适的部分,并随着理解加深返回前序步骤修订。完整方法见雪花写作法原文。
本插件把这种迭代流程整理为专注的 Markdown 原生工作区。梗概、角色资料和场景规划不必散落在不同文档与表格中:你既可以在统一工作台中逐步推进,也可以把每项内容作为普通 Obsidian 笔记单独打开。所有创作内容都保存在本地,可以链接、迁移,并且停用插件后仍可编辑。工作流只提供结构而不强制限制:提示不会阻止进度,任何步骤都能返回修改。
这是一个独立的开源社区项目,与 Randy Ingermanson 或 Advanced Fiction Writing 没有 隶属、授权或背书关系。
| 功能 | 说明 |
|---|---|
| 十步引导工作台 | 浏览完整流程并自主控制进度,不使用阻塞式校验。 |
| Obsidian 原生项目 | 概述、角色、场景与初稿均保存为普通本地笔记。 |
| 修订提醒 | 上游材料变化时给出不打断写作的复核提示。 |
| 安全修复 | 检测项目结构问题并补齐安全项目,不覆盖正文。 |
| 中英双语 | 界面语言与每个项目的模板语言可分别选择。 |
从精炼的核心构思逐步发展到场景级规划。每个阶段都会保留前序材料供你参考,让扩展与修订始终围绕故事整体进行。

点击任意截图可查看完整分辨率原图。
ZzPoLariszZ/obsidian-snowflake-method。main.js、manifest.json 和 styles.css。<仓库>/.obsidian/plugins/snowflake-method/。| 命令 | 用途 |
|---|---|
| 添加角色 | 为当前项目添加共享角色笔记。 |
| 添加场景 | 为当前项目添加共享场景笔记。 |
| 创建项目 | 创建新的 Markdown 原生雪花写作项目。 |
| 打开工作台 | 打开或显示当前项目的工作台。 |
| 打开健康检查器 | 检查项目结构并修复安全问题。 |
| 打开项目管理器 | 创建、重命名、打开或移入回收站。 |
| 打开角色数据库 | 打开当前项目角色的 Bases 视图。 |
| 打开场景数据库 | 打开当前项目场景的 Bases 视图。 |
| 切换托管区段边界保护 | 临时调整同步标记的编辑保护。 |
| 切换在工作台旁打开笔记 | 选择固定分栏或普通标签页。 |
| 切换减少动画模式 | 在动画效果和减少动态效果之间切换。 |
| 设置 | 默认值 | 用途 |
|---|---|---|
| 项目根目录 | Vault 根目录 | 选择存放项目的 Vault 相对父目录。 |
| 界面语言 | 跟随项目 | 可跟随当前项目、Obsidian,或固定为英文/简体中文。 |
| 默认项目语言 | 系统语言 | 设置新建项目所使用的模板语言。 |
| 在工作台旁打开笔记 | 开启 | 长篇笔记复用工作台旁的固定分栏。 |
| 减少动画 | 关闭 | 使用静态视觉效果替代动画。 |
| 保护托管区段边界 | 开启 | 防止意外修改同步标记。 |
Obsidian 雪花写作法采用本地优先设计。项目文件和插件设置均保留在 Vault 中,插件不会传输你的创作内容或配置。
每个项目都作为所选项目根目录的直接子文件夹保存。文件夹、文件名和初始笔记会根据创建项目时选择的语言进行本地化。
<项目根目录>/
└── 我的小说/
├── 00_系统/
│ ├── 001_项目元数据.md
│ └── ...
├── 10_概述/
│ ├── 11_一句话概述.md
│ └── ...
├── 20_角色/
│ └── 角色总览.base
├── 30_大纲/
├── 40_场景/
│ └── 场景总览.base
├── 50_正文/
│ └── 初稿.md
└── ...
工作台只同步一对托管区段边界之间的文字:
<!-- snowflake:section:one-sentence-summary:start -->
这里的创作内容可以正常编辑。
<!-- snowflake:section:one-sentence-summary:end -->
这些 HTML 注释是结构标记,并非正文内容。边界保护默认开启,用于防止意外修改标记行。标记之间的内容会与工作台同步;标记之外的 Markdown 始终由作者管理,插件不会替换。如果标记缺失、重复、顺序颠倒或相互重叠,插件会报告问题并停止不安全的写入。
当前持续集成会在 Ubuntu 环境下分别使用 Node.js 20、22 和 24 验证项目。
git clone https://github.com/ZzPoLariszZ/obsidian-snowflake-method.git
cd obsidian-snowflake-method
npm ci
npm ci 会严格按照 package-lock.json 安装依赖。生成的 main.js 属于构建产物,不应直接编辑。
| 命令 | 用途 |
|---|---|
npm run dev |
监听 TypeScript 源文件,并生成包含内联 source map 的 main.js。 |
npm test |
单次运行完整的 Vitest 测试套件。 |
npm run test:watch |
在开发过程中以监听模式运行 Vitest。 |
npm run build |
执行类型检查,并生成不含 source map 的压缩生产构建。 |
npm run lint |
对整个仓库运行 ESLint。 |
npm run check |
依次运行提交前必须通过的测试、生产构建和 lint。 |
所有准备提交审核的 commit 都应先通过 npm run check。在 Obsidian 中进行本地测试时,将生成的 main.js 与 manifest.json、styles.css 一同放入 <仓库>/.obsidian/plugins/snowflake-method/,然后重载 Obsidian。请使用独立的开发 Vault,不要直接使用存放正式创作内容的 Vault。
每次 push 和 pull request 都会在所有受支持的 Node.js 版本上执行测试、构建和 lint。只有完整矩阵全部通过后,修改才适合合并。CI 会从源代码重新生成分发包,本地生成的构建产物不作为验证依据。
main 分支的干净工作区开始,并确认 npm run check 已通过。npm version patch、npm version minor 或 npm version major。package.json、manifest.json 和 versions.json,随后创建发布 commit 和形如 0.2.0 的纯数字标签。标签不得带有 v 前缀。git push origin main --follow-tags 推送发布 commit 和标签。manifest.json 中的版本完全一致,通过 npm ci 安装依赖,并重新执行测试、生产构建和 lint。main.js、manifest.json 和 styles.css 生成构建来源证明,并将它们与自动生成的发布说明附加到 GitHub 草稿发布。正式分发的插件仅包含 main.js、manifest.json 和 styles.css。发布附件中不要加入源代码、开发依赖或外层目录。
源代码采用 MIT License。“雪花写作法”名称及原始方法资料的相关权利归各自权利人所有。