Features
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.

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:

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║