Lightweight cross-platform book writing app with GitHub sync and chapter versioning
Project description
Beckit
A lightweight desktop app for writing books โ with GitHub sync, chapter versioning, and PDF export. Always free, always open source. Developed with the help of Claude.
๐ค For Users
Download & Install
Beckit is distributed as a prebuilt installer โ no Python or developer tools required. Download the version for your platform from the latest release.
macOS
Requirements: macOS 11 (Big Sur) or later
- Download
Beckit-macOS-<version>.pkgfrom the latest release - Double-click the
.pkgfile and follow the installer wizard - Open Launchpad or your Applications folder and launch Beckit
"App can't be opened because it is from an unidentified developer" The app is not yet signed with an Apple Developer certificate. To open it: right-click (or Control-click) the app icon โ Open โ Open again in the dialog. You only need to do this once.
Windows
Requirements: Windows 10 or later (64-bit)
- Download
Beckit-Windows-<version>-installer.exefrom the latest release - Run the installer (Administrator rights may be required)
- Launch Beckit from the Start Menu or Desktop shortcut
Windows Defender SmartScreen warning ("Windows protected your PC") The app is not yet code-signed. Click More info โ Run anyway to proceed.
First Launch
The first time you open Beckit you will be asked to connect your GitHub account:
- Click Sign in with GitHub โ a code will appear on screen
- Visit github.com/login/device and enter the code
- Authorize Beckit, then return to the app โ it will detect the sign-in automatically
- Select an existing GitHub repository to use as your book, or create a new one
Beckit will clone your repository locally and set up the Chapters/ and Planning/ folders automatically.
Your settings are stored in your system config directory:
| Platform | Config location |
|---|---|
| macOS | ~/Library/Application Support/beckit/ |
| Windows | %APPDATA%\beckit\ |
Writing Chapters
The main editor is split into three areas:
- Chapters pane (left) โ lists all your chapters with their current version numbers
- Editor (centre) โ click any text to start editing; click away to return to the styled preview
- Version history (right) โ a read-only view of every saved version of the current chapter
Creating a chapter
Click + New Chapter at the bottom of the chapters pane. The new chapter is numbered automatically and starts at version v1.0.0.
Editing
Click anywhere in the preview to enter edit mode. The editor accepts standard Markdown. Click outside the editor (or switch to another pane) to save and return to the preview.
Saving
Click Save in the toolbar. Beckit automatically:
- Detects how much the content has changed
- Bumps the chapter version accordingly (patch โ minor โ major)
- Pushes the updated file to GitHub
A โ unsaved indicator appears in the status bar whenever the current document has unsaved changes.
Reordering chapters
Drag the handle icon next to any chapter name to reorder it in the list.
Deleting a chapter
Select a chapter, open the overflow menu (โฏ), and choose Delete chapter. You will be asked to confirm before anything is removed.
Scratch pad
The scratch pad is a free-form area that is always available, even when no chapter is open. When you save scratch pad content you can choose to:
- Create a new chapter from it
- Append it to an existing chapter
- Save it as a new planning file
- Append it to an existing planning file
Planning Pane
The planning pane is a separate space for outlines, research notes, character sheets, and anything else that supports your writing but is not part of the manuscript.
- Toggle it open with the Planning button in the toolbar
- Files and folders are stored under
Planning/in your repository - Create new files or folders using the + buttons at the top of the pane
- Click any file to open it in the same preview/edit editor as chapters
- Changes are saved automatically when you click away
Version History
Every time you save a chapter, Beckit records a new version in a vMAJOR.MINOR.PATCH subfolder. The version history pane on the right shows all saved versions:
- Click any version to view it in the read-only history panel
- Click Restore this version to copy that version's content into the editor
The folder structure inside your repository looks like this:
Chapters/
Chapter 1/
v1.0.0/
v1.0.0.md
v1.1.0/
v1.1.0.md
Chapter 2/
v1.0.0/
v1.0.0.md
GitHub Sync
Beckit syncs your work to GitHub automatically:
- On startup โ pulls the latest changes from your repository before you start writing
- On save โ pushes the new version to GitHub immediately after saving
- Switch repository โ use the repository button in the toolbar to switch to a different book
PDF Export
Generate a PDF of your entire book from the toolbar's Export PDF button.
- Enter your Book title and Author name
- Optionally click Chooseโฆ to pick a custom save location
- Click Generate PDF to create the file, or Save & Open to create it and open it immediately in your default PDF viewer
PDF export uses Pandoc and pdflatex, which are bundled with the app โ no separate installation required.
Word Count
The status bar at the bottom of the window shows:
- Current document word count (updates as you type)
- Total book word count across all latest chapter versions
CLI Tools
After installing from source (see the Developer section), these commands are available from any directory that contains a Chapters/ folder:
| Command | Description |
|---|---|
chapter-version list |
List all chapters and their current versions |
chapter-version minor -c 5 |
Bump the minor version for chapter 5 |
chapter-version patch -c 1 2 3 |
Bump the patch version for chapters 1โ3 |
chapter-version major --all |
Bump the major version for all chapters |
create-chapter |
Create the next chapter (e.g. Chapter 11) at v1.0.0 |
increment-chapters 6 |
Shift chapter numbers up: Chapter 6 โ 7, 7 โ 8, โฆ |
count-chapter-words |
Word count for the latest version of each chapter |
format-markdown -r -i . |
Format all Markdown files in place |
Use -d /path/to/Chapters to point any tool at a specific directory.
๐ For Developers
Docker Dev Container
The fastest way to get a fully working development environment is with Docker. No Python, LaTeX, or system dependencies required โ everything runs inside the container and is accessible in your browser.
Requirements: Docker Desktop (macOS / Windows / Linux)
git clone https://github.com/kicka5h/beckit-book-editor.git
cd beckit-book-editor
docker compose up app
Open http://localhost:8080 in your browser. The app is fully functional โ connect your GitHub account and start writing.
Source code is mounted into the container, so any edits you make to files under src/ are reflected without rebuilding the image.
Run the test suite inside the container:
docker compose run --rm test
Pull the published image from GitHub Container Registry:
docker pull ghcr.io/kicka5h/beckit:latest
docker run -p 8080:8080 ghcr.io/kicka5h/beckit:latest
Then open http://localhost:8080.
Run from Source
If you prefer a native Python environment:
Requirements: Python 3.9โ3.12
git clone https://github.com/kicka5h/beckit-book-editor.git
cd beckit-book-editor
python3 -m venv .venv
# macOS / Linux
source .venv/bin/activate
# Windows
.venv\Scripts\activate
pip install -e .
python -m book_editor # or: beckit
PDF export (optional โ only needed if you use the Export PDF feature):
- macOS:
brew install pandoc && brew install --cask mactex-no-gui - Windows: Download Pandoc and MiKTeX
- Linux:
apt install pandoc texlive-latex-base texlive-fonts-recommended
Alternatively, run ./run.sh on macOS โ it installs all dependencies automatically via Homebrew.
Running Tests
pip install -e ".[dev]"
pytest
Or with coverage:
pytest --cov=book_editor tests/
Project Layout
beckit-book-editor/
โโโ pyproject.toml # Package metadata and dependencies
โโโ docker/
โ โโโ Dockerfile # Dev container image
โโโ docker-compose.yml # App (port 8080) and test services
โโโ installer/
โ โโโ macos/ # PKG installer scripts
โ โโโ windows/ # NSIS installer script
โโโ src/
โ โโโ book_editor/
โ โโโ __main__.py # Entry point (python -m book_editor)
โ โโโ app.py # Main Flet UI
โ โโโ config/ # App config (repo path, GitHub token)
โ โโโ services/ # Business logic (chapters, versioning, PDF, git)
โ โโโ utils/ # Path helpers, chapter number utilities
โโโ tests/
โ โโโ api/
โ โโโ services/
โ โโโ repositories/
โ โโโ utils/
โโโ .github/
โโโ workflows/
โโโ ci.yml # Tests + Docker build on every PR
โโโ cd.yml # Release builds, PyPI publish, GHCR publish
Contributing
- Fork the repository and create a branch from
main - Make your changes โ fix a bug, add a feature, improve docs
- Ensure all tests pass:
pytest - Open a Pull Request against
mainwith a clear description of what changed and why
CI runs automatically on every PR:
- Unit tests across Python 3.9โ3.12 on Ubuntu 22.04 and 24.04
- Build checks on macOS 14, macOS 15, Windows 2019, Windows 2022
- Docker image build and test suite inside the container
Please open an issue before starting large changes so we can discuss the approach first.
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file beckit-3.3.1.tar.gz.
File metadata
- Download URL: beckit-3.3.1.tar.gz
- Upload date:
- Size: 42.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78cd3a8a1167fdec3362967d44b34a68edab629438e6147b7eafc78ec9187f82
|
|
| MD5 |
b39e26f0cf534bb133a20891abddfb3d
|
|
| BLAKE2b-256 |
bfd34e489d7cbdb83f234796cdd5a758df884a1907ae8a075b721a21b9ac5de4
|
Provenance
The following attestation bundles were made for beckit-3.3.1.tar.gz:
Publisher:
cd.yml on kicka5h/beckit-book-editor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beckit-3.3.1.tar.gz -
Subject digest:
78cd3a8a1167fdec3362967d44b34a68edab629438e6147b7eafc78ec9187f82 - Sigstore transparency entry: 983876954
- Sigstore integration time:
-
Permalink:
kicka5h/beckit-book-editor@2fcbdb92acae74c7fd78e9e63490fea4206c0ce7 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/kicka5h
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@2fcbdb92acae74c7fd78e9e63490fea4206c0ce7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file beckit-3.3.1-py3-none-any.whl.
File metadata
- Download URL: beckit-3.3.1-py3-none-any.whl
- Upload date:
- Size: 48.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fef9b4911e452321a7f46b3e297993bdca76ea0ff43ad7783bdd8f2a4478e0e
|
|
| MD5 |
497eb4acae0f984fa62c48c07ee106f9
|
|
| BLAKE2b-256 |
f266f0651175bbd87413db29a68311e12c44d4d11362ac14c6c9707e618941b7
|
Provenance
The following attestation bundles were made for beckit-3.3.1-py3-none-any.whl:
Publisher:
cd.yml on kicka5h/beckit-book-editor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beckit-3.3.1-py3-none-any.whl -
Subject digest:
8fef9b4911e452321a7f46b3e297993bdca76ea0ff43ad7783bdd8f2a4478e0e - Sigstore transparency entry: 983876957
- Sigstore integration time:
-
Permalink:
kicka5h/beckit-book-editor@2fcbdb92acae74c7fd78e9e63490fea4206c0ce7 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/kicka5h
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@2fcbdb92acae74c7fd78e9e63490fea4206c0ce7 -
Trigger Event:
push
-
Statement type: