Bezy is a cross-platform, Rust-based font editor with a built-in bidirectional (RTL/LTR) text editor. It draws inspiration from technical-user oriented customizable editors like RoboFont and MFEK, while reimagining font editing for contemporary Unix-like AI and CLI heavy workflows. The core dependancies are: Bevy, HarfRust, Norad, Kurbo, Fontc, FontIR.
Bezy is written in the Rust programming language using a game engine to create a performant, fun, and aesthetic experience that keeps users in a flow state. Rust has great documentation, a friendly compiler with useful error messages, top-notch tooling, and an integrated package manager and build tool. With help from AI tools like Claude Code and Gemini CLI, it can be easier to use than Python. Don't be intimidated if you are not an expert programmer—this application is designed for students, designers, and artists to be able to customize it and make their own tools. This project is a spiritual sucsessor to the RoboFont design principles:
A typeface designer (who does not want to do any scripting and has no means of letting someone else do that work), has to deal with the available user interface, tool set, feature set, and the list of bugs in the typeface design applications they use. This makes the designer a captive to the development of applications that are often merely production tools and not intended for design. Not being (partly) the designer of your own tools puts a designer in a vulnerable position.
We aim to be an open and welcoming community that values working in the open and sharing knowledge. Contributors of all skill levels are welcome.
“The enjoyment of one's tools is an essential ingredient of successful work.”
—Donald Knuth
“Many have tried to replace FontForge—all have failed. I might fail, in fact, history says I probably will. Yet, the current state of affairs is so bad I feel I must try.” —Fredrick Brennan
Install Rust by following the official instructions at https://www.rust-lang.org/tools/install
Verify installation:
cargo --version
git clone https://github.com/bezy-org/bezy.git
cd bezy
# Build and run
cargo run
# Build with optimizations (slower to compile, faster to run)
cargo run --release
# Build and run with a specific font source (UFO or designspace)
cargo run -- --edit path/to/your/font.ufo
The first build will take a few minutes as it downloads and compiles all dependencies. Subsequent builds will be much faster (usually under 30 seconds).
- Use
cargo run --release
for the best performance
You can install Bezy globally to use it as a command-line tool from anywhere on your system.
# From within the bezy directory after cloning
cargo install --path .
# Or install directly from GitHub
cargo install --git https://github.com/bezy-org/bezy.git
Once installed, you can run Bezy from anywhere:
# Run with default settings
bezy
# Edit a specific font (UFO or designspace)
bezy --edit ~/Fonts/MyFont.ufo
# Use with any command line flags
bezy --theme lightmode --edit MyFont.ufo
To update Bezy after making changes or pulling new updates:
# If you're working from the cloned repository
cd /path/to/bezy
git pull
cargo install --path .
# Or reinstall directly from GitHub
cargo install --git https://github.com/bezy-org/bezy.git
# If you are having trouble updating try with --force
cargo install --path . --force
To remove the globally installed version:
cargo uninstall bezy
By default, Cargo installs binaries to ~/.cargo/bin/
. Make sure this directory is in your PATH. If it's not, add this to your shell configuration file (.bashrc
, .zshrc
, etc.):
export PATH="$HOME/.cargo/bin:$PATH"
Bezy is designed to be used as a command line tool in Unix-style workflows. If you aren't familiar with working this way, it's worth learning and will save you time in the long run.
bezy [OPTIONS]
The --edit
flag intelligently handles both UFO directories and designspace files:
- Single UFO: Shows a clean interface without master selection controls
- Designspace: Shows master selector circles for switching between different masters
Flag | Short | Description | Example |
---|---|---|---|
--edit <PATH> |
-e |
Edit a font source (UFO directory or .designspace file) | bezy --edit MyFont.ufo |
--theme <NAME> |
-t |
Set the color theme | bezy --theme lightmode |
--no-default-buffer |
Start without default text buffer | bezy --no-default-buffer |
|
--help |
-h |
Show help information | bezy --help |
--version |
-V |
Show version information | bezy --version |
Bezy includes four built-in themes embedded in the application and supports optional custom theme creation:
darkmode
(default) - Dark background with light textlightmode
- Light background with dark textstrawberry
- Pink/red/green themecampfire
- Warm orange/brown theme
These themes are embedded in the application and work in both development and installed modes.
You can optionally create and edit your own themes by creating a ~/.bezy/themes/
directory. The theme system works as follows:
Default behavior: Uses embedded themes (no setup required)
With ~/.bezy/themes/
: Uses themes from this directory when it exists
- If
~/.bezy/themes/
exists → Load themes from~/.bezy/themes/*.json
- If not → Use embedded themes (default)
- Hot-reload: When using custom themes, changes are reflected instantly when you save the file
# Optional: Create themes directory for customization
mkdir -p ~/.bezy/themes
# Copy built-in theme as starting point (get from src/ui/themes/ in source)
# Or create your own JSON file following the theme structure
# Use your custom theme
bezy --theme mytheme
Note: You don't need to create ~/.bezy/themes/
unless you want to customize themes. The built-in themes work out of the box.
# Edit a single UFO (no master selector shown)
bezy --edit ~/Fonts/MyFont.ufo
# Edit a designspace for variable fonts (master selector shown)
bezy --edit ~/Fonts/MyVariable.designspace
# Use the built-in test font with strawberry theme
bezy --theme strawberry
# Combine as many flags as you need
bezy --edit ~/Fonts/MyFont.ufo --theme lightmode
# Short form using -e
bezy -e MyFont.ufo
Shortcut | Action | Context |
---|---|---|
Cmd/Ctrl + Z |
Undo | Global |
Cmd/Ctrl + Shift + Z |
Redo | Global |
Cmd/Ctrl + S |
Save font | Global |
Cmd/Ctrl + G |
Show glyph palette | Global |
Escape |
Clear selection / Exit tool | Selection mode |
Cmd/Ctrl + A |
Select all points | Selection mode |
Shortcut | Action |
---|---|
Home |
Go to first glyph |
End |
Go to last glyph |
Cmd/Ctrl + Plus |
Zoom in |
Cmd/Ctrl + Minus |
Zoom out |
T |
Toggle zoom to cursor |
Shortcut | Action | Context |
---|---|---|
Arrow Keys |
Nudge selected points (1 unit) | Points selected |
Shift + Arrow Keys |
Nudge selected points (10 units) | Points selected |
Cmd/Ctrl + Arrow Keys |
Nudge selected points (100 units) | Points selected |
Click + Drag | Select points with marquee | Selection tool |
Shift + Click |
Add to selection | Selection tool |
Control | Action |
---|---|
Mouse Wheel | Zoom in/out |
Left/Middle Mouse + Drag | Pan view |
T |
Toggle zoom to cursor on/off |
The edit-mode toolbar provides access to various editing tools. Each tool has specific behaviors:
- Selection Tool: Select and manipulate points
- Pen Tool: Add new points and curves
- Knife Tool: Cut paths at specific points
- Text Tool: Edit text samples for testing
- Measure Tool: Measure distances between points
- Start with the built-in font: Run
cargo run
without arguments to explore with the default Bezy Grotesk font - Use release mode for smoother performance:
cargo run --release
- Save frequently: Use
Cmd/Ctrl + S
to save your changes - Experiment with themes: Try different themes to find what works best for your eyes
- Read the code: If you don't understand how something works, read the source code. Use a tool like Claude Code if you need help. This project is designed to be understandable and modifyable by regular users.
Bezy currently supports:
- UFO 3 (Unified Font Object) - Individual font files
- Designspace - Variable font sources
UFO files are directories (folders) containing XML files that describe your font. They're human-readable, version-control friendly, and application independant.
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
The GNU General Public License is a copyleft license for software and other kinds of works.