AI-Powered Novel Writing Assistant
English | 简体中文
QuillForge is a desktop application for web novel authors, combining a rich text editor with AI-assisted writing capabilities. It supports multiple LLM providers (OpenAI, Anthropic, Ollama, and OpenAI-compatible APIs), stores all data locally with encrypted credentials, and features an inline ghost-text completion system inspired by modern code editors.
|
Hierarchical organization: books → chapters, with per-book world settings, story outlines, and character profiles that serve as AI context. |
Select text and receive grammar, pacing, character consistency, and plot logic feedback with one click. |
|
Describe your current plot point and get 3–5 creative directions, informed by your book's established world and characters. |
AI-generated prose appears as ghost text directly in the editor. Tab to accept, Esc to dismiss — just like IDE code completion. |
|
Generate full chapters from scratch with length control. Supports regeneration and re-apply without creating duplicate chapters. |
OpenAI · Anthropic · Ollama · OpenAI-compatible (DeepSeek, Qwen, Doubao, etc.). Save as named presets and switch from the toolbar. |
|
Chinese (简体中文) and English. Switch on the fly from the toolbar. |
One-click toggle. Follows system preference by default. |
|
Sentence length distribution, dialogue ratio, readability score, word frequency, and per-book statistics. |
TipTap with bubble menu formatting, focus mode, reading time estimate, spell check, and version snapshots. |
- API keys are encrypted with AES-256-GCM and stored in the Tauri secure store
- Keys never leave the Rust backend — the frontend only knows whether a key is configured
- All LLM HTTP requests are proxied through the Rust layer
| Layer | Stack |
|---|---|
| Desktop Shell | Tauri 2.x |
| Frontend | Vue 3 + TypeScript + Vite |
| State | Pinia |
| Editor | TipTap (ProseMirror) |
| i18n | vue-i18n |
| Backend | Rust — reqwest, tokio, aes-gcm |
- Node.js ≥ 18
- Rust ≥ 1.70
- Platform-specific Tauri dependencies
# Install dependencies
npm install
# Start development
npm run tauri dev
# Production build
npm run tauri build├── src/ # Vue 3 frontend
│ ├── components/
│ │ ├── ai/ # AiPanel, ReviewResult, IdeaResult, ContinueResult, ConsistencyResult, GenChapterResult, TemplateSelector
│ │ ├── analytics/ # AnalyticsPanel (writing statistics dashboard)
│ │ ├── common/ # AppLayout, TitleBar, LoadingDots, ModalDialog, SearchDialog
│ │ ├── editor/ # NovelEditor, BubbleMenu, BookSidebar, ChapterHistory, EditorToolbar, BookSettingsPanel, CharacterPanel
│ │ └── settings/ # SettingsDialog, ProviderCard, ApiKeyInput
│ ├── stores/ # Pinia (book, editor, settings, template, theme, i18n)
│ ├── commands/ # Tauri invoke wrappers (by domain)
│ │ ├── ai.ts # AI messages & connection check
│ │ ├── history.ts # Version snapshots (in-memory, persisted with book data)
│ │ ├── keys.ts # API key management
│ │ ├── search.ts # Full-text search index & query
│ │ ├── storage.ts # Persistence, providers, export
│ │ └── index.ts # Re-exports all commands
│ ├── extensions/ # TipTap extensions (GhostText, SpellCheck)
│ ├── i18n/locales/ # zh-CN, en-US
│ └── types/ # TypeScript definitions
│
├── src-tauri/ # Rust backend
│ └── src/
│ ├── commands/ # Tauri commands (by domain)
│ │ ├── mod.rs # Module declarations & re-exports
│ │ ├── ai.rs # AI message & connection check
│ │ ├── keys.rs # API key CRUD
│ │ ├── books.rs # Book persistence & export
│ │ ├── history.rs # Version snapshots (filesystem, fallback)
│ │ ├── search.rs # Full-text search (Tantivy)
│ │ ├── spell.rs # Spell check (Hunspell)
│ │ └── helpers.rs # Internal helpers
│ ├── crypto.rs # AES-256-GCM encrypt/decrypt
│ └── llm/ # Provider implementations (OpenAI, Anthropic, Ollama, compat)
│
├── index.html
├── vite.config.ts
├── tsconfig.json
└── package.json
MIT © 2026 oxroot & Claude
Built with ❤️ by oxroot & Claude