bloudraad/akasia: A libre, metric-compatible alternative to Aptos - Codeberg.org
This website requires JavaScript.
bloudraad/akasia
Watch
Star
Fork
You've already forked akasia
Code
Issues
Pull requests
Releases
Activity
A libre, metric-compatible alternative to Aptos
1 commit
1 branch
1 tag
10 MiB
Python
95.1%
Just
3.8%
Dockerfile
1.1%
main
Find a file
HTTPS
Download ZIP<br>Download TAR.GZ<br>Download BUNDLE
Open with VS Code
Open with VSCodium
Open with Intellij IDEA
Jacques Germishuys
1e7dcd8ac8
feat: initial version
2026-06-23 17:15:51 +01:00
.woodpecker
feat: initial version
2026-06-23 17:15:51 +01:00
data
feat: initial version
2026-06-23 17:15:51 +01:00
docs
feat: initial version
2026-06-23 17:15:51 +01:00
scripts
feat: initial version
2026-06-23 17:15:51 +01:00
.gitignore
feat: initial version
2026-06-23 17:15:51 +01:00
ci-base.Dockerfile
feat: initial version
2026-06-23 17:15:51 +01:00
ci-base.Dockerfile.dockerignore
feat: initial version
2026-06-23 17:15:51 +01:00
CLAUDE.md
feat: initial version
2026-06-23 17:15:51 +01:00
FONTLOG.txt
feat: initial version
2026-06-23 17:15:51 +01:00
Justfile
feat: initial version
2026-06-23 17:15:51 +01:00
mise.toml
feat: initial version
2026-06-23 17:15:51 +01:00
OFL.txt
feat: initial version
2026-06-23 17:15:51 +01:00
README.md
feat: initial version
2026-06-23 17:15:51 +01:00
requirements.lock
feat: initial version
2026-06-23 17:15:51 +01:00
requirements.txt
feat: initial version
2026-06-23 17:15:51 +01:00
ROADMAP.md
feat: initial version
2026-06-23 17:15:51 +01:00
README.md
Akasia
A libre, metric-compatible companion to Microsoft Aptos — in the tradition of<br>Carlito for Calibri, Caladea for Cambria, and Arimo for Arial.
What it is
Akasia pairs libre outlines with Aptos's metrics: substitute it for Aptos and a<br>document reflows and paginates identically, yet every outline comes from an<br>OFL-licensed font rather than from Aptos.
It is a composite of eight OFL-1.1 families:
Base — Source Sans 3 (Adobe). Most of the alphabet, where its shapes<br>already sit close to Aptos, stays Source Sans.
Grafts — the 28 letters whose Source Sans shape strays furthest from Aptos<br>are each replaced by the closest-matching donor (Hanken Grotesk, Albert Sans,<br>Figtree, Open Sans, Public Sans, Arimo), weight-matched and re-spaced to sit<br>like the base.
Coverage — Greek, Cyrillic, currency and symbols come from Open Sans, Arimo<br>and Noto Sans Symbols.
The metrics are Aptos's, taken as data: advance widths, per-glyph sidebearings<br>(the lsb : lsb+rsb fraction), kerning pairs and vertical metrics. No Aptos<br>outline is ever copied — that line is the whole legal basis of the face.
The family
Twelve static styles — Light, Regular, SemiBold, Bold, ExtraBold and Black, each<br>with a true italic.
Weight<br>Class<br>Italic
Light<br>300<br>yes
Regular<br>400<br>yes
SemiBold<br>600<br>yes
Bold<br>700<br>yes
ExtraBold<br>800<br>yes
Black<br>900<br>yes
Weights are matched by stem, not by name: the build binary-searches each variable<br>axis for the instance whose I-stem equals Aptos's. Light through ExtraBold fall<br>within the Source Sans axis; Black sits roughly 20 stem-units above it, so the<br>build extrapolates Source Sans's weight model past the axis top — preserving the<br>shape topology — until the stem matches. Italics graft from the donors' italic<br>variable fonts, never by slanting the upright.
Donors and the graft map
Donor<br>Letters<br>Count
Source Sans 3 (base)<br>the rest of the alphabet
Hanken Grotesk<br>C G O U c g h j l m u<br>11
Albert Sans<br>N a s t w
Figtree<br>D K M k r
Open Sans<br>H V W X
Public Sans<br>J Q
Arimo
The map lives in data/graft.json (regenerate with just graft-map) and covers<br>letters only. The rest of the repertoire — Greek, Cyrillic, currency, symbols,<br>box-drawing — is filled by coverage, reaching ~99% of Aptos's codepoints. Eleven<br>currency signs and three dingbats that no audited OFL donor carries fall back to<br>the system font.
Verifying compatibility
Every advance, sidebearing and kern pair equals Aptos's, so a substituted<br>document keeps the same line breaks, the same widows and orphans, and the same<br>page count. The shapes read as a close relative, not a copy.
To see it, just overlay superimposes a built style on Aptos (agreement in<br>black, divergence in colour) and just pagination diffs line breaks page by<br>page. Both need a local copy of Aptos (see Contributing); neither<br>is needed to build or use Akasia.
Install
Download the latest release and<br>install the TTFs:
macOS — open each .ttf and click Install Font, or drop them in ~/Library/Fonts.
Linux — copy them to ~/.local/share/fonts, then run fc-cache -f.
Windows — select all, right-click, Install.
Set your document's font to Akasia. Where Akasia lacks a codepoint, the renderer<br>falls back for that character alone.
Build from source
The build is reproducible from the repository alone — committed metric data<br>(data/), the OFL donors pinned in fetch_sources.py, and the locked...