Changelog
What's new in atrium
All notable changes, documented version by version.
v0.36.02026-04-03
Added
- ·Unified state persistence protocol (`atrium://state/{scope}/{namespace}`) replacing ad-hoc per-feature persistence
- ·`StateRegistry` — single in-memory source of truth for all namespaced state with per-namespace dirty tracking
- ·`StateHandler` for protocol-level state access (GET/PUT via `atrium://state`)
- ·`get_state`/`set_state` Tauri commands as frontend fast-path to the registry
- ·Automatic `state:dirty` and `state:changed` Tauri event emission on every state write
- ·Registry hydration from snapshots on startup and projection back to snapshots on flush
- ·`useAtriumState` React hook — `useState`-like interface backed by the state protocol
- ·`useAppSettings` hook for unified app settings access
- ·`signalWorkspaceDirty` helper for structural dirty tracking via Tauri events
Changed
- ·Journal system now reacts to `state:dirty` events instead of watching Jotai dirty atoms
- ·All feature state (git panel, file tree, editor mode, adapter sessions, app settings) persisted via `useAtriumState`
Removed
- ·Dedicated persistence fields from `AppState`, `WorkspaceSnapshot`, and `PaneSnapshot` Rust/TS types (state now flows through `extra` HashMap)
- ·`dirtyWorkspacesAtom`, `appStateDirtyAtom`, `markWorkspaceDirty()`, `markAppStateDirty()` dirty tracking atoms
- ·Feature-specific hydration and serialization logic from `useRestore`/`usePersistence`
- ·`useAppSettingsSync` bridge hook and individual settings atoms
v0.35.02026-04-03
Added
- ·Branch name indicator in git-changes pane header (⎇ icon + branch name)
- ·Dynamic adapter accent colors in mini layout diagrams (reads from adapter registry instead of hardcoded)
Fixed
- ·File tree expanded folder state not restoring across sessions (TreeItem now derives expanded from persisted atom, not local state)
- ·Rust persistence types missing fields (expandedPaths, filesCollapsed, gitViewState, diffRef, gitRepoRoot, sidebar/git prefs) — caused silent data loss on round-trip
v0.34.02026-04-03
Changed
- ·Journal system is now event-driven: state flushes within 500ms of any change instead of polling every 10s
- ·10s interval retained as safety net only; primary persistence is debounced on dirty flag changes
- ·Added `appStateDirtyAtom` so pure app-level changes (sidebar, git diff prefs, launcher settings) trigger persistence immediately
- ·All previously un-tracked state changes now mark dirty: file tree expand/collapse, sidebar toggle/resize, git diff controls, launcher overrides, close-session confirmation preference
v0.32.02026-04-03
Added
- ·Git changes panel persists view state: section toggles, selected file, and expanded commits survive pane close/reopen
- ·File tree expanded folders and collapsed state persist across restarts
- ·Graceful fallback when git state changes between sessions (selected file resets if no longer present)
v0.31.02026-04-03
Added
- ·Two-line workspace sidebar items with name, path, open folder icon, and mini zone layout diagrams
- ·Shared `MiniLayout` component extracted from TabBar for reuse
Fixed
- ·CSS zoom causing tab drag ghost to drift from mouse at non-default zoom levels
- ·CSS zoom causing file tree drag ghost offset at non-default zoom levels
- ·CSS zoom causing workspace sidebar drag ghost offset at non-default zoom levels
v0.29.02026-04-03
Added
- ·"Don't show this again" checkbox on "Close AI Session?" confirmation dialog, persisted to app settings
- ·General tab in Settings dialog with "Confirm before closing AI sessions" toggle
v0.26.02026-04-03
Added
- ·**atrium:// protocol system** — URI parser, namespace resolver, and handler dispatch for extensible internal protocol
- ·**Inter-pane communication** — agents can list panes, read terminal output, and send messages to each other via MCP tools
- ·**atrium-mcp sidecar** — standalone MCP JSON-RPC bridge binary, auto-built and bundled by Tauri
- ·**MCP auto-configuration** — atrium MCP server registered automatically via `claude mcp add` / `codex mcp add` on app startup
- ·**Ring buffer capture** — 64KB per-pane circular buffer for terminal output, ANSI-stripped for clean reads
- ·**Pane registry** — backend metadata tracking with scope-aware filtering (same-tab, same-workspace, all)
- ·**Access control** — visibility and scope enforcement for inter-pane operations; lock/unlock button in pane header
- ·**Command system** — 16 core actions (pane, workspace, tab, config, theme, launcher) as atrium://commands/ URIs
- ·**Keybinding URI support** — `uri-command` action type connects keybindings to protocol dispatch
- ·**Inter-agent message framing** — `[Message from ... via atrium]` headers with reply instructions for cross-agent communication
- ·**Codex MCP support** — `env_vars` config for ATRIUM_PANE_ID inheritance from shell
- ·**Layout path tracking** — mosaic tree position synced to pane metadata for spatial awareness
Changed
- ·Hook server gained `/resolve` POST endpoint for protocol-based dispatch
- ·Adapter manifests now support optional `hooks` field with atrium:// URIs
- ·Bundled adapters auto-update when version changes (was seed-once-only)
- ·Both adapter hooks.sh use jq for JSON generation (fixes heredoc escape issues)
- ·Hook payload reads from request body, not just URI query params
- ·CI pipeline lints/tests both `src-tauri/` and `atrium-mcp/` crates
- ·Release pipeline triggers on `atrium-mcp/` changes
Fixed
- ·Session-end hooks now properly reset pane adapter type to Terminal
- ·Legacy aiterm hooks cleaned up during install (expanded dedup filter)
- ·MCP sidecar found in dev mode via `src-tauri/binaries/` lookup
- ·Data directory respects `.atrium-dev` in dev builds throughout
v0.24.02026-04-02
Added
- ·Repo search — search file contents and filenames with regex, case sensitivity, whole word, include/exclude globs
- ·Search results stream in real-time as files are scanned with animated progress bar
- ·Cmd+Shift+F keyboard shortcut to open search in a new tab
- ·Search button on workspace sidebar branch selector (draggable to create split panes)
- ·Monaco preview for selected search result files
- ·Cmd+click on search results opens file in new tab (scrolls to line for content matches)
- ·"Hold ⌘ to open" tooltip on search result hover
- ·ResizableSplit component — reusable two-panel layout with draggable divider
- ·Resizable split applied to search pane (results / preview) and git-changes pane (file list / diff)
- ·Pane type registry — centralized definitions for all pane types (component, icon, controls, needsPty)
- ·Git-changes pane now has a GitCompareArrows icon in pane header and tab bar
Changed
- ·Uniform divider styling: 1px theme-aware line at rest, widens to 4px accent on hover with smooth transition (mosaic splits, sidebar, ResizableSplit)
- ·Delay sidebar and launcher git hydration during rapid pane/tab creation bursts
- ·Keep Source Control and workspace switching responsive by preferring stale cached repo data first
- ·MosaicLayout, PaneHeader, useRestore, and TabBar all use registry instead of hardcoded type checks
- ·GitDiffControls extracted to standalone component
v0.23.42026-04-02
Changed
- ·Optimize LauncherBar and useGitWorktree to reduce redundant renders and IPC calls
v0.23.32026-04-02
Changed
- ·Further optimize shared repo overview and workspace hooks to reduce unnecessary work
v0.23.22026-04-02
Changed
- ·Simplify FileTree and WorkspaceSidebar with reduced re-render surface and leaner state management
v0.23.12026-04-02
Changed
- ·Further reduce redundant IPC calls in file tree root detection and git worktree hooks
- ·Diagnostics recorder captures more granular timing for async git operations
v0.23.02026-04-02
Added
- ·Diagnostics source tagging on IPC calls for tracing call origins
- ·Activity notes in diagnostics for file tree root resolution and git worktree detection
Changed
- ·IPC calls accept optional diagnosticsSource for per-call origin tracking
- ·useFileTreeRoot and useGitWorktree annotate all IPC calls with source context
v0.22.02026-04-02
Added
- ·Interaction tracing in diagnostics — startInteraction/stepInteraction/endInteraction for multi-step operations
- ·Diagnostics instrumentation for pane split, close, file open, tab create, and editor lifecycle
- ·Change tracing hook (useDiagnosticsChangeTrace) for tracking component re-render causes
- ·Editor diagnostics: content load timing, surface ready/dispose, scroll event sampling
Changed
- ·Pane close logic refactored with scoped equalization for the affected direction group
v0.21.02026-04-02
Added
- ·Consolidated repo overview IPC — single get_repo_overview call replaces separate git status, detailed status, and ahead/behind calls
- ·Memory stats capture in diagnostics profiler
- ·Diagnostics export and session listing commands
Changed
- ·Git panel, branch selector, and file tree all use the consolidated repo overview for fewer IPC round-trips
- ·Refactored git commands to share parse_status_output and load_ignored_paths helpers
v0.19.02026-04-02
Added
- ·Performance diagnostics recorder — opt-in IPC timing, render stats, terminal stats, memory stats, and long task capture with NDJSON trace output
- ·Diagnostics settings panel in Settings with toggle controls and output directory link
- ·Query cache layer for IPC calls with stale-while-revalidate and force-refresh support
- ·Dev builds use ~/.atrium-dev to avoid colliding with production data
Changed
- ·Load adapter registry once at app startup instead of refreshing it from every pane
- ·Git status and file tree queries use the query cache to reduce redundant IPC calls
Fixed
- ·Suppress module resolution squigglies in Monaco editor (no project context)
- ·Markdown editor checkboxes use accent color instead of gray
- ·Stop background workspace trees and hidden Source Control panes from doing unnecessary refresh work
- ·Avoid dirtying workspace state when terminal CWD reports haven't actually changed
v0.18.02026-04-02
Added
- ·Cmd+Click to open file paths from terminal output as editor tabs in Atrium
- ·Cmd+Click to open URLs from terminal in default browser (previously any click)
- ·"Hold ⌘ to open" tooltip on terminal link hover
- ·Periodic 10s auto-refresh for git changes panel
Changed
- ·Terminal links now require Cmd held to activate (matches VS Code behavior)
Fixed
- ·Diff viewer not loading in Source Control panel (editor created before container was in DOM)
v0.17.02026-04-02
Added
- ·File type icons in pane headers for editor/markdown/diff panes (replaces adapter dot)
- ·Miniature layout diagram on all tabs reflecting actual mosaic split structure
- ·Layout diagram leaves colored by content type (language colors, adapter accents, tool colors)
- ·Numeric badge on tabs with 5+ panes
v0.16.02026-04-02
Added
- ·Outgoing/Incoming commit sections in Source Control panel with Push/Pull buttons
- ·Drill into commits to see changed files and view per-file diffs
- ·Context menu on Source Control file list: Refresh, Fetch, Pull, Push
- ·Relative image paths in markdown editor now resolve correctly in production builds
Fixed
- ·Invisible bullet markers in markdown editor (Tailwind preflight reset)
- ·Git changes panel stuck on "Loading..." when restored from older snapshots
v0.15.12026-04-02
Fixed
- ·Pane split, close, drag-rearrange, and resize-handle double-click now equalize only the affected directional pane group instead of rebalancing every pane in the tab
v0.15.02026-04-02
Added
- ·Integrated diff viewer in Source Control panel — file list + Monaco diff in one pane
- ·Up/down arrow keys navigate the file list, diff updates inline
- ·Inline diff by default with side-by-side toggle in pane header
- ·Horizontal/vertical layout toggle in pane header (persisted)
- ·PaneHeader rightControls prop for custom pane-type-specific header buttons
Changed
- ·Source Control panel no longer opens diffs in separate tabs — all in-pane
Fixed
- ·Git viewer button drag-to-split now works (global pointerup clears drag state)
- ·Source Control panel auto-focuses on open so arrow keys work immediately
v0.14.02026-04-02
Added
- ·Git Source Control panel — view staged, unstaged, and untracked files grouped by section
- ·Monaco diff viewer — click any changed file to see side-by-side diff with syntax highlighting
- ·Branch selector shows change count and commits ahead/behind upstream
- ·Git viewer button in branch selector, draggable to mosaic panes to open as a split
- ·Cmd+Shift+G keyboard shortcut to open Source Control in a new tab
- ·Cmd+L (Show Launcher) and Cmd+Shift+G (Source Control) appear in configurable keybinding settings
v0.12.02026-04-01
Added
- ·Real-time file tree updates via recursive directory watching
- ·Git status indicators in file tree — M, D, A, U badges on files with color coding, propagated to parent folders
- ·Gitignored files shown grayed out at reduced opacity in file tree
- ·File tree context menu with Open, Rename, Delete, New File, New Folder, Copy Path, Copy Relative Path, Reveal in Finder
- ·Drag and drop to move files and folders within the file tree, with ghost label and auto-expand on hover
- ·Terminal-aware file tree — automatically switches to the focused terminal's branch/worktree
- ·Branch/worktree selector above the file tree with dropdown to switch between worktrees
- ·File pane titles now include the branch name (e.g., "App.tsx (main)")
- ·File type icons shown in tab bar for editor and markdown panes
- ·Global zoom — Cmd+/- now scales the entire app UI, not just terminals
- ·Resizable sidebar — drag the right edge to resize, auto-collapses below threshold
- ·Sidebar width and collapse state now persist across sessions
- ·Drag files from the file tree onto mosaic panes to open them as editor splits
Fixed
- ·Comment modal in markdown editor now opens within the editor pane bounds instead of covering the full viewport
v0.11.32026-04-01
Added
- ·Cmd+L keyboard shortcut to toggle the launcher bar
Fixed
- ·Restored adapter sessions now re-establish child exit watcher so adapter state clears correctly on exit
- ·End hook events verify session ID before clearing adapter state, preventing stale events from resetting active sessions
- ·Snapshot paneType no longer incorrectly saved as adapter name (was writing "claude-code" instead of "vanilla")
- ·Cmd+V no longer crashes when clipboard contains malformed TIFF data from clipboard managers or enterprise tools
- ·Launcher no longer reappears on terminal clear (Ctrl+L, `clear` command), which interfered with TUI tools
- ·Hook routing now uses per-PTY ATRIUM_HOOK_PORT env var so multiple Atrium instances (release + dev) don't cross-talk
v0.11.22026-04-01
Fixed
- ·Initialize Prism explicitly at app startup so markdown code blocks do not crash with `Can't find variable: Prism` on some macOS WebKit/Tauri runtime combinations
v0.11.12026-04-01
Added
- ·Lightweight metadata journaling for faster persistence of pane, tab, layout, and markdown UI state changes
- ·Persisted global markdown editor preferences in config, including default view mode, book view, width, margin, font, font size, and text alignment
Changed
- ·Native Find now routes to the active markdown pane so `Cmd+F` opens markdown search instead of terminal search when a markdown doc is focused
- ·New markdown files now open using the current global markdown editor defaults instead of always starting in rich text mode
Fixed
- ·Speed up Claude recent-session listing by replacing the `awk` + `jq` pipeline with a faster Perl-based implementation
- ·Markdown editor dirty state, save handling, pane-scoped search, and multi-pane watcher behavior
- ·Markdown TOC/comment controls and floating comment button positioning/styling inside the pane
v0.11.02026-04-01
Added
- ·Rich text markdown editor (MDXEditor) for .md/.mdx files opened from file browser
- ·RTE/Source toggle in pane header for markdown panes (source view uses Monaco)
- ·File watcher for external change detection with conflict resolution toast
- ·Comment directive system for inline markdown comments
v0.10.02026-04-01
Added
- ·Periodic update checks configurable in settings (default: every 24 hours)
Fixed
- ·Persist launcher settings (worktree mode, overrides, last adapter) across restarts
- ·Kill entire process group on pane/tab close so AI tool child processes terminate
- ·Prevent launcher from appearing during active AI tool sessions
v0.9.02026-04-01
Added
- ·Monaco editor for file browser — files open in an inline editor pane instead of nano
- ·Tab titles show pane name when tab has a single pane and default "Zone #" name
Fixed
- ·Sanitize XML tags in session names (e.g. `<command-message>` → `/` prefix)
- ·Dark text on accent-background install update button for readability
- ·Prevent launcher from showing when an AI tool is active
- ·Dev mode title bar glow for visibility
v0.8.02026-03-31
Added
- ·File drag-and-drop support for terminal panes
Fixed
- ·Cmd+V image paste detection and drop-to-correct-pane targeting
v0.7.02026-03-31
Added
- ·Pre-set adapter state on launcher resume and session title in pane header
v0.6.02026-03-31
Added
- ·Deterministic pane detection via `ATRIUM_PANE_ID` environment variable
v0.5.12026-03-31
Fixed
- ·Prevent keyboard events from propagating through dialogs to terminal
v0.5.02026-03-31
Added
- ·Reshow launcher when terminal is cleared (no active AI session)
v0.4.22026-03-31
Fixed
- ·Use adapter displayName and accentColor from registry, not hardcoded values
v0.4.12026-03-31
Fixed
- ·Remove legacy Rust hook installer — adapters own their config files
v0.4.02026-03-31
Added
- ·"Restart now" button on update toast
v0.3.12026-03-31
Fixed
- ·Force thin dark scrollbar across all macOS scroll bar settings
v0.3.02026-03-31
Added
- ·Persist launcher state to `~/.atrium`, remember last tool selection
- ·Auto-version bump in release pipeline
Fixed
- ·Read app version from package.json instead of duplicating
- ·Sync Cargo.toml version to match package.json
v0.2.02026-03-31
Added
- ·File browser in workspace sidebar
Fixed
- ·Show launcher on first-run pane
- ·Restore OSC 7 CWD tracking via ZDOTDIR (no double prompt)
v0.1.42026-03-30
Fixed
- ·Add "app" bundle target for updater artifacts
v0.1.32026-03-30
Fixed
- ·Add includeUpdaterJson to tauri-action for auto-updater support
v0.1.22026-03-30
Fixed
- ·Revert updater target — createUpdaterArtifacts is sufficient
v0.1.12026-03-30
Fixed
- ·Worktree post-create waits for directory instead of setTimeout
- ·Restore .worktreeinclude copy for inline worktree creation
- ·README corrections and updater artifacts config
v0.1.02026-03-30
Added
- ·Initial release: terminal workspace for AI-powered development
- ·PTY management with xterm.js + WebGL rendering
- ·Workspace persistence and crash recovery via write-ahead journal
- ·AI session detection and auto-resume via adapter system
- ·Split panes with react-mosaic drag-to-rearrange
- ·Theme system with 5 built-in themes and custom theme support
- ·Keybinding system matching iTerm defaults
- ·Git worktree integration
