Repository navigation
Releases: MaraniMatias/Muster
Release list
Muster v1.0.0-rc.9
Muster v1.0.0-rc.8
Muster v1.0.0-rc.7
Muster v1.0.0-rc.6
Muster v1.0.0-rc.4
Muster v1.0.0-rc.3
Muster v1.0.0-rc.3
This release candidate includes both the native macOS app and the Linux package.
Downloads
-
macOS 15+, Apple Silicon:
Muster_1.0.0-rc.3_arm64.zip. Unzip and moveMuster.appto Applications. The bundle is ad-hoc signed, not notarized; Gatekeeper may block a downloaded copy. Verify the source and download before removing quarantine. -
Ubuntu 24.04, x86_64:
muster_1.0.0-rc.3_amd64.deb. Install with:sudo apt install ./muster_1.0.0-rc.3_amd64.deb
The package's internal Debian version is
1.0.0~rc.3, keeping candidates ordered before the final release; its download filename uses GitHub-safe characters. Linux ARM64, AppImage and older distributions are not included. A working Vulkan driver is required.
SHA256SUMS verifies both downloads. SOURCE_SHA identifies the exact commit used to build them.
Changes and validation
- Native Debian packaging includes the executable, desktop launcher, icon and runtime dependencies derived from the linked binary.
- Both platforms must pass formatting, clippy, workspace tests, release-script tests, the RustSec audit and release compilation before publication.
- The actual Linux package is installed and launched as an unprivileged user in a clean Ubuntu runtime container without development libraries. The Xvfb/lavapipe check requires a window and a process that stays alive; it does not certify real-GPU rendering, IME or Wayland behavior.
- The release publishes the exact validated macOS and Linux artifacts, without rebuilding after validation. Versions, architectures, source claims and checksums are checked together.
- Linux clipboard tests now use Ctrl+Shift+V; the Git shared-budget test has realistic CI scheduling margins without changing production limits.
This is a pre-release, not v1.0.0. Native JSON state is unchanged by this candidate; the frozen Tauri application's workspace is not imported or migrated.
Source commit: dffb157ba1126480a5e862025bf1814a7c7c2761
Full changelog: v1.0.0-rc.2...v1.0.0-rc.3
Muster v1.0.0-rc.1
1.0.0-rc.1
-
Ctrl+Shift+ now reaches the program in the terminal. xterm.js 6 answers the keys it has an
escape for and drops the rest:Ctrl+Shift+Asent no bytes at all, whereCtrl+Shift+F5went out
asESC [ 15 ; 6 ~with the shift in it. The letter is what went missing, because it is the one
key xterm turns into a control character and the shift it cannot put on a control character is
dropped with it — so a program bound toCtrl+Shift+<key>never heard it pressed and the shortcut
did nothing. The terminal now answers that chord itself, in the encoding the program chose: one
that pushed the keyboard protocol getsESC [ 97 ; 6 uand the whole chord, and one that never
announced anything is left with xterm's own answer rather than one invented here. This is the
same pathShift+Enteralready took, and it means the shortcut only exists behind a reader that
asked to be told about keys at all — no terminal can send a chord no program has agreed to
distinguish. -
There is one stored shape, and the file carries no version. Both state
files in~/.muster-- the native workspace and the review round store --
carry noschemaVersionat all: every field is required, no field is unknown,
and the shape itself is the whole contract. A shape is changed in place, a file
this build cannot read is refused by name and never written over, and nothing
left behind reads an older file: the navigation store no longer parses a second
time to accept a file that carries no version at all, and a stamped file is
refused like any other one this build does not know. -
A document can be edited, and a save says what it wrote. The document pane
is its editor: type in it, and a bar appears along the bottom with Cancel and
Save —Escand⌘Sare the same two controls. Cancel puts the text the file
was read with back; Save writes what the editor holds, through the same walk
every read of a checkout is answered by: a path outside the checkout, a link, a
file somebody else wrote since it was opened, or a file that is read-only are
all refused in as many words rather than overwritten, and what is written is a
replacement rather than a rewrite, so a reader sees the old text or the new one.
A Markdown document opens as its reading and is edited as its source, because
the reading is a parse of the text as it was read. -
A file with changes offers them from its own document. When Git has said
this file is in the change set, the document's header carries a Changes
button with the counts beside it, and it opens that one file's diff rather than
the whole set. A file Git has not answered about offers nothing, because a
button that appears and disappears with a read is worse than one that waits. -
A picture, a video and a file's name stand apart from the text. The toolkit
measures an inline element as a box of its own, so the air above and below a
picture — and around the words that stand in for what cannot be drawn — is
inside that box. A document's SVG is drawn like any other picture: it is the
one format this window takes by name rather than by its bytes. -
The app has its icon back on macOS. An executable carries no icon there: the
icon is what the bundle around it says it is.scripts/bundle-macos.shbuilds
Muster.appwith the same bundle identifier, name, copyright and artwork the
Tauri build shipped, so the OS files the native shell as the same application
rather than as a second one that happens to look like it. Two fields differ on
purpose: the bundle declares macOS 15 as its floor, which is what the toolkit
this app is built on needs rather than what the old webview build needed, and
the build now enforces that floor instead of only promising it, so an API newer
than 15.0 is a build error rather than a crash on someone else's Mac. The
version is whatevernative/Cargo.tomldeclares. -
There is a menu bar on macOS. The app menu carries About, Services, Hide,
Hide Others and Quit, and the Edit submenu carries Undo through Select All —
the same two submenus the Tauri build had. Edit is not decoration there: those
are the key equivalents⌘C,⌘V,⌘X,⌘Aand⌘Zare answered by, and on
macOS they are answered before the key reaches the window, so the terminal
answers them as the toolkit's copy and paste actions as well as in its own key
handling. Either way the grid copies its selection and pastes into the child. -
About Muster says what it always said. The icon, the name, the version, the
copyright and the repository, in the order macOS shows them, in a panel of its
own that closes with⌘W. -
Where an exported review round lands is a preference. Settings has a "Review notes" section
with a selector for it:Defaultkeeps them in~/.muster/tmp/reviews, andWork directory
keeps them in.muster/reviewsinside the checkout the review was made in — the repository or
worktree in front of you. The folder the selector names is written out underneath it, with how
many exported notes it holds and how much they weigh, and in the default folder there is a button
that deletes them: it asks first, and it removes only the files an export wrote, so anything else
you have put in that folder stays. A working directory's notes belong to the repository, so there
is no button there and the command refuses one anyway. -
The app is called Muster. The name changed together with everything that carries it: the
product, the release artifacts, the paths on disk and the data behind them. The bundle identifier
went fromdev.marvis.workspacetodev.muster.workspace, and that is what moves the app-data
directory, the log directory, and the filenames of the Linux packages —muster_<version>_.deb
andMuster_<version>_.AppImage. -
Preferences move by hand; the workspace does not move at all. Settings live in
~/.muster/config.ymlnow and exported review rounds in~/.muster/tmp/reviews/, so copy
across whatever is worth keeping — nothing reads the old folders. Reviews already exported under
thecode-reviewsname this section used to carry stay there and are not moved or read: at
0.xa path change is made in place, and the ones still worth having are worth copying by hand.
The database is
muster.sqlite3and it starts empty: no migration runs in either direction, so the repositories
you registered, your review notes and your rounds stay in the oldmarvis.sqlite3on disk. That
file is still an ordinary SQLite database if you need anything out of it; this build only refuses
a schema stamped with a version it does not know, which is the rule that has always governed it. -
An old
Marvis.appstays installed next toMuster.app. Two bundle identifiers are two
applications to macOS: neither replaces the other, and each keeps its own dock tile and its own
data. Removing the old one is a manual step. -
Why it was done in one go. The project is still
0.x, so a change that moves paths is made in
place instead of being carried by a deprecation window: nothing has to read what an older build
wrote, and a compatibility layer kept "one release" would only be code nobody exercises. -
Preview images and videos directly; switch SVGs between an editable source and a live preview.
-
Settings now says what the keyboard does. The chords the window answers were written down in
the source and nowhere else, so learning them meant readingApp.vue. There is now a Shortcuts
section in Settings that writes them down: the side panels, a new terminal and the three zoom
keys, then the few keys that mean something only where they are pressed — confirming a session
name,Esc, ctrl/click on a terminal link, and the inspector'sHome/End. Each chord is drawn
the way the platform it is read on presses it, so a Mac shows⌘/and everything else shows
Ctrl+/rather than both, because a chord printed the other way round is a key nobody has. It is
a list and nothing more: no chord is configurable, and none of it is written toconfig.yml. -
F2 no longer pretends to rename a session. The sidebar rows carried
@keydown.f2, which
could only fire on a row that already had the focus, and a click does not focus a row: on macOS
the webview does not move focus to a button it is clicked, so the binding was reachable only by
tabbing to a row nobody tabs to. Double-click still renames. The binding is gone rather than left
where it is a lie about a shortcut Settings now lists. -
About says which build it is, and stops leading with the licences. The section opened with an
acknowledgement and four groups of credits — artwork, colours, the typeface and every library —
which is longer than the rest of it and is the answer to a question nobody opened Settings with.
The version is now the first line, read from the binary rather than written into the dialog, so it
cannot name a release behind the app it is in; a build that cannot read its own version draws no
version rather than one that is nearly right. The credits are still all there, folded into a
"Credits and licences" row that says what is inside it. The notices themselves were never only
there: the full licence texts ship asTHIRD-PARTY-NOTICES.txtinside the bundle, which is where
a notice has to travel to count as one. -
A URL in the terminal can now be clicked open in the browser. The terminal underlines the paths
it can open in the preview, and it refused to underline an address becausehttps://…names no file
in the checkout — which is true, and left the one thing a terminal prints most often (curl, a
deprecation warning, an npm error pointing at its own docs) as the one thing it could not follow.
An address is now underlined next to those paths and ctrl/click opens it in the browser, the same
key and the same key-...
Muster v0.22.0
Full Changelog: v0.21.1...v0.22.0
Muster v0.21.1
Full Changelog: v0.21.0...v0.21.1
Muster v0.21.0
Full Changelog: v0.20.1...v0.21.0