Systray
a cross platfrom Go library to place an icon and menu in the notification area
Install / Use
/learn @getlantern/SystrayREADME
systray
systray is a cross-platform Go library to place an icon and menu in the notification area.
Features
- Supported on Windows, macOS, and Linux
- Menu items can be checked and/or disabled
- Most functions may be called from any goroutine
API
func main() {
systray.Run(onReady, onExit)
}
func onReady() {
systray.SetIcon(icon.Data)
systray.SetTitle("Awesome App")
systray.SetTooltip("Pretty awesome超级棒")
mQuit := systray.AddMenuItem("Quit", "Quit the whole app")
// Sets the icon of a menu item. Only available on Mac and Windows.
mQuit.SetIcon(icon.Data)
}
func onExit() {
// clean up here
}
See as well as CHANGELOG.
Note: this package requires cgo, so make sure you set CGO_ENABLED=1 before building.
Try the example app!
Have go v1.12+ or higher installed? Here's an example to get started on macOS:
git clone https://github.com/getlantern/systray
cd systray/example
env GO111MODULE=on go build
./example
On Windows, you should build like this:
env GO111MODULE=on go build -ldflags "-H=windowsgui"
Now look for Awesome App in your menu bar!

The Webview example
The code under webview_example is to demostrate how it can co-exist with other UI elements. Note that the example doesn't work on macOS versions older than 10.15 Catalina.
Platform notes
Linux
- Building apps requires gcc as well as the
gtk3andlibayatana-appindicator3development headers to be installed. For Debian or Ubuntu, you may install these using:
sudo apt-get install gcc libgtk-3-dev libayatana-appindicator3-dev
On Linux Mint, libxapp-dev is also required.
If you need to support the older libappindicator3 library instead, you can pass the build flag legacy_appindicator
when building. For example:
go build -tags=legacy_appindicator
To build webview_example, you also need to install libwebkit2gtk-4.0-dev and remove webview_example/rsrc.syso which is required on Windows.
Windows
- To avoid opening a console at application startup, use these compile flags:
go build -ldflags -H=windowsgui
macOS
On macOS, you will need to create an application bundle to wrap the binary; simply folders with the following minimal structure and assets:
SystrayApp.app/
Contents/
Info.plist
MacOS/
go-executable
Resources/
SystrayApp.icns
When running as an app bundle, you may want to add one or both of the following to your Info.plist:
<!-- avoid having a blurry icon and text -->
<key>NSHighResolutionCapable</key>
<string>True</string>
<!-- avoid showing the app on the Dock -->
<key>LSUIElement</key>
<string>1</string>
Consult the Official Apple Documentation here.
On macOS, it's possible to set the underlying
NSStatusItemBehavior
with systray.SetRemovalAllowed(true). When enabled, the user can cmd-drag the
icon off the menu bar.
Credits
- https://github.com/xilp/systray
- https://github.com/cratonica/trayhost
Related Skills
node-connect
332.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
81.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
332.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
81.7kCommit, push, and open a PR
