logan 01706c6053
CI / check (push) Canceled after 0s
CI / e2e (push) Canceled after 0s
Search index maintenance / maintain-index (push) Canceled after 0s
Build & publish Arch package / arch-package (push) Successful in 2m41s
ci(android): say why the keystore did not open
"the keystore did not open — is ANDROID_KEYSTORE_PASSWORD right?" is a
guess, and there are three quite different reasons behind it. The step
distinguishes them now.

**A secret pasted into a web form very often carries a trailing
newline**, and a password is compared byte for byte, so the run failed
with a password that was correct. Reproduced exactly: keytool rejects
`Correct123\n` against a keystore whose password is `Correct123`. CR
and LF are stripped from the password, the alias and the key password
now, and the step says when that mattered.

**A wrong alias failed a minute later, inside Gradle.** It defaults to
`yellowjacket`, so any keystore created with another alias got there.
The alias is checked up front and the failure lists the aliases the
keystore actually holds.

**And a truncated or mis-pasted base64 is a different problem from a
bad password**, so the artifact is described before it is opened: size
and its first four bytes, named as PKCS12 or legacy JKS, with a warning
when the header is neither. A truncation shows up as 300 bytes against
2564.

Verified against real keystores for all five cases: correct, trailing
newline, wrong password, wrong alias, truncated base64.

Decode and build are one step now. Splitting them would mean either
handing the password to a later step through $GITHUB_ENV -- where the
env dump is only masked for values that are verbatim a secret, so a
trimmed one could print in clear -- or repeating the trimming in both.
The failure message also prints the password's length, which is the
one thing that distinguishes "wrong value" from "invisible whitespace",
and only on failure.
2026-08-16 17:00:36 -04:00
2026-08-16 14:09:12 -04:00
2026-03-20 19:03:30 +00:00
2026-08-14 14:01:02 -04:00

YellowJacket

Music how it was meant to bee.

YellowJacket is a fast, cross-platform desktop music player for your local collection. It plays your files, keeps your library tidy, and helps you discover and organize your music — all in a clean, responsive interface. No accounts, no streaming, no telemetry: just your music on your machine.

Runs on Linux, macOS, and Windows.

Features

Play your music

  • Plays MP3, FLAC, OGG Vorbis, and WAV
  • Play, pause, seek, and volume control with a mute toggle
  • Gapless, glitch-free seeking backed by a read-ahead buffer
  • A queue you can add to, reorder, and shuffle, with play-next support
  • Shuffle and repeat (off / all / one)
  • Picks up right where you left off — remembers your track, position, and volume between sessions
  • Media-key and MPRIS support on Linux, so your desktop's playback controls just work

Keep your library organized

  • Point it at your music folders and it scans them automatically
  • Reads tags and embedded cover art, and de-duplicates artwork so it isn't stored twice
  • Incremental sync — only new or changed files get reprocessed, and deleted files are cleaned up
  • Browse by album, artist, or genre, or search across everything
  • Mark favorites and see what you've been listening to with play history
  • Edit track tags directly when something's off

Playlists

  • Create playlists, drag tracks in, and reorder them
  • Smart playlists that build themselves from rules (by genre, rating, play count, and more)
  • Pin a default playlist and spot duplicate tracks at a glance

Discover and clean up (powered by MusicBrainz)

  • Explore — browse artists, releases, and genres from the MusicBrainz catalog, not just what's already in your library
  • Auto-tag — match your files against MusicBrainz to fill in correct artist, album, and track metadata, with a review step before anything is written
  • Lyrics search — find a track by a line you remember

Install

Download the latest build for your platform from the releases page.

Platform Download
Linux yellowjacket-linux-amd64
macOS yellowjacket-darwin-universal.app.zip (Apple Silicon + Intel)
Windows yellowjacket-windows-amd64.exe

Prefer to build it yourself? See Building from source.

Getting started

  1. Launch YellowJacket.
  2. Open Settings and add the folder(s) where your music lives.
  3. Let the initial scan finish — you'll see progress as it works.
  4. Browse by album, artist, or genre, queue something up, and press play.

Your library and settings are stored locally:

Linux / macOS Windows
Config ~/.config/yellowjacket/ %LOCALAPPDATA%\yellowjacket\config
Library data ~/.local/share/yellowjacket/ %LOCALAPPDATA%\yellowjacket\data

Building from source

YellowJacket is built with Go and a Lit/TypeScript frontend, bridged by the Wails framework.

Prerequisites

Tool Version
Go 1.25+
Node.js 22+
pnpm 10+
Wails CLI v3 — vendored, no install needed (go tool wails3)

The Wails v3 CLI resolves from the tool block in go.mod, so there is nothing to install globally; make setup fetches it with the rest of the tooling.

On Linux, install the system libraries Wails needs. v3 builds against GTK4 + WebKitGTK 6.0 by default:

sudo apt-get install libasound2-dev libgtk-4-dev libwebkitgtk-6.0-dev   # Debian/Ubuntu
sudo pacman -S alsa-lib gtk4 webkitgtk-6.0                              # Arch

A machine without webkitgtk-6.0 can still build with -tags gtk3 against the older WebKit2GTK 4.1 stack, but that is an escape hatch, not what CI or a release builds.

macOS and Windows need no extra system packages. Run go tool wails3 doctor to check your environment.

Build

make setup        # install tooling and git hooks
make dev          # run with hot-reload
make build-prod   # produce a release binary

More detail for contributors lives in docs/dev/overview.md and CLAUDE.md.

S
Description
No description provided
Readme
15 MiB
v0.7.0
Latest
2026-08-26 16:03:22 +00:00
Languages
TypeScript 50.6%
Go 43.6%
Java 1.8%
JavaScript 1.5%
Shell 1.4%
Other 0.9%