Cantrip
A font family for Software Alchemists
Cantrip
A font family for Software Alchemists
0xCA9721B
A F097 FAM1LY F02 50F7WA2E ALC4EM1575
Cantrip
A FONT FAMILY FOR SOFTWARE ALCHEMISTS
Cantrip
Monospace fonts don't have to be boring.
O' sphinx of black quartz, judge my vow and
pack my box with five dozen liquor jugs!
AMAZINGLY FEW DISCOTHEQUES PROVIDE JUKEBOXES:
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG?
0118 999 88199 9119 725 3
Jinxed wizards pluck ivy from the big quilt.
Mix Zapf with Veljovic and get quirky Beziers.
1337 1701 58008 90210 42069 12345
!@#$%^&*()-=_+[]{}/\|
Witaj świecie Gött mos
£€¥
function main() {
const checkboxes = document.querySelectorAll(
'input[name="font-feature"]'
);
function updateFontFeatureSettings() {
checkboxes.forEach(cb => {
document.body.style.setProperty(
`--font-feature-${cb.value}`,
`${cb.checked ? 1 : 0}`
);
});
}
checkboxes.forEach((cb) => {
cb.addEventListener("change", updateFontFeatureSettings);
});
updateFontFeatureSettings();
}
if (document.readyState != 'loading'){
main();
} else {
document.addEventListener('DOMContentLoaded', main);
}
abstract admin and api append args
array Array as assert async auto axes await
bar bool boolean branch break case
catch chan char checkout class clone
close commit config const constructor
continue css data database debug
def default defer del delete Dict
directory DISPLAY do document done
double eax elif else end enum
error event except exception export
extends FactoryProviderImpl fallback fallthrough False false file
final finally float foo for from
func function get GET git global
go goto graph hash html i id
if implements import in index
insert instance instanceof int Integer
interface is j join json JSON k
kwargs lambda let LinkedList list listen
listener log main MAIN-PROCEDURE Map
margin max merge method min mov
new nil node None nonlocal --no-verify not
null object Object offset open or
package padding path POST post PostgreSQL print
private property protected public pull
push put query queue raise range
React read request require response result
return RuntimeError select self set sizeof sql
stack static status string struct
super switch table temp template
then this throw throws timestamp
TODO token trace tree True true
try type typename undefined union
until update url user using UUID value
var variable void volatile where
WHERE while window with write YAML yield
Current version:
Why?
I've been fascinated by letter forms for a long time. My own
handwriting has slowly evolved to include a few intentionally unusual
ones - for fun. There's something inherently satisfying about leaving
exaggerated swooping forms on the page.
I also wanted to have a unique monospace font for my own use in
programming. As screen real estate crowds with an endless cavalcade
of side panels, I find most fonts' eighty-character horizontal space
to be far too wide at any legible point size. Additionally, many code
fonts focus primarily on syntax-specific ligatures, like joining an
"=>" into a single arrow glyph by default. I find it kind of
annoying for many of the same reasons as
outlined here. What I'd rather do with ligatures is focus on the
words themselves, giving individual words a more unique profile and
making the text more legible under certain circumstances.
Anyway, if you enjoy this, go ahead and use it. And if not... well,
I made this for myself and
no one is forcing you to use it. -
Default Features
Texture Healing
Off
Aid Mix Win mix win awl imm mmi ttm llm Wii
Sip
amj wel ism Api well
On
Aid Mix Win mix win awl imm mmi ttm llm Wii
Sip
amj wel ism Api well
This font has multiple glyphs at varying widths for certain letters.
Some (like "i") can be thinned and some can be widened (like "m").
It uses contextual substitution to find nearby pairs of thinnable and
widenable letters. The result is a font where a seven-letter word
will always be seven times the width of a single letter, but the
individual letters might be shifted to produce a more legible
outcome. Think of it like reverse-kerning. Instead of adjusting the
space between letters, it adjusts the letter widths themseleves!
My Mission: min-max whimsy with calming pairs conjoined in Majestic
Karamja, cowling whole immolated bellmouths and awwing at imminent
bitter cattle militia. assertEmailFirewallWorksAndApiHasBeenEnabled()
The prismatic summary? findLowerCaseValueForAirConditioningApi()
Attempt All lower molars and injure no warrior's llama milk. These
immigrants worry about a merry tommorrow. Lemma: Shining at Twilight,
the Settlement's mime emoji amuse calm mommies walking.
Since creating this font, I discovered
Monaspace,
which dubbed this kerning alternative "Texture Healing".
Cantrip uses a much more visually extreme version of this technique,
both in terms of how much space it "borrows" and because it can do
this from up to five letters away.
Swash Caps, Ligatures & Other Contextual Alternatives
This font includes some alternate capitals that will appear at the
beginnings of words, and are specifically intended to make
camelCaseVariableNames "pop". There are also a few other alternate
glyphs that add flair if there's room to do so.
HARK! AVOID ANATHEMA NEAR LINGERING BELLIES. ANNEX XYLOPHONES SIMPLY
DEAR TO RUBBERRED BACKPACKING - OVERT ZONED DIAGETIC CLOCKWORK. Call
Ten Amber Xanadu Round Kyle K. findLegalXPositionForConditionalCSS()
NONE PIZZA WITH LEFT BEEF. Fool the ZZYZX Zoo's dazzling zebras.
In joining this jam, adjust major pigfaced finals. q[] questions
EFFECTIVE QUANTUM QI of Falklands background.
Internationalization Support
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁł
ŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ
¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ × ÷
Cantrip contains glyphs to cover the
Latin-1 Suppliment
and
Latin Extended-A
Unicode ranges, covering a wide variety of languages. These glyphs
generally do not include variant width forms.
user@dev
🭬 ~/src/cantrip
🭬
./boxdemo.sh
┌─────────────────────┐ ┌─┬┐ ╔═╦╗ ╓─╥╖ ╒═╤╕
│ ╔═══╗ Cantrip Box- │ │ ││ ║ ║║ ║ ║║ │ ││
│ ╚═╦═╝ Drawing Demo │ ├─┼┤ ╠═╬╣ ╟─╫╢ ╞═╪╡
╞═╤══╩══╤═════════════╡ └─┴┘ ╚═╩╝ ╙─╨╜ ╘═╧╛
│ ├──┬──┤ │
│ └──┴──┘ │
└─────────────────────┘
It also includes a few glyphs commonly used by terminal applications, including
Box-Drawing characters.
Optional Styles
Alternate Cursive Styling
Cantrip includes some alternative cursive glyphs to add a bit of
variance to words and make the overall sillouhette of some individual
words more unique.
Assist these styles of passive glyphs with some hints suggesting
there be some others in certain positions. These letters have some
heft, lifting four crafty shifts. Attempt twilight standing to atone
the two trips. Curse wise stylish stems, bizarre foil zeroing on
dazzled stages. Sift those Special Screen visuals: WISELY COUNTERSIGN
THIS CLASS OF SIXTY-TWO ACCURSED. React to these styles best: try
training a pterodactyl from Etsy instead.
-
ss01 adds cursive "s" and "t" glyphs in contextual
positions.
-
ss02 adds ligatures for these cursive glyphs when joined
with certain other characters.
I should apologize to my third grade teacher. I was really
annoyed that just a few years after learning the print alphabet, we
suddenly had to learn an entire second alphabet because "this is the
way you have to write everything when you're an adult." Why not just
teach this first, then and skip the print version? I never
actually had to use cursive for anything but my own signature (which
doesn't even resemble letters at this point) after taking the SATs
and literally everything in my professional career has been typed.
So cursive has been obsolete since the 1990s, but it actaully can be
kind of fun. I created this font as a sample of my own handwriting
and yes, I do randomly use cursive "s" characters even though the
letters otherwise don't connect.
ss08: Proportional Width Glyphs
ss08 Off
Amusement models true WIDEN MADLY BUMMED radii illuminate
trollish vowels I'DN'T'VE KNOWN it's two o'clock at Randall's
& Sally's respective discotheques. Cordially, they ALLOW GHOSTS.
ss08 On
Amusement models true WIDEN MADLY BUMMED radii illuminate
trollish vowels I'DN'T'VE KNOWN it's two o'clock at Randall's
& Sally's respective discotheques. Cordially, they ALLOW GHOSTS.
This option causes all width-adjustable characters to always adjust
their width, ignoring any requirements for matching letter pairs. The
result is that the overall font is no longer anything resembling
monospace. There are also a few glyphs specifically for this feature
(like G ->
G) that don't align at all with the
monospace grid. It also activates some kerning for specific letter
pairings.
Alternative Numerals
Off
0123456789 #F0E1D2C3B4A5 0xf0e1d2c3b4a5 0xDEAD_BEEF #7fff00
lnum
0123456789 #F0E1D2C3B4A5 0xf0e1d2c3b4a5 0xDEAD_BEEF #7fff00
ss16
0123456789 #F0E1D2C3B4A5 0xf0e1d2c3b4a5 0xDEAD_BEEF #7fff00
This font uses "oldstyle" numerals by default, sized to match
lower-case letters. This gives each letter a more distinctive shape,
and I find them to be more legible overall. It does, however, make
random jumbles of characters look strange - hexadecimal literals
doubly so. Cantrip includes two options to handle this:
-
lnum swaps the digits for "lining" numerals that match the
upper-case letters instead.
-
ss16 adds special glyphs for a-f and A-F that match the
oldstyle digits, and substitutes these within hexadecimal literals
only.
Known Issues
On some text renderers, rounding errors mean the ligatures and thin -
wide pairs don't exactly match their unmodified counterparts. The
following lines should all be exactly the same width, with
the bars lined up at the end if everything is working properly:
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn║
mimimimimimimimimimimimimimimimimimimimimimimimimimimimimimimimimimimi║
trtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtr║