What is fresh-editor?
fresh-editor is the package for Fresh, a terminal based IDE and text editor by Noam Lewis, written in Rust. It brings what you expect from an IDE into the terminal: language server support, syntax highlighting, multiple cursors and a plugin system that runs TypeScript, while staying easy to pick up. It opens huge files without making you wait, keeps your editing session alive in a background daemon you can reattach to with fresh -a, and can even serve itself to a web browser with fresh --web. The package is called fresh-editor, and the command you type is fresh.
⚡ Key Features of fresh-editor
🧠 Language Server Support
Fresh speaks the Language Server Protocol, so diagnostics, completion, go to definition and hover come from the same servers other editors use, such as rust-analyzer, gopls or clangd.
🎨 Syntax Highlighting
Code is highlighted as soon as you open it, in the terminal you already use, with no separate setup step before the first file looks right.
✏️ Multiple Cursors
Put a cursor on several places at once and type in all of them, the quick way to rename a variable in a block or reshape a column of similar lines.
🧩 TypeScript Plugins
Fresh embeds a TypeScript runtime for plugins, so extending the editor means writing TypeScript against its plugin API, not learning a configuration language of its own.
🔌 Sessions That Survive
A session daemon keeps the editor and its open files alive when the terminal closes or an SSH connection drops. fresh -a attaches to it again.
🌐 Terminal or Browser
fresh --web serves the same editor to a web browser, handy when a machine is easier to reach through a browser than through a terminal.
apt upgrade keeps you on the latest version.
📦 Installation from deb.griffo.io
Step 1: Add Repository
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 There is an always-free mirror. deb-free.griffo.io serves packages free forever, no account, no subscription, at most 2 months behind upstream, security fixes immediately. It currently carries cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud and Zed; fresh-editor is not one of them, so the repository above is the only way to get it today, ask and it can be enrolled.
🧩 About the extrepo option. extrepo is Debian's own tool for external repositories: it writes the sources file and installs the signing key for you, checking the key against signed metadata first. This repository is registered with it as griffo, and the always-free mirror as griffo-free, so on Debian (bookworm, trixie, forky and sid) the commands above are the whole setup.
extrepo sets up the sources file and the key only, so a subscription's credentials still go in /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu is not covered, because extrepo publishes metadata for Debian suites only: there, use the sudo or root commands.
Step 2: Install fresh-editor
# Install latest fresh-editor
sudo apt install fresh-editor
# Verify installation, the command is fresh and not fresh-editor
fresh --version# Install latest fresh-editor
apt install fresh-editor
# Verify installation, the command is fresh and not fresh-editor
fresh --versionStep 3: Open your first file
# The command is fresh. Open a file to start editing
fresh README.md
# Jump straight to a line and column, the file:line:col form compilers and grep print
fresh src/main.rs:42:7
# The manual page and the full option list ship with the package
man fresh
fresh --help🎯 Basic Usage Examples
Opening files:
# Open a file at the spot a compiler error or a grep hit points to
fresh src/lib.rs:120:5
# Huge files open without a long wait, multi-gigabyte logs included
fresh /var/log/big-application.logSessions that outlive the terminal:
# Attach to the running editor session with its open files,
# after closing the terminal or when an SSH connection drops
fresh -a
# The same works from a new SSH login on the machine
ssh devbox
fresh -aEditing in a web browser:
# Serve Fresh to a web browser instead of drawing it in this terminal
fresh --webLanguage servers:
# Install a language server for your language, then open a file in it
sudo apt install clangd
fresh src/main.c
# rust-analyzer comes with rustup
rustup component add rust-analyzer
fresh src/main.rs:1:1# Install a language server for your language, then open a file in it
apt install clangd
fresh src/main.c
# rust-analyzer comes with rustup
rustup component add rust-analyzer
fresh src/main.rs:1:1🔧 Tool Integrations
Fresh fits into an existing terminal workflow:
- Git:
git config --global core.editor freshopens commit messages and interactive rebases in Fresh - Shell:
export EDITOR=freshin~/.bashrcmakescrontab -e,sudoeditand friends use it - Compilers and grep: their
file:line:coloutput opens right at the reported spot - Desktop: the package installs a desktop entry and icons, so Fresh shows up in your application menu
- SSH and tmux: the session daemon keeps your work open on the remote side, and
fresh -apicks it up again
🚀 Why Choose deb.griffo.io?
- Official Debian: not packaged: Fresh is not in any Debian release, from Bookworm to Sid
- Upstream .deb: current on the day you download it, but upstream publishes standalone .deb files on GitHub releases with no apt repository, so
apt upgradenever sees a new version and every release is another manual download - Building with cargo: needs a Rust toolchain and a full compile on every upgrade, and leaves out the desktop entry, icons and man page
- deb.griffo.io: latest version with automatic updates
- ✅ Package fresh-editor, Command fresh:
sudo apt install fresh-editor, then runfresh; fresh-editor is upstream's own package name, the one its .deb, AUR, Homebrew and winget packages use, so a machine with upstream's .deb installed upgrades in place from the next release - ✅ Apt Updates for Upstream's Releases: upstream ships .deb files but no repository; here every release lands in a GPG-signed apt repository with a build for each Debian and Ubuntu suite
- ✅ Automatic Updates: packages updated within hours of upstream releases
- ✅ Complete Package: the
freshbinary, a desktop entry and icons for your application menu, and thefresh(1)man page - ✅ Two Architectures: amd64 and arm64, so laptops, servers and 64-bit ARM boards get the same Fresh
- ✅ Multi-Distribution: works on Bookworm, Trixie, Forky and Sid
- ✅ Easy Maintenance: standard apt commands for updates
📦 Package Build Repository
The Debian packages are automatically built and maintained in this GitHub repository:
- 🍃 fresh-debian - Latest release builds
🔗 Related Packages
Also available from deb.griffo.io:
- Helix - Modal terminal editor with built-in language server support
- Neovim - Hyperextensible Vim-based editor
- Zed - Graphical code editor, for when you leave the terminal
- lazygit - Terminal UI for git, a natural companion to a terminal editor
apt upgrade to keep it current.
💝 Support This Project
If this repository saves you time and effort, please consider supporting it!