CHasm

A small Linux desktop suite written entirely in x86_64 assembly. No libc. No toolkit. No dynamic linking. Zero runtime.

x86_64 asm Unlicense Linux zero runtime
CHasm desktop screenshot

Every binary on screen is x86_64 assembly. tile holds the layout. strip drives the status row, fed by the asmites in chasm-bits. glass renders each pane (pseudo-transparency picks up the wallpaper). bare is the shell behind every prompt. show renders the syntax-highlighted source.

Why assembly?

Modern stacks are deep. A normal terminal loads 30+ shared libraries before drawing a single character. A shell pulls in Python, GLib, OpenSSL transitively. A window manager depends on a toolkit that depends on a compositor that depends on... CHasm strips all of that away to find out what you actually need.

The answer turns out to be: very little. The Linux kernel gives you syscalls. X11 is a documented Unix-socket wire protocol. Everything else is a choice. CHasm is the choice to write that everything else, by hand, in the smallest reasonable language.

No libc, no toolkit

Direct syscall for kernel work, the X11 wire protocol over a Unix socket for graphics. No dynamic linker, no malloc, no glibc, no Xlib, no GTK, no Qt. BSS-allocated buffers and that's it.

Single static ELF

Each tool is one self-contained binary, typically 20-150 KB. The whole desktop fits in under 500 KB of executable code. Nothing to update, nothing to break, no dependency graph to audit.

Microsecond startup

bare comes up in roughly 9 microseconds. No interpreter, no runtime initialisation, no library loading. The kernel hands control straight to your entry point.

Designed for battery

Polling, waking, and forking on a timer are suspect. Status segments use blocking reads on the right file/socket; X11 work compares target state to last- applied state before issuing requests. CPU goes back to sleep, fast.

The tools

Seven asm binaries that together form a complete X session, plus four Rust TUI configurators (the only non-asm parts of the suite — writing a configurator in pure asm would defeat the whole point).

bare

Shell (asm binary)
~16k LOC · ~150 KB

Interactive shell with line editing, history, completion, nicks, multi-pipes, redirects, here-strings, abbreviations, undo, and smart hotkeys. ~9 µs startup.

isene/bare

glass

Terminal Emulator (asm binary)
~12k LOC · ~110 KB

X11 wire protocol direct, kitty graphics, color emoji via XRender, pseudo-transparency, configurable fonts and keys. No toolkit, no Xlib, just the wire.

isene/glass

tile

Window Manager + Bar (asm binary)
~7k LOC · ~70 KB

Tiling window manager: 10 workspaces, per-workspace tabs, row-of-squares bar, smart cycling, stash. Bundles strip — the X11 status bar that hosts the asmites.

isene/tile

show

Pager / Viewer (asm binary)
~3.5k LOC · ~40 KB

File viewer with syntax highlighting, ESC sanitisation, cat / pane / pipe modes. Drop-in replacement for less when reading source.

isene/show

chasm-bits

Asmites (asm binaries)
~2k LOC · ~5 KB each

Tiny status-bar segment programs fed into strip: clock, cpu, mem, disk, battery, brightness, network, mailbox, moonphase, wintitle, and more. Each one a self-contained binary.

isene/chasm-bits

glyph

Font Rasterizer (asm binary)
~4.2k LOC · ~37 KB

TrueType / OpenType rasterizer: TTF parser, quadratic Bezier flatten, scanline NZW with 4×4 supersample AA, composite glyphs, UTF-8, variable fonts (fvar + gvar + IUP).

isene/glyph

bolt

Screen Locker (asm binary)
~2.5k LOC · ~24 KB

Fullscreen override-redirect locker with keyboard + pointer grab and a baked raw-RGB lock-screen image. A small suid-root C helper handles crypt() / shadow auth.

isene/bolt
Configurators

bareconf

Rush Config (Rust TUI)
edits ~/.barerc

TUI configuration tool for the bare shell. Browse and modify all settings with live previews. Atomic save: tmp → bak → publish.

isene/bareconf

glassconf

Glass Config (Rust TUI)
edits ~/.glassrc

Edit glass's bg / fg / cursor as 24-bit hex, step font size through nine presets, adjust opacity and cursor blink, manage the bg-cycle palette. Six built-in themes.

isene/glassconf

tileconf

Tile Config (Rust TUI)
edits ~/.tilerc

Configure tile's bar height, padding, workspace and tab colors, border widths, layout ratios. Live preview shows what the bar will look like as you tweak.

isene/tileconf

stripconf

Strip Config (Rust TUI)
edits ~/.striprc

Reorder, toggle, and edit strip's asmite-driven status segments without ever opening the rc file. Live colour swatches, per-segment refresh interval, comment-preserving save.

isene/stripconf

Build them all

Each tool is one .asm file (or a small set), assembled with NASM and linked with ld. No autotools, no Make targets to memorise, no ./configure.

git clone https://github.com/isene/bare && cd bare
nasm -f elf64 bare.asm -o bare.o && ld bare.o -o bare
install -m 755 bare ~/bin/

Same recipe for glass, tile, show, glyph, bolt. Each repo has a one-line build command at the top of its README. chasm-bits ships a Makefile because it builds many small binaries at once.