🧱 Block Explorer

Box Drawing & Block Elements Blocks

The Box Drawing block (U+2500–U+257F) and Block Elements block (U+2580–U+259F) provide characters for drawing text-based user interfaces and terminal art in monospaced fonts. This guide explores both blocks, explains how their characters combine to form borders and bar charts, and provides a complete reference.

·

Before graphical user interfaces became ubiquitous, software developers built entire visual environments using nothing but text characters. The Box Drawing block (U+2500–U+257F) and Block Elements block (U+2580–U+259F) are the Unicode heirs to this tradition — a repertoire of characters that let you draw lines, borders, tables, and filled areas entirely in text. They remain deeply practical today in terminal applications, command-line interfaces, and any context where a monospace font is used.

Box Drawing Characters (U+2500–U+257F)

The Box Drawing block contains 128 characters covering every combination of line segments at the four cardinal directions (left, right, up, down), in both single and double line weights, with various join styles.

Basic Single Lines

The simplest box drawing characters are straight lines:

Char Code Point Description
U+2500 Box Drawings Light Horizontal
U+2502 Box Drawings Light Vertical
U+2501 Box Drawings Heavy Horizontal
U+2503 Box Drawings Heavy Vertical

Corners

Corners join horizontal and vertical lines:

Char Code Point Description
U+250C Light Down and Right (top-left corner)
U+2510 Light Down and Left (top-right corner)
U+2514 Light Up and Right (bottom-left corner)
U+2518 Light Up and Left (bottom-right corner)
U+2554 Double Down and Right
U+2557 Double Down and Left
U+255A Double Up and Right
U+255D Double Up and Left

T-Junctions and Crosses

Where three or four lines meet:

Char Code Point Description
U+251C Light Vertical and Right
U+2524 Light Vertical and Left
U+252C Light Down and Horizontal
U+2534 Light Up and Horizontal
U+253C Light Vertical and Horizontal
U+256C Double Vertical and Horizontal

Mixed Single/Double Lines

The block includes characters for mixing single and double lines, allowing visual hierarchy in TUI tables:

Char Code Point Description
U+2552 Down Single and Right Double
U+2553 Down Double and Right Single
U+255E Vertical Single and Right Double

Building a TUI Border

Using box drawing characters, a terminal application can draw a bordered panel:

╔══════════════════╗
║  Unicode FYI     ║
╠══════════════════╣
║ Characters: 149K ║
║ Blocks: 167      ║
╚══════════════════╝

This structure uses: - ╔ U+2554, ═ U+2550, ╗ U+2557 for the top border - ║ U+2551 for vertical sides - ╠ U+2560, ╣ U+2563 for the horizontal divider - ╚ U+255A, ╝ U+255D for the bottom border

Popular terminal UI libraries like Python's rich, Go's tview, and Rust's tui-rs all use these characters internally.

Dashed and Dotted Lines

The box drawing block also includes dashed variants for visual variety:

Char Code Point Description
U+254C Light Double Dash Horizontal
U+254D Heavy Double Dash Horizontal
U+2504 Light Triple Dash Horizontal
U+2505 Heavy Triple Dash Horizontal
U+2508 Light Quadruple Dash Horizontal

Block Elements (U+2580–U+259F)

The Block Elements block contains 32 characters that divide a character cell into filled and empty regions. Because each character cell in a monospace font is a fixed rectangular grid, these characters can create smooth-looking gradients, progress bars, and pixel art by selectively filling halves, quarters, and eighths of each cell.

Half Block Characters

Char Code Point Description
U+2580 Upper Half Block
U+2584 Lower Half Block
U+258C Left Half Block
U+2590 Right Half Block
U+2588 Full Block
U+258B Left Seven Eighths Block
U+258D Left Three Eighths Block

Shade Characters

The three shade characters are among the most visually recognizable box/block characters:

Char Code Point Description Density
U+2591 Light Shade ~25% fill
U+2592 Medium Shade ~50% fill
U+2593 Dark Shade ~75% fill
U+2588 Full Block 100% fill

These create a four-step grayscale ramp used for shadows, gradients, and the classic "installing..." progress visualization of early DOS software. In modern terminals with color support, these shade characters can be colored to create smooth-looking gradients.

Vertical Eighths for Progress Bars

A particularly useful subset is the vertical eighths, which fill the cell from the bottom up in eight steps:

Char Code Point Fill
U+2581 1/8
U+2582 2/8
U+2583 3/8
U+2584 4/8 (lower half)
U+2585 5/8
U+2586 6/8
U+2587 7/8
U+2588 Full

These eight characters make it possible to render a smooth bar chart or histogram in a terminal with 8× the vertical resolution of a simple block character approach. Python's sparklines libraries, btop, and many other TUI tools use exactly this technique.

Retro Computing Aesthetics

Box drawing characters carry a strong retro-computing aesthetic associated with the era of DOS, BBS (Bulletin Board Systems), and early Unix terminals. ANSI art — the BBS-era art form of creating elaborate images using box drawing, block elements, and ANSI color codes — still has an active community today.

Many modern developer tools intentionally evoke this aesthetic: - htop / btop for system monitoring - git log --graph for commit history - Database query results in psql and mysql clients - Python's rich library for terminal output formatting

Font Support and Alignment

Box drawing characters only work correctly when: 1. A monospace font is used 2. The font includes all the box drawing characters 3. Line spacing is tight enough that characters in adjacent rows visually connect

Popular monospace fonts with excellent box drawing support include Fira Code, JetBrains Mono, Cascadia Code, and Iosevka. If a font lacks some of the mixed single/double or heavy variants, rendering will be inconsistent.

The recommendation for terminal application developers is to test on multiple fonts and provide ASCII fallbacks (-, |, +) for environments where box drawing characters may not render correctly.

More in Block Explorer

Basic Latin (ASCII) Block

The Basic Latin block (U+0000–U+007F) is the first Unicode block and covers …

Latin-1 Supplement Block

The Latin-1 Supplement block (U+0080–U+00FF) extends ASCII with accented Latin characters for …

General Punctuation Block

The General Punctuation block (U+2000–U+206F) contains typographic spaces, dashes, quotation marks, and …

Mathematical Operators Block

The Mathematical Operators block (U+2200–U+22FF) contains 256 symbols covering set theory, logic, …

Arrows Block

The Arrows block (U+2190–U+21FF) contains 112 arrow characters including simple directional arrows, …

Dingbats Block

The Dingbats block (U+2700–U+27BF) was created to encode the Zapf Dingbats typeface …

Miscellaneous Symbols Block

The Miscellaneous Symbols block (U+2600–U+26FF) is one of Unicode's most eclectic, containing …

CJK Unified Ideographs Overview

The CJK Unified Ideographs block (U+4E00–U+9FFF) is one of the largest Unicode …

Hangul Block

The Hangul Syllables block (U+AC00–U+D7A3) contains 11,172 precomposed Korean syllable blocks algorithmically …

Emoji Blocks Overview

Emoji in Unicode span multiple blocks across the Supplementary Multilingual Plane, including …

Currency Symbols Block

The Currency Symbols block (U+20A0–U+20CF) contains dedicated Unicode characters for currencies that …

Enclosed Alphanumerics Block

The Enclosed Alphanumerics block (U+2460–U+24FF) contains circled numbers, parenthesized numbers and letters, …

Geometric Shapes Blocks

The Geometric Shapes block (U+25A0–U+25FF) and related blocks contain squares, circles, triangles, …

Musical Symbols Block

The Musical Symbols block (U+1D100–U+1D1FF) is a Supplementary Multilingual Plane block containing …