The ultimate list of Golang GUI/graphics/image-related libraries


Native Golang GUI and utility bindings

dlgs is a cross-platform library for displaying dialogs and input boxes.

gform is an easy to use Windows GUI toolkit for Go.

  • winc is a common library for Golang GUI apps on Windows (based on gform).

glfw is a Go bindings for GLFW 3.

go-gtk is a Go binding for GTK2.

  • RenderView is an easy Go GUI wrapper for interactive manipulation of visual algorithms/backend code. Support go-gtk (default), gotk3 and shiny backends.

go-mobile adds support for mobile platforms (Android and iOS) and provides tools to build mobile applications. (A Go bindings for OpenGL ES 2.0 and ES 3.0 is included.)

go-sdl2 is SDL2 wrapped for Go users.

go-sfml is a Go bindings for SFML.

gothic is a tcl/tk binding.

gotk3 provides Go bindings for GTK+3 and dependent projects (including cairo).

gotk4 is a GTK4 bindings generator for Go.

[GoVCL] is a native GUI library based on Lazarus.

GXUI is a Go cross platform UI library.

iup-go is a Go bindings for IUP.

MacDriver is a toolkit for working with Apple/Mac APIs and frameworks in Go.

NuxUI is a cross-platform GUI library to make macOS, window, linux, IOS, android applications

qt allows you to write Qt applications entirely in Go and makes deploying them later very easy.

qt.go is a Qt5 binding that uses FFI instead of CGO.

shiny is a Golang cross platform UI package.

systray is a cross platfrom Go library to place an icon and menu in the notification area. Tested on Windows 8, Mac OSX, Ubuntu 14.10 and Debian 7.6.

trayhost is a cross-platform Go library to place an icon in the host operating system’s taskbar.

ui aims to provide simple GUI software development in Go, based on my c lib libui.

w32.go is a simple example on how to create Windows GUI by using the syscall package.

Windigo – Win32 API and GUI in idiomatic Go.

Walk is a “Windows Application Library Kit” for the Go Programming Language.

wui is a Windows GUI library that uses the native Win32 API, which is forked from this one.

XGB is the X Go Binding, which is a low-level API to communicate with the core X protocol and many of the X extensions.

xgbutil is a utility library designed to work with the X Go Binding.

zenity is a cross-platform package providing Zenity-like dialogs.

HTML based Golang GUI

Go-app is a package for building progressive web apps (PWA) with the Go programming language (Golang) and WebAssembly (Wasm).

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

go-sciter is a Golang bindings of Sciter: the Embeddable HTML/CSS/script engine for modern UI development。

gowd help us build cross platform GUI apps with GO and HTML/JS/CSS (powered by nwjs)。

Gowut is a Web UI Toolkit written in pure Golang. Apps are rendered as HTML pages. It doesn’t bundle browsers.

Lorca is a very small library to build modern HTML5 desktop apps in Go. It doesn’t bundle Chrome but reuses the installed Chrome on your machine.

Muon is a lightweight alternative to Electron written in Golang, using Ultralight instead of Chromium.

Qlovaseed is a lightweight alternative to Electron written in Golang. Apps are rendered as HTML pages. It doesn’t bundle browsers.

Wails is a framework for building desktop applications using Go & Web Technologies.

webview is a tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs.

Custom Go GUI

duit is a pure go, cross-platform, MIT-licensed ui toolkit for developers.

Fyne is an easy to use UI toolkit and app API written in Go. We use OpenGL (through the go-gl and go-glfw projects) to provide cross platform graphics.

gi is a scenegraph-based 2D and 3D GUI / graphics interface (Gi) in Go.

Gio implements portable immediate mode GUI programs in Go. Gio programs run on all the major platforms: iOS/tvOS, Android, Linux (Wayland), macOS, Windows and browsers (Webassembly/WebGL).

goey provides a declarative, cross-platform GUI for the Go language. The range of controls, their supported properties and events, should roughly match what is available in HTML. However, properties and events may be limited to support portability. Additionally, styling of the controls will be limited, with the look of controls matching the native platform.

go-flutter is a package that brings Flutter to the desktop.

gui provides super minimal, rock-solid foundation for concurrent GUI in Go.

imgui-go is a Go wrapper for Dear ImGui.

  • giu is a GUI framework based on imgui-go. (Another similar one from the same auther, gimu, but for nucular.)

NanoGUI.go is a golang port of NanoGUI.

nk provides Go bindings for nuklear.h.

  • Another one: nucular, which uses gio or shiny backend instead of cgo.

3D graphics and computing API bindings with Golang

d3d9 is a pure Go wrapper for Microsoft’s Direct3D9 API.

gl repository holds Go bindings to various OpenGL versions. They are auto-generated using Glow.

vulkan provides Go bindings for Vulkan — a low-overhead, cross-platform 3D graphics and compute API.

2D vector graphics and computing Go APIs

draw2d is a Go 2D vector graphics library with support for multiple outputs such as images (draw2d), pdf documents (draw2dpdf), opengl (draw2dgl) and svg (draw2dsvg).

gg is a library for rendering 2D graphics in pure Go.

The Gio project includes an efficient vector renderer based on the Pathfinder project, implemented on OpenGL ES and Direct3D 11.

  • giocanvas is a canvas API built on top of Gio.

go-cairo is a Go binding for the cairo graphics library.

Go canvas is a pure Go library that provides drawing functionality as similar as possible to the HTML5 canvas API, implemented on OpenGL backend (and software backend).

go-chart is a very simple golang native charting library that supports timeseries and continuous line charts.

gonum/plot provides an API for building and drawing plots in Golang

go-p5 is a simple package that provides primitives resembling the ones exposed by the p5/processing library.

go-skia is a Go skia binding based on skia C library through cgo.

NanoVGo is pure golang implementation of NanoVG. The same author maintains the NanoGUI.go project mentioned above.

svgo generates SVG as defined by the Scalable Vector Graphics 1.1 Specification.

Font processing related Golang Libraries

freetype is a Freetype font rasterizer in the Go programming language.

The golang.org/x/image/font/sfnt package parses SFNT font file formats, including TrueType and OpenType.

pixfont is a simple, lightweight Pixel Font (aka bitmap fonts) package for Golang that works with the standard image/draw package

CAD-related Go Packages

sdfx is a simple CAD package written in Go. sdf is a rewritten of it.

Game development-related Go Libraries

godot-go – Go language bindings for the Godot Engine‘s GDNative API.

raylib-go is a Golang binding for raylib.

ebiten – A dead simple 2D game library for Golang

Please visit Awesome Go for more.

Image processing related

The standard Go image packages.

The image repository holds supplementary Go image libraries.

Please visit Awesome Go for more.

Terminal UI Golang Libraries

Please check tcelltview (which depends on tcell), cview (which is a fork of tview), and more listed on Awesome Go.

Content License

MIT License

Copyright (c) 2019 go-graphics

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.