jingle

plays a producer tag every time you commit or push. a go cli and a mac app, on homebrew.

2026-10-01 | live

shipping should feel like something. producers stamp every track with a tag, so i wanted one for every commit.

jingle: let the room know you shipped. a producer tag on every git commit and git push.
jingle's social card

install

brew trust opdhaker/tap
brew install OPDhaker/tap/jingle
jingle install --yes

that's it. your next commit plays a chime, and your next push that goes through plays a fanfare. it covers every repo on your machine, your own hooks still run exactly like before, and jingle uninstall puts your git config back byte for byte. it's a go cli, with a menu-bar mac app built on tauri if you'd rather click.

under the hood it's plain git hooks: jingle install points git's global core.hooksPath at its own hooks, and they call your system's audio player (afplay on a mac).

the sounds

they're made in code, so there's nothing to license or download. click one to hear it:

soundwhat it isplays on
chimetwo-note rising bellevery commit
fanfarequick rising brass arpeggioevery push that works
harmonytwo voices resolving to a chordreal merge commits, if you turn it on
boomsnare hit into an 808 dropwhatever you give it

got your own tag? any mp3, wav, aiff, m4a, ogg or flac works.

it doesn't slow git down

if the hook played the sound itself, every commit would wait for it to finish. so the hook starts the player in the background and hands control straight back to git:

hooktime per commit
no hook at all13–21 ms
jingle28–41 ms
playing the sound inside the hook~2,391 ms

most of jingle's extra time is the cost of having any hook at all.1

the hard part

knowing when a push actually worked. git has no post-push hook, so jingle has to prove it:

  1. pre-push leaves a marker for that git push process
  2. if the push lands, git updates the remote-tracking ref (refs/remotes/…) from that same process
  3. the marker matches, and the fanfare plays

a rejected push never updates the ref, and "everything up-to-date" never leaves a marker, so both stay quiet. the gap is pushing to a raw url: there's no tracking ref to watch, so jingle plays when the push starts instead.

Footnotes

  1. 30 commits per run on an arm64 mac with git 2.54. an empty exit 0 hook measured the same as jingle's. ↩

projects