Features
- Standalone launcher that opens Glance in
nvim --clean, so it does not depend on your plugin manager or existing editor config. - Side-by-side diffs with a minimap and live file reloads.
- Unified file tree workflow:
- single file tree for staged, unstaged, untracked, and conflicted files
- stage, unstage, or discard one file or the whole repo
- in-app 3-way merge editor for resolving conflicts
- staged-change commit flow with a multi-line floating commit editor
- read-only commit history browser launched from the file tree, with commit preview and hash copy
- Lua config for theme, layout, keymaps, signs, refresh behavior, and more.
Quick Start
-
Make sure these runtime dependencies are on your
PATH:nvim0.11+git
-
Install Glance:
Homebrew (macOS / Linux):
brew install polyphilz/tap/glance
Shell installer:
curl -fsSL https://raw.githubusercontent.com/polyphilz/glance/main/install.sh | bash -
Optional: create a starter config file:
This writes a starter config to
~/.config/glance/config.luaby default. IfGLANCE_CONFIGis set, Glance writes there instead. -
Run it inside any Git repository:
Requirements
| Dependency | Required for | Notes |
|---|---|---|
| macOS or Linux | Running Glance | The launcher and installer assume a Unix-like shell environment. |
nvim 0.11+ |
Runtime UI | Must be available on PATH as nvim. |
git |
Repo detection, diffing, stage/unstage/discard actions | Must be available on PATH as git. |
nvim-treesitter |
Optional richer syntax highlighting | If present in Neovim's standard runtime path, Glance picks it up while running in --clean mode. |
Install details
The bootstrap installer resolves the latest GitHub release by default.
Pin a release:
curl -fsSL https://raw.githubusercontent.com/polyphilz/glance/main/install.sh | GLANCE_REF=v0.1.0 bashInstall unreleased main:
curl -fsSL https://raw.githubusercontent.com/polyphilz/glance/main/install.sh | GLANCE_REF=main bashInstall from a local checkout:
Verify the installed version:
The bootstrap installer downloads Glance into ~/.local/share/glance/<ref> and creates a symlink at ~/.local/bin/glance.
Running ./install.sh from a local checkout creates a symlink at ~/.local/bin/glance that points back to that checkout. That checkout needs to stay in a stable location after installation.
~/.local/bin must be on your PATH.
Usage
Launch Glance from the root of any Git repo, or from any subdirectory inside it:
Default keys:
| Key | Action |
|---|---|
<CR> |
Open the selected file |
q |
Quit Glance or close the current diff |
r |
Refresh the file tree and diff state |
J / K |
Jump between file tree sections |
<Tab> |
Toggle the file tree |
s |
Stage the selected file |
S |
Stage all supported repo changes |
u |
Unstage the selected file |
U |
Unstage all supported staged changes |
c |
Commit the staged set in a floating editor |
L |
Open the read-only git log modal |
d |
Discard the selected file after confirmation |
D |
Discard all repo changes after confirmation |
Pane navigation uses Neovim's built-in window commands by default, so <C-w><Left>, <C-w><Right>, <C-w><Up>, and <C-w><Down> work in Glance, along with <C-w>h/j/k/l.
Conflicted text files open in a 3-way merge editor with Theirs, Ours, and editable Result panes. Press ? in merge mode to see the actions available for the current conflict or file.
Inside the git log modal, use j / k to move between commits, <CR> to preview the selected commit, y to copy the full hash, r to refresh, and q to go back or close.
Configuration
Glance loads an optional Lua config file automatically. The most common location is ~/.config/glance/config.lua, or you can point GLANCE_CONFIG at a custom file.
Create a starter config automatically:
If you want to overwrite an existing config file:
glance init-config --force
The config file must return a Lua table.
Example:
return { app = { hide_statusline = true, }, theme = { preset = 'one_light', }, minimap = { width = 2, }, windows = { filetree = { width = 36, }, diff = { relativenumber = false, }, }, log = { max_commits = 200, }, filetree = { show_legend = false, }, }
Add custom pane-navigation aliases if you want alternatives to Neovim's built-in <C-w> window commands. If your terminal or tmux reports those keys as arrows, use the tokens Neovim actually sees:
return { pane_navigation = { left = '<Left>', down = '<Down>', up = '<Up>', right = '<Right>', }, }
These are extra aliases. Glance does not disable Neovim's built-in <C-w> window navigation.
Themes
Glance ships with two built-in theme presets:
seti_blackone_light
seti_black is the default. Switch presets with theme.preset, and layer theme.palette overrides on top when you want to tune individual colors.
return { theme = { preset = 'one_light', }, }
Config reference
Search order:
$GLANCE_CONFIG$XDG_CONFIG_HOME/glance/config.lua~/.config/glance/config.lua
Available top-level config domains:
appthemewindowsfiletreelogmergekeymapspane_navigationhunk_navigationsignswelcomeminimapwatch
Built-in theme presets:
seti_blackone_light
Notes:
- Top-level flat keys like
hide_statusline = trueare not supported. Use the nested schema. theme.presetselects a built-in palette, andtheme.palettecan override individual colors on top of that preset.welcome.animatecontrols whether the welcome screen animation runs.watch.enabledkeeps.gitmetadata watchers on.watch.pollcontrols background worktree polling for new untracked/external file changes.merge.keymaps.show_helpcontrols the merge actions help key. It defaults to?.- Discard actions always prompt for confirmation before changing the repo state.
Troubleshooting
-
glance: command not found~/.local/binis probably not on yourPATH. Run this to fix it:case ":$PATH:" in *":$HOME/.local/bin:"*) echo "~/.local/bin already on PATH" ;; *) case "${SHELL##*/}" in zsh) rc="${ZDOTDIR:-$HOME}/.zshrc" ;; bash) rc="$HOME/.bashrc" ;; *) rc="$HOME/.profile" ;; esac line='export PATH="$HOME/.local/bin:$PATH"' grep -qxF "$line" "$rc" 2>/dev/null || printf '\n%s\n' "$line" >> "$rc" export PATH="$HOME/.local/bin:$PATH" echo "Added ~/.local/bin to PATH in $rc" ;; esac
-
glance: not a git repositoryGlance only runs inside a Git work tree. -
Syntax highlighting looks limited Install
nvim-treesitterin Neovim's standard runtime path for richer highlighting while Glance runs in--cleanmode.
Roadmap
Glance is still focused on the local review loop. Near-term work includes:
- Hunk-level stage, unstage, and discard
- Filetree filtering and path search for larger changesets
- File-scoped history, plus better commit-loop ergonomics like amend and fixup
- Merge-editor polish such as optional base view, vertical layout, and smart-combine-style actions
License
MIT


