Fe2O3

A suite of fast, opinionated terminal tools written in Rust. Single static binaries. Shared TUI foundation. No runtime deps.

Rust Unlicense Linux | macOS Stay Amazing

Why iron oxide?

Rust, the language, was actually named after a family of fungi (Pucciniales, plant pathogens "over-engineered for survival," as Graydon Hoare put it). The iron-oxide association came later, through the visual rhyme with what those fungi look like on a leaf. Fe2O3 is that iron oxide: what happens when iron meets oxygen meets time. These tools are the result of pointing fast iron at the soft corners of a workflow. This is the terminal half of that toolkit.

One TUI foundation

Every tool sits on crust, a small pane-based TUI library. Colors, borders, scrolling, image rendering, and line wrapping all behave identically everywhere.

Single binary, zero runtime

No Ruby, no Node, no Python. Drop the binary in ~/bin and it runs. Startup time is under 50 ms on a warm disk.

Ported from Ruby — but better

Every Fe2O3 tool is a feature port of a long-running Ruby original. Same UX, dramatically faster, and with async fetches so the UI never blocks on network I/O.

Inline images via glow

glow renders images inline using kitty, sixel, w3m, or — as a graphics-free fallback — colored Unicode braille (works over SSH and in tmux without passthrough). PDFs preview as thumbnails, videos as extracted frames, emails as rendered pictures, astronomy as starcharts.

The tools

Forty-six binaries and eight libraries that together cover most of what a keyboard-bound terminal user does in a day — plus a phone companion that bridges one of those workflows off the laptop.

the fe2o3 launcher: a grid of app cards

Start with the launcher

fe2o3 is the suite as a grid of cards: every app with its logo, what it is, and one line on why. Arrow keys move, Enter runs it in the same terminal, ? shows that app's own help, w opens its repo, / filters.

It is also the installer. What you have has a solid frame and a green ; what you do not have is dashed with an amber . i fetches the one under the cursor, I fetches every missing one in view. So one binary is all you need — take the whole suite, or only the apps you fancy.

fe2o3       # the grid
fe2o3 -l    # the suite as text
Daily drivers

pointer

File Manager (binary)
Ruby: RTFM

Two-pane file manager with syntax-highlighted previews, inline image + video frame rendering, archive browsing, SSH, async file operations, undo, bookmarks, plugins.

isene/pointer release

kastrup

Messaging Hub (binary)
Ruby: Heathrow

Unified terminal inbox for maildir email, RSS, weechat, Slack, Discord, SMS. Thread view, tagging, search, AI assistant, compose plugins, OSC 8 clickable links.

isene/kastrup release

scribe

Modal Text Editor (binary)
 

Vim-flavoured modal editor for writers. Soft-wrap, reading mode, spellcheck, persistent registers, Claude Code in the prompt. Native HyperList editing (full hyperlist.vim parity — replaces the retired hyper).

isene/scribe release

folio

PDF reader (binary)

A PDF is two documents in one: the words, and the page they were set on. folio shows either, or both side by side. Text comes out of the text layer, pages render as real images in the terminal, and a scan says so rather than showing you an empty screen. Where a document has its source beside it, a .md or a .tex, one key edits that source, rebuilds the PDF and reloads the page. It also searches every indexed PDF you own, not just the one that is open, and yanks a page with its citation attached.

isene/folio release

gaze

Web browser (binary)

A keyboard-driven browser around the WebKit engine. Tabs group, fold and come back with the session the way Firefox does it. Logins live in one sealed file and fill a login page as it loads. Hints follow links without the mouse. Every site is asked for its dark style, and the ones with none are turned around.

isene/gaze release

hush

Voice and video call (binary)

Two people join a room by name and talk. Each end sends twenty milliseconds of Opus while someone is speaking, and nothing at all in the pauses. The camera works the same way: frames that look like the last one never reach the encoder, so a still scene costs a few hundred bytes. The screen shows what share of the line your voice used. Neither home router accepts a call from outside, so a relay with a real address passes the packets on.

isene/hush release
Desk

scroll

Web Browser (binary)
Ruby: brrowser

Terminal web browser with vim-style keys, tabs, inline images, forms, bookmarks, and AI summaries. Handles mailto links by handing them off to kastrup.

isene/scroll release

tock

Calendar (binary)
Ruby: Timely

Day/week/month calendar with ephemeris: sun, moon, planets, astronomical events. Google Calendar + Outlook sync. Desktop notifications. Shared ephemeris engine with nova.

isene/tock release

grid

AI-native Spreadsheet (binary)
 

A terminal spreadsheet that lets the AI do the tedious parts. Edit cells and write formulas, or just tell Claude what to change. Reads and writes csv/xlsx/ods with a hand-rolled formula engine, undo, and multi-sheet workbooks.

isene/grid release

viewer

Universal File Viewer (binary)
 

One read-only view for any file: spreadsheets, documents, slide decks, PDFs, images and syntax-highlighted code. Renders each with the right method and launches the right editor on a keypress. Browses with pointer; new formats are a config line.

isene/viewer release

cc-sessions

Claude Code session manager (binary)
Ruby: CC-sessions ≤1.5

Bookmark and resume Claude Code sessions with tags: cc / cl pickers with reorder and running indicators, /bm command inside Claude, automatic follow of context continuations.

isene/CC-sessions release

rpnx

RPN / XRPN Calculator (binary)
Ruby: T-REX

A terminal RPN scientific calculator in the HP tradition: a live X/Y/Z/T stack, the full math/trig/log/stats/base command set, and coloured cycling shift pages (f/g/h). Runs XRPN (HP-41 / FOCAL) programs. Shares one Rust engine with the RPNx phone app; the scribe editor drops its result into your text on =.

isene/rpnx release

fleet

Claude Code Mission Control (binary)

Which session waits for you, on which workspace, with how much context. Enter jumps to it or resumes it in a new glass, m messages another session, and the inbox pane shows what just arrived from the phone or as screenshots.

isene/fleet release

hl2web

HyperList Web Renderer (binary)

Render any .hl as a single self-contained page: folding, live search, jumping references, clickable checkboxes, light and dark, hyperlist.vim colors. The prime example maps the TEG framework at isene.com/freewill/TEG.html.

isene/hl2web release

hypergraph

HyperList Grapher (binary)

Feed it a .hl and it draws the structure: states or transitions, four themes, any direction, PNG or SVG or PDF. hl2web embeds its output at the foot of a page.

isene/hypergraph release

beam

Presentation Remote (binary)

A workspace pinned to the external monitor shows its active tab. beam lists what is parked there and shows the one you pick, while your own screen and keyboard stay put.

isene/beam release

yank

Clipboard history (binary)

A glass with everything you copied lately. Pick a line, hit Enter, and it lands in the window you were in. Records on X selection events, so it costs nothing when idle.

isene/yank release
Science

astro

Astronomy Panel + Telescope Catalog (binary)

Single amateur-astronomy app: Sky mode (weather, ephemeris, observation conditions, APOD, starcharts) plus Gear mode (telescopes, eyepieces, recommended combinations, observation logs). Replaces nova and scope.

isene/astro release

moon

The Moon tonight (binary)

A big Moon from NASA's LRO map, craters and all, lit for the phase of the moment. A strip of small Moons along the bottom shows three days back and the days ahead. Arrows step a day. Tab opens a map to zoom and pan with the seas, craters and mountains named. In glass it is all real pixels through glow.

isene/moon release

stars

HR Diagram Explorer (binary)
 

The Hertzsprung-Russell diagram in the terminal. 461 named stars plotted by temperature and luminosity, walk between them with the arrow keys, schematic evolutionary tracks for 1, 5 and 15 solar masses, and the full Wikipedia article for each star offline.

isene/stars release

exoplanets

The Known Worlds (binary)

How far out a planet orbits runs across, how big it is runs up, and our own eight are drawn in white for scale. Enter unfolds the whole system with the band where water could stay liquid.

isene/exoplanets release

elements

Periodic Table Explorer (binary)
 

The periodic table in your terminal. All 118 elements plus the hypothesized 119–126, category-colored, with structured properties and the complete Wikipedia article per element — fetched once, then fully offline.

isene/elements release

isotopes

Chart of the Nuclides (binary)

3,386 nuclides from the IAEA table, neutrons across and protons up, coloured by how each one comes apart. Enter follows a decay chain to its stable end: uranium-238 reaches lead-206 in fourteen steps. Press i in elements to land here.

isene/isotopes release

particles

Standard Model Explorer (binary)
 

The Standard Model chart with every particle's PDG numbers and its Wikipedia article, plus a zoom that takes a carbon atom apart in four steps — nucleus, nucleon, quark — as a 3D model you rotate with the arrow keys.

isene/particles release

circuit

Electronics Bench (binary)

Batteries, resistors, capacitors, LEDs, switches and transistors on a grid. Wire them up and power on: wires glow with voltage, LEDs light with their current, and an LED without a resistor burns out. Then logic chips: gates, a clock, a counter, a digit display and the 555 timer. Challenges teach one idea at a time, from lighting an LED to a stopwatch.

isene/circuit release

fractal

Chaos in the Terminal (binary)

Five pictures of one idea: repeat something simple and watch what it settles into. Zoom the Mandelbrot set, step into the Julia set of the point you are standing on, or turn the knob on a Lorenz attractor until the butterfly collapses.

isene/fractal release

alchemy

Chemistry bench (binary)

Four glasses, a shelf of reagents and a burner. Colours, precipitates, bubbles, salts left behind when the water boils off, flame tests and the iodine clock. Every reaction runs at a speed set by how crowded it is, so nothing is canned.

isene/alchemy release

universe

scale explorer (binary)

Opens on a human body and steps outwards or inwards, thirty-seven rungs from the quantum foam to the web of galaxies. Each rung is a picture of what that scale holds, painted in real pixels where the terminal shows them. A ruler along the bottom marks where you stand, and you are almost exactly halfway.

isene/universe release
Media

gazette

News Reader (binary)

Reader for your personal daily news digest. A server-side Claude run gathers the news you care about into a dated Markdown issue (and a typeset PDF); gazette browses the last 7 days and opens source links in scroll.

isene/gazette release

watchit

Movie & Series Browser (binary)

IMDb Top 250 browser with inline posters, TMDb streaming info, wish/dump lists, genre filters, async background fetching. Cut search time so you spend time watching.

isene/watchit release

tune

Music Player (binary)
 

Spotify in the terminal: search, playlists, saved tracks, the queue and every playback key, played by tune itself or by any Spotify Connect device. It also plays the music files on your computer, and internet radio from a directory of tens of thousands of stations, through mpv.

isene/tune release

library

Generative Library (binary)
 

A personal library of the books that should exist. Curate a shelf of enticing titles; grab one and Claude writes the whole book, with inline figures, to read in the terminal or hear read aloud while the text follows the voice. Real books fetch from legal sources. Syncs to the phone reader, books.

isene/library release
Play

amar

RPG Companion (binary)

Five-tab terminal companion for the Amar RPG — a 3-tier d6 system. NPC / encounter / town / weather forge, persistent campaign tracker with adventure import + inline scene images, live combat HUD, browsable canon (187 wiki entries scraped from d6gaming.org), and AI-assisted Inspire prompts.

isene/amar release

melody

Melody Maker (binary)
 

Terminal melody maker. Play a piano line live on the keyboard, record and edit it on a piano-roll, keep time with the metronome, then export to WAV as the starting point for a song.

isene/melody release

petri

Petri Net Player (binary)
 

Terminal Petri net player. Load a net, fire transitions and watch tokens flow, spot conflicting transitions, and search for deadlocks. A compact playground for modelling concurrency.

isene/petri release

typo

Touch-typing Tutor (binary)
 

Terminal touch-typing tutor. Eight lessons from the home row to full sentences, strict advance-on-correct-key drills, live WPM and accuracy, per-lesson personal bests. US and Norwegian keyboard layouts.

isene/typo release

gambit

Chess (binary)

Chess in the terminal, played against a language model. You move with the cursor keys or by typing moves the way you write them (e4, Nf3, O-O). The other side is the claude command by default, or any API you hold a key for: Anthropic, OpenAI, an OpenAI-shaped service like OpenRouter, a model on your own machine, or a command of your own. gambit knows the rules, down to en passant, the fifty move rule and a threefold repetition, and it tells the model every legal move so the answer is one of them.

isene/gambit release

funkeys

Game Picker (binary)

The games on funkey as cards with screenshots: Doom, Space Invaders, a Jumpman Junior kind of game, a car over the hills, a flight over fractal mountains, a walk to a castle and the first platformer. Enter plays one in this terminal, with real pixels where the terminal has them. The games have their own page: isene.org/funkey.

isene/funkey release
System

prism

Color Picker (binary)
 

TUI color picker with FG/BG slots, R/G/B and H/S/V sliders, hex input, live sample-text preview, and WCAG 2.x contrast ratio. Pure ANSI 24-bit truecolor — no kitty graphics dependency.

isene/prism release

fonts

Font Picker (binary)
 

TUI font picker with live previews. Enumerates every installed font via glyph, previews the highlighted family in its own typeface (drawn with glow), and returns the chosen family and point size. Launchable as a picker like prism — scribe binds \F to it.

isene/fonts release

drain

Battery-Drain Triage TUI (binary)
 

Top drainers by CPU%, voluntary-context-switches/s (the polling proxy), and I/O. Per-workspace attribution via EWMH, claude-powered analysis pane, persistent baseline, strace -c on demand, and a pinned summary for the asm foundation tools.

isene/drain release

torii

Captive-portal listener (binary)

Replaces Firefox's removed "Open network login page" banner. Subscribes to NetworkManager via D-Bus and opens a Firefox tab at the gateway IP on captive-portal detection. Pure signal-driven; ~4 MB RSS, 0 % CPU when idle.

isene/torii release

roam

Wi-Fi and VPN (binary)

The networks in the air, the ones you have used, and what you are on now. Join, leave, forget, look again, and switch the radio off. It talks straight to NetworkManager, so a password never shows in a process list. It replaces nm-applet, which sat in memory all day: roam runs only while you look at it.

isene/roam release

launch

App launcher (binary)

Your everyday helpers (volume, brightness, Bluetooth, the apps you open daily) in columns across the window, and below them every program on the PATH. One search field filters both halves as you type, and Enter runs the one under the cursor. The same key opens and closes it, and between keys it does nothing. Replaces rofi.

isene/launch release
Retired

rush

Shell (retired)
Ruby: rsh

Interactive shell with tab completion, history search, syntax highlighting, nick/gnick aliases, per-command autocorrect, and OSC 7 for terminal cwd tracking. ~26 ms startup.

isene/rush release

crush

Rush Config (retired)
 

Interactive TUI configuration for the rush shell. Browse and modify all rush settings with live color previews, theme cycling, and a full 256-color palette.

isene/crush release
Libraries

crust

TUI Library (crate)
Ruby: rcurses

The TUI foundation that every Fe2O3 tool builds on. Panes, colors, borders, input, scrolling, Unicode, OSC 8 hyperlinks, diff rendering. Published as fe2o3-crust.

isene/crust release

glow

Image Library (crate)
Ruby: termpix

Terminal image renderer supporting kitty, sixel, w3m, and colored-braille fallback for graphics-free terminals. Auto-detects the best fit. Used by pointer, kastrup, scroll, watchit, and astro. Published as fe2o3-glow.

isene/glow release

highlight

Syntax Library (crate)
 

Theme-aware syntax highlighter. ~18 source languages plus dedicated HyperList, Markdown, LaTeX, and email-mode renderers. Multi-line block-comment / string state, six built-in themes, shared theme palette. Used by scribe, pointer, kastrup. Published as fe2o3-highlight.

isene/highlight release

orbit

Ephemeris Library (crate)
Ruby: ephemeris

Moon phases, sun and planet positions, observation windows. Shared ephemeris engine used by tock and astro. Published as fe2o3-orbit.

isene/orbit release

starmap

Sky Library (crate)

The naked-eye sky in braille: 9,096 stars from the Yale Bright Star Catalogue with Hipparcos distances, the constellation figures, the sky over your head or the celestial sphere as a map, and a picker you walk with a crosshair. Drives astro's chart and stars' sky.

isene/starmap release

plot

Charts Library (crate)
Ruby: termchart

Sparklines, line charts, candlestick charts, and bar charts rendered with Unicode block / braille characters and ANSI colors. Pure Rust, zero runtime dependencies.

isene/plot release

mail

Email Library (crate)
 

The parts of reading mail that are pure logic: quoted-printable, base64, RFC 2047 headers, the multipart walk that finds the readable part, HTML mail reduced to text, and which messages have been read, merged across devices. Shared by kastrup and the nomad mail app. Published as fe2o3-mail.

isene/mail release

feed

Feed Library (crate)
 

RSS and Atom turned into entries, with no I/O: give it the XML, get back the items. Deliberately not a strict XML parser, because feeds in the wild are not strict XML. Shared by kastrup and the nomad phone app. Published as fe2o3-feed.

isene/feed release

ferrite

SQL Database (crate)
 

An embedded SQL database that keeps its tables in memory, with a log and a snapshot on disk. Five times SQLite on reads and ahead on writes, measured on the same disk in the same mode; killed mid-write 10,000 times without losing a committed row. The comparison. Published as fe2o3-ferrite.

isene/ferrite release

funkey

Game Engine (crate)
 

A game engine for the terminal. A game draws pixels into a frame; funkey shows it two pixels a cell in full colour, or as real pixels where the terminal has them, reads held keys, and runs the loop at a fixed rate. Sprites, tile maps, platformer physics, sound, a 3D rasterizer and a Doom renderer come with it. The games on it: a Jumpman Junior kind of game, Space Invaders, a car over the hills, a flight over fractal mountains, a walk to a castle, and Doom itself from any Doom WAD. They have their own page: isene.org/funkey.

isene/funkey release

rpnx-core

Calculator Engine (crate)
 

The RPN / XRPN engine behind rpnx and the RPNx phone app: an HP-41 style stack, the full command set and a FOCAL program runner, with no I/O. One engine, two frontends, identical results. Published as fe2o3-rpnx-core.

isene/rpnx-core release
Companion apps

nomad is the mobile half of the family — a single Android monorepo with a shared Rust core (the same logic as the desktop, via UniFFI) under thin Kotlin / Compose shells. Each app carries one Fe2O3 workflow off the laptop and syncs over Syncthing — no Google account, no cloud middleman.

tasks

nomad · Android (Kotlin / Compose)
Pairs with scribe & kastrup

HyperList todo editor + Glance home-screen widget for the same ~/.tasks/todo.hl that scribe edits and kastrup's z triage appends to.

isene/nomadsideload APK

hyperlist

nomad · Android (Kotlin / Compose)
Pairs with scribe

General HyperList editor — full syntax highlighting, fold, drag-reorder across depth, and auto-renumber.

isene/nomadsideload APK

relay

nomad · Android (Kotlin / Compose)
Pairs with kastrup

Notification gateway: relays WhatsApp / Messenger / Instagram / SMS / Discord (and photos) into kastrup and fires replies — replacing the laptop's Marionette bridge.

isene/nomadsideload APK

astro

nomad · Android (Kotlin / Compose)
Pairs with astro

Amateur-astronomy companion: ephemeris, met.no weather + observing conditions, in-the-sky events, APOD, starchart, and a telescope/eyepiece gear catalog (shared with desktop astro).

isene/nomadsideload APK

watchit

nomad · Android (Kotlin / Compose)
Pairs with watchit

TMDB movie / series browser — top-rated & popular lists, your own wish/dump lists, posters, full detail, and search-to-add.

isene/nomadsideload APK

amardice

nomad · Android (Kotlin / Compose)
Pairs with amar

Amar RPG O6 dice roller: D6, skill, and combat rolls with the full crit/fumble tables, plus fear rolls with mental-fortitude.

isene/nomadsideload APK

rpnx

nomad · Android (Kotlin / Compose)
Pairs with rpnx

Pocket HP-41 RPN scientific calculator — full stack/registers/modes, an HP-41-style multi-shift keypad, and a FOCAL program runner. Same Rust engine as the rpnx terminal calculator.

isene/nomadsideload APK

scribe

nomad · Android (Kotlin / Compose)
Pairs with scribe

Distraction-free notes pad — the touch companion to the scribe editor, syncing the same plain-text notes over Syncthing.

isene/nomadsideload APK

ref

nomad · Android (Kotlin / Compose)

Offline, searchable reference reader — glossaries, books, and your own writings in your pocket, with no network needed.

isene/nomadsideload APK

vox

nomad · Android (Kotlin / Compose)
Pairs with the laptop Win+a voice-to-text

Voice quick-capture — hold, talk, and file a transcribed note; the pocket version of the laptop's Win+a VTT.

isene/nomadsideload APK

gazette

nomad · Android (Kotlin / Compose)
Pairs with gazette

Reader for your personal daily news digest — browse the last 7 daily issues (and the typeset PDF) synced into ~/.news, open source links. Touch companion to the gazette TUI.

isene/nomadsideload APK

books

nomad · Android (Kotlin / Compose)
Pairs with library

The library on your phone. Read-only reader over the synced ~/.library: only the books you have made, grouped by shelf, with inline figures and spoken tracks, read full-screen and offline.

isene/nomadsideload APK

onepage

nomad · Android (Kotlin / Views)
Standalone · zero idle cost

A minimal home-screen launcher: one screen, your widgets placed freely, nothing else. Built to cost nothing when idle, no polling or background wake-ups.

isene/nomadsideload APK

kastrup

nomad · Android (Kotlin / Compose)
Pairs with kastrup

Your Gmail inboxes and RSS feeds on the phone, decoded by the same crates kastrup uses. Headers on sync, bodies on open. The laptop stays authoritative: opening a message here changes nothing, only an explicit Mark READ does, and that reaches the laptop too.

isene/nomadsideload APK

Archived: nova and scope have been folded into astro; hyper has been folded into scribe.

Install them all

Each tool ships multi-platform prebuilt binaries on every tagged release. Grab the launcher, then press I and it fetches every app you do not have:

curl -L "https://github.com/isene/fe2o3/releases/latest/download/fe2o3-linux-x86_64" \
  -o ~/bin/fe2o3 && chmod +x ~/bin/fe2o3
fe2o3          # then press I

# Other platforms: replace -linux-x86_64 with:
#   -linux-aarch64  (Raspberry Pi, ARM64 Linux)
#   -macos-x86_64   (Intel Mac)
#   -macos-aarch64  (Apple Silicon)

Or take them straight from the shell:

for app in pointer kastrup scribe scroll gazette tock astro watchit torii prism fonts drain amar tune melody petri library grid viewer rpnx typo elements stars particles; do
  curl -L "https://github.com/isene/$app/releases/latest/download/$app-linux-x86_64" \
    -o ~/bin/$app && chmod +x ~/bin/$app
done