Releases: sinelaw/fresh
fresh-editor 0.4.5
0.4.5
For live updates on Fresh, follow me on X.
Most options below can be changed in the Settings UI - run Open Settings from the command palette (
Ctrl+P).
Terminal input parsing was rewritten
Keyboard and mouse input is now parsed by our own fresh-input-parser crate instead of crossterm, to work around crossterm limitations that caused real bugs: dropped modified F1-F4 keys (Shift+F3 did nothing, #699), unchecked mouse-coordinate math (a crash, #2732), and desyncing on input split across reads (mouse sequences leaking into terminals, #2745). This touches core input handling broadly, so if anything feels off with keyboard or mouse input, please report it.
Features
- Option for in-editor self-update - update Fresh from the status-bar indicator, or via
fresh --cmd update. Detects your install method and runs the appropriate, platform specific, update command. - Syntax highlighting inside embedded code blocks - a fenced code block in a Markdown file (e.g.
```rust) now highlights with that language's own grammar instead of one flat color; the same mechanism also fixes Vue's<script>/<style>blocks (#2689, requested by @asukaminato0721). - Better Bazel/Starlark highlighting - functions, operators, punctuation, and built-ins are now highlighted, and
.bazel/MODULE.bazelfiles are recognized (contributed by @asukaminato0721). - Orchestrator: agents & workspaces
Run Agent…command launches a terminal or a coding agent (claude,codex,opencode,aider) in your current workspace or a new one, without the full New Workspace dialog.- Non-blocking workspace creation - creating a workspace no longer freezes the editor; choose Create & Visit or Create in Background and keep working while it comes up.
- Classic Mac (CR) line endings are now fully supported (#2736, requested by @720720).
.editorconfigsupport -indent_style/indent_size/tab_widthare picked up automatically (#959, requested by @nyurik).- Save All - save every modified buffer at once from the File menu (#2289, requested by @alspaughb).
Bug Fixes
- Orchestrator & dock
- Codex "Auto mode" works again (it was passing a flag recent Codex CLI rejects).
- Dock rows are fully clickable in compact (list) view, ordered by recency, and auto-name themselves from their terminal.
- Fixed a crash when navigating to an unreachable remote workspace.
- Terminal
- Tabs & splits
- A long filename no longer hides other tabs, and per-split scrolling is fixed (#2650, reported by @dmknght).
- Closing a split now asks for confirmation first.
- Closing the last editor tab no longer swallows the Utility Dock into the main tab bar (#2283, reported by @lizdeika).
- Plugin split APIs (
setSplitRatio,openFileInSplit) no longer crash or silently no-op on an invalid split (#2769, #2770, #2783, reported by @RetributionByRevenue).
- LSP
- Misc
- On-save actions no longer desync from disk on rapid saves (#2711, #2706, reported by @720720).
- Settings' Theme dropdown lists every installed theme (#2738, reported by @720720).
- Fixed a spurious devcontainer parse error on startup (#2709, reported by @720720).
- The ruler now draws past the last written line (#2631, reported by @akarinotomoshibi).
- Edit menu's "Replace..." is now correctly labeled "Query Replace..." (#2135).
Internals
- Split the monolithic plugin-dispatch and update/release-checking code into focused modules, alongside a round of flaky-e2e-test stabilization.
fresh-editor 0.4.4
0.4.4
For live updates on Fresh, follow me on X.
Most options below can be changed in the Settings UI - run Open Settings from the command palette (
Ctrl+P).
Features
- Terminal text selection with the mouse - dragging on a live integrated terminal now selects text: the view pauses in place (pixel-identical) while you drag,
Ctrl+Ccopies, and copying or clicking away resumes the live grid; double/triple-click selects a word/line. Mouse events are forwarded to the program inside only when it actually asked for mouse reporting, andShift+drag selects even from a mouse-hungry program (xterm convention).
If a new mouse behavior gets in your way, disable it in the Settings UI (
Ctrl+P→ Open Settings) - see Terminal > "Mouse Drag Selects" and Terminal > "Mouse Forwarding".
- Indent rainbow - color indentation guides by indent level via Editor > "Rainbow Indentation" and a six-color
indent_rainbow_1-indent_rainbow_6theme palette; also fixes a literal{level}placeholder leaking into translated locale strings (#2632, requested by @akarinotomoshibi, by @asukaminato0721). - Virtual space - the cursor can move past a line's end, like Visual Studio or Vim's
virtualedit. Enable with Editor > "Virtual Space" (onorblock), toggle per buffer via Toggle Virtual Space (Current Buffer). - Theme text attributes - syntax colors can now carry
bold/italic/underlined/dim/reversedmodifiers (#2638, by @asukaminato0721). - More languages highlighted - new grammars for gettext PO, m4, Xcode pbxproj, Metal, CUDA, HIP, Fortran, LLVM IR, and MLIR (#2593), plus fixed GLSL/HLSL/WGSL highlighting (#2553); both by @asukaminato0721.
NextPane/PrevPane- cycle through every split+tab pane as one flat list, distinct fromNextSplit/PrevSplitandNextWindow/PrevWindow; landing on a terminal now also switches it into terminal mode (#2562, by @masmu).- Orchestrator dock: organize workspaces into custom folders - create/rename/delete folders and move workspaces between them ("Move to Folder…" via the context menu,
F2, right-click, or the palette); the layout survives a crash. The toolbar is condensed to a "New Task…" dropdown and a search field, with other filters in a collapsible section (#2703). - Search in Project: file filter - a new Files field limits project search & replace to comma-separated globs like
*.rsorsrc/**(#2699, by @asukaminato0721).
Bug Fixes
- LSP diagnostic fixes: the gutter marker,
F8target, hover, and panel now shift with inserted/deleted lines instead of freezing at the pre-edit position until the next save (#2602); and dismissing a hover popup no longer drops an unrelated error from the status bar, gutter, andF8navigation (#2601). - LSP Rename keeps focus - a cross-file F2 rename no longer jumps you to the definition's file at a stale cursor position (#2599).
- LSP now pulls diagnostics from every server configured for a language, not just the first - e.g. both
ruffandtyfor Python now stay live (#2615, reported by @ak24watch). - Format Buffer respects the selection - with an active selection and a server that supports range formatting, only the selected range is formatted instead of silently reformatting the whole file (#2605).
- Monorepo workspaces - a workspace whose root is not itself a git repo now gets full git support for its nested sub-projects: file-explorer git decorations, status-bar branch, and git blame / grep / find-file (#2369, by @can2049); Git Log and Git Grep were also fixed for monorepo layouts.
- Search & Replace fixes: match stepping (
Ctrl+Alt+→/←, Enter-open) now follows live edits instead of landing on a stale position (#2583); clicking a Search & Replace or Settings text field now positions the caret at the clicked column, and Settings fields also gainedHome/End, word motion, andShift-selection (#2573, reported by @asukaminato0721); and Search and Replace in Project's results panel now keeps exactly one focused element, soTab/Down/Upreach and highlight the results list correctly (#2664). - Vi mode fixes:
>>/<<indent operators now work, including visual/visual-line/visual-block and.repeat (#2438, #2606);i"/a"now search forward on the line instead of requiring the cursor already inside the quotes (#2439);a"includes trailing whitespace, matching Vim's:help aquote(#2604);j/kclamp to the line's last character on shorter lines instead of overshooting by one (#2442);cwstops at word end instead of eating the trailing whitespace likedw(#2437); and thef/t/F/Tfind-char motions now work with operators (df,ct, …) instead of hanging in operator-pending mode or deleting the wrong span (#2441). - Virtual space status bar tracks the cursor into virtual space instead of freezing at the last real position (#2577).
- Indentation guide staircase gap fixed when a block's opener is scrolled off-screen (#2679).
- Large file fixes: the
:Nline jump now offers a scan prompt instead of jumping to line 1 (#2597), the line-count scan no longer undercounts on the first pass (#2596), and editing a large line-wrapped file no longer stalls for ~1 second per keystroke (#2610). - Remote fixes: the integrated terminal now works when the remote's login shell is fish or any non-POSIX shell, instead of failing on
=syntax (#2584, reported by @demin-dmitriy); switching to a workspace on a stalled SSH link no longer freezes the editor, since a dead connection now fails at connect time instead of hanging during workspace restore; and diving into a disconnected SSH workspace from the dock now lands in that workspace's empty "Disconnected" shell with the failure reason and a retry, instead of the dock claiming a switch that never happened - dormant remote rows also show a backend badge anduser@hostdetail (#2570). - Terminal scrolling no longer pins a CPU core - auto-revert is now per-buffer (off for terminals), and terminal buffers never line-wrap (#2608, #2609).
- Per-split terminal scrollback - a terminal shown in two splits can now read scrollback in one split while the other keeps following live output (#2595).
- Tab bar scrolling now reveals the active tab with minimal movement instead of re-centering it on every switch (#2675).
- Bracketed paste now respects read-only buffers, matching typing and
Ctrl+V(#2674). - Whitespace indicator fixes: the master toggle now restores your configured indicators, not just tabs, when turned back on (#2579); and indicators now show in new/unsaved buffers and re-resolve after Set Language (#2580, reported by @braindevices).
- File Explorer fixes: the context menu now grabs the keyboard while open, so keys no longer leak into the tree underneath (#2587); and git decorations now cover nested sub-repos even when the workspace root is itself a git repo (#2592).
- Git Grep no-match is reported as "No matches", not an error (#2591).
- Orchestrator remembers workspaces after a crash and shows "Cancel" instead of "Quit" on the trust prompt (#2658).
- Command palette names no longer truncate at the start - the name column sizes to the longest visible name; only an overlong name is trimmed, at its tail (#2703).
- Compose mode: cursor movement no longer lags in large files - arrow keys used to re-run wrapping and concealment over the whole buffer on every keypress.
- Per-language settings now apply everywhere - language-dependent buffer settings (tab size, auto-close, whitespace indicators, word characters, etc.) were applied inconsistently depending on how a buffer was created, and didn't refresh when a buffer's language changed. They now resolve uniformly and re-apply on any language change.
- Wheel-scrolled tree views no longer snap back to the selected row when a plugin refreshes the tree; scrollbar drags on trees also work now.
Internals
- A round of flaky-e2e-test stabilization replaced fixed-delay waits with semantic waits across the vi-mode, LSP, review-diff, search-replace, and orchestrator-dock suites.
fresh-editor 0.4.3
0.4.3
For live updates on Fresh, follow me on X.
Most options below can be changed in the Settings UI — run Open Settings from the command palette (
Ctrl+P).
Features
- Slang shader support - syntax highlighting and slangd LSP integration, with Go to Definition into read-only builtin modules (#2536, #2539, requested by @batoripX in #2517).
- NetBSD builds - Fresh now compiles on NetBSD (#2534, by @ci4ic4).
Bug Fixes
- Cursor column is preserved on vertical moves that used to drift it - indented soft-wrapped lines, off-screen up/down over short lines (#2565), and blank lines with indentation guides (#2564).
- LSP args - an empty
argslist now overrides a built-in server's defaults, so you can use one that takes no arguments (e.g. markdown-oxide for marksman) (#2549, reported by @alex-ball). - Settings icons now render on all terminals by default - standard Unicode symbols replace the Nerd Font glyphs that showed as
?; opt back in witheditor.nerd_font_icons(#2032). - Markdown tables no longer corrupt under rapid edits (#2479, #2484).
- Orchestrator - clicking a dock row focuses the activated window (#2521).
- Wave animation is now dismissable in daemon mode (#2530, reported by @muesli).
- Build - no more spurious
failed to parse serde attributewarnings oncargo install/cargo build(#2519, reported by @puphubv). - Large files - modestly-sized files (e.g. a ~2 MB file, or jumping into slangd's builtin module) no longer wrongly enter large-file mode, where the gutter/status showed byte offsets instead of line numbers and LSP was disabled; the threshold is now a single 10 MB setting instead of several overlapping ones (#2540).
- Remote workspaces (SSH) (#2525) - file explorer appears immediately when toggled (#2522), a boot hang is fixed with idle-based read timeouts, and per-keystroke lag on very long lines is gone (#2529).
- Indentation guides continue through soft-wrapped rows (#2538), respect per-buffer overrides and buffer kind (#2523), and stay visible when opening a file at a commit from Git Log.
- Settings fields - language-entry edits (incl. Tab Size) keep their committed value, with
Escto cancel andEnter/Tabto commit (#2537, #2515); the search filter gains full cursor editing and ignoresCtrl/Altchords; the Env list labels rows by name instead of(no action).
Internals
- Internal architecture docs were replaced with a leaner, code-verified set, new contributing guidelines were added, and a broad clippy / compiler-warning cleanup and function-decomposition pass landed across rendering, settings, and the plugin runtime.
fresh-editor 0.4.2
0.4.2
For live updates on Fresh, follow me on X.
Most options below can be changed in the Settings UI — run Open Settings from the command palette (
Ctrl+P). Hand-editing config files is rarely necessary.
Features
- Indentation guides — optional vertical guides for leading whitespace (off, all levels, or just the active block), with a customizable glyph and theme color. Enable and tune them in Settings (#2388, by @maupin).
- Persistable, editable macros — recorded macros can now leave the in-memory register: Macro: Save to init.ts writes an editable block, and Macro: Promote to command turns a macro into a real command you can extend with code (#2487).
- JSONC config files — config files now accept comments and trailing commas, a stray syntax slip no longer silently resets you to defaults, and saves never clobber an unparseable file (the error is surfaced instead) (#2497).
- Per-buffer view toggles — Toggle Line Numbers (Current Buffer) and Toggle Line Wrap (Current Buffer) scope to the active buffer and persist across restarts.
- LSP Go to Implementation (
textDocument/implementation) (#2384, by @Crocmagnon).
Improvements
- Open Terminal to the Right / Below — open a new terminal in a fresh split beside or below the active pane.
- File Open: reveal hidden files when the filter starts with
.(#2407, requested by @dragonfyre13). - Vim compatibility options for vi mode — extra compatibility motions and word search (#2398, by @NihilDigit).
- Read-only
[RO]indicator now actually renders in the status bar, and is clickable (#2309). - Terminal mode hides the unused scrollbar and reclaims its column for the live grid.
- Copy strips ANSI escape codes, so text yanked from terminal output pastes clean (#2408).
- Settings UI: smoother mouse interaction and clearer dirty-state markers (#2395, by @NihilDigit).
- Remote workspaces (SSH / Kubernetes):
- A dropped connection offers Reconnect from the status indicator, and reconnecting respawns the workspace's embedded terminals (#2413, #2482).
- Remote sessions stay in the Orchestrator dock across restarts, and reconnect failures surface on the status line (#2412).
- Agents (e.g.
claude) launched in a remote workspace now run on the remote host / in the pod, not silently on the local machine (#2409).
Bug Fixes
- Regex search:
^/$now anchor per line in multi-lineCtrl+Fsearch (#2495). - Splits: closing a buffer shown in two splits no longer desyncs the surviving cursor (#2496).
- Terminal: a terminal restores its live/scrollback mode on refocus, and the last split is no longer left read-only after closing a second terminal (#2485).
- Per-language indentation rules are now actually applied — previously custom patterns were ignored (#2314).
- Brackets are no longer highlighted inside comments and strings (#2405, reported by @TakemiSora).
- Quick-open
#buffer switcher now lists virtual buffers (#2373). - Review Diff: line-level visual stage/unstage/discard (
vthens/u/d) works, and discard shows a localized message (#2317, #2420). - Project search & replace: plugin edits no longer leave phantom match highlights (#2414, reported by @mandolyte).
- Keybindings: switching keybinding maps no longer hides plugin bindings until restart (#2307);
Shift+letter bindings match even when the terminal omits theSHIFTmodifier (#1899, reported by @RandomGHUser). - Git Blame lands on the user's current source line, including files with multi-byte characters (#1957).
- Mark mode: movement commands (bracket jump, Home) extend the selection instead of dropping it (#2489).
- File explorer: a deliberately-closed explorer no longer reopens on relaunch (#2476); configured ignore patterns are applied to the tree (#2404, by @sfjohansson).
- Switch Project re-roots the active window in place instead of restarting the editor (#2472).
- New Workspace (Local) seeds its path from a local root even when the active window is remote (#2480).
- Markdown compose: table cells are measured by display width (fixing emoji-row border flicker), and table borders clear when compose mode is disabled (#2475, #2478, thanks @Agrejus).
- Terminal scrollback: ANSI colors survive soft-wrapped rows (#2449); the backing file stays local in remote mode, fixing a hang when toggling scrollback over SSH (#2424).
- Shebang language detection now covers interpreters with no first-line regex (Fish, Lua, PowerShell, Tcl, Elixir, R, Julia, …), handling
envindirection and versioned names; an existing extension match still wins (#2357, reported by @shemgp). - The asm-lsp "no
.asm-lsp.toml" offer is scoped to its triggering buffer instead of floating over every buffer. - The tab bar's "+" popup and tab context menu grab the keyboard while open, so keys no longer leak into the buffer underneath.
Internals
- Plugin API: core unicode display-width is exposed to plugins (
charWidth/stringWidth) (#2401, by @Agrejus), and conceal ranges can be cleared by namespace (#2399, by @Agrejus). - A large refactor decomposed many oversized functions across rendering, settings, the plugin runtime, and terminals, and reworked the UI rendering pipeline.
fresh-guinow uses the publishedratatui-wgpufrom crates.io, making it publishable (#2488).- Docs: dropped remaining "experimental" disclaimers, added the 0.4.0 "What's New" blog post, and documented the SSH "jump box" pattern (#2377, by @Monear).
fresh-editor 0.4.1
0.4.1
This is mostly a bug-fix release.
For live updates on Fresh, follow me on X.
Renamed features and clarified docs
This releases introduces new names (in docs, cli, etc) to clarify the ambiguously used word: "session". The new vocabulary:
- daemon — the persistent background process you attach to and detach from.
- workspace — the editor's per-project unit. Multiple workspaces are managed by the Orchestrator.
- backend — where a workspace runs (local / SSH / dev container / Kubernetes).
The cli now supports --cmd daemon, but still accepts the now-deprecated --cmd session as an alias. The new vocabulary also reaches the user-facing surfaces of the editor: the Orchestrator now lists, dives into, and manages workspaces (commands, dialogs, dock chrome, and status messages), and the replace-in-project confirmation refers to files open "in this workspace". Localized strings were updated to match in every supported locale.
Features
- New language support:
- Assembly via asm-lsp (opt-in) — GAS and NASM/Intel across x86/x86_64/ARM/RISC-V, with an offer to generate
.asm-lsp.tomlfrom the detected dialect (#1964, requested by @viti95). - Fish highlighting and auto-indentation (#2272), by @asukaminato0721.
- Smali highlighting (#2265), by @asukaminato0721.
yarn.lockand other well-known lock/config files now highlight by their real format (#2326, reported by @asukaminato0721).
- Assembly via asm-lsp (opt-in) — GAS and NASM/Intel across x86/x86_64/ARM/RISC-V, with an offer to generate
- Windows on ARM release artifacts (#784, requested by @teobugslayer; by @NihilDigit).
CancelMark/ClearMarkactions for fine-grained selection-anchor management (#2371, by @masmu).- Git Log (Current File) command, plus concurrent git-blame buffers.
Improvements
- Workspace trust & environments:
- A single trust prompt for every project — folders with a shell environment (
.envrc/mise/.tool-versions) no longer get the env-manager plugin's separate popup; the one prompt names the detected markers and activates on trust. - Environment detection is defined once in core and user-extensible (
env.detectors, now also covering pipenv and poetry); the activated environment applies uniformly across every backend — integrated terminal, Docker, Kubernetes, SSH. - Hardening: plugins can request but never grant trust; a lone
.venvno longer silently auto-trusts; venv activation uses a relativesource .venv/bin/activatesnippet to avoid shell injection (cf. CVE-2024-9287).
- A single trust prompt for every project — folders with a shell environment (
- Settings: distinct, keyboard-reachable
[Inherit]/[Reset]/[Clear]per field; the language entry dialog no longer clobbers inherited fields (#2345, reported by @ren-lv). - Orchestrator localization: the Orchestrator plugin is now fully internationalized — all 225 user-facing strings go through the editor's i18n mechanism, with translations for the 14 supported locales (cs, de, es, fr, it, ja, ko, pt-BR, ru, th, uk, vi, zh-CN, and en).
- The Orchestrator New Workspace dialog has a clearer, keyboard-linear focus model (Tab accepts the highlighted completion).
Bug Fixes
- vi-mode: delete/change/yank update the unnamed register (#2368, by @NihilDigit); the cursor moves one column left on leaving insert mode (#2349, by @ianyepan);
%jumps to the matching bracket (#2346, by @ianyepan). - Theme inspector & plugin panels (#2321):
- Opening the theme editor no longer breaks Orchestrator dock clicks/scrolling — plugin panels are scoped to their owning plugin.
- Ctrl+Right-Click reports accurate theme keys for the status bar, tab bar, scrollbar, file explorer, menus, and dock, drawing above the dock.
- The plugin bridge no longer corrupts integers larger than 32 bits (timestamps, byte offsets).
- Java (jdtls) and other Eclipse LSP4J servers: features registered via
client/registerCapabilitynow work — their string JSON-RPC ids were misparsed as notifications and dropped (#2340, reported by @maxandersen). - LSP/plugin popups follow the active theme's
popup_*colors instead of a hard-wired dark background (#2379, by @peanball). - Paste falls back to the internal clipboard and works again on Termux (#2343, reported by @nightshade427).
- npm
.cmd/.batshims resolve on Windows, so npm-installed language servers spawn (#2324, reported by @SupertigerDev). - Occurrence highlighting uses a theme-appropriate background in every shipped theme (#2312).
- Review Diff lists files inside untracked directories (#2315).
- The embedded terminal forwards the wheel as a mouse report to mouse-tracking programs, so scrolling no longer cycles their history (#2366).
- Replace toolbar: checked search options are visible in every theme (#2363).
- Alt+W and other search toggles no longer leak into the close prompt (#2359).
- Fixed a crash on a stale soft-wrap position in multi-byte text (#2320).
- Trusting a workspace with a shell or virtualenv environment (
.envrc/mise/.venv) no longer restarts the whole editor: other windows keep their running terminals, language servers, and Orchestrator dock; only the active window refreshes to pick up the new environment. - A file opened while a split is maximized — for example via an embedded
fresh <file>forwarded from a maximized terminal dock — is now revealed instead of rendering hidden behind the maximized split (which previously looked like the terminal had hung).
Internals
- Refactored the UI element rendering pipeline to make it easier to introduce alternative rendering frontends.
fresh-editor 0.4.0
0.4.0
For live updates on Fresh, follow me on X.
Features
- Review Diff, reworked: a file sidebar with per-file status, change counts, and comment badges, grouped by directory; an in-panel side-by-side view that keeps the sidebar; a multi-line comments panel, with commenting available anywhere in the diff; a watch mode (
W) that reloads the diff on save; reviewing a git stash; split/stack/auto layout toggles, a/file filter, and reworked keyboard navigation (Tab focus model, cross-filen/p). - Workspace trust & environments: a first-class, clickable
{trust}element now leads the status bar; virtualenvs activate without a prompt, shell envs get a single combined trust-and-activate prompt, and env pills in the status bar are clickable. Changing the trust level resets only the active session instead of the whole editor. - Per-session backends: each session now owns its environment, trust level, and backend (local / SSH / Kubernetes / devcontainer). Remote sessions survive a restart and reconnect when activated; restored agent sessions re-run their agent instead of coming back as a blank terminal, and the New Session dialog gained an agent-command dropdown.
- Terminal: send the selection (or current line) to the terminal (#1871, requested by @aquasync); Ctrl+Click or Ctrl+hover opens file paths from terminal output, including scrollback; the shell working directory is tracked via OSC 7.
- Configurable indentation rules per language via
[languages.<id>.indent], including VS Code-style regex rules. 14 indent-only tree-sitter grammars were replaced by these rules, shrinking the binary by ~18 MB. - GDScript language support (#2238, by @richiehowelll).
lsp_enabledmaster switch to disable all LSP features globally (#1770, requested by @XhstormR).auto_read_onlyoption to turn off automatic read-only mode for foreign files (#2048).- Occurrence highlighting toggle with configuration (#2154, by @masmu), and the current-line highlight now hides while text is selected (#2153, by @masmu).
- Clear Search action and a plugin API exposing the active search state (#2152, by @masmu).
- File Explorer slot override API for plugins: icons, status, and name color (#2241, by @Agrejus).
- '+' new-tab button in the tab bar, with a New Terminal / New File popup.
- A color-transition animation on theme switch, and a wave animation — available as a command and as an optional idle screensaver.
Improvements
- Live Diff: word-level highlighting inside changed line pairs (#1949, requested by @masapu).
- Status bar: configurable separator with dedicated theme keys; the default separator is now padding-only and the default left side leads with
{trust}. - Orchestrator dock: seamless-tab look for the active session, a hover-only overlay scrollbar, a stable session order, keyboard-navigable project dropdown, and clicking an inactive worktree opens it without an extra confirmation.
- File Explorer: natural-order filename sorting (#2073, requested by @mandolyte).
qcloses the Keyboard Shortcuts and Fresh Manual viewers (#2165).- Undoing a format-on-save or trim rewrite keeps the view in place (#2027, requested by @SolarLune).
Bug Fixes
- Windows: the TUI attaches to the parent process's stdio instead of failing in
-guibuilds (#2276, reported and fixed by @mokurin000 in #2277). - Right-side status bar elements render with configurable separators (#2088, reported and fixed by @PavelLoparev), and cursor column numbers are grapheme-correct (#2090, reported and fixed by @PavelLoparev).
- Scroll panels compute focus offsets from the render width when a scrollbar is present (#2175, by @masmu).
- Restored windows no longer show a blank editor pane from an orphaned split leaf (#2267).
- Paste reaches Settings/dialog text fields instead of the buffer behind them, and buffer pastes work again after closing the dialog (#2246).
- Tab bar scroll re-anchors after closing many tabs, keeping the surviving tab visible (#2229, reported by @dmknght).
- LSP code actions now include diagnostics context, so diagnostic-based fixes appear (#2212).
- Devcontainer CLI detection works when the CLI is installed via Bun on Windows (#2201, reported by @steve-price-immybot).
install.sh/ AURfresh-editor-binpackaging fixed (#2249, reported by @asukaminato0721; #2250, reported by @bandrefilipe).- Focusing a restored terminal tab activates terminal mode.
fresh-editor 0.3.12
0.3.12
For live updates on Fresh, follow me on X.
Features
-
Orchestrator Dock: a persistent, non-modal left-column session switcher. Alt+O toggles focus; arrows live-switch the active session. Each row shows status (working/idle), project, branch, git summary, and a PR badge. Project dropdown, card/compact view toggle, and a Manage button for the Orchestrator dialog.
-
Create SSH sessions from within the UI: You could already open a remote host from the cli, now you can do it via the Orchestrator: New dialog - it has a type selector (Local / SSH, and experimental Kubernetes / Devcontainer). Like the cli invocation - SSH attaches a full remote session:filesystem, LSP, process spawners, and a terminal on the remote host; switching retargets without a restart.
-
Kubernetes sessions (initial, experimental): connect over
kubectl execto any cluster, with a keepalive heartbeat and reconnect. -
Go to LSP Symbol: a symbol finder with live preview, a precise jump to the symbol name (line and column), source-line snippets, and preselection of the symbol under the cursor (#1886, by @PavelLoparev).
-
Terminal tab auto-naming: tabs follow the foreground process and OSC title. Setting
editor.terminal_auto_title(on by default). -
Open file from a diff: in the side-by-side and review-diff views, Enter opens the working-tree file (NEW pane) or the read-only HEAD version (OLD pane) at that line.
-
Rainbow bracket colorization for matching brackets across the viewport (#1088, by @asukaminato0721).
-
Minimal static Linux binary release artifact (musl, x86_64 and aarch64) optimized for a small binary size.
Improvements
variable.builtinsyntax category forthis/self/super(#2150, by @masmu).storage.typekeywords highlight as keywords rather than types (#2151, by @masmu).- Async clipboard paste: paste no longer blocks the editor, and a hung X11/Wayland clipboard owner should no longer freeze it (#2155, reported by @EtienneMaire37)
- Nested
freshlaunches ($EDITOR,git commit) inside Fresh's terminal open in the parent editor instead of a second editor; falls back to inline if the parent is unreachable. - Python indentation: Enter after
return/pass/raise/break/continuededents out of the block, and an extra indent level after a statement inside a block is fixed (#2192, reported by @WorldChallenge1). - Terminal scrollback survives resize,
clear, and alternate-screen programs; the scroll-back view soft-wraps long lines. - SSH remote editing is documented in
fresh --help.
Bug Fixes
- Inlay hints participate in line wrapping and horizontal scroll (#2190, reported by @TakemiSora).
- LSP capabilities: dynamic
client/registerCapabilityis now applied, andworkspace/configurationand the diagnostic / inlay-hint / semantic-token refresh capabilities are advertised, so more servers pull config and re-pull stale results. - No crash on a malformed mouse input sequence (#2234).
- Failed SSH/Kubernetes connects show their error instead of corrupting the screen.
- Fixed stuck keyboard input after using a session terminal and then opening a file (#2237, #2234).
- Fixed a client/server freeze when copying a large terminal-scrollback selection.
- File Explorer no longer re-roots the wrong window when previewing a restored session.
- Every session is archivable and deletable, including the launch session and the last window.
- The dock's working/idle indicator tracks the right session and idles when output stops.
- A worktree session in a repo with no commits reports git's real error.
- Text-input fields in dialogs focus on click (#2234).
- Diff "removed" lines no longer wrap one character per row at narrow widths, or when a language overrides the wrap column to 0 (#2177, reported by @biscuitvicious).
- LSP hover popups no longer appear while the LSP status popup is open (#2244, reported by @biscuitvicious).
editor.scroll_offsetis respected (#2162, reported and fixed by @PavelLoparev).- Windows: long paths middle-truncate, and short-name /
\\?\path differences no longer reorder the dock. - Fixed a marker-tree corruption that could drop edits to markers and highlights.
fresh-editor 0.3.10
0.3.10
A lot of work on bug fixes and polish in this release.
Improvements
- Live Grep: previews highlight all matches and center on the match in wrapped documents; keyboard nav re-reveals the selection after a wheel scroll; prompt text is readable on all themes (new
suggestion_fgtheme key) and toolbar labels readable on light themes. - The Workspace Trust prompt and the env-manager plugin's commands and status messages are now localized across all 14 supported languages (#2158).
- Session model reworked: one session per directory,
windows.jsondropped (sessions are discovered from the per-dir workspace cache), only the foreground window is materialized at startup with the rest lazy-restored, and the base session is no longer magic — it can be deleted like any other. - Orchestrator picker hides empty / single-file sessions by default, with a toggle to show them (#2137).
- The Live Grep => Quickfix (persisted) list is now a Finder dock panel instead of a bespoke buffer: Enter navigates to the match, the dock stays open when jumping, and
live_grep_export_quickfixis bound by default (#2124).
Bug Fixes
- Mouse-wheel scrolling fixed in File Explorer, Live Grep, and Git Log panels (#2119, reported by @brunnerh in #2107).
- Search highlights no longer grow over adjacent typing (#2053, reported by @mandolyte) and stale matches now clear after edits inside a match (#2133).
- Search / Replace: panel no longer gets stuck on "Searching…" with zero matches; Search and Replace in Current File now works for unnamed buffers and for files outside the workspace root (#2112).
- LSP: diagnostics now display in Markdown compose/preview mode (#2146);
workspace/configurationis answered per-server instead of with a fixed rust-analyzer blob; newly configured servers default toauto_start = true. - Diagnostics panel
q/a/rshortcuts work again instead of tripping "Editing disabled" (#2125). - Review Diff: Discard hunk now succeeds for files with an unterminated final line (#2117).
- Macro replay is now a single undo unit instead of per-char (#2062).
- Submenus align so the first item is inline with the selected parent item (#2118, reported by @RandomGHUser).
- File Explorer:
Ctrl+Oworks and keeps focus on the opened buffer. - Settings: text fields commit and advance focus on
Enter;Ctrl+Uclears the prompt. - Gutter no longer eats text width in non-compose mode when line numbers are off.
- Windows: the Microsoft Store
pwshApp Execution Alias is skipped when opening a terminal (#2077, reported by @ket000), with an opt-out flag. - Session working trees stored under the data dir are now editable.
fresh-editor 0.3.9
0.3.9
Features
Universal Search (multi-scope Live Grep)
Live Grep grows into a universal search overlay: search across multiple scopes — project files, open Buffers, and Terminals scrollback — with Word and Regex search modes (each keybindable). The overlay gets a clickable widget toolbar (focusable provider button, toggle controls), a full-width header band, and inline status shown in the overlay itself. Closed-terminal scrollback is retained so it stays searchable (#2099).
Orchestrator & git worktrees
- Attach sessions to existing git worktrees and discover them automatically (#2095).
- Multi-select bulk actions, worktree ordering, and a Show all worktrees filter toggle.
- Draggable scrollbars on the picker lists, with bulk-pane reorder.
Editor
- Move to Next / Previous Paragraph actions, including translations (#2084, contributed by @PavelLoparev; requested in #2083).
Language Support
Plugins & API
- New
getWorkingDataDir()(per-working-dir data root) andgetTerminalDir()plugin APIs. - Overlay toolbar widget APIs — clickable
Toggle/Buttoncontrols,toggleOverlayToolbarWidget, and aRow { wrap }layout that reflows toolbars across lines.
Improvements
- The dashboard no longer opens automatically on startup by default. To re-enable it, open Settings, select Plugin: dashboard, and turn on AutoOpen ("Show the dashboard automatically when Fresh starts with no real files open."). The dashboard remains available any time via the Show Dashboard command.
- Homebrew install simplified now that fresh-editor is in homebrew-core —
brew install fresh-editor, no tap step.
Bug Fixes
- Plugin
getCursorLine()now returns the real cursor line instead of0(#2076, reported by @pmburov). - Reduced serial-console lag by not repainting on non-visual plugin async events (#2100, reported by @jetpax).
- Custom theme colours no longer silently ignored for many UI fields (#2080, contributed by @flexiondotorg; reported in #2079).
PageDown/PageUpno longer overshoot on a single soft-wrapped line (#2085).- Workspace restore no longer mixes tabs from multiple projects in one window (#2056, reported by @mandolyte).
- Live Grep: Resume keeps the query and opens the selected result; overlay preview and input-box undo/redo corrected; Buffers scope finds unmodified open buffers; non-file-scope previews and read-only data-dir files fixed.
getKeybindingLabelresolves correctly for bound plugin actions.
Internal
- Major window refactor: window-scoped save/restore (
Window::from_workspace),WindowId-parameterized persistence,working_dirderived from the active window, andopen_file/LSP/watch helpers moved ontoWindow. - Orchestrator bring-up characterization tests and fixtures across persistence layouts.
- Serial-console lag benchmark/diagnostic scripts; theme-key resolver schema-drift guard.
- Internal docs excluded from the public docs build.
fresh-editor 0.3.8
0.3.8
Features / Improvements
Remote Development
- LSP over SSH now runs the language server on the remote host
Orchestrator
- The Open dialog is now scoped to the current project by default, with a visible scope toggle to reach other projects, a tabular picker, and
/to filter. - New windows open atomically with their terminal (no
[No Name]placeholder), and terminal output shows immediately.
Settings UI
A broad pass on the Settings editor: number fields now accept direct typing instead of [-]/[+] spinners; list editing gets inline [+] Add new / [x] rows, mouse support, and Del to remove; Ctrl+R resets a field to its default; the focused field's description is shown above the dialog buttons; and confirmations are required before deleting or discarding dirty edits.
Editor
- Next / Previous Window commands to cycle open windows without the Switch-Project picker (#2031).
- Move File Explorer to Other Side command, persisted to config (#1468, requested by @asukaminato0721).
- Templ (
.templ) syntax highlighting (#463, requested by @TS22082). - New
editor.confirm_quitsetting (default off) to prompt before quitting a clean session.
Plugins & API
- Built-in
editor.httpFetch(url, path)for downloading files —curlis no longer bundled. - "Install from URL" accepts direct
file://URLs.
Bug Fixes
- Quit binding overrides honored (#2030): binding
Ctrl+Qtonoop/nonenow actually disables it in every context. - Terminals: line-number gutter and current-line highlight no longer leak on terminal exit; scroll-back viewport anchors correctly;
Shift+Tabis forwarded to the child asESC[Z(#2029). - File explorer keeps keyboard focus when leaving a live terminal (#2029).
- Closed terminals no longer reappear, and buffer groups stay visible when a split closes (#2027, reported by @SolarLune).
- Git Log: selected commit stays aligned with the cursor; selection follows scrolling and row clicks.
- Adjacent tab indicators no longer double up (#1997, reported by @brunnerh).
- Theming / Live Diff: light-theme dim fixes, markdown popup body text inherits the terminal fg, and diff lines preserve syntax foreground.
- Tree-sitter
.scmquery files are included in the Nix source filter, fixing a source-build failure (#2055, reported by @melekbadreddine).
Preview work (will be enabled in next release)
Environment Managers (venv / direnv / mise)
New built-in environment-manager plugin: it detects a project's environment manager — .venv/venv, .envrc (direnv), or mise.toml/.tool-versions — and, via Env: Activate, injects that environment into every editor-spawned process (LSP, formatters, terminals, spawnProcess). Env: Use System (Deactivate) restores the system environment, and Env: Show Status reports the current state. Activation is on-demand (not automatic) and respects Workspace Trust. Adds an opt-in env status-bar element.
Workspace Trust (groundwork)
Foundational Workspace Trust support — a per-project trust level (persisted in the project state dir), a Set Workspace Trust Level command-palette control, and a workspaceTrustLevel() plugin API. The enforcement gate is off by default this release (no prompt on open; undecided folders are treated as Trusted) while the trust UX is reworked around sandboxed execution — so there is no behavior change unless you set a trust level yourself.