Repository navigation
Releases: sinelaw/fresh
Release list
fresh-editor 0.5.4
0.5.4
For live updates on Fresh, follow me on X.
Most config options below can be changed in the Settings UI - run Open Settings from the command palette (
Ctrl+P).
Features
- Simple launch by default - based on your feedback, some defaults are dialed back so launching is simple. Nothing was removed (#3555, #3556, #3568, reported by @zipproth)
fresh FILEopens just that file, with no restored session, dock or Welcome tab (even if you left the dock open). This makes Fresh a better$EDITOR/ gitcore.editor;fresh --simpledoes the same without a file- With Auto Attach on, a bare
freshisfresh -a(no name): the one shared background editor (afresh -athat names a remote host, or finds a per-directory daemon already running in its directory, still goes to that one). Typed in a Fresh terminal, with Auto Attach on or off, either one now leaves that editor as it is and says you are already in it, instead of starting a second editor inside the terminal;fresh --simple,fresh -a NAMEand piped input are refused there with an error. The message says how to start a separate editor anyway (FRESH_SESSION= fresh --simple) - Orchestrator mode is now Auto Attach (
auto_attach): what the setting does is attach a barefreshto the shared background editor, so it is named for that.orchestrator_modein an existing config is still read, and moves to the new name the next time a setting is saved - The Orchestrator dock starts closed, for a bare
freshtoo and for existing users whose dock was open at their last quit; open it from View ▸ Orchestrator Dock and it stays open from then on - A bare
freshopens the directory you typed it in, also when it reattaches to a running daemon, instead of the workspace you used last. The new Open Last Workspace setting (open_last_workspace, off by default) brings back the old behaviour, with Auto Attach on or off - An empty workspace behaves the same for a bare
freshas in any launch: a[No Name]buffer on a first run, and closing the last tab followsauto_create_empty_buffer_on_last_buffer_closeandfile_explorer.auto_open_on_last_buffer_closeinstead of always leaving a blank pane fresh DIRstill restores that directory's previous workspace (open files, layout) and shows the Welcome tab;fresh --restore FILEdoes the same for a file launchfresh DIRopens the file explorer unless you closed it in that directory yourself;fresh --simple(with or without a directory) starts with it closed- Startup is faster with many workspaces, which now load on first use
- Markdown Source / Rendered / Source+Compose modes - new commands switch a Markdown pane between the raw text and the composed view, and a dual mode shows both side by side in one scroll-synced tab (edit on the source side; closing the tab leaves your file and panes as they were). "Cycle View Mode" steps through all three (#3562, by @PilotLeoYan)
- Debian testing/unstable package - each release also attaches a
.debian-testing.debbuilt from Debian's own packaged crates (#3519) - New config option: close a shell's tab when the shell exits - with it on,
exitor Ctrl+D in an integrated terminal closes its tab (and the pane, if it was the only tab). Off by default; enable it in the Settings UI (#3537, by @cychitivav) - Middle-click closes a tab (#3284, #3286, by @CnsMaple)
- Clickable "Palette: Ctrl+P" status hint opens the command palette (#3250, #3576, requested by @Korkman, by @peyton-durand)
- Duplicate Line Above command, and duplicated lines keep carets and selections on the copy (#3244, by @kimprap)
- Terminal programs can set your clipboard - OSC 52 writes from the integrated terminal reach the host clipboard (#3572, #3573, by @mycloa)
Bug Fixes
- Unsaved changes carry over between the background daemon and a direct launch - an edit left unsaved in a bare
freshnow comes back infresh FILEor with Auto Attach off, and the other way round; each mode used to keep its own recovery store - A detached daemon no longer shuts itself down - it used to exit after an hour with no terminal attached, taking running agents with it; it now runs until you quit it
- Markdown compose layout with emoji and CJK text - code-block frames keep their edges and wrapped table cells no longer start with a stray space or break early (#3562)
- Clear error in mintty / Git Bash - Fresh now explains it needs a real console instead of failing with
os error 6(#3547, #3549, reported by @netoffice-zz) - git no longer hangs on a detached daemon -
--waitagainst a daemon with nothing attached no longer waits on an invisible editor (#3555) - Plugin bundling uses a private temp directory, closing a local-user file-overwrite risk (#3557)
fresh -aworks in deeply nested directories - the daemon no longer dies at startup when the directory path is too long for a Unix socket name; such directories get a shortened, hashed socket name, and every other directory keeps the name it had- macOS file-descriptor leak - the daemon no longer runs out of fds after files change in the project root (#3523, #3584, reported by @IconRunner05)
- Windows fixes
- Stale syntax colors after commenting a block of lines (#3551, by @kimprap)
- Closing a discarded or saved last tab now closes its empty split (#3552, by @kimprap)
- Rename works with servers lacking prepareRename, such as pylsp (#3540, by @cychitivav)
- Regex replace keeps non-ASCII text in the replacement intact (#3571, by @neatsorg)
- Unnamed buffers honor editor settings such as auto-close and occurrence highlight after restore (#3570, by @neatsorg)
- A half-open client connection can't stall the daemon (#3542)
- Hidden/ignored files are treated consistently across Quick Open, the explorer and project search (#3368, #3580, by @lixin-wei)
- Bundled grammars load before bundle plugins (#3544)
- Docs clarify
textmate_grammaronly supports.sublime-syntax(#3115, #3583, reported by @sgon00, by @peyton-durand)
Internals
fresh-editor 0.5.3
0.5.3
For live updates on Fresh, follow me on X.
Most config options below can be changed in the Settings UI - run Open Settings from the command palette (
Ctrl+P).
Features
- Find Next selects the whole match - F3 / Shift+F3 select the entire match, and the current match is highlighted in its own color
- Theme text attributes - any theme color accepts bold, italic or underline, e.g. to draw diagnostics as underlines (#3494, requested by @zeevro)
- Theme color fallbacks - colors a theme omits are derived from its other colors. Complete user themes may look slightly different after upgrading; see Themes → Fallbacks
- Full internationalization of the Settings UI - setting names, descriptions and categories are translated in all locales (#3479 by @neatsorg)
- Import coding agent and terminal sessions in Orchestrator
- Claude and Codex sessions running outside Fresh are listed in the dock, grouped by product
- Open a session as a workspace, or fork a cloud session into one
- Move to Folder files workspaces and sessions into folders, by click or drag
- File Explorer (#3427, requested by @akarinotomoshibi)
- Drag and drop to move files and folders
- Rename accepts a path, which moves the entry
- Dropping a file asks for confirmation before moving it, and the move is animated
- Refresh button
- Weather location and units can be set for the dashboard plugin (#3344 by @KyleKorndoerfer)
- Kotlin uses JetBrains' official
kotlin-lspby default; setlsp.kotlin.commandto keepkotlin-language-server(#3481 by @karczews) - Plugin docs - the API reference is generated from the source, and there is a new "Asking for Input" guide
Bug Fixes
AutoOpenDockhonored, withauto/always/nevervalues - opening or closing the dock is remembered across restarts, and the old on/off value is migrated (#3442, #3516, reported by @sjsepan3)- Bare
freshon a Linux console and with several terminals attached (#3517, reported by @MAT-services)- Faster startup: the first frame no longer waits for plugins to load
- The session is sized by the terminal last used
- Console mouse (GPM) works again; selections and indentation guides are visible
- The dock width scales with the terminal instead of crowding the menu bar
- Line Numbers, Line Wrap and Current Line Highlight apply to all open documents, and the View menu reflects the current state (#3449, reported by @sjsepan3)
- File Explorer (#3427, reported by @akarinotomoshibi)
- New File / New Folder create the entry only after the name is confirmed
- Rename no longer overwrites an existing file
- Right-click uses the entry under the pointer: empty space selects the project root, and each segment of a
dir1/dir2/dir3row is selectable
- Project Search/Replace -
$1capture groups are expanded in regex mode, hidden files are searched in current-file scope, and Replace All asks for confirmation in a dialog - Selection keys - Up/Down work when a selection touches the first or last line (#3486, reported by @Korkman); repeated Ctrl+L extends the selection by a line (#3495, reported by @sjsepan3)
- Plugin timers and crash-recovery saves run in the background session (#3440, reported by @neatsorg)
- Restored unnamed buffers use the configured editor settings, e.g. current line highlight (#3426, reported by @neatsorg)
- LSP diagnostics are shown on the only line of an empty file (#3484, reported by @akarinotomoshibi)
- Mouse release no longer printed at the shell prompt after quitting with a click (#3474, reported by @odjbo)
- Update check on Android/Termux no longer panics (#3453, reported by @dsvarela)
- Unsaved buffers are kept when switching projects - they are restored in the project they belong to and no longer multiply across workspace switches and restarts (#3475, #3476, reported by @Korkman; #3530 by @neatsorg)
- Scroll position is kept when a modifier key is pressed alone (#3324, reported by @akarinotomoshibi; #3373 by @56steve)
- Quit is no longer delayed by a background request or a lost mouse release
- A second daemon can no longer take over a running session and leave it unreachable
- TypeScript 7 (
tsc --lsp) diagnostics work (#3061, reported by @defaultkavy; #3413 by @atk) - Window title is set in Orchestrator sessions (#3515 by @neatsorg)
- Dev container remote indicator is cleared once the container is attached (#3487 by @cychitivav)
- Occurrence highlight skips the indentation of a wrapped line (#3466, reported by @mandolyte)
- Review mode asks for confirmation before discarding a line selection
- Syntax highlighting
- Empty pane is dimmed behind Settings (#3452, reported by @akarinotomoshibi)
- List selection follows its item when the list is re-sorted or filtered, and Page Up/Down move by the visible rows
- Word wrap of long CJK text no longer drops the end of a line (#3438 by @neatsorg)
- Review Diff no longer draws the scrollbar of the hidden file behind it (#3434)
- Windows GUI build from cmd.exe and PowerShell - a new
fresh-gui-<target>.zipshipsfresh-gui.exewith afresh-gui.comconsole launcher, so typingfresh-guiruns the TUI without the shell competing for keyboard and mouse input (#2965, reported by @mokurin000)
Internals
- Plugin API breaking change -
setPromptSuggestionsthrows unless every suggestion has a uniqueid(new, required);showActionPopup/setLspMenuContributionsthrow on duplicate ids; widgetList/Treespecs whoseitemKeysdon't match their items one to one are refused - Flaky e2e test fixes and internal cleanups
fresh-editor 0.5.2
0.5.2
For live updates on Fresh, follow me on X.
Fresh is now licensed GPL-3.0-or-later, up from GPL-2.0-only (#3328).
Most config options below can be changed in the Settings UI - run Open Settings from the command palette (
Ctrl+P).
Features
- Orchestrator mode - a bare
fresh, with no file or flags, reopens the workspace you were last in, dock and all, running as a background daemon. On by default, toggle it in Settings (#3306) - New CLI commands -
workspace list, andagent list/get/explain/wait/start, for scripting Orchestrator workspaces and agents without reading the dock - Confirmations are a modal dialog now, not a line on the bottom row - a centred card with each outcome spelled out as its own button, answering to arrows, Tab, Enter, Esc, the mouse and the letter underlined in the label; an outcome that loses work is in the error colour and never opens armed (#3320)
- Orchestrator: a Repositories registry tracks one main clone per project per machine - the New Workspace / Run Agent dialog resolves paths from it, warns when a machine has none, and confirms before cloning; its fields now fold behind one-line summaries instead of staying open all at once (#3360)
- Orchestrator: workspaces run on a saved machine, chosen from one consistent list - the dock's
⋯is a labeledMenunow, and the Machines dialog matches the look of the Projects dialog (#3361) Ctrl+Qin a daemon session asks Detach / Quit / Cancel instead of always stopping the daemon and every terminal and agent it hosts; Detach is the default, Quit and Stop All continue into the normal quit path- Tokyo Night and Gruvbox ship as built-in themes, which the homepage already promised (#3107, reported by @sgon00)
- Alt+Shift+N / Alt+Shift+P cycle the keyboard through the sidebar, so a plugin panel like the Markdown outline is reachable without the palette (#3326)
- Search folds case by default everywhere - Find/Replace, Live Grep, the Search & Replace panel and Git Grep all match
todoagainstTODOnow; each keeps its own toggle, andeditor.searchseeds the default for a workspace that hasn't set its own (#3349, requested by @Korkman) - Settings reorganized - new Keybindings and Syntax & Languages pages, plugin settings nested under Plugins, a more compact category tree, and shorter descriptions (#3357)
- Interrupted saves are recoverable - if a save stops partway (disk full, I/O error, crash), a full copy is kept and an Interrupted Save dialog offers Restore / Show Diff / Discard on the next start, or any time via Review Interrupted Saves (#3383)
- Much faster JavaScript/TypeScript highlighting, and a quieter idle daemon - JS/TS moved off a parser that re-read the whole file on every keystroke, large files parse only as far as the view, and idle CPU drops to a few percent (#3418)
- Live Grep dialog redesigned - an aligned form with underlined shortcut letters and a Provider dropdown listing only the providers that can run; the Ignored toggle moves to Alt+I (#3367)
- Dialog pickers behave like standard controls - suggestion lists act as combo boxes, and the Browse… file picker floats over the form, closes when focus leaves, and supports double-click, Home/End and type-to-jump (#3367)
fresh --cmd init pluginsets up a typed plugin project - TypeScript config, API types and the language server, with a new setup guide; Load Plugin from Buffer on a saved file now loads it from disk, so relative imports work, and reloads it in place (#3422)
Bug Fixes
echo 123 | freshopens the pipe instead of hanging - piping intofreshwith no file and no-brought up an editor that took no input at all, spun on a full CPU core, and could not even be quit with Ctrl+Q. Stdin with nothing else to open now meansfresh -; with a file to open it is left unread, but the keyboard works either way. Any redirect counts, not just a pipe -fresh < fileandfresh < /dev/nullhung the same way (#3252)- Orchestrator dock polish - the welcome screen and dock could fail to appear in a daemon session, a context menu could close itself too fast, and a workspace just created from the dock could end up not taking keyboard input (#3306, #3275)
- The workspace dock is there from the first frame - the editor used to come up full width and the dock shoved it aside a moment later, once the plugins had loaded. The column is now laid out before any plugin runs. The dock also remembers whether you left it open and how wide you dragged it across launches;
autoOpenDock: falsekeeps it closed until you open it, and a barefreshalways opens it (#3321) - A nested
freshin the editor's own terminal no longer shreds the pane - and a terminal in a daemon session advertisesFRESH_SESSIONagain, sofresh FILEthere hands the file to the editor you are already in (#3318) - Sidebar panels stay with the window and file they belong to - a Markdown outline mounted in one window showed in every other, and a restored panel no plugin claimed sat reading "Panel unavailable" forever (#3326)
- The Markdown outline follows the reader while the file tree has the keyboard, and its toggle reveals the panel instead of reporting ON for something off screen (#3326)
- The explorer says why a reveal could not move the tree - an unnamed buffer, or a file outside the project - and its scrollbar can be grabbed and dragged (#3326)
- SSH workspaces - creating one didn't always honor your
~/.ssh/config, and hung with a plain error on an unrecognized host key instead of asking to trust it; deleting one could occasionally crash the app (#3301, #3299, #3300) - A remote host that connects and then says nothing gives up instead of leaving the workspace on "scanning" forever
- Attaching to a machine keeps the window you are in - its buffers, splits, layout and terminals - instead of restarting the editor
- Markdown compose: a heading no longer flickers while you type in it, and backspacing a list item no longer throws the caret two rows down (#3318)
- The occurrence highlight keeps up with the cursor - it used to wait for your next keystroke to repaint, and in a daemon session every other time-driven repaint was stranded with it (#3318)
- Code tour: clicking the prose takes the keyboard, and its caret stays visible past the end of a line (#3318)
- A tab after CJK text no longer eats the character before it - the tab marker was placed by visual column against an index counted in characters, so a double-width glyph put it one character early and the
→took that glyph's place:你好⇥worlddrew as你→ world. The file was never touched (#3218, reported by @sgon00) - Highlighted lines (diff view, code tour) no longer hide inlay hints at the end of the line (#3314)
wrap_columncounts text columns -wrap_column: 80now fits 80 characters per row; the line-number gutter used to eat into it (#3405)- With
wrap_columnset, arrowing down no longer leaves the cursor below the visible lines (#3294, reported by @gibboni) editor.scroll_offsetfixed for files under 5000 lines with line wrap off (#3248)- Markdown code block borders no longer break while you type inside them (#3247)
- LSP now finds the right project folder on Windows (#3067, reported by @Bearmancer; fixed by @56steve)
- Keybinding fixes - multi-byte bindings like German
Ctrl+ünow load from config (#3036, by @georglauterbach); a panel's Shift+Tab and Review Diff's fold shortcuts now fire (#3253); a rare case with certain Unicode letters no longer got a phantom Shift (#3302) - Emacs chords work in a plugin-mode buffer again -
C-x C-c,C-x C-fandC-x C-sin a Markdown buffer ran the second key's own action instead of completing the chord (#3060, by @dbactual) - Split resize shortcuts reach the editor from a terminal pane instead of being typed into the shell (#3245, by @kimprap)
- Vi mode: many Vim-parity fixes -
Y,J,G,x/X, visual mode, text objects, dot-repeat, and more, checked against real Vim (#2447) - Vi
.no longer drops the insert it replays when typed quickly after Esc - Fixed stale LSP diagnostics after vi-mode edits, and Save All sending the wrong file's content to language servers (#3258)
- Vi mode holds in every window -
autoStartturns it on at startup again, and dialogs, window switches and newly opened workspaces no longer drop it (#3305, reported by @thedadams; #3395) - The homepage's demo player paints again on Chrome/Linux instead of showing a black box (#3106, reported by @sgon00)
- A language server can no longer delete your files. A server-initiated
workspace/applyEditarrived with no confirmation and was applied as-is, including its "delete this file (recursively)" operation — permanently, bypassing the system trash the file explorer deletes through. Fresh now reports the request and ignores it - Uninstalling a package, replacing one on upgrade, and deleting a theme all go to the system trash, instead of being unlinked outright. A mis-click is recoverable now
- Deleting a folder that contains a symlink no longer empties what the link points at. The recursive delete treated a link to a directory as a directory and descended into it, so deleting a folder holding a link to, say,
~/Documentsdeleted the contents of~/Documents— then reported a failure, after the fact. Links are unlinked now, never followed (reachable from the file explorer when cutting and pasting between filesystems) - A language server can no longer overwrite a file either.
CreateandRenameresource operations honoured anoverwriteflag from the server, truncating or clobbering an existing file with no confirmation. Both are now reported and ignored - **The install script refuses to replace a directory that is not a F...
fresh-editor 0.5.1
0.5.1
For live updates on Fresh, follow me on X.
Most config options below can be changed in the Settings UI - run Open Settings from the command palette (
Ctrl+P).
Bug Fixes
- Startup crash on an empty buffer with unsaved changes - hit crash-recovery restores where the deletion itself was the unsaved change, panicking on every launch (#3236, reported by @CC-Hsu)
- A closed Welcome tab's panel no longer keeps trying to repaint itself on every resize
- Git gutter survives an external revert of the open file instead of going stale until the buffer is reopened
fresh-editor 0.5.0
0.5.0
For live updates on Fresh, follow me on X.
A massive refactoring is included in this release, hopefully without any regression in usability. Please open issues on GitHub if you encounter any breakage. The refactoring paves the way to new features like the new Markdown Table of Contents in the side-panel.
Most config options below can be changed in the Settings UI - run Open Settings from the command palette (
Ctrl+P).
Features
- Interactive Welcome screen on startup, in a background tab (#3147). The content is still in the works, suggestions welcome!
- Search previews now open the real file as a preview tab - full syntax colours, gutter, folds and scrolling (#3196, #3200; #836, requested by @66RED99)
- Review Diff opens large diffs almost instantly - a 500+ file review now opens in ~2s instead of ~16s (#3056)
- Sidebar sections - the explorer sidebar can hold multiple collapsible sections, starting with a Markdown Table of Contents (#3045, requested by @mruff-aeq)
- Markdown types brackets and quotes literally instead of auto-pairing them. Typing backticks or quote marks is not annoying now!
- Markdown Compose reflows hard-wrapped text - a paragraph, list item or quote written over several source lines lays out as one block against the page measure, instead of one row per source line. Also, many bugs fixed in markdown compose mode (see below)
- Syntax-highlighting in Review Diff and Git Log modes (#3104, reported by @tinchoz49; #2871)
- Shaded pane edges - text fades out at the top/bottom instead of cutting mid-line (
editor.viewport_edge_fade) - Smooth wheel scrolling, a line at a time instead of jumpy notches (
editor.smooth_scroll, #3091) - Git Blame readability - better contrast, and blame keeps your place on
b/q(#3088)
Bug Fixes
- Review Diff & Git Log
- Ambiguous commands renamed and grouped under
Review Diff:/Git Log:palette prefixes (#3098) - Works with an external difftool instead of showing an empty diff (#3066, by @asukaminato0721)
Don a fully staged file discards it (#2318)- Follows the working tree, and re-running no longer stacks a duplicate panel (#3126, reported by @asukaminato0721)
- The files sidebar scrolls on large reviews, shows full filenames, and a click moves highlight and focus together (#3063, #3188)
git's output parses under more configs - quoted paths, blank context lines,diff.relative, submodules, signed commits (#3199)- A file over 1 MiB is listed and marked instead of expanded into a multi-million-line patch, and binary files show up in a range review instead of vanishing
- Ambiguous commands renamed and grouped under
- Orchestrator
Ctrl+Qfrom a clean workspace no longer skips the unsaved-work prompt for another workspace, or deletes that workspace's recovery files on the way out (#3189, reported by @sdecima; #3221)- The dock paints its own background, instead of showing the terminal's through the gaps
- "Move to Folder…" keeps the keyboard, so
Downno longer dismisses it and switches the live workspace (#3163, #3137) - A deep repo path plus a long workspace name no longer overruns the terminal directory's name
- Archiving names the worktree after the workspace, not its display label, and a repeat archive takes the next free suffix
- A workspace whose window is still being created no longer freezes the picker
- Multi-cursor editing
- Integrated terminal
- Dim text is dim again (#3123, reported by @fiatcode-gh)
- A multi-line paste arrives whole instead of only its last line (#3215)
- A killed editor leaves the terminal usable, not stuck in raw mode (#3197)
- Recent scrollback is no longer lost (#3151)
- Large single-line files (minified JSON and friends)
- Opening one no longer loops or stalls for cursor movement, scrolling and paging (#1806)
- Very large binary/zip files open instantly instead of freezing or running out of memory (#3142, reported by @mommysgoodpuppy)
- Editing one costs the size of the screen, not the size of the line - a keystroke in a 19 MB one-line JSON reads ~180 KB instead of ~14 MB
- With soft wrap off, a logical line is one visual row, so a file with no line breaks draws one row and
Downhas nowhere to go - turn soft wrap on to read it vertically - Plugin decorations (blame, live diff, compose reflow) are bounded to the visible text, so a plugin can no longer make a frame read the whole line
- Markdown Compose (#3206)
- A code block keeps its gutter in a Source-mode split
- Dragging a composing tab into a new split keeps it composing
- Composing one split no longer forces line wrap on in a sibling
- A hand-aligned table's padding and wrapped rows render correctly
- Language servers
- Timeouts are reported instead of showing "no results"; a stuck server shows
LSP (stuck)(#2197) - Diagnostics no longer get stuck reporting errors you already fixed (#3038, reported by @thedadams)
- A server too slow to drain its input no longer loses an edit and then reports errors against text you never wrote (#3100)
- Inlay hints no longer jump to the next line while you type at their anchor (#722)
deno.jsonno longer disables TypeScript on a project without Deno (#2981, reported and fixed by @atk)
- Timeouts are reported instead of showing "no results"; a stuck server shows
- Editing
auto_surroundworks withauto_closeoff, so the per-language override is usableEnteron a blank last line keeps the cursor's column instead of indenting to the block above (#3165)- The block-selection highlight is exactly what a block copy takes - it used to paint a column it did not select (#3150, reported by @Korkman)
- Conceals spanning a line break no longer crash the editor (#3139)
Downmoves off the first line under a Git Blame header (#3088)
- Keys, mouse and scrolling
- A single-key binding on a chord prefix fires, and deleting a keybinding frees the key (#3171)
- Numpad, media and modifier keys parse by name, fixing
asterisk/kp_multiplybindings (#1128, reported by @michelpado) Shift+wheel scrolls sideways everywhere (#1580)- Dragging the scrollbar leaves the text cursor where it is, like the wheel already did (#3192, reported by @akarinotomoshibi)
- Dragging a divider keeps up with the pointer (#3140)
- Rendering
- Whitespace markers, indent guides, block-selection rectangles and misread angle brackets; the File Explorer got a scrollbar (#3077, #3079, #3148, #3090, reported by @Korkman; #2859, reported by @asukaminato0721)
- The block cursor no longer swallows the character under it - the cursor's colour is the terminal's to pick, and past the end of a line it inverts to the theme's colours rather than the terminal's
- The space below the last line follows the theme background (#779, #3087)
- Dialogs and settings
Deleteworks again in the Settings dialog's Edit Item text field (#2875, reported by @asukaminato0721, fixed by @56steve)- A single-line field scrolls to the start of a long value instead of pinning its tail, so a long name or path can be seen and edited
- Starting, quitting and updating
Ctrl+C/killend the editor promptly instead of occasionally deadlocking or crashing- Quitting no longer panics while plugin work is still in flight
... | fresh -no longer leaves a temp file behind in/tmp(#3134, reported by @Korkman)- The daemon's locale follows
config.jsoninstead of the environment (#3149, reported by @kirinriki7777-sys) - SSH remote sessions no longer hang when the target is Windows (#3145, by @mommysgoodpuppy)
curl | install.shno longer fails behind a shared IP or silently on error (#3070)fresh --cmd updateno longer fails on GitHub's shared API rate limit, and honoursGITHUB_TOKEN(#3198)
- The Welcome screen reads like a document - text selects with
Shift+movement or the mouse and copies withCtrl+C, and focus follows the caret rather than the whole row - Search & Replace results scroll horizontally to reveal a long match, accept a pasted query, and no longer move a hidden buffer cursor on
Ctrl+arrow (#3154, #3184; #1960, reported by @mandolyte; #1580, #3186) - New file/folder names with slashes create their missing parent directories (#2640, requested by @akarinotomoshibi, by @asukaminato0721)
- Wave screensaver ends when you return to the window, not just on the next keypress (#3204)
- The file explorer does less filesystem work on a large project, so a repo with thousands of changed files no longer stalls the editor (#3103, reported by @asukaminato0721; #3127, by @atirna)
Internals
- Twelve fewer crates in the build, from replacing
rust-i18nwith an in-tree library (#3102). - Plugin dialogs and panels handle focus and typing correctly - fifteen widget-runtime fixes, and three new options a plugin can ask for: a focused text field wins printable keys over the mode's own bindings, a panel can keep "nothing focused" as a real state, and a scroll command can reveal a widget rather than jump it to the top.
- A large rewrite moves the editor's chrome onto a retained-mode layout tree; continued flaky-test stabilization.
fresh-editor 0.4.10
0.4.10
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
- Prettier Markdown Compose / Preview - headings, block quotes, and horizontal rules get nice styling and conceal the literal
#/>/---, lists get bullets and spacing, fenced code blocks are framed with side rails, and the default preview width is a readable centered measure instead of the full pane (#2967, requested by @mommysgoodpuppy). - Review Diff - improved UX - no soft wrap, side panels (file list, comments) can be toggled (use F and C keys), and the sidebar nests files by directory like the File Explorer instead of repeating the full path on every row.
- Review Diff performance improved - a review spanning a hundred commits now lays out completely and stays responsive: cursor movement, hunk jumps, and flipping between the unified and side-by-side views no longer lag behind a stale frame. Further performance improvements are in the works and will come in future releases.
fresh --skill- prints the guide to driving a running editor from an embedded terminal: the script verbs, the calling convention, and worked examples. Coding agents running from within Fresh should have an easier time controlling the Fresh UI at your request.- Selection Highlighting - empty lines are now visibly highlighted within selections, and whitespace indicators are shown (
·/→) even when the indicators are otherwise off - this new behavior is configurable from settings (whitespace_in_selection, on by default) (#2797, reported by @akarinotomoshibi). - Linux musl installs register a desktop entry and icons, so Fresh shows up in your app launcher - continuing 0.4.9's move to a single self-updating musl binary.
Bug Fixes
-
Selection now reaches the buffer edges - Shift+Up on the first line and Shift+Down on the last line extend the selection to the buffer start/end, and dragging the mouse past the top or bottom edge keeps selecting and auto-scrolls instead of stopping dead (#3006, #3017, reported by @akarinotomoshibi).
-
A selection is readable again - while text is selected, the word-under-cursor highlight steps aside and the other occurrences of the selected text are highlighted instead (as in VSCode/Zed), so the extent of the selection is unambiguous. The builtin themes also got occurrence-highlight colours that stay clearly visible against both the editor background and the selection - including on 256-color terminals, where
high-contrastandsolarized-darkpreviously quantized onto their own background and showed nothing at all - and text that would be unreadable on the highlight is nudged to a legible shade while it is marked. Code tours get their ownui.tour_step_bgkey so their step band keeps its previous colour (#3011, reported by @akarinotomoshibi). -
Folding
- A misplaced fold no longer swallows a line's text behind
...- seen as a KDL file'sdebug {vanishing (#3031, reported by @rsramkis). - A collapsed fold's header row stays legible when the folded line itself is empty.
- Deleting the line a fold was folded on now expands the fold instead of leaving a dangling marker.
- A misplaced fold no longer swallows a line's text behind
-
Search & Replace no longer opens with every input field missing when invoked a second time while the panel is still opening (#3019).
-
Git Log: diff colours in the commit detail panel no longer drift off their rows for commits containing non-ASCII text (#3014).
-
Diff files: a hunk header's coloured bar now covers the whole row - the enclosing-section name
git diffappends after the closing@@no longer sits in an uncoloured gap (#3021). -
Markdown
- Heading marks appear on the scrollbar as soon as a file opens, not only after scrolling past them, and stay stable and limited to top-level headings (#2990).
- Compose mode no longer frames the paragraph after a fenced code block as code when the buffer opens or scrolls into view mid-document (#3001).
- Bold, italic, and inline-code markup no longer stay visible as raw
**/`until you click elsewhere (#2968, reported by @mommysgoodpuppy). - Comments inside fenced code blocks are no longer misdetected as Markdown syntax, and scrolling a large file in Compose mode is smooth on the first pass instead of only after it's been scrolled through once.
-
Rendering: the 256-color contrast pass no longer stalls large terminal windows or the Settings dialog, and a dimmed dialog no longer paints a fixed dark gray instead of following the active theme (#2982).
-
Terminals: a focused terminal keeps
Ctrl+B/Ctrl+Efor the shell instead of them toggling/focusing the File Explorer, and File Explorer keys (like Enter) no longer leak into a terminal's PTY sitting behind it. -
File Explorer: the sidebar caret no longer blinks through modal dialogs. With
file_explorer.follow_active_bufferon, the tree now also follows the first file a session opens — previously a code tour's opening step (or any first open into the empty[No Name]buffer) left the explorer parked at the root — and a follow request no longer gets thrown away when it arrives while the tree is still expanding for the previous one (#2988). -
Review Diff:
PageDown/PageUpno longer stalls with the cursor off-screen while paging over a collapsed file (#3029); a panel like the git-log commit view now word-wraps correctly no matter which split shows it. -
Editing near a fold, concealed span, or virtual line no longer corrupts the rendered layout (wrong hidden text, row count, or scrollbar position) after certain edit sequences, or leaves it stuck stale after a file reload or undo past a bulk edit.
-
Whitespace indicators
- Indicators inside a selection are drawn in a subdued colour of their own (
whitespace_indicator_selected_fg, derived from the selection background when a theme doesn't set it) instead of taking the selected text's full-contrast foreground, where they were louder than the code around them. - Toggle Whitespace Indicators (Current Buffer) now marks every space when switched on, so it does something visible in a space-indented file — with the default settings (spaces off, tabs on) both halves of the toggle looked identical. Tab and line-ending indicators still follow the configuration.
- Indicators inside a selection are drawn in a subdued colour of their own (
-
Line numbers
- A per-buffer line-number toggle survives a tab switch in Page View instead of reappearing for one frame and then vanishing on the next keypress (#2931, reported by @mygirleatsmayo).
- Toggle Line Numbers in a Compose/Page View buffer no longer writes a setting the user never chose, leaving no way to turn numbers off while composing.
- Vi's
:set number/:set nonumberare honoured again on a buffer carrying a per-buffer pin, where they had become a silent no-op that still reported success.
-
Rulers: the column guide is drawn on the column it names rather than one cell to its right, and it stays visible where it crosses full-width characters instead of leaving a hole in the bar (#2928, reported by @dhanoosu).
-
Daemon mode: resizing a terminal attached with
fresh -ano longer smears the last-painted colour across the blank cells - seen as a purple/theme-coloured screen fill when dragging a Windows Terminal window between monitors over SSH (#2723, reported by @amirhosseindavoody). -
Starting a coding agent ("Teach Fresh CLI" in Run Agent / New Workspace)
- Choosing codex or opencode no longer writes an
AGENTS.mdinto your repository. The instructions ride the agent's launch prompt instead, so nothing lands in your checkout and anAGENTS.mdyou wrote yourself is left alone. - codex's Auto mode can now actually drive the editor. It used to launch with approvals turned off entirely, which left it no way out of its own sandbox to reach the editor's control socket - so an agent that had been taught the CLI could describe it perfectly and never once use it. Auto mode now escalates on request and has those escalations reviewed automatically, the same posture the checkbox already meant for claude.
- What the agent is told is now a short pointer to
fresh --skillrather than a transcript of the API. The old copy duplicated a declaration file thousands of lines long, drifted out of date as the API moved, and sent agents paging through those declarations instead of searching them.
- Choosing codex or opencode no longer writes an
-
fresh --cmd ...from a sandboxed process now says so. A caller that is denied access to a running editor's control socket - a sandboxed coding agent, or anything in a PID namespace - is told the socket could not be reached and to retry outside the sandbox, instead of being told no editor is running. Relatedly, an inconclusive liveness check can no longer delete a live editor's socket files, which had made it possible for a sandboxed process to knock out the editor you were working in. -
Packages browser
- Package: Install from URL on an already-installed package now upgrades it instead of refusing. The replacement is downloaded and validated before the installed copy is touched, so a bad source leaves the working version intact, and the new code is live in the session rather than only on disk.
- Update is offered for every package with a known source and actually works for packages installed from a monorepo subpath, a local directory, or a direct file - not just plain git clones. The
↑update marker now appears only when the registry is genuinely ahead of what you have. - Closing the browser by the tab's
×, Close Buffer, or a vanishing split no longer makes Package: Packages dead for the rest of the session, and re-running the command while it is open focuses it instead of doing nothing. - The first
Down/Uppress moves the selection by one package, including when the browser is opened before the registry has finished load...
fresh-editor 0.4.9
0.4.9
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
- Installing and updating Fresh - the preferred install method for Linux is now a single self-contained, self-updating, statically linked (musl) binary - one install that works everywhere, instead of a dozen fragile packaging channels.
- LSP completions can offer auto-imports - servers like rust-analyzer now suggest unimported symbols, and accepting one inserts the
use/import line (#2603). - The scripting API can manage the whole Orchestrator dock - create, rename, move, archive, delete and list workspaces, including over SSH, not just create them.
- A new workspace opens the moment you ask for it - a progress page shows while
git worktree addstill runs, the workspace can be renamed, moved or deleted mid-build, and the build finishing no longer steals focus. The dock also got tidier: compact by default, uniform full-width menu rows. - The mouse wheel pans the tab strip - tabs scroll into view under the pointer without changing the active tab.
fresh +50 file.txtopens the file at that line, vim-style (#1926, requested by @asukaminato0721).F3/Shift+F3step through search matches without closing the search bar first (#2111).- Choose which files are too ephemeral to remember - a configurable pattern list keeps cursor positions from being saved for build output, generated sources and the like; git's own scratch files are excluded by default.
- Bulgarian locale (by @ci4ic4).
- Unparseable keybinding config entries are now logged instead of silently dropped (#1128, reported by @michelpado).
Bug Fixes
Ctrl+/(toggle-comment) works on every terminal, not just kitty - including non-US layouts where/needs Shift (#2933).- Hover popups no longer render on top of modal dialogs (#2912, reported by @maxco1d).
- Long text in the search/open-file/palette input scrolls so the cursor stays visible (#2876, reported by @asukaminato0721).
- Vi dot-repeat (
.) aftero/O/a/Ano longer corrupts the buffer (#2443). - Mouse wheel scrolls the view, not the selection
- Settings search results - hover and clicks also land on the row under the pointer once the list is scrolled (#2860, #1112, reported by @asukaminato0721).
- Prompt dropdowns (command palette, Select Locale, …), which also gained a scrollbar when they overflow (#623, #1593, reported by @asukaminato0721 and @Kodiak-01).
- A wheel over the menu, tab or status bar no longer scrolls the focused pane - chrome wheel events used to land on whatever had focus, dropping a focused terminal into scrollback (#2969).
- Plugin dock panels get their geometry right - opening one (like a code tour) now resizes terminals above it so shell output doesn't vanish off-screen, panels reflow when the file explorer toggles instead of spilling at their old width, and dock hover/selection highlights span the whole row (#2969).
- A code tour opens every step into the same pane - stepping through one while clicking between splits used to scatter its files across all of them (#2969).
- Auto-indent
- Typing
else:,except:or a custom dedent keyword re-indents the line on the spot, like}always did (#2582). - Braceless
if/for/whilebodies indent correctly in TypeScript/JavaScript (#2492). - Enter on a blank line between an indented block and an unindented line below no longer inherits the deeper indent (a #1425 corner case).
- Typing
- Format-on-save keeps the cursor on the text it was on - a formatter deleting lines above no longer drops it into an unrelated word (#2777, #2706, reported by @720720).
- Workspaces
- Workspaces made with Extract Tab to New Workspace survive a restart, and
--no-restoretruly writes no session state (#2735). - The Search & Replace panel and dock terminals open as a split again after the last editor split is closed - a stale dock tag used to stick, even across restarts (#2415, reported by @mandolyte).
- Git's
COMMIT_EDITMSG/MERGE_MSG/etc. no longer restore a stale cursor position into freshly regenerated content (#2761, reported by @skostojohn).
- Workspaces made with Extract Tab to New Workspace survive a restart, and
- Keybindings
- Context-specific bindings outrank global ones, so a global chord can no longer shadow one; disabling menu-bar mnemonics genuinely frees the Alt+letter keys (#2941, reported by @chrismo).
- Legacy (non-kitty) terminals resolve
Alt+]/Alt+[correctly again (#2930, reported by @FreekyFrank).
- Malformed
ssh://URLs fail loudly instead of silently opening a same-named local file (#2221). - Review Diff: stage/unstage/discard confirmations no longer vanish - they used to be overwritten within the same frame by the status refresh they triggered.
- The bundled help manual no longer shows literal
<0D>characters on Windows (by @ci4ic4). - Four small fixes:
bun.lockhighlights as JSONC (#2921); generated tsconfigs usemoduleResolution: bundlerfor TypeScript 7 (#2872); docs no longer claim Ctrl+H opens Find & Replace (#2109); the Rust LSP mode-switching doc references the real palette command name.
Internals
- Input handling split into a pure decision core plus an imperative shell, GitHub Actions workflows now lint in CI, and a round of flaky-e2e-test stabilization across the settings, vi-mode, LSP, review-diff and orchestrator-scripting suites.
fresh-editor 0.4.7
0.4.7
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
- Guided code tours - a codebase walkthrough played in the editor: steps on the left, the current step's explanation on the right, the code open and highlighted above. Tours are small JSON files (
fresh --cmd help tour), VS Code CodeTour files play as-is, and an unfinished tour resumes on next launch. Full guide: Guided Code Tours. - Scripting the editor -
fresh --cmd script runhands a running Fresh a TypeScript program with the full plugin API: open files, arrange panes, start a coding agent, open a tour. Teach agent the Fresh CLI briefsclaude,codexandopencode(on by default). Full guide: Scripting the Editor. - Agents can customize Fresh end to end -
fresh --cmd init reloadre-readsinit.ts,fresh --cmd command run "<name>"invokes any palette command,fresh --cmd help plugindocuments the runtime. - Every settings toggle says what it changes - Toggle X = editor-wide, saved to config; Toggle X (Current Buffer) = this buffer only. Several toggles gained the missing variant.
- Git-gutter hunks and unsaved edits show on the scrollbar (#2713, requested by @RetributionByRevenue).
- The Orchestrator dock has a close button and a View → Orchestrator Dock menu row.
- Thrift syntax highlighting (#2884, by @asukaminato0721).
Bug Fixes
- TOML multiline arrays highlight correctly (#2887, by @asukaminato0721).
- The cursor can reach the last column when the scrollbar is shown (by @ttenneb).
- Editing
- Replace-all finishes on files with tens of thousands of matches - used to run minutes or hang (#2893).
- Two splits on the same file keep independent edit points - transpose, move-line and toggle-comment reset the other pane's cursor (#2878, reported by @FreekyFrank).
- Opening a file straight to a line no longer breaks syntax highlighting.
- Highlights taller than the window are drawn again.
- Input
- Shift works with "Keyboard Report All Keys As Escape Codes" -
Shift+Atypeda(#2880, reported by @akarinotomoshibi). - Pasting works in the New Workspace and Run Agent dialogs, in daemon mode too.
- Shift works with "Keyboard Report All Keys As Escape Codes" -
- Settings & commands
- Settings toggles actually stick
- Eight toggles forgot your choice on restart.
- Project configs silently overrode toggled values; toggles now write the owning layer.
- Workspaces stamped stale settings back on open.
- Config writes are atomic and no longer delete hand-written empty overrides.
- Reset Buffer Settings really resets everything.
- Toggle Tab Indicators no longer hides the space dots too.
- Menus and the palette agree on what a buffer can do - no more
Saveon a terminal (it overwrote the backing file with scrollback), no more greyed-out commands while a terminal or the explorer has focus.
- Settings toggles actually stick
- Git & live diff
- Live diff never refuses a file - "file too large for live diff" is gone; the shared diff engine degrades detail instead of giving up.
- Reverting a file outside Fresh refreshes the git gutter, live diff and conflict markers.
- Panels & docks
- Closing a file no longer pulls a dock panel into the editor split.
- Plugin panels handle the mouse properly - clicks, wheel and scrollbars work in every widget panel.
- A second Utility Dock panel renders like the first - no stray line-number gutter.
- Reloading a plugin stops stacking duplicate panels.
- Workspaces & agents
- Renaming a workspace made with "Extract Tab to New Workspace" no longer renames its co-tenant.
- A restored workspace's agent can still drive the editor - the script grant now survives a restart.
- Self-update
- Updates finish through the channel that installed Fresh
.deb/.rpm/.flatpakupdates asked repos that never served Fresh ("already the newest version", forever).- Homebrew named a nonexistent formula; several other channels' commands fixed.
- Show the update command prints without downloading anything.
- Security hardening - closed a symlink race in the binary swap and a predictable staging path ahead of
sudo dpkg -i.
- Updates finish through the channel that installed Fresh
Internals
- Flaky-e2e stabilization, quieter plugin slow-handler warnings, repo-root cleanup (#2914).
fresh-editor 0.4.6
0.4.6
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
- Restart an exited terminal in place - the status bar offers
⟳ Restart terminal(or⟳ Resume claude) and the process comes back in the same buffer, below the existing scrollback, with a coding agent rejoining its conversation. The tab readsclaude (exited)instead of an exit line in the output, and terminal tab names now survive an editor restart.- If you have customized your status bar, open Settings → Status Bar and move Terminal Restart from Available to Included (
Shift+→) under Left or Right.
- If you have customized your status bar, open Settings → Status Bar and move Terminal Restart from Available to Included (
- Tabs for same-named files say which file they are - open two
mod.rsand the tabs readmodel/mod.rsandview/mod.rsinstead ofmod.rs 1andmod.rs 2. Each tab grows only as much of its path as it takes to be unique, and tabs whose name is already unique are untouched (#2851, requested by @anddimario). - Line-ending indicators -
↵at every line break and␍for the CR half of a CRLF, both off by default (#2798, requested by @akarinotomoshibi). - Scrollbar markers for plugins -
editor.setScrollbarMarkerspaints marks on the scrollbar track; live-diff hunks and Markdown headings now use it (#2713, requested by @RetributionByRevenue). - File Explorer sticky parents - a nested folder's expanded ancestors stay stacked at the top of the sidebar while you scroll (#2705, by @asukaminato0721).
- More graphics, docs and build-file grammars - GLSL
.glslf/.glslv, Wavefront.obj, Doxygen, Windows.rc, pkg-config,.cmake.inandCMakeCache.txt(by @asukaminato0721). - Broader LaTeX ecosystem highlighting - TeX packages/classes, generated
.aux/.toc, BibLaTeX, ConTeXt, BibTeX and.bst, pluslatexmkrc(by @asukaminato0721). - The Orchestrator dock's start-up state is configurable - whether it opens on startup, its layout, and the starting state of the all worktrees and show empty checkboxes.
- Run Agent… and New Workspace are one dialog - a "Launch in" switch picks the current workspace or a new one. Fixes
custom…having nowhere to type a command. - Plugins are told when settings change - vi-mode's options now apply without an editor restart.
- Agents drive the editor with TypeScript -
fresh --cmd script runevaluates a script against the full plugin API, withscript api/script checkfor discovery.
Bug Fixes
- Four dead settings - the bracket-matching toggles,
file_explorer.respect_gitignoreandlanguages.<id>.textmate_grammarnow take effect;editor.highlight_timeout_mswas removed rather than wired up (#2842). - Files that are one very long line
- Viewing one no longer pins a CPU core (#2838, reported by @lovehumans).
- Highlighting survives past the first wrapped rows, and the wheel no longer snaps to a 100 KB boundary (#2843).
- Typing and cursor movement no longer slow down as the cursor moves right.
- Scrolling
- PageUp/PageDown no longer stall crossing a collapsed fold - a page of scroll budget was spent stepping through the fold's hidden lines; a fold now costs one row, like its header.
- A residual cursor stall moving through revealed Markdown syntax is fixed (#1574).
- Heavy background work can no longer freeze the editor - grep-in-project, closing a terminal, and other plugin- or buffer-triggered work now run off the UI thread under a per-frame budget instead of blocking rendering for seconds.
- Dashboard
- A misbehaving section can no longer break the panel or hang the dock - overflow, errors and slow sections are now contained and refresh independently, showing "stale" instead of freezing or blanking.
fresh --cmdfrom an agent terminal no longer hangs forever - the command channel wasn't drained in every host, socmd list/cmd runcalls could block indefinitely; a stuck request now times out with a diagnosable error instead (#2837).- Settings → Status Bar picker's cursor is now visible, and clicking a row works - arrows previously moved an invisible selection with no indication of which list (Available/Included) had the keyboard.
- Terminal
- A new terminal no longer inherits another's scrollback, and a restored one comes back live rather than frozen (#2828).
- Scroll-back re-wraps when the pane resizes - splitting, maximizing or dropping a tab left every line clipped (#2844).
- Modified keys reach the program inside -
Ctrl+Shift+Right,Shift+Home,Shift+F3andAlt+Backspacearrived stripped. - Scrollback keeps streaming after the grid history saturates.
- Input
- One keypress no longer acts twice with
keyboard_report_event_typeson (#2796, reported by @akarinotomoshibi). - Horizontal wheel events no longer scroll vertically (#2831, reported by @mruff-aeq, by @ttenneb).
- A split mouse report no longer leaks into a focused terminal as literal
^[[M…(#2793, reported by @mruff-aeq). - Escape works in
fresh -ainstead of swallowing the next keypress (#2810).
- One keypress no longer acts twice with
- Daemon mode restores workspaces -
fresh -aopened[No Name]for every one; a detached daemon also survives its launching terminal closing (#2808, #2811). - Orchestrator & dock
- Settings opens over the dock - centred and dimming it, instead of squeezed into the columns beside it (#2820).
- Searching the dock and opening a match keeps the search.
- A workspace switch no longer paints two workspaces into one frame.
- "Move to Folder…" is usable with the mouse.
- Tidier workspace cards - two rows instead of three.
- A remote workspace's buffers load off the editor loop.
- Opening a C# file can no longer run project code -
dotnet restoreis now gated behind Workspace Trust (#2063, reported by @z3moo). - git-gutter works with an external difftool - it now forces git's own diff format (#2721, by @asukaminato0721).
- No blank frame at the horizontal scroll bound (by @ttenneb).
- Modal dialogs are no longer clipped, and worktree trust isn't re-asked.
Internals
- Continued the viewport/wrap-index rebuild (a single coordinate system that now also models folds and decorations) and moved plugin-triggered work off the editor thread under a frame budget, plus further flaky-e2e-test stabilization across the review-diff line-staging, scrolling, vi-mode and orchestrator-dock suites.
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.