a cross platfrom Go library to place an icon and menu in the notification area

Overview

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
  • Methods 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 full API as well as CHANGELOG.

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 example
env GO111MODULE=on go build
./example

On Windows, you should build like this:

env GO111MODULE=on go build -ldflags "-H=windowsgui"

The following text will then appear on the console:

go: finding github.com/skratchdot/open-golang latest
go: finding github.com/getlantern/systray latest
go: finding github.com/getlantern/golog latest

Now look for Awesome App in your menu bar!

Awesome App screenshot

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 gtk3 and libappindicator3 development headers to be installed. For Debian or Ubuntu, you may install these using:
sudo apt-get install gcc libgtk-3-dev libappindicator3-dev

On Linux Mint, libxapp-dev is also required .

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.

Credits

Issues
  • not working on windows

    not working on windows

    ERROR systray: systray_windows.go:795 Unable to set icon: The operation completed successfully. [error=Unable to set icon: %v error_location=github.com/getlantern/systray.SetIcon (systray_windows.go:795) error_op= error_text=Unable to set icon: The operation completed successfully. error_type=errors.Error]
    ERROR systray: systray_windows.go:795   at github.com/getlantern/systray.SetIcon (systray_windows.go:795)
    ERROR systray: systray_windows.go:795   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:63)
    ERROR systray: systray_windows.go:795   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:795   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:795 Caused by: The operation completed successfully.
    ERROR systray: systray_windows.go:853 Unable to set tooltip: Unspecified error [error=Unable to set tooltip: %v error_location=github.com/getlantern/systray.SetTooltip (systray_windows.go:853) error_op= error_text=Unable to set tooltip: Unspecified error error_type=errors.Error]
    ERROR systray: systray_windows.go:853   at github.com/getlantern/systray.SetTooltip (systray_windows.go:853)
    ERROR systray: systray_windows.go:853   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:64)
    ERROR systray: systray_windows.go:853   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:853   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:853 Caused by: Unspecified error
    ERROR systray: systray_windows.go:861 Unable to addOrUpdateMenuItem: Invalid menu handle. [error=Unable to addOrUpdateMenuItem: %v error_location=github.com/getlantern/systray.addOrUpdateMenuItem (systray_windows.go:861) error_op= error_text=Unable to addOrUpdateMenuItem: Invalid menu handle. error_type=errors.Error]
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.addOrUpdateMenuItem (systray_windows.go:861)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.(*MenuItem).update (systray.go:192)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.AddMenuItem (systray.go:114)
    ERROR systray: systray_windows.go:861   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:66)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:861   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:861 Caused by: Invalid menu handle.
    ERROR systray: systray_windows.go:831 Unable to load icon from temp file: The operation completed successfully. [error=Unable to load icon from temp file: %v error_location=github.com/getlantern/systray.(*MenuItem).SetIcon (systray_windows.go:831) error_op= error_text=Unable to load icon from temp file: The operation completed successfully. error_type=errors.Error]
    ERROR systray: systray_windows.go:831   at github.com/getlantern/systray.(*MenuItem).SetIcon (systray_windows.go:831)
    ERROR systray: systray_windows.go:831   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:67)
    ERROR systray: systray_windows.go:831   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:831   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:831 Caused by: The operation completed successfully.
    ERROR systray: systray_windows.go:861 Unable to addOrUpdateMenuItem: Invalid menu handle. [error=Unable to addOrUpdateMenuItem: %v error_location=github.com/getlantern/systray.addOrUpdateMenuItem (systray_windows.go:861) error_op= error_text=Unable to addOrUpdateMenuItem: Invalid menu handle. error_type=errors.Error]
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.addOrUpdateMenuItem (systray_windows.go:861)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.(*MenuItem).update (systray.go:192)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.AddMenuItem (systray.go:114)
    ERROR systray: systray_windows.go:861   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:69)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:861   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:861 Caused by: Invalid menu handle.
    ERROR systray: systray_windows.go:831 Unable to load icon from temp file: The operation completed successfully. [error=Unable to load icon from temp file: %v error_location=github.com/getlantern/systray.(*MenuItem).SetIcon (systray_windows.go:831) error_op= error_text=Unable to load icon from temp file: The operation completed successfully. error_type=errors.Error]
    ERROR systray: systray_windows.go:831   at github.com/getlantern/systray.(*MenuItem).SetIcon (systray_windows.go:831)
    ERROR systray: systray_windows.go:831   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:70)
    ERROR systray: systray_windows.go:831   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:831   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:831 Caused by: The operation completed successfully.
    ERROR systray: systray_windows.go:861 Unable to addOrUpdateMenuItem: Invalid menu handle. [error=Unable to addOrUpdateMenuItem: %v error_location=github.com/getlantern/systray.addOrUpdateMenuItem (systray_windows.go:861) error_op= error_text=Unable to addOrUpdateMenuItem: Invalid menu handle. error_type=errors.Error]
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.addOrUpdateMenuItem (systray_windows.go:861)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.(*MenuItem).update (systray.go:192)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.AddMenuItem (systray.go:114)
    ERROR systray: systray_windows.go:861   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:72)
    ERROR systray: systray_windows.go:861   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:861   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:861 Caused by: Invalid menu handle.
    ERROR systray: systray_windows.go:831 Unable to load icon from temp file: The operation completed successfully. [error=Unable to load icon from temp file: %v error_location=github.com/getlantern/systray.(*MenuItem).SetIcon (systray_windows.go:831) error_op= error_text=Unable to load icon from temp file: The operation completed successfully. error_type=errors.Error]
    ERROR systray: systray_windows.go:831   at github.com/getlantern/systray.(*MenuItem).SetIcon (systray_windows.go:831)
    ERROR systray: systray_windows.go:831   at github.com/mangalaman93/giggle/tray.(*GTray).OnReady (tray.go:73)
    ERROR systray: systray_windows.go:831   at github.com/getlantern/systray.Register.func2 (systray.go:89)
    ERROR systray: systray_windows.go:831   at runtime.goexit (asm_amd64.s:1373)
    ERROR systray: systray_windows.go:831 Caused by: The operation completed successfully.
    
    opened by mangalaman93 9
  • Windows SetTooltip invalid memory address

    Windows SetTooltip invalid memory address

    PS C:\Users\Simon\go\src\github.com\psidex\EACS> go run .\cmd\test\main.go
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal 0xc0000005 code=0x0 addr=0x0 pc=0x6608e6]
    
    goroutine 6 [running]:
    github.com/getlantern/systray.(*winTray).setTooltip(0x921fa0, 0x6f6138, 0x1d, 0xc000086058, 0xc0000311b8)
            C:/Users/Simon/go/pkg/mod/github.com/getlantern/[email protected]/systray_windows.go:226 +0x66
    github.com/getlantern/systray.SetTooltip(0x6f6138, 0x1d)
            C:/Users/Simon/go/pkg/mod/github.com/getlantern/[email protected]/systray_windows.go:852 +0x4c
    main.OnReady()
            C:/Users/Simon/go/src/github.com/psidex/EACS/cmd/test/main.go:8 +0x3d
    github.com/getlantern/systray.Register.func2(0xc000014180, 0x706528)
            C:/Users/Simon/go/pkg/mod/github.com/getlantern/[email protected]/systray.go:91 +0x45
    created by github.com/getlantern/systray.Register
            C:/Users/Simon/go/pkg/mod/github.com/getlantern/[email protected]/systray.go:89 +0xe3
    exit status 2
    

    here is the contents of main.go:

    package main
    
    import (
    	"github.com/getlantern/systray"
    )
    
    func OnReady() {
    	systray.SetTooltip("This is the tooltip text")
    }
    
    func OnExit() {
    	// No cleanup needed.
    }
    
    func main() {
    	systray.Run(OnReady, OnExit)
    }
    
    
    opened by psidex 7
  • Systray requires admin-rights on Windows when installed in program files

    Systray requires admin-rights on Windows when installed in program files

    With the current version of systray, I cannot run my installed application on Windows without administrative permissions. Reason: Systray attempts to store the icon file inside the application directory.

    panic: Unable to save icon to disk: open C:\Program Files[MyApp]\systray.78ab1d2dac477997ecd76010880359c7.ico: Access is denied.

    goroutine 34 [running]: github.com/getlantern/systray.fail(...) C:/Users/venoran/nextcloud/go/src/github.com/getlantern/systray/systray_windows.go:218

    Looking through commits for systray, it appears that previously the temp directory was used to store icon files. This worked because it does not require elevated permissions in Windows.

    If it is necessary to read icon files from disk, I could place icon files in the application directory myself during installation and systray could read those. Alternatively, using an option for using temp (or any specified) directory would also work for me as I could use user-accessible dirs.

    Is this is a known issue? Am I doing something wrong?

    Any feedback would be appreciated. Thank you for working on this. It is a great help to me.

    opened by netras 6
  • OSX Mojave warnings...

    OSX Mojave warnings...

    Upgraded my laptop to Mojave and I am getting the following warnings:

    vendor/github.com/getlantern/systray

    systray_darwin.m:67:15: warning: 'setImage:' is deprecated: first deprecated in macOS 10.14 - Use the receiver's button.image instead [-Wdeprecated-declarations] /System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:85:39: note: property 'image' is declared deprecated here /System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:85:39: note: 'setImage:' has been explicitly marked deprecated here systray_darwin.m:71:15: warning: 'setTitle:' is deprecated: first deprecated in macOS 10.14 - Use the receiver's button.title instead [-Wdeprecated-declarations] /System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:83:38: note: property 'title' is declared deprecated here /System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:83:38: note: 'setTitle:' has been explicitly marked deprecated here systray_darwin.m:75:15: warning: 'setToolTip:' is deprecated: first deprecated in macOS 10.14 - Use the receiver's button.toolTip instead [-Wdeprecated-declarations] /System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:89:38: note: property 'toolTip' is declared deprecated here /System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:89:38: note: 'setToolTip:' has been explicitly marked deprecated here systray_darwin.m:105:24: warning: 'NSOnState' is deprecated: first deprecated in macOS 10.14 [-Wdeprecated-declarations] /System/Library/Frameworks/AppKit.framework/Headers/NSCell.h:80:34: note: 'NSOnState' has been explicitly marked deprecated here systray_darwin.m:107:24: warning: 'NSOffState' is deprecated: first deprecated in macOS 10.14 [-Wdeprecated-declarations] /System/Library/Frameworks/AppKit.framework/Headers/NSCell.h:79:34: note: 'NSOffState' has been explicitly marked deprecated here

    opened by pknudsgaard 6
  • undefined functions

    undefined functions

    ../../go/pkg/mod/github.com/getlantern/[email protected]/systray.go:81:2: undefined: nativeLoop ../../go/pkg/mod/github.com/getlantern/[email protected]/systray.go:87:3: undefined: quit ../../go/pkg/mod/github.com/getlantern/[email protected]/systray.go:105:2: undefined: addSeparator ../../go/pkg/mod/github.com/getlantern/[email protected]/systray.go:139:2: undefined: hideMenuItem ../../go/pkg/mod/github.com/getlantern/[email protected]/systray.go:144:2: undefined: showMenuItem ../../go/pkg/mod/github.com/getlantern/[email protected]/systray.go:169:2: undefined: addOrUpdateMenuItem make: *** [linux] Error 2

    opened by jsmyb 5
  • Not working from inside a goroutine

    Not working from inside a goroutine

    In my app, I'm trying to run 3 goroutines:

    • http listner
    • ui using lorca
    • systray Both http listner and lorca ui are working fine, but the systray is not executed, my code is:
    var ui lorca.UI
    var err error
    
    func main() {
    	go func() {
    	systray.Run(onReady, onExit)
    	}()
    	// Start Host goroutine
    	go func() {
    
    		http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./public"))))
    		http.HandleFunc("/", index)
    		http.ListenAndServe(":8090", nil)
    	}()
    
    	// Start UI
    	ui, err = lorca.New("http://localhost:8090/", "", 1200, 800)
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer ui.Close()
    	ui.Bind("setLanguage", func(data string) {
    		// perform the server side task here
    		fmt.Println(data)
    	})
    
    	<-ui.Done()
    }
    

    If I tried to execute systray.Run(onReady, onExit) without goroutine, then the systray is working fine, but blocking the other 2 goroutines frombing executed!

    I'm running my code at MacBook Air macOS Big Sur Version 11.2.2

    opened by hasanAjsf 5
  • Add cross-compilation support for Windows

    Add cross-compilation support for Windows

    This branch adds cross-compilation support for Windows by building the Windows functionality into a DLL and loading that dynamically from the Go code.

    opened by oxtoacart 5
  • Can we get MacOS M1 support?

    Can we get MacOS M1 support?

    I'd like to create binaries for M1 users, but this library does not seem to compile against darwin+arm64 (MacOS M1). I'll be forever grateful if this feature can be added.

    Thank you!


    Reproduction steps:

    $ git clone [email protected]:getlantern/systray.git
    $ cd systray
    $ GOOS=darwin GOARCH=arm64 go build .
    

    Output:

    # github.com/getlantern/systray
    ./systray.go:78:2: undefined: nativeLoop
    ./systray.go:106:2: undefined: registerSystray
    ./systray.go:111:14: undefined: quit
    ./systray.go:136:2: undefined: addSeparator
    ./systray.go:190:2: undefined: hideMenuItem
    ./systray.go:195:2: undefined: showMenuItem
    ./systray.go:220:2: undefined: addOrUpdateMenuItem
    
    opened by davidnewhall 4
  • Spacing between icons changes (Monterey, M1 Mac with Notch)

    Spacing between icons changes (Monterey, M1 Mac with Notch)

    The distance between the icons in the menubar changes as soon as a program is started with this lib. This seems to occur only on monterey and new M1 models with notch. Intel models with the same OS version do not have this problem. Here screenshots without and with systray. Before starting systray app: without_systray After starting systray app: with_systray

    Any Idea?

    opened by schreibe72 4
  • Fix build on debian 11 and Ubuntu20.04

    Fix build on debian 11 and Ubuntu20.04

    On Ubuntu20.04, exec go build in example dir failed:

    go build 
    # pkg-config --cflags  -- ayatana-appindicator3-0.1 gtk+-3.0 appindicator3-0.1
    Package appindicator3-0.1 was not found in the pkg-config search path.
    Perhaps you should add the directory containing `appindicator3-0.1.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'appindicator3-0.1' found
    pkg-config: exit status 1
    

    The PR fixed this issue. And I tested on Ubuntu18.04 which was worked.

    opened by nange 3
  • Fix hiding/showing items with submenus on Windows

    Fix hiding/showing items with submenus on Windows

    Calling Hide() on a menu item with a submenu would call DeleteMenu, which deletes both the item and the submenu. The submenu would then get lost when calling Show() again.

    Switch to RemoveMenu, which only deletes the item, preserving the menu for Show() to resurrect.

    (This already works as expected on Linux, haven't been able to test macOS.)

    opened by simonlindholm 3
  • Terminating process leaves icon visible

    Terminating process leaves icon visible

    (Run on Win 11)

    When I terminate the go application - the tray icon is left visible in the sys tray (possibly off screen) and will remain there until mouse over - it then disappears. This happens when:

    • the application is built, then the 'exe' is run from the command line, then Ctrl-C used to kill the application. Note that the application is removed from the Task Manager
    • or using VS Code to stop/restart the application

    If I run the application several times and keep restarting, a new icon is generated every time - where only the latest one is a valid running application.

    Note: this is not to do with properly exited (quit) applications - which works fine - but when the process is terminated, it seems the icon is not tidied up.

    opened by andrewfstratton 4
  • GLib-GIO-CRITICAL **: 09:06:18.363: g_dbus_proxy_new: assertion 'G_IS_DBUS_CONNECTION (connection)' failed

    GLib-GIO-CRITICAL **: 09:06:18.363: g_dbus_proxy_new: assertion 'G_IS_DBUS_CONNECTION (connection)' failed

    If you run the example, you will get a message like this: "GLib-GIO-CRITICAL **: 09:06:18.363: g_dbus_proxy_new: assertion 'G_IS_DBUS_CONNECTION (connection)' failed"

    The process is active, but the icon is not displayed. The problem is that it happens intermittently. An issue with fcitx has been reported. But fcitx is not installed.

    Has anyone experienced the same problem?

    on debian11

    opened by pdj1010 0
  • Documentation: SetIcon on Windows must be a .ico file otherwise LoadImageW returns 0x0 and error DNS_ERROR_RCODE_NO_ERROR

    Documentation: SetIcon on Windows must be a .ico file otherwise LoadImageW returns 0x0 and error DNS_ERROR_RCODE_NO_ERROR

    I spent a bit of time debugging this and trying things so it's worth mentioning in the docs. Issue title for SEO to help others who may run into this.

    On mac you can have an optional .png as an icon, but Windows requires an icon (in order to call other APIs, such as Shell_NotifyIcon the icon must be present)

    Hopefully this helps someone!

    opened by Southclaws 0
  • Feature: Click callbacks

    Feature: Click callbacks

    I've added callback functions for mouse left/right click events to fit customization. Examples and README are also adjusted. It works on my project as intended but I'm unable to test if it works on platforms other than windows.

    P.S double clicks are not added cuz the lParam const value is not defined and I cannot find it from the doc in comments. Maybe we should customize and implement dbclick by calculating intervals between clicks ourselves?

    P.S this PR would break original codes cuz two more callbacks are added to Run() and Register(), so it should be carefully notified when making a new release.

    opened by Purple-CSGO 0
  • Windows: execute event handler on the UI thread

    Windows: execute event handler on the UI thread

    Hi all,

    probably it's too long since I've seen a message pump. However, I need some advice on how to execute something like ShowWindow(...) on the UI thread. The issue is that Windows won't bring the intended window to the foreground as a reaction to a menu item click. I speculate that Windows don't activate the window, b/c it's not the UI thread (it's some plain go routine) that calls ShowWindow().

    I took a look at the implementation but couldn't find an API entry point to execute sth on the UI thread, i.e. the go routine running the message pump. What have I overlooked?

    I guess, if such a thing is indeed needed, it could be a chan func() on systray, probably systray.Post. Its receiver could send the received closure to a 2nd chan func() and send a user message to the tray window as a signal. The window proc then receives this signal-user-message, receives the closure form the second chan and calls it. It's then executed on the UI thread and everything is fine.

    A caller could use e.g. systray.Post <- func() { ShowWindow(sth, 1) } to finally execute ShowWindow(sth, 1) within the window proc.

    Thank you, treasured reader Martin


    To illustrate a very similar kind of threading issue, see e.g. https://weblog.west-wind.com/posts/2020/Oct/12/Window-Activation-Headaches-in-WPF where the author struggles with WPF and its threads. All hails to the mighty .Net dispatcher architecture.

    opened by Lercher 0
Owner
Lantern
Lantern
Linux port of tailscale system tray menu.

tailscale-systray Linux port of tailscale system tray menu. Usage $ tailscale-systray Requirements tailscale Installation Building app require gcc, l

mattn 103 Aug 9, 2022
Tiny cross-platform webview library for C/C++/Golang. Uses WebKit (Gtk/Cocoa) and Edge (Windows)

webview A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. Also, there are Rust bindings, Python bindings, Ni

webview 10.3k Aug 6, 2022
Go cross-platform library for displaying dialogs and input boxes

dlgs dlgs is a cross-platform library for displaying dialogs and input boxes. Installation go get -u github.com/gen2brain/dlgs Documentation Document

Milan Nikolic 364 Aug 4, 2022
Tiny cross-platform webview library for C/C++/Golang. Uses WebKit (Gtk/Cocoa) and Edge (Windows)

webview A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. Also, there are Rust bindings, Python bindings, Ni

webview 10.3k Aug 5, 2022
An experimental Go cross platform UI library.

GXUI - A Go cross platform UI library. Notice: Unfortunately due to a shortage of hours in a day, GXUI is no longer maintained. If you're looking for

Google 4.5k Aug 3, 2022
Cross-platform Go/Golang GUI library.

中文 | English GoVCL Cross-platform Golang GUI library, The core binding is liblcl, a common cross-platform GUI library created by Lazarus. GoVCL is a n

不在乎y 1.6k Aug 12, 2022
Build cross platform GUI apps with GO and HTML/JS/CSS (powered by Electron)

Thanks to go-astilectron build cross platform GUI apps with GO and HTML/JS/CSS. It is the official GO bindings of astilectron and is powered by Electr

Quentin Renard 4.5k Aug 3, 2022
Build cross platform GUI apps with GO and HTML/JS/CSS (powered by nwjs)

gowd Build cross platform GUI apps with GO and HTML/JS/CSS (powered by nwjs) How to use this library: Download and install nwjs Install this library g

Danny 370 Aug 4, 2022
Cross-platform GUI for go is never this easy and clean.

gimu Strongly suggest NOT to use this project anymore, the auto-generated cgo wrapper of Nuklear has a random crash issue which is hard to fix (becaus

Allen Dang 66 Jul 12, 2022
Cross platform GUI in Go based on Material Design

About Fyne is an easy to use UI toolkit and app API written in Go. It is designed to build applications that run on desktop and mobile devices with a

Fyne.io 17.8k Aug 4, 2022
Build cross-platform modern desktop apps in Go + HTML5

Lorca A very small library to build modern HTML5 desktop apps in Go. It uses Chrome browser as a UI layer. Unlike Electron it doesn't bundle Chrome in

Serge Zaitsev 7.4k Aug 12, 2022
RobotGo, Go Native cross-platform GUI automation @vcaesar

Robotgo Golang Desktop Automation. Control the mouse, keyboard, bitmap, read the screen, Window Handle and global event listener. RobotGo supports Mac

vgo 7.7k Aug 5, 2022
A cross-platform app-development module for Go.

The cross-platform Go module for building apps (pronounced klo-va-seed). Usecases As a lightweight alternative to Electron Write your frontend and nat

Qlova Limited 95 Aug 3, 2022
pure go, cross-platform, MIT-licensed ui toolkit for developers

duit - developer ui toolkit WARNING: this library is work in progress. backwards incompatible changes will be made. details duit is a pure go (*), cro

Mechiel Lukkien 856 Aug 3, 2022
Cross platform rapid GUI framework for golang based on Dear ImGui.

giu Cross platform rapid GUI framework for golang based on Dear ImGui and the great golang binding imgui-go. Any contribution (features, widgets, tuto

Allen Dang 1.5k Aug 8, 2022
Cross-Platform GUI Framework for Go

⚠️ I'm currently working on this project as part of my master's thesis at the Berlin University of Applied Sciences and Technology. It is under active

Jannis Rieger 2 Jun 29, 2022
Kita is a declarative, reactive GUI toolkit for build cross platform apps with web technology with single codebase

Kita is a declarative, reactive GUI toolkit for build cross platform apps with web technology with single codebase. Inspired by Flutter, React. S

zhuah 106 Apr 18, 2022
UIKit - A declarative, reactive GUI toolkit for build cross platform apps with web technology with single codebase

UIKit - A declarative, reactive GUI toolkit for build cross platform apps with web technology with single codebase

zhuah 106 Apr 18, 2022
A utility library to make use of the X Go Binding easier. (Implements EWMH and ICCCM specs, key binding support, etc.)

xgbutil is a utility library designed to work with the X Go Binding. This project's main goal is to make various X related tasks easier. For example,

Andrew Gallant 181 Jul 20, 2022