Your creative companion for crafting long-form fiction with focus and clarity
🐛 Report Bug • ✨ Request Feature
- ✨ Features
- 🎯 What Makes This Special
- 🚀 Quick Start
- 📁 Project Storage
- ⚙️ Configuration
- 💻 Development
- 🔧 Troubleshooting
- 🗺️ Roadmap
- 🤝 Contributing
- 📄 License
- 💖 Credits
| Feature | Description |
|---|---|
| ✍️ Clean Writing UI | Rich-text editor powered by Quill with automatic fallback |
| 📖 Chapters & Scenes | Organize your story with nested structure and quick navigation |
| 👥 Character Sheets | Keep track of your cast with dedicated character profiles |
| 📝 Planning Notes | Categorized notes for worldbuilding, outlines, and research |
| 💾 Auto-Save | Never lose your work with automatic saving and manual flush |
| 📊 Word Counts | Live tracking for current document and total project words |
| 📤 Export | Compile your entire project into a single Markdown file |
| 🔄 Git Integration | Built-in version control with init, commit, push, and pull |
| 📂 Project Management | Recent projects list and quick-access welcome screen |
| ⚡ Keyboard Shortcuts | Toggle sidebar (Cmd/Ctrl+B), commit (Cmd/Ctrl+Shift+C) |
| 🔒 Privacy First | All data stays local - no telemetry, no cloud sync |
| 📝 Markdown Storage | Portable, diff-friendly format for version control |
Frontend: Electron + Quill Rich Text Editor
Storage: Local Markdown Files (~/Documents/Novelist/)
State: electron-store for preferences
Version Control: simple-git integration
Architecture: IPC bridge with secure context isolation
Format: Markdown-backed content (portable & VCS-friendly)
- Project Model: Each project is a folder with Markdown files for chapters, scenes, characters, and notes
- Hierarchical Structure: Chapters contain scenes; scenes are stored as nested files
- Live Preview: Rich formatting toolbar with headings, lists, code blocks, and links
- Contextual UI: Meta panel adapts to show relevant fields (Note category, save status)
- Tutorial System: Built-in tips and tutorial overlay accessible from Help menu
- Cross-Platform: Works on macOS, Windows, and Linux
- 🎯 Focus: Distraction-free interface that keeps you in the creative flow
- 🗂️ Organization: Clear structure for complex stories with multiple plot threads
- 💾 Safety: Automatic saving with Git backup for peace of mind
- 🚀 Simplicity: No cloud accounts, no subscriptions, just write
- 🔓 Freedom: Your files stay yours - portable Markdown format
Get the latest release for your platform from the Releases page.
Available Platforms:
- macOS: Universal DMG (Intel + Apple Silicon)
- Windows: MSI (x64) or NSIS Setup (ARM64)
- Linux: AppImage, DEB, or RPM packages
- Supports x64, ARM64, and ARMv7l architectures
Just download, install, and start writing!
For developers or those who want to build from source:
- Node.js 18+ (recommended)
- macOS, Windows, or Linux
- Git (optional, for version control features)
# Clone the repository
git clone https://github.com/cogrow4/Novelist.git
# Navigate to project directory
cd Novelist
# Install dependencies
pnpm i
# or: npm install / yarn# Start Novelist
npm start
# Development mode (with DevTools)
NODE_ENV=development npm startThe welcome screen provides three options:
- Create New Project - Stored automatically in
~/Documents/Novelist/ - Open Existing Project - Browse to any project folder
- Recent Projects - Quick access to your recent work
Each project lives under ~/Documents/Novelist/ by default. All content is stored as Markdown files for portability and version control compatibility.
~/Documents/Novelist/
my-novel-abc123/
project.json # Project metadata
chapters/
chapter-1-xxxx.md # Chapter content
chapter-1-xxxx-scenes/ # Nested scenes
scene-intro-yyyy.md
scene-climax-zzzz.md
chapter-2-qqqq.md
characters/
protagonist-aaaa.md # Character profiles
antagonist-bbbb.md
notes/
outline-cccc.md # Planning notes
worldbuilding-dddd.md
- ✅ Portable: Open in any text editor
- ✅ Version Control: Perfect for Git diffs
- ✅ Future-Proof: Plain text will always be readable
- ✅ Searchable: Use grep, ripgrep, or any search tool
Novelist stores preferences using electron-store:
- Font size for the editor
- Last opened project
- Recently used projects list (MRU)
Access via: Edit → Preferences (or app menu on macOS)
// Rich-text formatting
- Headings (H1-H6)
- Bold, Italic, Underline
- Bulleted and Numbered Lists
- Code Blocks
- Links
- Blockquotes| Action | macOS | Windows/Linux |
|---|---|---|
| Toggle Sidebar | Cmd+B |
Ctrl+B |
| Git Commit | Cmd+Shift+C |
Ctrl+Shift+C |
| Save | Cmd+S |
Ctrl+S |
| New Chapter | Menu | Menu |
| Export Project | Menu | Menu |
novelist/
├── electron/
│ ├── main.js # Main process (ESM)
│ ├── preload.js # Context bridge (CommonJS)
│ └── project-manager.js # File system & Git operations
├── renderer/
│ ├── index.html # UI layout
│ ├── app.js # Frontend logic
│ └── styles.css # Styling
└── package.json
The app uses a secure IPC bridge (preload → main):
// Projects
window.novelist.projects.create(name)
window.novelist.projects.list()
window.novelist.projects.openDialog()
window.novelist.projects.load(projectPath)
// Chapters & Scenes
window.novelist.chapters.list(projectPath)
window.novelist.chapters.create(projectPath, name)
window.novelist.chapters.save(projectPath, chapterId, payload)
window.novelist.chapters.createScene(projectPath, chapterId, sceneName)
window.novelist.chapters.saveScene(projectPath, chapterId, sceneId, payload)
// Characters & Notes
window.novelist.characters.list(projectPath)
window.novelist.characters.save(projectPath, characterId, payload)
window.novelist.notes.list(projectPath)
window.novelist.notes.save(projectPath, noteId, payload)
// Export & Git
window.novelist.exports.project(projectPath)
window.novelist.git.init(projectPath)
window.novelist.git.commit(projectPath, message)
window.novelist.git.push(projectPath)
window.novelist.git.pull(projectPath)
// Preferences
window.novelist.preferences.get()
window.novelist.preferences.set(values)# Start the app
npm start
# Development mode with DevTools
npm run dev
# Package for distribution
npm run package- 📝 Editor logic lives in
renderer/app.js - 🎨 Styles are in
renderer/styles.css - 🔧 Main process entry is
electron/main.js(ESM) - 🔒 Preload script is CommonJS for Electron compatibility
- 🐛 Set
NODE_ENV=developmentto auto-open DevTools
"Could not open project" error
- Fixed by guarding missing DOM nodes
- Open DevTools and check console for detailed stack trace
- Ensure
project.jsonexists in the project folder
Recent Projects not showing
- Novelist scans
~/Documents/Novelist/on launch - Projects must contain a valid
project.jsonfile - Check that the projects directory exists
Quill editor not loading
- App automatically falls back to plain contenteditable editor
- Tries CDN fallback if local Quill asset is missing
- Check network connection and browser console
Git integration errors
- Ensure project is initialized (Git → Initialize)
- System Git must be configured with credentials
- SSH keys or HTTPS credentials needed for push/pull
- Check that remote repository exists and is accessible
Auto-save not working
- Auto-save triggers after brief idle period
- Manual save on window close is guaranteed
- Check file permissions in project directory
Future features planned for Novelist:
- 📚 Export to EPUB/PDF - Publish-ready formats
- 🔍 Search Across Project - Find text in all chapters and notes
- 🎯 Scene Metadata - Add tags, status, and custom fields
- 🔄 Scene Reordering - Drag-and-drop scene organization
- 🎨 Theming System - Custom color schemes and fonts
- ⌨️ Typewriter Mode - Zen writing with centered cursor
- 📊 Writing Statistics - Daily goals and progress tracking
- 🔗 Internal Links - Reference characters and notes within text
- 📱 Mobile Companion - Read-only mobile app for reviewing
Contributions are what make the open-source community amazing! Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- ✅ Keep features scoped and maintain the local-file model
- ✅ Add clear error handling and UI fallbacks
- ✅ Test on macOS at minimum; Linux/Windows fixes appreciated
- ✅ Follow existing code style and conventions
- ✅ Write meaningful commit messages
- ✅ Update documentation as needed
- ✅ Add comments for complex logic
- Use ESM in main process, CommonJS in preload
- Maintain IPC security with context isolation
- Preserve Markdown storage format
- Keep UI responsive during file operations
- Test with multiple projects and edge cases
This project is licensed under the Unlicense - see the LICENSE file for details.
This software is released into the public domain. You are free to do whatever you want with it.
✅ You CAN:
- Use for any purpose (personal, commercial, etc.)
- Modify and adapt the code however you like
- Distribute and share freely
- Use in proprietary software
- Sell products built with this code
- Remove all attribution and copyright notices
- Relicense under any terms you choose
❌ You DON'T HAVE TO:
- Give credit or attribution
- Include the license
- Share your modifications
- Release source code
📜 No Warranty:
- Software provided "as is" without warranty of any kind
coeng24 - GitHub
- Electron - Cross-platform desktop framework
- Quill - Rich text editor
- simple-git - Git integration for Node.js
- electron-store - Persistent storage
- Flaticon - Application icons
Built for writers who need a focused, distraction-free environment without sacrificing powerful organizational tools. Inspired by Scrivener, Ulysses, and the simplicity of Markdown.