A Free and Open-source font manager for Windows, built in Rust with egui.
Find a file
Sid a26447f824
Some checks failed
CI / check (push) Has been cancelled
docs: decide open questions in DECISIONS.md, mark W1.3 complete in PLAN.md
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
2026-05-25 14:43:57 +02:00
.forgejo/workflows chore: initial project scaffold 2026-05-18 22:58:01 +02:00
archive Wave 1: Architecture & boundary cleanup 2026-05-24 15:03:52 +02:00
crates feat: W1.3 — FontActivator trait + CLI platform activation 2026-05-25 14:42:17 +02:00
docs chore: foundation review — fix D22, D23, D16; add docs 2026-05-19 01:34:37 +02:00
plugins feat: Wave 2 — tag management improvements + non-blocking install 2026-05-24 12:58:15 +02:00
.gitignore refactor(2.6.3-2.6.8): rename directories, imports, types, strings, and paths from fonty to typote 2026-05-19 12:38:38 +02:00
AGENTS.md feat: W1.3 — FontActivator trait + CLI platform activation 2026-05-25 14:42:17 +02:00
Cargo.lock feat: W1.3 — FontActivator trait + CLI platform activation 2026-05-25 14:42:17 +02:00
Cargo.toml build(2.6.2): rename crates in all Cargo.toml files (directories not yet renamed) 2026-05-19 12:32:01 +02:00
DECISIONS.md docs: decide open questions in DECISIONS.md, mark W1.3 complete in PLAN.md 2026-05-25 14:43:57 +02:00
LICENSE docs(2.6.1): rename Fonty→Typote in all documentation and marketing files 2026-05-19 12:31:04 +02:00
PLAN.md docs: decide open questions in DECISIONS.md, mark W1.3 complete in PLAN.md 2026-05-25 14:43:57 +02:00
README.md docs: add README.md and Phase 2.6 rename plan to ROADMAP.md 2026-05-19 12:26:57 +02:00
REQUIREMENTS.md docs(2.6.1): rename Fonty→Typote in all documentation and marketing files 2026-05-19 12:31:04 +02:00
rust-toolchain.toml chore: initial project scaffold 2026-05-18 22:58:01 +02:00
TECH_STACK.md docs(2.6.1): rename Fonty→Typote in all documentation and marketing files 2026-05-19 12:31:04 +02:00

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:

  1. Read AGENTS.md and DECISIONS.md first.
  2. Open an issue to discuss large changes before writing code.
  3. Follow conventional commits (feat:, fix:, refactor:, etc.).
  4. Ensure cargo clippy --all-targets --all-features -- -D warnings and cargo fmt --check pass.

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:

The QUNI feature is inspired by the Queer Unicode Initiative by Bye Bye Binary.