This repository has been archived on 2026-10-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
simonfrankenandClaude Opus 5.5 1ee394cfdf Move releases to GitHub, with one bridge release on Gitea
GitHub has no generic package registry, so releases become GitHub
release assets. The updater and install.sh read releases/latest/download
and releases/download/<v>/, plain redirects with no API rate limit.
make release publishes a draft with all assets, then makes it latest.
make release-gitea publishes the same version to the old Gitea registry
for binaries that still update from there, and refuses until GitHub
serves it. See D33.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 22:38:50 +01:00
..
2026-10-23 18:48:58 +02:00

submarine — documentation

submarine is a terminal UI for git repositories with many (recursively nested) submodules. It shows the submodules, as a collapsible tree (plus the state of the superproject itself in the header), and describes each pin as a branch plus distance (origin/main ↓1) instead of a bare commit hash.

Documents

Document Contents
requirements.md What the tool must do: functional and non-functional requirements
state-model.md How a submodule's state is determined, summarized into issues, and how pins are resolved to refs
ux-guide.md Layout, attention hierarchy, colors, wording, navigation and key bindings
architecture.md Package layout, the provider boundary, async loading, testing
actions.md the write actions restore, switch branch and update pin
decisions.md Decision log with rationale (ADR style)

Install

curl -fsSL https://raw.githubusercontent.com/simonfranken/submarine/main/install.sh | sh

Installs submarine and the alias sub (linux/macOS, amd64/arm64) to ~/.local/bin. Update with submarine update. Maintainers publish with make release NOTES=… (see architecture).

Status

Prototype. The UI is complete for browsing. It reads real repositories through a git provider (internal/submodule/git): submarine [dir]. It fetches only when asked (f) and follows changes made in other shells. submarine --mock shows the built-in mock data (internal/submodule/mock). ! shows only submodules with problems. x restores the selection (X also drops staged pins), b switches its branch and u updates a pin that is behind (actions.md).

Next steps, roughly in order:

  1. (done) Write actions: restore, switch branch, update pin, see actions.md. Stage pin was dropped (D29).
  2. (done) "Problems only" (!) view, reusing the tree's filter.
  3. Usability pass for users new to submodules, see notes/usability-plan.md. The low-effort items are done (D31, D32); next are the issue hints and the palette that fits the selection.