ASCII Art Text: How FIGlet Banners Work and Where to Use Them
How ASCII art fonts are actually built, which one suits a README or a CLI splash screen, and the monospace trap that wrecks half the banners people paste.
The first time I put a banner at the top of a README, it looked perfect in my editor and arrived in the pull request as a pile of gravel. I had pasted it into a normal paragraph instead of a code block. That mistake is so common it’s worth putting first: ASCII art survives only inside a monospace font with its whitespace untouched. Everything else in this post is detail.
If you just want the banner, the Text to ASCII Art Generator does it in one field.
Where the fonts come from
The lettering style has a name. FIGlet — “Frank, Ian and Glenn’s letters” — was written by Glenn Chappell in 1991, and the font format it introduced, the .flf file, is still what most generators read. An .flf is not a font in the TrueType sense. It’s a text file listing, for every character, the handful of rows that draw it, plus rules for how neighbouring letters may overlap. That overlap logic is called smushing, and it’s the reason a good FIGlet V tucks under the arm of a preceding T instead of sitting a polite space away.
Hundreds of those fonts exist. Most are unusable. The ones people actually reach for are a shortlist: Standard, Big, Slant, Banner, Block, and Doom.
Our generator ships seven, built two different ways. Standard is hand-drawn line art, letters assembled from slashes, pipes and underscores. The other six come from a single 5×7 bitmap, the same grid a cheap LED sign uses, rendered with a different fill character and scale each time. That second approach has a side benefit: adding Cyrillic meant drawing 22 new glyph shapes once, not redrawing six fonts.
Picking a font by where it’s going
Width is the whole decision, and terminals are still 80 columns wide because IBM punch cards had 80 columns. Nobody has escaped that number.
- Block and Banner run about 12 columns per character. Six letters and you’re at the edge.
- Standard averages 7 or 8, so a short word fits comfortably.
- Mini is 6, and it’s the only one that survives a phrase rather than a word.
Shadow and Slant look good in a screenshot and badly in a narrow terminal, because both add columns the letters themselves don’t need. Slant alone costs six extra columns before you’ve typed anything.
The monospace trap
Here is what actually breaks banners, in rough order of how often I’ve seen it happen:
Markdown paragraphs collapse runs of spaces, so a banner outside a fenced code block loses its alignment on the first line. Use triple backticks with no language tag — a syntax highlighter will otherwise try to colour your art as if it were Rust.
Chat apps are worse. Discord and Slack both render messages in a proportional font by default, where i is narrower than m, so every column drifts. Same fix: triple backticks.
Word and Google Docs will paste the text happily and destroy it silently. Select the block and set the font to Consolas or Courier New.
Email is the one that catches people out. An HTML email re-flows the text; a plain-text one doesn’t.
What it’s still good for
CLI splash screens, mostly. Docker, Vagrant and a fair number of Node build tools print one on startup, and the reason is not decoration — it’s that a banner tells you instantly which tool owns the terminal you’re staring at. Worth guarding it behind a TTY check, though, or it ends up in someone’s CI log.
Section markers inside long source files are the other underrated use. A block-letter CONFIG in a comment is findable by scrolling in a way that // ---- config ---- never is.
Then there’s /etc/motd, which is plain text by definition, and figlet piped into cowsay, which has no defence beyond being funny.
Pick a word, try it in all seven fonts at the Text to ASCII Art Generator, and check the column count before you paste. If you need the reverse trick — one string repeated a few hundred times — the Text Repeater handles that instead.