- Rust 100%
|
Some checks failed
CI / check (push) Has been cancelled
Decisions made: - Folder watching stays in GUI process for MVP - Preview caching: LRU memory + optional disk cache - Lazy validation for missing font files - Self-update via Forgejo Releases + updater helper process |
||
|---|---|---|
| .forgejo/workflows | ||
| archive | ||
| crates | ||
| docs | ||
| plugins | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| DECISIONS.md | ||
| LICENSE | ||
| PLAN.md | ||
| README.md | ||
| REQUIREMENTS.md | ||
| rust-toolchain.toml | ||
| TECH_STACK.md | ||
Typote
A Free and Open-source font manager for Windows, built in Rust with egui.
License: GPL-3.0-or-later
Platform: Windows 10 1809+
Status: Pre-release / active development
What is Typote?
Typote helps you browse, preview, activate, and organize your font collection — without cluttering your system with permanently installed fonts you only need for a single project.
Key features:
- Browse & preview all installed system and user fonts, plus any folder on disk
- Activate / deactivate fonts temporarily for the current session (no reboot, no registry hassle)
- Tags & collections — group fonts into "Logo Project", "Branding", "QUNI-ready", etc.
- Live preview with custom text, multi-size waterfall, and side-by-side comparison
- Google Fonts integration — browse the catalog and install with one click
- QUNI compliance audit — check inclusive/post-binary glyph support
- Smart collections — auto-populated sets like "All Serif Fonts" or "Recently Added"
- Plugin system — extensible via sandboxed WASM plugins
Screenshots
(Coming soon — see REQUIREMENTS.md §13 for ASCII wireframes)
System Requirements
- OS: Windows 10 1809 (October 2018 Update) or later
- RAM: 4 GB minimum, 8 GB recommended for large font libraries (10,000+ fonts)
- Disk: ~50 MB for the application, plus whatever your font collection needs
- No admin required for user-level font activation
Installation
Portable (no installer)
Download typote.exe from the Releases page, place it anywhere, and run.
From source
# 1. Clone the repository
git clone https://git.b0t.pm/sid/Typote.git
cd typote
# 2. Build (requires Rust 1.85+)
rustup update
cargo build --release
# 3. Run
cargo run --release
The first build may take several minutes because it compiles the egui/wgpu stack and SQLite.
Development
Project structure
typote/
├── crates/
│ ├── typote-core/ # Domain types, traits, SQLite database — NO UI deps
│ ├── typote-platform/ # Windows-specific: registry, AddFontResource, folder watching
│ ├── typote-ui/ # egui application (the GUI)
│ ├── typote-cli/ # Headless CLI companion
│ └── typote-plugin-sdk/ # Public API for plugin authors (MIT licensed)
├── plugins/
│ ├── google-fonts/ # Built-in Google Fonts provider
│ └── local-fs/ # Built-in local filesystem provider
├── tests/ # Integration tests across crate boundaries
├── docs/adr/ # Architecture Decision Records
└── README.md # This file
Essential commands
# Debug build
cargo build
# Release build
cargo build --release
# Run with logging
RUST_LOG=typote=debug cargo run
# Run all tests
cargo test
# Lint (CI enforces zero warnings)
cargo clippy --all-targets --all-features -- -D warnings
# Format check
cargo fmt --all -- --check
# Format apply
cargo fmt --all
# Generate docs
cargo doc --no-deps --open
Adding a feature
See AGENTS.md for detailed coding conventions, architecture rules, and how to add new tools, providers, database queries, and UI views.
Plugin Development
Typote supports sandboxed WASM plugins packaged as .typote-plugin zips.
- SDK:
crates/typote-plugin-sdk/(MIT licensed — use it freely) - Example plugins:
plugins/google-fonts/,plugins/local-fs/ - Protocol: MessagePack over wasmtime (see
DECISIONS.md§5)
Contributing
We welcome contributions! Please:
- Read
AGENTS.mdandDECISIONS.mdfirst. - Open an issue to discuss large changes before writing code.
- Follow conventional commits (
feat:,fix:,refactor:, etc.). - Ensure
cargo clippy --all-targets --all-features -- -D warningsandcargo fmt --checkpass.
License
- Application: GPL-3.0-or-later
- Plugin SDK (
typote-plugin-sdk): MIT
Plugins are separate works. You may license your own plugins however you choose.
Acknowledgements
Built with:
- egui — immediate-mode GUI
- ttf-parser + fontdb + swash — font parsing and rasterization
- rusqlite — SQLite with FTS5
- tokio — async runtime
- wasmtime — WASM plugin sandbox
The QUNI feature is inspired by the Queer Unicode Initiative by Bye Bye Binary.
Links
- Repository: https://git.b0t.pm/sid/Typote
- Issues: https://git.b0t.pm/sid/Typote/issues
- Docs: See
docs/and runcargo doc --no-deps --open