A modern, cross-platform font editor built with TypeScript and Rust, focused on bringing contemporary technologies and design principles to type design.
Shift aims to redefine font editing by combining the power of Rust for performance-critical tasks with the flexibility of web-based UI technologies. Whether you're a type designer or a developer, Shift offers a fresh approach to creating and editing fonts with a focus on speed, precision, and extensibility.
Important
Shift is in a pre-alpha state and is currently only suitable for developers interested in contributing to the project
┌──────────────────────────────────────────────────────────────┐
│ Desktop App │
│ Electron shell ←→ React UI ←→ TypeScript Editor │
└───────────────────────────────┬──────────────────────────────┘
│ IPC / native bridge
┌───────────────────────────────┴──────────────────────────────┐
│ Rust Crates │
│ shift-bridge transport adapter │
│ shift-workspace open working state │
│ shift-font live font authoring model │
│ shift-store SQLite working store │
│ shift-source .shift source package IO │
└──────────────────────────────────────────────────────────────┘
The desktop app owns shell and editor interaction. Rust owns the live font authoring model, durable working state, source package IO, and native transport boundary.
shift-font is the core Rust object model:
Fontowns glyphs, sources, axes, metadata, and font-level data.Sourceis an editable designspace position with a name and location.Glyphis a glyph concept identified byGlyphId.GlyphLayeris authored editable data for one glyph at one source.
Stable IDs are identity. Names and Unicode values are editable metadata.
git clone https://github.com/shift-editor/shift.git
cd shift
pnpm install
pnpm build:native
pnpm devSee ROADMAP.md for current implementation status and planned features. We are planning to ship a production grade font editor.
Join our Discord server to ask questions, report bugs, or contribute!
GNU General Public License (GPL) v3.0
Copyright © 2026 Kostya Farber. All rights reserved.
