Fretwire 0.4.0
The fourth beta closes the item the third one listed as not here yet: an
interactive rebase editor that takes a whole branch at once, rather than one
commit at a time. Beside it the app learned a light theme — the same design
solved for a light screen, not inverted — and the history pane got the work it
was owed: columns you can drag, lanes thin enough to stay out of the way of the
messages beside them, and a scroller that stays with the pane however far
sideways you have gone.
New
- An interactive rebase editor — one sheet holding the range from a base to HEAD, in the order git will replay it, with pick / reword / squash / drop and reordering on every row. Three ways in: Rebase from Here… on a commit, Rebase N Unpushed Commits… on the current branch (its menu, and the toolbar's branch pill), and a selection that forms a run ending at HEAD. No editor window ever opens:
rewordis written aspickandsquashasfixup, and every message this app decides on is applied by anexec git commit --amendline at the end of its group, so each resulting commit gets its own text. A plan that stops on a conflict stays put — Continue still works, because the files git's todo names are still where it left them. - A light theme — ⌘, ▸ Appearance ▸ Theme: System, Light, Dark. Every token keeps the hue and chroma of the dark token it replaces and moves only in lightness, until its contrast against the page matches what the dark theme already measures. Two places a mirror image would have been wrong: the lanes keep their lightness spread, so eight branches stay eight colours you can tell apart, and
conflictbecomes a terracotta — the system orange manages about 2.2:1 on a light ground, and an amber solved the usual way lands on top of the modified colour. - History columns you can drag — each fixed column now has a handle on the edge facing MESSAGE, a floor, a ceiling, and a width that persists across launches. MESSAGE stays elastic; it is whatever the others leave. And when the columns want more room than the pane has, the history scrolls sideways — header and rows together — instead of squeezing the message down to nothing and pushing the trailing columns off the edge.
- Lanes that don't shout — Graph lines (Thin / Regular / Bold, thin now the default) in the history's gear popover and in ⌘, Appearance, which draws a live sample of each. The glow's width and opacity move with the core, so a thin lane isn't a thin line under a fat bloom, and the node rings keep their own width — a node is the commit itself. Hovering a row steps every lane that isn't its branch back to 30%. Lane turns are rounded elbows now, which look the same crossing one column as they do crossing ten.
- A scroller that stays with the pane — the history's vertical indicator used to ride off the edge as soon as the columns were wider than the pane, so a vertical scroll gave no feedback at all. It is drawn outside the horizontal scroll now: at the pane's edge whatever the columns are doing, absent until something moves, lit under the pointer, draggable — and staying put under "Show scroll bars: Always", which it used to ignore.
- A sidebar that steps out of a diff — a new preference in ⌘, Appearance, off by default: while a diff has the middle pane, the branch list folds away and hands it the room. The toolbar button still brings it back, and there it means "for this diff", not "from now on".
Requirements
- macOS 14 or later.
- A
git— whichever comes first on your login shell's PATH, else Apple's. With none installed at all, the Welcome screen says so once, with the command that fixes it.
Not here yet
- A command palette.
- Dragging a commit onto a branch. The editor above covers reordering a range; history by drag-and-drop is a separate decision, and it hasn't been made.
During the beta
Free, for any use. Licensing starts at 1.0: free for personal projects, paid per seat for commercial use — see the EULA.
The app updates itself — each update is checked against a signature before it is applied. Settings ▸ Updates decides how much of that happens on its own. Bug reports and requests go to the issue tracker.