Releases: griffinwork40/umber
Release list
v0.3.0
What's New in v0.3.0
Community Themes
Three new palettes — Catppuccin Mocha, Nord, and Dracula — ported verbatim from their upstream specs and gated by the contrast harness (474 assertions). Set "preset": "catppuccin-mocha", "nord", or "dracula" in your config and ⌘R.
Auto Dark/Light Theme Switching
Set "preset": "auto" to follow macOS appearance — Umber switches between a dark and light palette when System Settings changes. Customizable with "auto.dark" and "auto.light" overrides.
Split-Pane Dimming
Unfocused split panes now dim to visually distinguish the active pane. Configurable via "unfocusedPaneOpacity" (0.0–1.0, default 1.0). Try 0.85 for a subtle but clear visual hierarchy.
Typography Controls
fontThicken: Medium font dilation for white-on-black text — the sameCGContextSetFontSmoothingStyletechnique Terminal.app and iTerm2 use. Defaultfalse.lineHeight: Line-height multiplier (0.8–2.0, default 1.0).1.2adds 20% leading for easier reading.
Also Included
- Configurable terminal padding (default 4px, seamless background match) from v0.2.2→v0.3.0 window
- Fix: stale comment about default fallback palette corrected
Full Changelog: v0.2.2...v0.3.0
v0.2.2
What's Changed
- fix(vendor): patch 0007 — gate feedPrepare selection clear on mouseMode by @griffinwork40 in #56
Full Changelog: v0.2.1...v0.2.2
v0.2.1
What's Changed
- feat(app): adopt Liquid Glass on macOS 26+ — glass chrome, opaque content by @griffinwork40 in #55
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's Changed
- ci(release): build the release artifact from the tag — provenance the log can prove by @griffinwork40 in #35
- feat(app): the editor's colours become measured — wire selection, choose the syntax roles by search, gate both by @griffinwork40 in #26
- feat(app): syntax highlighting — paint the five roles SyntaxPalette already measured by @griffinwork40 in #36
- feat(app): set TERM_PROGRAM=Umber — tools and stock zsh can identify the host terminal by @griffinwork40 in #38
- feat(app): DCS Ptmux passthrough — apps inside tmux can reach the outer terminal by @griffinwork40 in #39
- feat(app): wire window-level focus events for tmux — DECSET 1004 across Space tab switches by @griffinwork40 in #37
- feat(app): editor typing feel — line numbers, auto-indent, soft-wrap, tab→spaces, go-to-line, bracket pairing by @griffinwork40 in #40
- feat(app): URL clicking — ⌘-click opens links in the default browser by @griffinwork40 in #41
- feat(app): shell integration (OSC 7 + OSC 133) by @griffinwork40 in #42
- fix(app): copy/paste — gate linefeed selection-clear, add mouseReporting config by @griffinwork40 in #43
- feat(app): editor Wave 1 — current-line highlight, column guide, status bar, trailing WS, terminal integration by @griffinwork40 in #45
- fix(app): guard against infinite recursion in smart-edit delegate — pressing Enter crashed instantly by @griffinwork40 in #47
- feat(app): terminal splits — ⌘⇧D opens a side-by-side pane, ⌘W collapses it (#48) by @griffinwork40 in #48
- fix(app): reject unenterable directories in isUsableSpaceRoot (#8) by @griffinwork40 in #49
- feat(app): theme-aware terminal selection colours (#31) by @griffinwork40 in #50
- feat(app): vertical splits — ⌘⇧- opens a top/bottom split pane by @griffinwork40 in #51
- feat(app): runtime verification gate for ⌘T cwd, context menu, and bell (#10) by @griffinwork40 in #52
- fix(app): enable vertical split validation — ⌘⇧- was silently dead by @griffinwork40 in #53
- feat: code signing, notarization, and in-app update checker by @griffinwork40 in #54
Full Changelog: v0.1.0...v0.2.0
v0.1.0
A native macOS terminal in Swift 6 / AppKit, deliberately with no AI features — built to host agent-afk's REPL properly.
Install
Download: Umber-v0.1.0.zip below. Requires macOS 14+, Apple silicon.
This build is ad-hoc signed, not notarised — there is no paid Apple Developer ID behind the project — so Gatekeeper will refuse it until you strip the quarantine attribute:
unzip Umber-v0.1.0.zip -d /Applications
xattr -dr com.apple.quarantine /Applications/Umber.app
open /Applications/Umber.appWithout that step macOS reports the app as damaged, which is misleading — it is intact and its signature verifies, it is simply not notarised.
Or build it yourself, which needs no such step:
git clone https://github.com/griffinwork40/umber.git
cd umber/app
./Scripts/bootstrap-vendor.sh
./Scripts/make-app-bundle.sh release
open build/Umber.appFirst stop after launching is ⌘,, which writes a commented starter config to ~/.config/umber/config.json and opens it; ⌘R reloads it live.
Status
v0.1 — launchable and usable, not yet daily-driven long enough to trust. There is no test target; verification is 19 check-*.sh gates, several validated by falsification. Known risks, including two upstream emulator defects patched locally, are in the README.
What's Changed
- feat(app): honour the mac line-editing keys — ⌘⌫ ⌘⌦ ⌘← ⌘→ by @griffinwork40 in #1
- feat(app): open and edit files from the tree — the picker finally has somewhere to go by @griffinwork40 in #2
- feat(app): restore every open Space on relaunch — N Spaces at quit came back as 1 by @griffinwork40 in #4
- feat(app): make the Space root real — ⌘T and the file tree both start where the project is by @griffinwork40 in #3
- fix(app): document tab strip — overflow reachability, accessibility tree, middle-click close by @griffinwork40 in #5
- feat(app): a tab can say it needs you — engine-agnostic status, bell wired by @griffinwork40 in #6
- refactor(app): a 350-LOC ceiling, enforced — six oversized files split into files an agent can hold in context by @griffinwork40 in #11
- tier-0 editor UX: a lone unsaved file gets a marker, undo/redo become discoverable, find gains replace by @griffinwork40 in #12
- fix(vendor): index isWrapped buffer-absolute — SwiftTerm #494 was silently corrupting scrollback by @griffinwork40 in #13
- refactor(app): widen the document delegate and give shell-directed actions their own protocol — the container stops naming a concrete pane by @griffinwork40 in #14
- feat(app): the sidebar follows the shell's cwd, and
cd Herefollows it back — by asking the kernel, not by hoping for OSC 7 by @griffinwork40 in #15 - fix(vendor): stop the alt buffer resurrecting old cells on resize — the tmux pane bleed by @griffinwork40 in #16
- perf: turn on the GPU renderer we were already vendoring, and stop a debug assertion shipping in release by @griffinwork40 in #18
- docs(research): decide how git reaches the sidebar — decorate the tree, refuse the commit box by @griffinwork40 in #17
- libghostty Phase 2+3: a real shell renders in GhosttyPane, beside TerminalPane by @griffinwork40 in #20
- libghostty Phase 4: the engine becomes reachable, closing a tab frees it, and OSC 133 reaches the tab strip by @griffinwork40 in #21
- feat(app): surface the git state the parser already had — staged chip, rename origin, and "no upstream" by @griffinwork40 in #22
- fix(app): add TCC usage descriptions to bundle plist by @griffinwork40 in #23
- feat(app): a measured theme — ship umber, make it the default, and gate what makes it legible by @griffinwork40 in #25
- feat(app): light mode — ship afk-light on the chrome derivation that already existed by @griffinwork40 in #24
- feat(app): repair classic without sanding off its character by @griffinwork40 in #32
- feat(app): a discoverable sidebar toggle beside the traffic lights by @griffinwork40 in #33
- chore(release): make the repo publishable — a clone that builds, a licence, and an honest README by @griffinwork40 in #34
Full Changelog: https://github.com/griffinwork40/umber/commits/v0.1.0