GUI toolkit for go

Overview

Mostly-immediate-mode GUI library for Go. Source port to go of an early version of nuklear.

⚠️ Subject to backwards incompatible changes. ⚠️

⚠️ Feature requests unaccompanied by an implementation will not be serviced. ⚠️

Documentation

See godoc, _examples/simple/main.go and _examples/overview/main.go for single window examples, _examples/demo/demo.go for a multi-window example, and gdlv for a more complex application built using nucular.

Screenshots

Overview Gdlv

Backend

Nucular uses build tags to select its backend:

go build -tags nucular_gio

Selects the gio backend.

go build -tags nucular_shiny

Selects the shiny backend.

go build -tags nucular_shiny,metal

Selects the shiny backend but uses metal to render on macOS.

By default shiny is used on all operating systems except macOS and Windows, where gio is used.

Issues
  • Closing window on macOS.

    Closing window on macOS.

    Hey. As mentioned in #25 window can be closed like so:

    func update(w *nucular.Window) {
        w.Row(50).Dynamic(1)
        if w.ButtonText("Close window!") {
            go w.Master().Close()
        }
    }
    

    This does close main window indeed, but keeps the MasterWindow.Main function looping forever. Is there any way to completely stop window routine and pass control past call to Main?

    Also possibly related: default macOS menubar hotkeys do not seem to trigger when window is open. Do I have to manually provide menubar hotkey checks?

    Thanks in advance.

    opened by dexter3k 8
  • Proportional fonts?

    Proportional fonts?

    I see that demos exclusively make use of monospaced font. Currently it uses DroidSansMono.ttf, would it work (said differently "is it tested?") with a font not mono. like ie DroidSans.ttf not monospaced?

    opened by boussou 5
  • Error trying to run overview and demo examples

    Error trying to run overview and demo examples

    Go compiles successfully the overview and demo examples, but when I try to run the binaries I get error. I have no problem running the simple example.

    Here the output of the console when trying to run overview.exe:

    overview.exe Exception 0xc000001d 0x0 0x0 0x52ed6c PC=0x52ed6c

    github.com/aarzilli/nucular.drawFillOver_SIMD_internal(0x4a17e1c, 0x80dc, 0x81e8, 0x1200, 0x1f, 0x30300000000a, 0x6f6f00005353) C:/Users/Katie/go/src/github.com/aarzilli/nucular/drawfillover_amd64.s:37 +0x1c github.com/aarzilli/nucular.drawFillOver(0xc0000340c0, 0xbe, 0xe, 0x101, 0x2d, 0x535300003030, 0xf5f500006f6f) C:/Users/Katie/go/src/github.com/aarzilli/nucular/drawfillover_amd64.go:13 +0xdb github.com/aarzilli/nucular.drawFill(0xc0000340c0, 0xbe, 0xe, 0x101, 0x2d, 0xc00001a0a0, 0xbe, 0xe, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/context.go:999 +0x1f5 github.com/aarzilli/nucular.(*context).Draw(0xc00009c000, 0xc00018e020, 0x2b) C:/Users/Katie/go/src/github.com/aarzilli/nucular/context.go:445 +0xdc8 github.com/aarzilli/nucular.(*masterWindow).draw(0xc0000a2000, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:487 +0x179 github.com/aarzilli/nucular.(*masterWindow).updateLocked(0xc0000a2000) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:379 +0x220 github.com/aarzilli/nucular.(*masterWindow).handleEventLocked(0xc0000a2000, 0x5730c0, 0xc00004618c, 0xc000186001) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:188 +0x24b github.com/aarzilli/nucular.(*masterWindow).main(0xc0000a2000, 0x5c9020, 0x6d8f00) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:172 +0x230 github.com/aarzilli/nucular.(*masterWindow).main-fm(0x5c9020, 0x6d8f00) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:128 +0x45 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver.Main.func1() C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver/windriver.go:22 +0x44 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32.screenWindowWndProc.func1() C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/win32.go:298 +0x30 created by github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32.screenWindowWndProc C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/win32.go:297 +0x123

    goroutine 1 [syscall, locked to thread]: syscall.Syscall6(0x7ffe398d1ae0, 0x4, 0xc00006be70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) C:/Go/src/runtime/syscall_windows.go:185 +0xfc github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32._GetMessage(0xc00006be70, 0x0, 0x0, 0x1, 0x0, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/zsyscall_windows.go:184 +0x90 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32.Main(0xc00003a440, 0x0, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/win32.go:479 +0x122 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver.Main(0xc00003a430) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver/windriver.go:22 +0x62 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver.main(0xc00003a430) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/driver_windows.go:13 +0x32 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver.Main(0xc00003a430) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/driver.go:24 +0x32 github.com/aarzilli/nucular.(*masterWindow).Main(0xc0000a2000) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:128 +0x5e main.main() C:/Users/Katie/go/src/github.com/aarzilli/nucular/_examples/overview/main.go:40 +0x11b

    goroutine 4 [semacquire]: sync.runtime_SemacquireMutex(0xc0000a22a4, 0xc00017ff00) C:/Go/src/runtime/sema.go:71 +0x44 sync.(*Mutex).Lock(0xc0000a22a0) C:/Go/src/sync/mutex.go:134 +0x106 github.com/aarzilli/nucular.(*masterWindow).updater.func1(0xc0000a2000, 0xc00017ffc7) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:329 +0x55 github.com/aarzilli/nucular.(*masterWindow).updater(0xc0000a2000) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:349 +0x43 created by github.com/aarzilli/nucular.(*masterWindow).main C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:167 +0x1b7 rax 0xf5f5 rbx 0x1200 rcx 0x6f6f rdi 0xe rsi 0x80dc rbp 0xc00005f828 rsp 0xc00005f7e0 r8 0x81e8 r9 0x4a17e1c r10 0xbe r11 0xc00005f8d0 r12 0xbe r13 0xe r14 0x80dc r15 0x81e8 rip 0x52ed6c rflags 0x10216 cs 0x33 fs 0x53 gs 0x2b

    And the output when trying to run demo.exe:

    demo.exe Exception 0xc000001d 0x0 0x0 0x53a53c PC=0x53a53c

    github.com/aarzilli/nucular.drawFillOver_SIMD_internal(0x4b20000, 0x360c, 0x3c34, 0x1200, 0x25, 0x333300000023, 0x383800003333) C:/Users/Katie/go/src/github.com/aarzilli/nucular/drawfillover_amd64.s:37 +0x1c github.com/aarzilli/nucular.drawFillOver(0xc000034100, 0x3, 0x3, 0x18d, 0x28, 0x333300003333, 0xdcdc00003838) C:/Users/Katie/go/src/github.com/aarzilli/nucular/drawfillover_amd64.go:13 +0xdb github.com/aarzilli/nucular.drawFill(0xc000034100, 0x3, 0x3, 0x18d, 0x28, 0xc00001a050, 0x3, 0x3, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/context.go:999 +0x1f5 github.com/aarzilli/nucular.(*context).Draw(0xc000090000, 0xc000184020, 0x1d) C:/Users/Katie/go/src/github.com/aarzilli/nucular/context.go:445 +0xdc8 github.com/aarzilli/nucular.(*masterWindow).draw(0xc000096000, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:487 +0x179 github.com/aarzilli/nucular.(*masterWindow).updateLocked(0xc000096000) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:379 +0x220 github.com/aarzilli/nucular.(*masterWindow).handleEventLocked(0xc000096000, 0x588920, 0xc0000460da, 0xc00017e001) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:188 +0x24b github.com/aarzilli/nucular.(*masterWindow).main(0xc000096000, 0x5e2c80, 0x6ff320) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:172 +0x230 github.com/aarzilli/nucular.(*masterWindow).main-fm(0x5e2c80, 0x6ff320) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:128 +0x45 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver.Main.func1() C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver/windriver.go:22 +0x44 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32.screenWindowWndProc.func1() C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/win32.go:298 +0x30 created by github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32.screenWindowWndProc C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/win32.go:297 +0x123

    goroutine 1 [syscall, locked to thread]: syscall.Syscall6(0x7ffe398d1ae0, 0x4, 0xc00006bdf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...) C:/Go/src/runtime/syscall_windows.go:185 +0xfc github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32._GetMessage(0xc00006bdf8, 0x0, 0x0, 0x1, 0x0, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/zsyscall_windows.go:184 +0x90 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32.Main(0xc00003a460, 0x0, 0x0) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/internal/win32/win32.go:479 +0x122 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver.Main(0xc00003a450) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/windriver/windriver.go:22 +0x62 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver.main(0xc00003a450) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/driver_windows.go:13 +0x32 github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver.Main(0xc00003a450) C:/Users/Katie/go/src/github.com/aarzilli/nucular/vendor/golang.org/x/exp/shiny/driver/driver.go:24 +0x32 github.com/aarzilli/nucular.(*masterWindow).Main(0xc000096000) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:128 +0x5e main.main() C:/Users/Katie/go/src/github.com/aarzilli/nucular/_examples/demo/demo.go:124 +0x3de

    goroutine 4 [semacquire]: sync.runtime_SemacquireMutex(0xc0000962a4, 0xc000127f00) C:/Go/src/runtime/sema.go:71 +0x44 sync.(*Mutex).Lock(0xc0000962a0) C:/Go/src/sync/mutex.go:134 +0x106 github.com/aarzilli/nucular.(*masterWindow).updater.func1(0xc000096000, 0xc000127fc7) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:329 +0x55 github.com/aarzilli/nucular.(*masterWindow).updater(0xc000096000) C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:349 +0x43 created by github.com/aarzilli/nucular.(*masterWindow).main C:/Users/Katie/go/src/github.com/aarzilli/nucular/shiny.go:167 +0x1b7 rax 0xdcdc rbx 0x1200 rcx 0x3838 rdi 0x3 rsi 0x360c rbp 0xc00005f828 rsp 0xc00005f7e0 r8 0x3c34 r9 0x4b20000 r10 0x3 r11 0xc00005f8d0 r12 0x3 r13 0x3 r14 0x360c r15 0x3c34 rip 0x53a53c rflags 0x10202 cs 0x33 fs 0x53 gs 0x2b

    I'm using windows 10, 64 bits.

    opened by JustKatie 5
  • Will it plan to support mobile platform?

    Will it plan to support mobile platform?

    Hi,

    It is great to see so nice GUI with pure go, in a relatively simple code base. Is there any example using it on mobile (IOS/Andriod) platform? gomobile should have this support but I am so new a gopher that I can't do it by myself.

    Thanks

    opened by ajeecai 5
  • GUI _demo stalls on OSX

    GUI _demo stalls on OSX

    the GUI stalls on OSX as soon as its opened. This results in the beachball from hell.

    I dont have time to look into whats going on. Am away, but wanted to raise this.

    opened by ghost 5
  • Build break on macOS due to braking changes in gioui.org/op

    Build break on macOS due to braking changes in gioui.org/op

    While installing github.com/aarzilli/gdlv on macOS the installation is failing due to build break in github.com/aarzilli/nucular due to breaking changes (ref: ae2c74ec) in gioui.org/op.

    ae2c74ec — Elias Naur a month ago
    op: relax Push/Pop to Save/Restore semantics
    
    A previous change implemented save/restore semantics where a saved
    state can be restored anywhere, not just in a stack-like manner.
    
    This change similarly relaxes the exported Push/Pop operations; the next
    change will rename them accordingly.
    
    Signed-off-by: Elias Naur <[email protected]>
    
    $ go get -u github.com/aarzilli/gdlv 
    # github.com/aarzilli/nucular
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:357:12: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:384:19: undefined: op.StackOp
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:394:19: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:401:13: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:457:13: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:486:13: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:503:13: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:524:13: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:652:11: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:666:12: undefined: op.Push
    go/pkg/mod/github.com/aarzilli/[email protected]/gio.go:666:12: too many errors
    

    $ go version go version go1.16 darwin/arm64

    opened by zdima 4
  • TextEditor, print

    TextEditor, print "squares" if press some keys.

    Fixed extra chars in #39 but if press any of keys :

    • "Alt Gr."
    • "block uppercase"
    • "numerical block"
    • Any operation symbol key "+ - * /" in numerical block

    TextEditor, print a "square".

    Thank you again.

    Originally posted by @waltrapa in https://github.com/aarzilli/nucular/issues/39#issuecomment-487322994

    opened by waltrapa 4
  • Platform dependencies, a decline from Nuklear philosophy

    Platform dependencies, a decline from Nuklear philosophy

    Hello!

    First, thanks for the project, I'm a big fan of using Go outside its server-side niche, and this project contributes to spread this idea. The Nuklear UI toolkit is an example how to properly design GUI toolkits, it's indeed a good source of inspiration for us, gophers, too.

    But what I'm concerned about is the fact that some of crucial Nuklear ideas been ignored in this port, for example, no dependencies on the OS / platform. Nuklear handles UI without relying on the platform implementation, and that's a huge deal. Nucular as opposite, embeds platform integration code within, makes it harder to port on different platforms. Actually, it relies on /x/mobile for platform integration, the project that is very close to the Go upstream and is very conservative on features and development.

    I'm just concerned that even this project develops fast, it will be limited by platform support, soon or later, so better be thinking about backend decoupling at some nearest future.

    (just my thoughts)

    opened by xlab 4
  • build ?

    build ?

    Not usre how to build the demo.

    Also the vendoring.. What are you using ? So i can also do it.

    x-MacBook-Pro:_demo apple$ go build demo.go

    command-line-arguments

    ./demo.go:43: undefined: calcDemo ./demo.go:47: undefined: newOverviewDemo

    opened by joeblew99 4
  • TextEditor doesn't support Chinese character.

    TextEditor doesn't support Chinese character.

    I loaded the chinese font and set it to style.Font, display only widgets (e.g. Label, ButtonText, etc...) works fine, but TextEditor seems doesn't support do neither display or input Chinese characters.

    I set the flags of TextEditor to nucular.EditField.

    For input, after I switched my system input method to Chinese PinYin, every key strokes will input directly as English character.

    For copy-paste, all Chinese characters will be shown as square like below.

    Here shows how it looks like: 截屏2019-12-10下午10 00 23

    My OS is MacOS v10.15.1, go version 1.13.4, nucular is latest from main branch.

    Feature Request 
    opened by AllenDang 3
  • Input events for

    Input events for "active" Window?

    I've been trying to figure out how to solve a problem when handling inputs between 2 GroupList items, within two different Group windows of the master window. I had assumed (maybe incorrectly) that the Window.Input() is scoped to that particular window, but it seems that when I copy the demo example of handling up/down arrows for the list navigation, both lists in the different windows see the input and navigate.

    Is there a particular pattern for handling the input events of the "active" window with focus? I tried to see if this was a Nuklear concept and came across this issue: https://github.com/vurtun/nuklear/issues/107 Seems that nk_item_any_active() was added as a way to determine if a given window has the active focus. Is there something like this in nucular?

    Thanks for this cool GUI framework.

    opened by justinfx 3
  • rowConstructor Static() modifies original slice

    rowConstructor Static() modifies original slice

    func (ctr *rowConstructor) Static(width ...int) {
    	for i := range width {
    		width[i] = ctr.win.ctx.scale(width[i])
    	}
    ...
    

    If called with slice - this slice is modified.

    This leads to bug - values scales on each call.

    opened by funvit 0
  • How to center the master window in screen?

    How to center the master window in screen?

    Just one simple question, is there an existing way to center the master window in screen?

    If the answer is no, I may need to tweak the shiny/driver layer to archive it.

    I'm digging GUI framework for go recently. From imgui->imgui-go->nuklear->golang-ui/nuklear all the way down to nucular. I think I just found the one I'm looking for!

    Thanks for your effort. It's a really good job!

    Feature Request 
    opened by AllenDang 1
  • Can't disable Resizing on MasterWindow

    Can't disable Resizing on MasterWindow

    I can't appear to find any toggle or flag which may disable resizing on the MasterWindow

    Viewing the overview example, it appears that the nucular.WindowScalable flag should disable resizing but it does not seem to affect the MasterWindow

    Feature Request 
    opened by artman41 2
  • nucular.TextEditor context menu improvements

    nucular.TextEditor context menu improvements

    I wish there could be a way to disable Find... context menu completely. I see there is a EditNoContextMenu flag available, but I can't find any usage of it.

    Also enabling Copy item without enabling EditClipboard flag would be nice.

    Thanks.

    Feature Request 
    opened by dexter3k 0
Owner
Alessandro Arzilli
silence is foo
Alessandro Arzilli
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
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.5k Jun 24, 2022
Go wrapper around the Iup GUI toolset

Iup Go Wrapper iup is a Go wrapper around the Iup GUI toolkit. The project was started on April 27, 2011. Fork https://github.com/grd/iup is a fork of

grd 24 Nov 28, 2020
Platform-native GUI library for Go.

ui: platform-native GUI library for Go This is a library that aims to provide simple GUI software development in Go. It is based on my libui, a simple

Pietro Gagliardi 8.1k Jun 21, 2022
Go Wrapper for the wxWidgets GUI

This is the source code for wxGo a Go wrapper of the wxWidgets library. The actuall wxWidgets source code is not included and will need to be downloa

Jeroen Dirks 55 Jun 9, 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.4k Jun 23, 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 361 Jun 22, 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.6k Jun 23, 2022
Common library for Go GUI apps on Windows

winc Common library for Go GUI apps on Windows. It is for Windows OS only. This makes library smaller than some other UI libraries for Go.

Tad Vizbaras 137 Jun 9, 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 65 Apr 15, 2022
Windows GUI framework for Go.

gform is an easy to use Windows GUI toolkit for Go It provides two approaches to create UI. 1. Pure code. gform.Init() mainWindow := gform.NewForm(ni

Allen Dang 269 Apr 17, 2022
Easy Go GUI wrapper for interactive manipulation of visual algorithms/backend code.

RenderView ================ Install: go get github.com/TheGrum/renderview Needs either Shiny (limited functionality), Gio, go-gtk, or gotk3. The latt

null 26 May 10, 2022
Windows GUI library for Go (Golang). Comes with a graphical UI designer.

Version 2 Please go to Version 2 of this library for the latest version. Windows GUI Library This is a pure Go library to create native Windows GUIs.

null 130 Jun 24, 2022
Super minimal, rock-solid foundation for concurrent GUI in Go.

faiface/gui Super minimal, rock-solid foundation for concurrent GUI in Go. Installation go get -u github.com/faiface/gui Currently uses GLFW under th

Michal Štrba 444 Jun 23, 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.4k Jun 22, 2022
This project provides Go bindings for nuklear.h — a small ANSI C GUI library.

Nuklear Package nk provides Go bindings for nuklear.h — a small ANSI C gui library. See github.com/vurtun/nuklear. All the binding code has automatica

null 1.5k Jun 25, 2022
A list of Go GUI projects

(Please follow @Go100and1 for updates on this page, and all kinds of details and facts in Go). A list of Go GUI/graphics/image related projects native

null 901 Jun 26, 2022
Odile is a simple GUI for the croc utility by Schollz.

Odile Odile is a simple GUI for the croc utility by Schollz. This program uses Fyne, a UI toolkit written in Go, as the graphical interface. Effort wa

null 11 Jun 8, 2022