Ein Workspace pro Projekt. Alles drin.

Workspaces sind keine Tabs. Es ist der vollständige Arbeitskontext eines Projekts — sein Pfad, sein Theme, seine Shells, sein Pipeline-Watcher, sein Editor und seine offenen Ports. Du wechselst nicht mehr zwischen Tools. Du wechselst zwischen Projekten.

Pin den Ordner — der Workspace kennt den Rest.

Ein Workspace pro Projekt: eigener Pfad, eigenes Theme, eigene Shell, eigenes Pane-Layout, eigener Pipeline-Watcher. Rechtsklick auf den Workspace im Icon-Rail → „Choose Folder…" verankert ihn. Beim Restart steht alles wieder genauso da.

  • Pinned Root-Directory pro Workspace — neue Panes starten dort, kein manuelles `cd` mehr
  • Per-Workspace Theme, Font, Prompt-Stil und Background-Opacity
  • Per-Workspace Shell (zsh, bash, fish) und Shell-Modus (Relay-Prompt oder dein eigenes zshrc)
  • Blueprints: ganze Workspace-Konfigurationen als Templates speichern und mit einem Klick wiederherstellen
  • Persistente UUIDs — beim App-Restart sind Workspace, Panes, Tabs, Editor-Files und Browser-Cookies wieder genau dort, wo du sie verlassen hast
  • Pro Fenster eigene SessionManager — ⌘N öffnet ein frisches Set Workspaces, keine Klone
relay_hugo
bauwerkstatt
wiseglow
pipytor
+ Workspace
Folder ~/xcode/relay_hugo
Theme Studio · Mint
Shell /opt/homebrew/bin/fish
Layout 2×2 · 4 Panes
Pipeline GitHub · #20 ✓

Nicht nur Farben. Ein ganzes visuelles System.

Andere Terminals tauschen Farbpaletten. Relay tauscht das gesamte Design: Typografie, Border-Radius, Abstände, Glassmorphism, Scanlines, Schriften — alles auf einmal. Midnight fühlt sich an wie eine andere App als Obsidian. Weil es eine ist.

  • 93 Design-Tokens pro Theme
  • 11 moderne Themes (Studio · Paper · Mocha · Gruvbox · Nord · High Contrast · …)
  • 8 historische Retro-Themes (Xerox Alto bis Game Boy)
  • Live-Vorschau beim Wechsel
  • Animierter Theme-Übergang (0,35 s)
Relay Dark
Glass
Midnight
Glass · Outlined
Aurora
Glass · Serif
BBC Micro
Retro · 1981

Dein Workspace. Dein Layout.

Ab zwei Tabs kann der aktive Workspace in Panes aufgeteilt werden. Das Layout ist pro Workspace und bleibt zwischen Sessions erhalten.

  • 9 Layouts: von Single bis 2×2-Raster
  • Fokus-Modus: 1 großer + Sekundär-Pane gedimmt
  • Pro-Workspace-Konfiguration
  • Layouts werden gespeichert
Single

12 Stile. Einer davon ist deiner.

Vom minimalistischen Pure bis zum informationsdichten Powerlevel10k — alle Prompt-Stile sind in Relay eingebaut und live konfigurierbar. Keine manuelle .zshrc-Bearbeitung nötig.

  • Relay Compact, Robbyrussell, Minimal, Lambda, Powerblocks (Built-in)
  • Agnoster, Spaceship, Powerlevel10k, Starship (extern via .zshrc)
  • Per-Workspace-Stil — jeder Workspace kann einen eigenen Prompt nutzen
  • .zshrc wird automatisch generiert
Relay Compact Plugin

CI/CD live im Terminal.

Nach jedem Push siehst du sofort, was deine Pipeline macht — direkt in der Sidebar. Kein Tab-Wechsel, kein Browser öffnen.

  • GitHub Actions · GitLab CI · CircleCI
  • Jobs und Steps in Echtzeit — mit Live-Status
  • Logs direkt im Popover abrufbar
  • Fehlgeschlagene Jobs mit einem Klick neu starten
PIPELINE
my-app · main
GitHub Cancel

Alles im Blick — ohne Fokus zu verlieren.

Workspaces, Pane-Topologie und Layout-Picker in einem Panel. Kein Modal, kein Popover — ein Klick reicht.

  • Workspaces-Liste mit Activity-Indikator pro laufendem Befehl
  • Pane-Mini-Grid spiegelt das echte Layout — Drag-to-Swap inklusive
  • Layout-Picker als Dropdown im Header — 9 Layouts als Topology-Thumbnails
  • Pro Pane: laufender Befehl, Exit-Code-Badge, Shell-Mode-Toggle
  • Eingeklappte Sidebar zeigt Workspace-Initialen statt anonymer Punkte
WORKSPACES 3 gesamt
bunni 4p
relay-app 2p
notethecode 1p
PANES · BUNNI 2×2 ▾
~/api npm run dev
relay
~/frontend vite :5173
relay
~/relay swift build
zsh
~/scripts idle
relay

Ein echter Editor, direkt neben dem Terminal.

Jede Pane lässt sich in einen Code-Editor umschalten — Tree-sitter-Highlighting für 40+ Sprachen, mehrere Tabs, Cursor-Memory, Themes und alles, was man von einem ordentlichen Editor erwartet. Kein Tool-Switch mehr.

  • Tree-sitter Syntax-Highlighting für Swift, TS/JS, Rust, Python, Go, Ruby und mehr — exakt wie in einer richtigen IDE
  • Multi-Tab mit Cursor-Memory: ⌘W schließt, ⌘1–9 wechselt, Position bleibt pro Datei erhalten
  • Sechs kuratierte Themes (Relay Dark/Light, Solarized, Nord, Monokai, GitHub Light)
  • Datei-Tree mit Kontextmenü: New File, Rename, Move to Trash, Duplicate, Reveal in Finder, Copy Path
  • Autocomplete für Buffer-Wörter und Sprach-Keywords, automatisch ausgelöst während des Tippens
  • Drag & Drop aus Finder, Recent-Files-Menü, Multi-Cursor, Find & Replace, Code-Folding, Minimap
📄 EditorState.swift
📄 Pane.swift
📄 README.md
📁 Relay
📁 Editor
📄 EditorState.swift
📄 EditorPaneView.swift
📁 Models
📄 Pane.swift
1import Foundation
2import Observation
3
4// Holds the state of a single editor pane
5@Observable
6final class EditorState {
7 var openFiles: [OpenFile] = []
8 var activeIndex: Int? = nil
9}

Sidebar weiß, in welchem Projekt du bist.

Sobald du in ein Git-Repo wechselst, scannt Relay alle Manifest-Dateien und zeigt jeden erkannten Stack als eigene Karte — mit klickbaren Scripts und Top-Dependencies. Monorepos werden korrekt aufgesplittet.

  • Erkennt Node, Rust, Python, Go, Swift, Ruby, Docker, Hugo, Jekyll, Zola, mdBook und Supabase
  • Framework-Hinweise: Next.js, Astro, FastAPI, Rails, SwiftPM, Tauri, Electron — präzise statt nur „Node"
  • Multi-Stack im Monorepo: frontend/package.json + backend/Cargo.toml als getrennte Karten
  • Scripts klickbar — `cd frontend && npm run dev` direkt aus der Sidebar
  • Workspace-Marker (pnpm/turbo/nx/lerna/cargo) werden eigens behandelt, mit Package-Liste
STACK 3 stacks
node Next.js
📄 frontend/package.json
Scripts
▶ dev cd frontend && npm run dev
▶ build cd frontend && npm run build
rust edition 2021
📄 backend/Cargo.toml
supabase bauwerkstatt
📄 supabase/config.toml

Eingaben dort, wo der Befehl entsteht.

Snippets, Pipeline-Logs und Blueprints klappen direkt in der Sidebar auf — mit Live-Preview, Parameter-Inputs und einem Klick zum Ausführen.

  • Snippet-Inputs mit Live-Resolved-Preview ({{message}} → echter Befehl)
  • Pipeline-Step-Klick öffnet den Log inline darunter — kein separates Fenster
  • Blueprint-Folder-Picker per nativen macOS-Dialog, Pfade home-relativ persistent
  • Run-Button mit Disabled-State solange Parameter leer sind — keine zerschossenen Befehle
SNIPPETS 4 gesamt
Git commit
git commit -m "{{message}}"
git commit -m "feat: sidebar cockpit"
Docker run 1 param
ssh 2 params

Browser, Inspector und Terminal — eine Anwendung.

Jede Pane lässt sich in einen vollwertigen Browser umschalten — mit eigenem Cookie-Container pro Workspace und einem nativen Inspector, der jede Chrome-DevTool-Funktion bietet. Save-on-Reload trifft Editor-Pane: Datei speichern, Browser-Pane lädt neu.

  • WKWebView-Browser mit Multi-Tab, Address Bar, Reader-Mode, Force-Dark, Find-in-Page
  • Workspace-isolierte Cookie-Stores — Login in „Personal" bleibt getrennt von „Work"
  • Private-Mode pro Workspace (non-persistent Data Store)
  • DevTools-Pane mit 8 Tabs: Console · Network · DOM · Storage · Performance · Sources · Application · Audit
  • Auto-Reload-Trigger: Editor-Save lädt sibling Browser-Panes neu — Hugo/Jekyll/MDX-Workflows ohne Tab-Wechsel
  • JS-Bridge in jeden WKWebView injiziert — Console-Streaming, Network-Waterfall, DOM-Live-Tree
🌐 localhost:1313
🔧 DevTools · Console
📡 Console
🌐 Network
🌳 DOM
💾 Storage
⚡ Performance
📄 Sources
📱 Application
🔍 Audit
[hugo] Built in 248ms
// auto-reload from editor save
window.location.reload()
GET /css/main.css 200 4ms
GET /js/app.js 200 2ms

Mehrere Fenster. Geteilte Settings. Eigene Workspaces.

⌘N öffnet ein neues Fenster mit einem frischen Standard-Workspace — kein Klon des ersten. Jedes Fenster managt seine eigenen Workspaces, Pipeline-Watcher und Broadcasts, aber teilt sich global Themes, Fonts und Shortcuts. Workspaces können zwischen Fenstern verschoben werden und behalten ihre Identität über Restarts hinweg.

  • Jedes Fenster mit eigenem SessionManager — Workspaces, Pipeline-Watcher, Broadcast pro Fenster
  • AppSettings (Theme/Font/Shortcuts) bleiben global geteilt
  • Stabile Workspace-UUIDs überleben App-Quit und Window-Verschiebung
  • Pro-Workspace Theme-Override zieht zwischen Fenstern um — der Workspace „trägt" sein Theme mit
  • Todo-Overlay läuft als single floating NSWindow über allen App-Fenstern — synchron via file-watcher
🪟 Window 1 · WebDev
🪟 Window 2 · Backend
● WebDev
○ docs-site
○ marketing
⌘N → neues Fenster
⇧ Workspace ziehen
1// Per-window state
2SessionManager @MainActor
3 ├── workspaces: [Workspace]
4 ├── pipelineWatchers
5 └── broadcastState
6
7// Shared globally
8AppSettings @Environment

Jeder Workspace gehört zu einem Projekt.

Per Rechtsklick auf einen Workspace im Icon-Rail lässt sich ein Projekt-Ordner pinnen. Neue Panes starten dort — kein `cd` mehr nötig. Der Ordner persistiert über App-Restarts und Window-Verschiebung.

  • Rechtsklick auf Workspace → „Choose Folder…" — nativer macOS-Picker
  • Home-relative Pfad-Anzeige (`~/WebDev`) im Context-Menu
  • Persistiert in `sessions.json` — neuer Workspace gleicher Name nach Restart launcht im richtigen Ordner
  • Leer = follow global Startup-Setting (forward-kompatibel mit alten Workspaces)
WORKSPACE · WebDev
Rename
Change Folder…
~/WebDev
📁 ~/WebDev
Workspace Theme ▸
Choose Shell…
Close Workspace

Ein Compositing-Stack. Über die gesamte App.

Titlebar, IconRail, InfoPanel, Pane-Header — alle nutzen denselben Composite: `.sidebar` NSVisualEffectView-Blur plus `theme.bg.opacity(backgroundOpacity)`-Tint. Der Deckkraft-Slider in Settings → Effects wirkt proportional auf jede Chrome-Fläche; alles atmet im selben Rhythmus.

  • Single-Tint-Prinzip: jede Chrome-Fläche hat genau eine Tint-Schicht über der Blur — keine Layer-Stapelung mehr
  • Titlebar via AppKit-Painting — System-VEVs neutralisiert, eigener `.sidebar`-VEV installiert, traffic-light Buttons unverändert
  • Opacity-aware Foreground: `fgSecond` und `fgTertiary` werden bei niedriger Deckkraft heller — Settings-Icons bleiben lesbar
  • Glass-Themes (Studio, Midnight, Aurora …) bekommen Blur; Retro-Themes (BBC, C64 …) bleiben solid — beide korrekt
  • Pane-Header übernimmt die Sidebar-Composite statt der Shell-Background-Farbe — Chrome bleibt visuell zusammenhängend
Opacity · 70%
Titlebar
IconRail
InfoPanel
PaneHeader
.sidebar VEV
+ theme.bg.α
1// Single composite, every surface
2ZStack {
3 VisualEffectBlur(.sidebar)
4 theme.bg.opacity(α)
5}
6
7// fg-Tokens lerp toward fg
8theme.adjusted(forBgOpacity: α)

Power-Features ohne UX-Fallen.

Jede konsequenzreiche Aktion fragt nach. Jeder gefährliche Modus wird sichtbar gehalten. Jeder Tastenkürzel-Hint stimmt mit dem überein, was die Taste tatsächlich tut. Das ist nicht „nett zu haben" — das ist der Unterschied zwischen einer App, die man traut, und einer, die man fürchtet.

  • Broadcast-Modus zeigt orange Bottom-Line + BROADCAST-Pill auf jeder Ziel-Pane — bleibt sichtbar auch wenn die Sidebar zu ist
  • Shell-Switch (relay ↔ zshrc) fragt erst nach — Mis-Klick auf das schmale Header-Chip killt nicht mehr stillschweigend deinen laufenden Build
  • Close Workspace zeigt den konkreten Impact („3 Panes, 1 laufendes Command, 1 Editor-Pane") — single idle terminal schließt weiterhin sofort
  • Ask-Modal-Draft überlebt Escape und Backdrop-Tap — kein Verlust einer halb getippten Frage
  • Workspace-Rename hat jetzt ein Pencil-Icon bei Hover — Discoverability ohne Mausspur-Suche
  • ⌘1 / ⌘2 / ⌘3 schalten Pane-Type wirklich (Terminal / Editor / Browser) — die Hints im Type-Picker waren vorher tote Buchstaben
🛡️ Safety surfaces
● BROADCAST · pane 1
● BROADCAST · pane 2
orange bottom-line
+ persistent pill
 
Close workspace?
3 panes
1 running cmd
1 editor pane
// confirmation gates
shell switch → ask
close workspace → ask
single idle → skip
// real shortcuts
⌘1 → Terminal
⌘2 → Editor
⌘3 → Browser
// draft preserved
Ask · pendingDraft

Hover, Click, Pin — drei klare Verben für die rechte Sidebar.

Die meisten Sidebars haben genau zwei Zustände: auf und zu. Das ist zu wenig. Manchmal will man kurz reinschauen, manchmal eine Section offen halten ohne Layout-Shift, manchmal sie permanent breit aufschlagen. Relay macht alle drei zugänglich — jedes mit unverwechselbarem visuellen Signal.

  • **Hover** → 250 ms Dwell → Floating-Overlay slidet raus mit der Section. Cursor weg → 500 ms später schließt es.
  • **Click** → pinnt sticky. Overlay bleibt offen ohne den Modus auf .expanded zu promovieren. Terminal behält seine volle Breite. Re-Klick toggelt off, Klick auf andere Section wechselt sticky.
  • **Pin-Button im Overlay** → promoviert zu .expanded für die permanente Vollbreiten-Anzeige.
  • Sticky-Icons rendern mit solidem Akzent-Fill + hochkontrastiger Glyph-Farbe — unverwechselbar vs. translucentem Hover-State.
  • Fly-By-Filter: Cursor in unter 80 ms durch ein Icon = kein Open. Mausweg von Toolbar zur Pane bleibt still.
  • Esc schließt einen sticky Overlay — nur wenn etwas gepinnt ist, sodass vim-Esc und REPL-Exits ungestört durchgehen.
  • Section-Expand-States (Favorites, Bookmarks, Saved) leben in den Settings. ⌘I-Cycling resettet sie nicht mehr — überlebt App-Quit.
📍 Rail · 3 verbs
○ Project Memory
○ Workspaces
○ Panes
● Recent · sticky
○ Pipeline
○ Open Ports
 
hover · 250ms
click · sticky
pin · expanded
// state machine
enum RailState {
case idle
case hover(Section)
case sticky(Section)
}
// fly-by filter
if elapsed < 80ms { skip }
// Esc routes to sticky
if sticky != nil { close }
else { passthrough }