Gungnirᚷᚢᚾᚷᚾᛁᚱ

A terminal emulator, from scratch.

Written in Odin, targeting kitty parity and beyond. GPU-rendered with GLFW and OpenGL 3.3, real FreeType and HarfBuzz text shaping, not a stb_truetype shortcut. Linux only. Named after the spear that never missed its throw, and held to the same standard.
Odin OpenGL 3.3 HarfBuzz MPL 2.0 Linux only
gungnir

what it does

Full VT100/xterm parsing, the kitty keyboard protocol, and the kitty graphics protocol: transmit, placement, Unicode-placeholder images, zlib decompression, and a=q query support. SGR including underline styles, strikethrough, and reverse video. DECSCUSR cursor styles.

OSC 8
hyperlinks
OSC 9 / 777
notifications
OSC 133
prompt marks and jump
OSC 52
clipboard get/set
OSC 4/10/11/12
palette and fg/bg/cursor color get/set, the thing fzf and vim colorschemes actually rely on
SGR mouse
1000/1002/1003/1006

Real ligature shaping through HarfBuzz, with per-row shape-result caching so a static line only gets reshaped once. Closer to Muninn's job than Huginn's: remember what's already been seen instead of thinking it through again. A font-fallback face for glyphs missing from your primary font, so a Nerd Font's gaps don't render as blank tofu boxes.

features

Resizable splitsCtrl+Shift+D/S to split, mouse-drag or Ctrl+Shift+Alt+arrows to resize, click or Ctrl+Shift+]/[ to change focus. Every split branches off the last, the way Yggdrasil's boughs never stop forking.
Session save/restoreCome back to where you left off.
Hint marksCtrl+Shift+M, copy any matched word/path/URL by typing its label.
Scrollback searchLive font zoom and config hot-reload too.
Remote controlTCP on 127.0.0.1, a kitty @-compatible-ish command set.
Isolated test suitesrc/term has no GLFW/OpenGL dependency, runs headless.

remote control

TCP on 127.0.0.1:<remote_control_port>, a kitty @-compatible-ish command set. Bespoke text-over-TCP, not a literal wire-protocol clone of kitty's own remote control, that was never the goal. A small bridge from the terminal to whatever's driving it, the same job Bifrost does for everyone else.

window/tab
ls, new-tab, close-tab, focus-tab, new-window, close-window, resize-window, set-window-title
input
send-text, send-key, scroll-window
appearance
get-colors, set-colors, font-size, get-text

runes

gungnir's own small answer to kitty's kittens: gungnir runes <name>

icat <path>image display through the same kitty graphics wire format gungnir already parses
clip --copy/--pastean OSC 52 clipboard bridge
hints [--pattern]a standalone, pipe-friendly version of the in-terminal hint picker
unicode [--copy]a curated symbol picker, arrows/box-drawing/math/checks, substring-filter-as-you-type

install

You need the Odin compiler, plus GLFW, FreeType, and HarfBuzz as system libraries.

# arch
sudo pacman -S odin glfw freetype2 harfbuzz

# debian/ubuntu: install odin from the official instructions first, then
sudo apt install libglfw3-dev libfreetype-dev libharfbuzz-dev

# build and run
git clone https://github.com/arshnah/gungnir
cd gungnir
odin build src -out:gungnir
./gungnir

tests

odin test src/term

No GLFW/OpenGL dependency in that package, it's the VT parser and protocol handling in isolation, which is what makes the suite runnable without a display.

this site

Served by a small HTTP/1.1 server written in Odin, straight on top of core:net sockets, no framework. Every connection gets its own thread via core:thread, so one slow client can't stall the rest. One binary, no runtime dependencies.