-
v0.13.0 Stable
released this
2026-10-25 21:44:53 +00:00 | 0 commits to main since this releasesubmarine moved to GitHub: https://github.com/simonfranken/submarine
This is the last release on this host.
submarine update(orq quit and updatein the footer) installs it from here; from then on, submarine looks for updates on GitHub on its own. Nothing else to do.New install command:
curl -fsSL https://raw.githubusercontent.com/simonfranken/submarine/main/install.sh | shRelease notes and future releases: https://github.com/simonfranken/submarine/releases/tag/v0.13.0
Downloads
-
v0.12.0 Stable
released this
2026-10-25 20:11:41 +00:00 | 2 commits to main since this releaseNew
Xrestores to the committed pins: likex, but without the staged/committed question, and it drops the staged pins at every depth below the selection, the superproject's included.Xasks before it drops a staged pin, the selected submodule's own pin included:Restore libs/staged to the committed pins? Discards 1 staged pin.- Clearer key names:
x restore to pin,X restore committed pins; on the headerureadspull (fast-forward), which is what it does there. - Problems only, filter and fetch are shown in the footer (
! problems only • / filter • f fetch), not only in the full help. ?explains the screen: the first page lists every key in titled columns, the second is a legend of the status words, symbols and commit roles in their colors.esccloses it.- Hints for newcomers:
new here? ? shows every key…above the footer until the first key, andfetched never · f fetchin the detail pane when the last fetch is old. - The header counts staged pins as
n staged, the same word as the tree.
Install or update:
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | sh, orsubmarine update.Full changelog: https://git.simon-franken.de/simonfranken/submarine/compare/v0.11.0...v0.12.0
Downloads
-
v0.11.0 Stable
released this
2026-10-24 20:42:12 +00:00 | 5 commits to main since this releaseNew
uupdates a pin that is behind (origin/main ↓2): it moves the pin to the tip of its branch, the same as picking that branch withbbut without the popup. It takes exactly the commits shown and fetches nothing. If the branch moved in the meantime, it does nothing.uon the header fast-forwards the superproject to its upstream (main ↓1), likegit pull --ff-onlyfrom the last fetch, and restores the submodules.- Switch (
b) fast-forwards a local branch that is only behind the chosen remote branch, unless another worktree has it checked out. A branch with commits of its own is still never moved.
Fixes
- The key list in the detail pane wraps instead of cutting off keys.
Install or update:
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | sh, orsubmarine update.Full changelog: https://git.simon-franken.de/simonfranken/submarine/compare/v0.10.0...v0.11.0
Downloads
-
v0.10.0 Stable
released this
2026-10-24 17:18:15 +00:00 | 6 commits to main since this releaseNew
- Restore (
x) puts submodules on a branch instead of a detached HEAD, if the pin is a branch tip. In order: the local branch tracking the shown ref, the ref itself (created as a tracking branch if no local branch has its name), another local branch (alphabetically), another remote branch at the pin. It applies to submodules at every depth, already in-sync ones included, and to the submodules below a switch (b). No branch is ever moved: a local branch behind or ahead of its remote is not fast-forwarded. If nothing fits, the submodule stays detached as before.
Install or update:
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | sh, orsubmarine update.Full changelog: https://git.simon-franken.de/simonfranken/submarine/compare/v0.9.0...v0.10.0
Downloads
- Restore (
-
v0.9.0 Stable
released this
2026-10-23 16:45:24 +00:00 | 9 commits to main since this releaseBreaking changes
qquits and updates when a newer release exists. Plain quit moves toQwhile an update is offered;ctrl+calways quits without updating. Without an update,qquits as before.
New
- Update check on every start, in the background (no more once-a-day cache); silent if the registry can't be reached. Still off for dev builds,
--mockandSUBMARINE_NO_UPDATE_CHECK=1. q quit and update to vXin the footer: right of help and quit, on a highlighted background.qquits, then installs the release (same assubmarine update).- The notice printed after exit is gone; the footer shows the update instead.
Install or update:
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | sh, orsubmarine update.Full changelog: https://git.simon-franken.de/simonfranken/submarine/compare/v0.8.0...v0.9.0
Downloads
-
v0.8.0 Stable
released this
2026-10-23 15:37:14 +00:00 | 10 commits to main since this releaseNew
- History spine in the detail pane: the pin, tip, your checkout and a staged pin are shown as one line of history, newest on top, with the number of commits between nodes. All three on one commit read "in sync".
- Diverged commits as a fork: a tip, checkout or committed pin that has diverged from the pin gets its own lane, joined at the merge base (with SHA and subject).
- Target branch and
off target: each pin is compared with the branch it should be on (branch =in .gitmodules, else the remote's default branch). A pushed pin that is not on it is flaggedoff target(blue, counted in the header and below collapsed rows), and the spine shows the target's tip. - The header summary is right-aligned and ordered by importance; the fetch age moved to the detail pane.
Fixes
- The shown ref of a pin is now the target branch if the pin is on it, otherwise the closest branch containing it. A pin on a feature branch no longer looks perfect, and the ref no longer changes with the branch checked out in the submodule.
Install or update:
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | sh, orsubmarine update.Full changelog: https://git.simon-franken.de/simonfranken/submarine/compare/v0.7.0...v0.8.0
Downloads
-
v0.7.0 Stable
released this
2026-10-22 12:40:46 +00:00 | 14 commits to main since this releaseNew
- Switch branch (
b): opens a popup in the middle of the screen with a search line and the local and remote branches of the selected repository (or the superproject).↑/↓select, type to filter,enterswitches,esccancels. Mouse: click a branch to switch, scroll wheel to move, click outside to close.- For a submodule, the branch tip becomes its staged pin and the submodule (and everything below it) is restored to it, with HEAD on the branch. A remote branch gets a local tracking branch; an existing local branch of the same name is never moved.
- Like restore, it asks
y/nonly if work would be lost, and may clone or fetch what is missing below. - The screen behind the popup is dimmed so the dialog has the focus.
Install or update:
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | sh, orsubmarine update.Full changelog: https://git.simon-franken.de/simonfranken/submarine/compare/v0.6.0...v0.7.0
Downloads
- Switch branch (
-
v0.6.0 Pre-Release
released this
2026-10-22 10:44:43 +00:00 | 17 commits to main since this releaseSixth release of submarine. Still a prototype, but the first one that changes your repositories:
xrestores a submodule, or the whole project, to exactly what git records. It also adds a problems-only view and no longer fetches on startup.Highlights
- Restore (
x). Makes the selected submodule, and every submodule below it, exactly what git records: tracked files reset, untracked files and leftover repositories removed, merges and rebases ended, missing submodules cloned or initialized again (also inactive ones and ones set toupdate = none). With the header selected it restores the superproject itself, so one key gives you the exact project your root commit specifies. - Restore never moves a branch: a checkout that is off its pin is detached first, so commits stay on their branch. Ignored files (
.env,node_modules, build output) are kept. - Restore asks only if work would be lost: changed or untracked files, a merge/rebase in progress, commits that no branch or remote reaches, or a repository that exists nowhere else. The question lists what is discarded;
yrestores, any other key cancels. Without a loss it just runs. - Staged pins are kept at every depth. A nested submodule with a staged pin and uncommitted changes keeps the pin and is reset to it. On a submodule with a staged pin,
xasks whether to restore to the staged pin (s) or the committed pin (c, which unstages it). - Problems only (
!). Shows only submodules with an issue (or an unknown state), plus their ancestors, expanded. It combines with the filter and saysproblems onlyabove the footer, so a short list is not mistaken for a healthy repository. - The superproject is selectable. The header is its row: it is selected on startup, shows its own state (
changed,unpushed, …) and has a detail pane like a submodule. A leftover clone of a submodule the branch no longer has shows up as an untracked repository. - No fetch on startup. With hundreds of submodules the automatic fetch was too much. The header and the detail pane show when you last fetched (also fetches made in other shells);
ffetches everything.
Changes to be aware of
- The
--no-fetchflag is removed, since nothing is fetched on startup. Scripts that pass it now fail with "flag provided but not defined". The update check is still off for dev builds,--mockandSUBMARINE_NO_UPDATE_CHECK=1. - Restore is the first action that uses the network besides
f: it may clone a missing submodule or fetch a missing commit. It never prompts (passwords, passphrases and host-key questions fail with git's message instead). - The placeholder keys
u(checkout pin) andb(bump pin) are removed.
Install
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | shInstalls
submarineand the aliassub(linux/macOS, amd64/arm64) to~/.local/bin. Update from 0.5.0 withsubmarine update.Binaries and
checksums.txtare published in the package registry (generic packagesubmarine, versionv0.6.0).Known limitations
- Restore shows
restoring …with a spinner, but no progress per repository, so a restore with many clones takes a while without feedback. - There is no way yet to stage a pin from submarine (planned, see
docs/actions.md). - Restore is not available on the mock data (
--mock).
Downloads
- Restore (
-
v0.5.0 Pre-Release
released this
2026-10-22 08:25:47 +00:00 | 23 commits to main since this releaseFifth release of submarine. Still a prototype: browsing is complete, actions are not yet implemented. This release shows staged pins in the tree and adds a proper README.
Highlights
- A pin change that is staged in the superproject but not yet committed is now visible in the tree. A submodule without issues shows a blue
stagedinstead ofin sync; next to an issue word it shows a blue●. Before, you only saw it in the detail pane and asn pin stagedin the top bar, with no way to find the row. - A collapsed parent shows
●if a staged pin is hidden below it, before its issue counts. - A staged pin is information, not an issue: it is not counted in
+nor in the issue counts, and it does not change a row's level. - New README with a screenshot, installation, examples and the key bindings.
subis now the command used in the examples.
Install
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | shInstalls
submarineand the aliassub(linux/macOS, amd64/arm64) to~/.local/bin. Update from 0.4.0 withsubmarine update.Binaries and
checksums.txtare published in the package registry (generic packagesubmarine, versionv0.5.0).Known limitations
- The actions
u,band!only show a "not implemented" message.
Downloads
- A pin change that is staged in the superproject but not yet committed is now visible in the tree. A submodule without issues shows a blue
-
v0.4.0 Pre-Release
released this
2026-10-21 19:18:26 +00:00 | 27 commits to main since this releaseFourth release of submarine. Still a prototype: browsing is complete, actions are not yet implemented. This release adds a filter.
Highlights
/filters the tree. A text input above the footer takes the term; submodules whose path (including the name) contains it are shown, ignoring case.- Ancestors of a match stay visible and are shown expanded, so nested matches keep their context. Your fold state is untouched.
- If the selected submodule is filtered out, the next visible one is selected (the previous one if none follows, none if nothing matches).
enterhands the keys back to the tree and keeps the filter;/edits the term again.esccloses the input and removes the filter; the selection stays.↑↓andpgup/pgdnalso work while typing.- Fix: an empty tree, or one where the filter hides everything, no longer panics.
Install
curl -fsSL https://git.simon-franken.de/simonfranken/submarine/raw/branch/main/install.sh | shInstalls
submarineand the aliassub(linux/macOS, amd64/arm64) to~/.local/bin. Update from 0.3.0 withsubmarine update.Binaries and
checksums.txtare published in the package registry (generic packagesubmarine, versionv0.4.0).Known limitations
- The actions
u,band!only show a "not implemented" message.
Downloads
Archived