Go Web UI Toolkit - Public Releases and Development

Welcome!

GoDoc Build Status Go Report Card

Gowut (Go Web UI Toolkit) is a full-featured, easy to use, platform independent Web UI Toolkit written in pure Go, no platform dependent native code is linked or called.

For documentation please visit the Gowut Wiki.

Development takes place in the dev branch.

Quick install

To quickly install (or update to) the latest version, type:

go get -u github.com/icza/gowut/...

Quick test

To quickly test it and see it in action, run the following example applications.

Let's assume you're in the root of the Gowut project:

cd $GOPATH/src/github.com/icza/gowut

1. Showcase of Features.

This one auto-opens itself in your default browser.

go run _examples/showcase/showcase.go

The Showcase of Features is also available live: https://gowut-demo.herokuapp.com/show

2. A single window example.

This one auto-opens itself in your default browser.

go run _examples/simple/simple_demo.go

And this is how it looks:

Full App Screenshot

3. Login window example with session management.

Change directory so that the demo can read the test cert and key files:

cd _examples/login
go run login_demo.go

Open the page https://localhost:3434/guitest/ in your browser to see it.

Godoc of Gowut

You can read the godoc of Gowut online here:

http://godoc.org/github.com/icza/gowut/gwu

+1 / Star Gowut!

Owner
András Belicza
Earn $100 and help me by using my DigitalOcean ref link: https://m.do.co/c/7bdc66c1fe73
András Belicza
Comments
  • using SetColSpan/SetRowSpan produce unnalligned tables

    using SetColSpan/SetRowSpan produce unnalligned tables

  • Event handler (ETypeFocus) for panel never actives when tabPanel selects the panel

    Event handler (ETypeFocus) for panel never actives when tabPanel selects the panel

    I have a Panel in a TabPanel that I want to update went the panel becomes visible. The can occur if its TabPanel's tab is clicked on or when SetSelected() is called. Whenever either of these occur I want to update the panel. Using an event handler for ETypeFocus seems like the correct way to go but does not work. Looking at the code I believe that SetSelected() in TabPanel.go should include code to activate such a handler if present but it does not currently do so.

    If this is the correct direction, I'd be happy to put together a pull request.

  • go get issue

    go get issue

    Hi,

    i get this error:

    go get -u github.com/icza/gowut
    package github.com/icza/gowut
        imports github.com/icza/gowut: no buildable Go source files in /Users/geri/Work/gopath
    
  • Session cookie seems to ignore server's port, which causes issues when a user opens multiple applications from the same host in the same browser

    Session cookie seems to ignore server's port, which causes issues when a user opens multiple applications from the same host in the same browser

    I have two applications running on a backend server. They open their gowut servers on different ports (same IP/hostname). I open a browser and connect to the first app and authenticate, everything is ok. Starting a second browser instance/tab and authenticating to the second application stops the first browser session from working. There are no errors, and re-authenticating fixes it but breaks the other session. However if I use a different browser to connect to the second application, everything works as expected and both applications work as intended.

  • ETypeMousedown event name not consistent with other event names

    ETypeMousedown event name not consistent with other event names

    https://github.com/icza/gowut/blob/7dde321edeeb14de3c4f665436fc5a698863cf48/gwu/event.go#L38

    Hi, it should be ETypeMouseDown, in all other event names last word is upper case.

    Regards.

  • Can Session closing generate an event?

    Can Session closing generate an event?

    I use sessions in my application. However, when the session expires, the gui is unresponsive. I would like to update/replace the gui contents when the session expires with a button that says something like "Start again", which starts a new session and presents the starting state of the gui. I have tried a number of things but have not been able to do this.

    As the Session.Removed(gwu.Session) does not expose any functions of use (those in Event like Event.ReloadWin(string)) I don't see how I can do this...

    Thanks, Glen

  • Custom path handler for OAuth2 auth flow?

    Custom path handler for OAuth2 auth flow?

    I'd like to use OAuth2 Authentication Flow (esp. OpenID Connect) for user authentication. It needs a redirect URL to handle the token exchange. Either Server should expose a Handle(http.Handler) function (become a Muxer), or expose its ServeHTTP method (become a http.Handler).

  • make  images undraggable

    make images undraggable

    https://github.com/icza/gowut/blob/7dde321edeeb14de3c4f665436fc5a698863cf48/gwu/image.go#L52

    Hi, i'm annoyed with dragable images, is it good idea to make images undraggable ? strImgCl = []byte(`" draggable="false">`)

    If not, just close issue and sorry for noise.

    Regards

  • Race Condition with login_demo.go

    Race Condition with login_demo.go

    Starting with,

    sudo go run -race login_demo.go

    Then logging in from two separate Clients and then waiting for the sessions to timeout yields the attached log file.

    racelog.txt

  • How to update contents of a listbox

    How to update contents of a listbox

    Is there a way to amend the contents of a listbox during an event called from the same page? I'd like a refresh button that would rebuild the contents of a listbox based on the current values in a slice on the server. I can do this with a textbox using tb.SetText(var) followed by marking the tb as dirty but cant work out how to do this for a list box.

    I've managed to achieve this by doing a .Remove(listbox) then creating a new listbox with the new values, adding it to the parent container then marking the parent container dirty. I could do this as the parent container was a table, but not sure how you would reinsert it into the middle of a normal panel? Adding a SetContents(slice) as a listbox method would make things a lot simpler.

  • nil pointer dereference in gwu.Table.Clear()

    nil pointer dereference in gwu.Table.Clear()

    If a table is constructed without all cells being populated, it will display fine, but the lack of cell contents causes a nil pointer dereference when performing a Clear() operation at table.go+169

    Wrapping that line in an if c2 != nil {} solves the problem for me, but I don't know if that's the proper way to address the issue.

  • DatePicker and Menu

    DatePicker and Menu

    Am new for Golang and find this as an extraordinary product. We are planning to use Gowut for our product. Will you continue this further and provide more widgets (Datepicker and Menu very importantly) and keep this upgraded to Golang versions? Please share your views.

  • Add SetWindowNotFoundHandler similarly SetAppRootHandler in server

    Add SetWindowNotFoundHandler similarly SetAppRootHandler in server

    In server.go in serveHTTP there is a code:

    	if win == nil {
    		// Invalid window name, render an error message with a link to the window list
    		w.Header().Set("Content-Type", "text/html; charset=utf-8")
    		w.WriteHeader(http.StatusNotFound)
    		NewWriter(w).Writess("<html><body>Window for name <b>'", winName, `'</b> not found. See the <a href="`, s.appPath, `">Window list</a>.</body></html>`)
    		return
    	}
    

    Please make an opportunity to appoint the handler for formation of the page of a nonexistent window.

  • Issue#9

    Issue#9

    Since file input mechanism is requested by many (issues#9), I made it.

    Now you can add an input box that accepts file path in the following manner.

    win := gwu.NewWindow("main", "test")
    tb := gwu.NewFileInputBox("file input box")
    win.Add(tb)
    
  • fatal error: concurrent map writes

    fatal error: concurrent map writes

    Hello,

    I get the above panic when I try and mark two things dirty at nearly the same time. I can fix the above myself by changing my program but I think it would be good for you to implement a locking system if at all possible to prevent this.

    Thank you!

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

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

Apr 18, 2022
A Windows GUI toolkit for the Go Programming Language
A Windows GUI toolkit for the Go Programming Language

About Walk Walk is a "Windows Application Library Kit" for the Go Programming Language. Its primarily useful for Desktop GUI development, but there is

Dec 30, 2022
pure go, cross-platform, MIT-licensed ui toolkit for developers
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

Dec 24, 2022
GUI toolkit for go
GUI toolkit for go

Mostly-immediate-mode GUI library for Go. Source port to go of an early version of nuklear. ⚠️ Subject to backwards incompatible changes. ⚠️ ⚠️ Featur

Jan 1, 2023
A unified graphical user experience toolkit for Go desktop applications

Unison A unified graphical user experience toolkit for Go desktop applications. macOS, Windows, and Linux are supported. Required setup Unison is buil

Dec 20, 2022
A minimal material design based UI toolkit for Tiny Go projects
A minimal material design based UI toolkit for Tiny Go projects

A minimal material design based UI toolkit for Tiny Go projects.

Sep 3, 2022
Golang bindings of Sciter: the Embeddable HTML/CSS/script engine for modern UI development
Golang bindings of Sciter: the Embeddable HTML/CSS/script engine for modern UI development

Go bindings for Sciter Check this page for other language bindings (Delphi / D / Go / .NET / Python / Rust). Attention The ownership of project is tra

Dec 23, 2022
A cross-platform app-development module for Go.
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

Dec 1, 2022
Production Ready GO - Development Workspace

dev_ProdGO Production Ready GO - Development Workspace Install and Check Version MacOS $brew install go/golang $go version $mkdir -p $HOME/go/{bin,sr

Jan 6, 2022
A package to build progressive web apps with Go programming language and WebAssembly.
A package to build progressive web apps with Go programming language and WebAssembly.

go-app is a package to build progressive web apps (PWA) with Go programming language and WebAssembly. It uses a declarative syntax that allows creatin

Dec 28, 2022
Create desktop apps using Go and Web Technologies.
Create desktop apps using Go and Web Technologies.

Build desktop applications using Go & Web Technologies. The traditional method of providing web interfaces to Go programs is via a built-in web server

Dec 29, 2022
Pglet - Web UI framework for backend developers
Pglet - Web UI framework for backend developers

Pglet - Web UI framework for backend developers

Nov 15, 2022
Flutter on Windows, MacOS and Linux - based on Flutter Embedding, Go and GLFW.
Flutter on Windows, MacOS and Linux - based on Flutter Embedding, Go and GLFW.

go-flutter - A package that brings Flutter to the desktop Purpose Flutter allows you to build beautiful native apps on iOS and Android from a single c

Jan 9, 2023
Slice and dice your TMUX windows and panes
Slice and dice your TMUX windows and panes

Chaakoo is a wrapper over TMUX that can create sessions, windows and panes from a grid based layout. The idea here is inspired by the CSS grid template areas.

Nov 1, 2022
Built Virtual Operating System and integrated application like calculator, gallery app , weather app, and text editor.
Built Virtual Operating System and integrated application like calculator, gallery app , weather app, and text editor.

Virtual Operating System Built Virtual Operating System and integrated application like calculator, gallery app , weather app, and text editor. Langua

Nov 2, 2021
Native Go (golang) Graphical Interface system (2D and 3D), built on GoKi tree framework
Native Go (golang) Graphical Interface system (2D and 3D), built on GoKi tree framework

GoGi is part of the GoKi Go language (golang) full strength tree structure system (ki = 木 = tree in Japanese) package gi is a scenegraph-based 2D and

Dec 25, 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

Dec 28, 2022
The X Go Binding is a low-level API to communicate with the X server. It is modeled on XCB and supports many X extensions.

Note that this project is largely unmaintained as I don't have the time to do or support more development. Please consider using this fork instead: ht

Dec 29, 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,

Dec 10, 2022