Native macOS menu‑bar apps · in pure Go

Menu​bar apps,
written in Go.

menuet handles the NSStatusBar plumbing — live title, dropdown menu, notifications, global shortcuts, auto‑update — so you write Go and ship a real macOS .app.

$ go get github.com/caseymrm/menuet/v2
Read the docs Browse apps →
MIT licensed·macOS 11+·v2
THE WHOLE PROGRAM

A title, a menu,
one blocking call.

Set what shows in the menu bar with SetMenuState, return your dropdown from Children, then call RunApplication. That’s a working app.

Read the getting‑started guide →
main.go
package main

import "github.com/caseymrm/menuet/v2"

func main() {
    app := menuet.App()
    app.SetMenuState(&menuet.MenuState{
        Title: "Hello World",
    })
    app.Children = func() []menuet.MenuItem {
        return []menuet.MenuItem{
            menuet.Regular{Text: "Refresh", Clicked: refresh},
        }
    }
    app.RunApplication()
}
WHAT YOU GET

Everything a menu‑bar app needs, none of the Objective‑C.

Live, styled titles

Mix weights, colors, monospaced digits and pill badges right in the menu bar with Runs.

MenuState · TextRun

Rich dropdown menus

Rows, separators, checkmarks, subtitles and nested submenus — built from a Go slice.

Regular · Separator · Children

Global shortcuts

Register system‑wide hotkeys that fire even when your app isn’t frontmost.

Shortcut · ModCmd

Notifications & alerts

Native banners with action buttons and inline replies, plus modal dialogs with inputs.

Notification · Alert

Search in the menu

Drop a live search field into your menu — results update on every keystroke.

Search

Auto‑update & launch at login

Pull new releases straight from GitHub and register with macOS Login Items.

AutoUpdate · SMAppService
IN THE WILD

Apps built with menuet.

★ Featured

Sportsbar

Live scores for your teams, right in the menu bar. Tap a game for the play‑by‑play, get notified on scoring plays.

LAL 102 · GSW 98 LIVE how it looks in your bar

Why Awake?

Shows why your Mac can’t sleep — and forces it awake.

github.com/caseymrm/whyawake ↗

Not a Fan

CPU temp & fan speed, with throttle alerts.

github.com/caseymrm/notafan ↗
Built something with menuet? Run make web-preview to generate a menuet-demo.json snapshot, commit it to your repo, and open a PR adding it here.

Ship your menu‑bar app today.

One import, a few dozen lines of Go, and a real signed .app in your menu bar.

$go get github.com/caseymrm/menuet/v2
Read the docs Star on GitHub