Work / Developer tooling
gitto
Plain-language Git and GitHub in the terminal. Save, upload and sync instead of add, commit and push — with every Git or GitHub error translated into a sentence you can act on.
- Status
- published
- Period
- Published on npm
- Stack
- TypeScriptNode.jsInkOctokitsimple-git
- The crux
- One product, two interfaces: the interactive palette and the piped-stdin fallback ask identical questions.
The problem
Git’s vocabulary is a barrier that has nothing to do with version control as a concept. Add, then commit, then push is three words for one intention, and when it fails it fails in language that assumes you already understand the model.
gitto replaces the verbs with 21 plain-language commands and translates every Git and GitHub error before it reaches the user. Conflicts from a merge, rebase or cherry-pick resolve with the same two verbs as everything else — fix the files and save to continue, or undo to cancel. No new commands to learn at the moment you are most confused.
The constraint I set myself
Never ship two products. Every command works through the interactive palette and through a plain-text fallback that asks identical questions with typed answers, used automatically whenever stdin isn’t a TTY — piped input, scripts, some CI runners, old terminals.
That turned out to require replacing Node’s built-in readline outright: it drops lines on piped stdin when a second question is issued after the first resolves, so the fallback queues arrived-but-unasked-for lines itself. The palette and the fallback build their command list from one shared function, so they cannot drift apart.
Details that matter
Login runs GitHub’s device flow. Tokens are stored at mode 0600 and written atomically, so a crash mid-write can’t corrupt them. A stalled network operation times out with a clear message instead of hanging forever, and GitHub rate limiting is reported as what it is rather than mistaken for a login problem.
Requires Node 20 or newer. Tested on Linux, Windows and macOS in CI — the Ink UI, the plain-text fallback and the underlying Git logic each covered separately.
Next — sealpin