Cross platform GUI in Go based on Material Design


Go API Reference 2.0.0 release Join us on Slack
Code Status Build Status Coverage Status


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 single codebase.

Version 2.0 is the current release of the Fyne API, this represented the first release since 1.0 that may break some API usage. It also added new features including data binding, animation, storage repositories and a new more flexible theme API. We also refreshed the default theme, adding animations, a focus colour and redesigning the Entry, Select, SelectEntry, ProgressBar and ProgressBarInfinite widgets. We are now working towards the next big release and more news will follow in our news feeds and GitHub project.


To develop apps using Fyne you will need Go version 1.12 or later, a C compiler and your system's development tools. If you're not sure if that's all installed or you don't know how then check out our Getting Started document.

Using the standard go tools you can install Fyne's core library using:

$ go get

Widget demo

To run a showcase of the features of Fyne execute the following:

$ go get
$ fyne_demo

And you should see something like this (after you click a few buttons):

Fyne Hello Light Theme

Or if you are using the light theme:

Fyne Hello Light Theme

Getting Started

Fyne is designed to be really easy to code with. If you have followed the prerequisite steps above then all you need is a Go IDE (or a text editor).

Open a new file and you're ready to write your first app!

package main

import (

func main() {
	a := app.New()
	w := a.NewWindow("Hello")

	hello := widget.NewLabel("Hello Fyne!")
		widget.NewButton("Hi!", func() {
			hello.SetText("Welcome :)")


And you can run that simply as:

go run main.go

It should look like this:

Fyne Hello Dark Theme Fyne Hello Dark Theme

Note that Windows applications load from a command prompt by default, which means if you click an icon you may see a command window. To fix this add the parameters -ldflags -H=windowsgui to your run or build commands.


Using go install will copy the executable into your go bin dir. To install the application with icons etc into your operating system's standard application location you can use the fyne utility and the "install" subcommand.

$ go get
$ fyne install

Packaging a release

Using the fyne utility "release" subcommand you can package up your app for release to app stores and market places. Make sure you have the standard build tools installed and have followed the platform documentation for setting up accounts and signing. Then you can execute something like the following, notice the -os ios parameter allows building an iOS app from macOS computer. Other combinations work as well :)

$ fyne release -os ios -certificate "Apple Distribution" -profile "My App Distribution" -appID "com.example.myapp"

The above command will create a '.ipa' file that can then be uploaded to the iOS App Store.


More documentation is available at the Fyne developer website or on


You can find many example applications in the examples repository. Alternatively a list of applications using fyne can be found at our website.

  • Add rounded edges to Rectangle

    Add rounded edges to Rectangle


    #1090 Implementation of a (Round)Rectangle as primitive Open GLObject.

    • The property "fyne.RectangleRadius" extends canvas.Rectangle struct.
    • For the left and right side a different radius can be defined.
    • For the left and right side different segments can be defined. Default is 8 segments for one rounded edge of a rectange. The higher the value the more triangles are calculated and rendered.
    • A rectangle with stroke is rendered in one communication/stream to the GPU. A shape with opaque colors and stroke can be rendered with composition.
    • If radius is 0 a normal rectangle will be drawn.
    • Only required slices are rendered, so I hope the performance will be ok.

    Limitation: Shapes with stroke and only one segment don't work properly. As a work around for shapes with opaque colors you could use composition. As this is not the main use for this canvas object I don't plan to implement it.


    • [x] Tests included.
    • [x] Formatter run with no errors.
    • [x] Lint run with no errors.
    • [x] Tests all pass.

    Where applicable:

    • [X] GL ES and software-fallback not implemented
    • [X] Please check: rendering (method: drawRectangle is called twice
    • [X] Old method: drawRectangle was commented out
    • [X] See last discussion #1090
    • [X] Example included. (
    opened by renlite 80
  • FileDialog: Added list view

    FileDialog: Added list view


    FileDialog: 3 Changes:

    • Added list view (with a toggle button to switch between views (grid or list)
    • Items are now hoverable
    • Adjusted filenames texts positions

    Fixes #2165 (partially)


    • [X] Tests included.
    • [X] Lint and formatter run with no errors.
    • [X] Tests all pass.
    opened by s77rt 53
  • Instant crash on iOS

    Instant crash on iOS

    Hi all!

    I compiled a little test app, and it's constantly crashes on iPhone. Rarely when the app opens, after some time it's closes also. Running on the macOS with "go run ." command works as it should.

    The code:

    package main
    import (
    func main() {
    	a := app.New()
    	w := a.NewWindow("Hello")
    	var inc int = 0
    	label := widget.NewLabel(fmt.Sprintf("%d", inc))
    			widget.NewButton("Tap me!", func() {
    				label.Text = fmt.Sprintf("%d", inc)

    I created an empty Xcode project for making a valid bundle id for the app, then packaged the app with this command: fyne package -os ios -appID <>, then installed the app on my iPhone SE2 through Xcode/Window/Devices and Simulators.

    I didn't find a good way to debug the app, so I checked in the and it's says: "Snapshot generation request for bundleID: <> rejected due to the app being denylisted.". I didn't find any help with that message.

    • Notebook: MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports), 2,3 GHz Quad-Core Intel Core i7, 16 GB 3733 MHz LPDDR4X
    • iPhone: SE2, iOS 14.6 (18F72)
    • go: go version go1.16.3 darwin/amd64 (through homebrew)
    • Fyne: fyne cli version v2.0.3
    bug OS:iOS 
    opened by bencehari 50
  • File dialog locations

    File dialog locations


    Fixes #821


    • [x] Tests included.
    • [X] Lint and formatter run with no errors.
    • [x] Tests all pass.

    Where applicable:

    • [X] Public APIs match existing style.
    • ~~[ ] Any breaking changes have a deprecation path or have been discussed.~~ (N/A)
    opened by charlesdaniels 50
  • fyne package -os android needs NDK 16/19c

    fyne package -os android needs NDK 16/19c

    Describe the bug:

    #2922 & #2919 related but both closed. How to build android app now? I have downloaded NDK 16, 19 & 24 in Android Studio. However armv7a-linux-androideabi16-clang still does not exist. armv7a-linux-androideabi19-clang exists.

    To Reproduce:

    Steps to reproduce the behaviour:

    1. fyne package -os android


    no compiler for arm was found in the NDK (tried D:\SDK\ndk\24.0.8215888\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi16-clang). Make sure your NDK version is >= r19c. Use sdkmanager --update to update it

    Example code:

    Device (please complete the following information):

    • OS: Windows
    • Version: 10
    • Go version: 1.18
    • Fyne version: 2.1.4
    bug OS:Android blocker 
    opened by bon-ami 44
  • Fix Cursor Animation on widget.Entry

    Fix Cursor Animation on widget.Entry


    Fixes #1778

    It seems that #1778 appears, because fade animation is running when user is typing. Cursor should be static when user is interacting with the Entry (as normally cursor animation). Implementation in this PR could be improved, but that's the idea basically.


    • [x] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
    opened by fpabl0 42
  • widget.ScrollContainer scroll speed is slow

    widget.ScrollContainer scroll speed is slow

    I used widget.ScrollContainer. But scroll speed is slow. Is there an option to increase the amount of movement on the screen for a single mouse wheel movement. For example, if you specify 2 as an option, I want the movement on the screen to double.

    question OS:Linux 
    opened by mondy 41
  • Unable to build/run

    Unable to build/run

    Describe the bug Fails to build/Run with the error

    To Reproduce function demo copy/paste into main.go, and go run/go build


    In file included from ..\..\..\go\src\\fyne\vendor\\go-gl\glfw\v3.2\glfw\c_glfw_windows.go:6:
    ..\..\..\go\src\\fyne\vendor\\go-gl\glfw\v3.2\glfw/glfw/src/win32_monitor.c: In function ‘createMonitor’:
    ..\..\..\go\src\\fyne\vendor\\go-gl\glfw\v3.2\glfw/glfw/src/win32_monitor.c:68:5: warning: implicit declaration of function ‘wcscpy’ [-Wimplicit-function-declaration]
       68 |     wcscpy(monitor->win32.adapterName, adapter->DeviceName);
          |     ^~~~~~
    ..\..\..\go\src\\fyne\vendor\\go-gl\glfw\v3.2\glfw/glfw/src/win32_monitor.c: In function ‘_glfwPlatformIsSameMonitor’:
    ..\..\..\go\src\\fyne\vendor\\go-gl\glfw\v3.2\glfw/glfw/src/win32_monitor.c:228:9: warning: implicit declaration of function ‘wcslen’ [-Wimplicit-function-declaration]
      228 |     if (wcslen(first->win32.displayName))
          |         ^~~~~~
    ..\..\..\go\src\\fyne\vendor\\go-gl\glfw\v3.2\glfw/glfw/src/win32_monitor.c:229:16: warning: implicit declaration of function ‘wcscmp’ [-Wimplicit-function-declaration]
      229 |         return wcscmp(first->win32.displayName, second->win32.displayName) == 0;
          |                ^~~~~~
    # command-line-arguments
    C:\msys\usr\local\go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1   
    /usr/lib/gcc/x86_64-pc-msys/9.1.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lmingwex
    /usr/lib/gcc/x86_64-pc-msys/9.1.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lmingw32
    collect2: error: ld returned 1 exit status

    Device (please complete the following information):

    • OS: Windows 10,
    • Version: 1903
    • Go version: go1.12.7 windows/amd64
    • Fyne version: litterally just go get at around 1920 PST -8 time. 10/27/2019
    question OS:Windows 
    opened by Merith-TK 41
  • Apps built for Android don't run properly

    Apps built for Android don't run properly

    Describe the bug:

    Fyne applications don't work on Android.

    To Reproduce:

    Build and install an APK, and then run the application.

    1. Create a new directory fynetest; cd there
    2. Copy the source code in this ticket to a file called main.go
    3. go mod init
    4. Find a 382x512px image to use as an icon
    5. Package the application for Android using fyne; fyne package -os android -appID -name FyneTest -icon 382x512.png
    6. Copy the resulting APK to an Android device (e.g. with ADB, or with some other file sharing)
    7. Install the APK on the Android device
    8. Run the installed application

    Behaviors vary.

    1. Usually, the app comes up as a white screen and never renders any widgets. It stays a white screen.
    2. Very, very rarely the UI will render and work correctly. Out of two dozen times that I've tried, this has happened twice.
    3. Sometimes, if the screen is tapped early after starting, the UI will partially render; widgets will not work, and are overlapping in random ways. It feels like tapping interrupts the layout and what's shown is where it was interrupted. Again, the UI doesn't function in this state.

    Example code:

    This is a minimal Fyne program; however, I've seen this behavior on the two apps I've built and deployed. The application runs fine on the desktop.

    package main
    import (
    func main() {
            a := app.New()
            w := a.NewWindow("test")
            defer w.ShowAndRun()
                            widget.NewLabel("Hello Fyne!"),
                            widget.NewButton("Quit", func() { a.Quit() }),

    Device (please complete the following information):

    • OS: Android
    • Version: 10
    • Go version: go1.13.7
    • Fyne version: development branch, 97a6e6c0ff8e
    opened by xxxserxxx 40
  • Fix Select appearance

    Fix Select appearance


    Fix Select widget appearance to be similar to SelectEntry.


    • [ ] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
    opened by fpabl0 37
  • Implement kayboard navigation in widget.Tree

    Implement kayboard navigation in widget.Tree


    This implements the Focusable interface for Tree Nodes. Added keyboard navigation:

    • Navigate between tree nodes using tab and shift + tab.
    • Select a tree node by pressing space.
    • Open a branch by pressing right and close using left.


    Opening as draft for now until I have implemented tests.


    • [ ] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
    opened by Jacalz 1
  • Implement keyboard navigation in file dialog

    Implement keyboard navigation in file dialog


    This greatly improves the usability of the file dialog by making sure that it can be navigated with a keyboard.

    • Hover previous and next items using tab and shift+tab.
    • Select hovered item by pressing space.

    I also noticed that the background was refreshed twice, so I removed that. Should avoid a redraw, I think :)

    For #1515


    • [x] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
    opened by Jacalz 1
  • Hyperlink enhancement: underline and tappable area shouldn't be wider than the text label

    Hyperlink enhancement: underline and tappable area shouldn't be wider than the text label


    • [X] I have searched the issue tracker for open issues that relate to the same feature, before opening a new one.
    • [X] This issue only relates to a single feature. I will open new issues for any other features.

    Is your feature request related to a problem?

    If a hyperlink widget is placed in a layout that makes it wider than needed to fully display the text label, the full area of the hyperlink widget is tappable and the underline extends past the end of the text, the full width of the widget.

    Is it possible to construct a solution with the existing API?

    Yes, but it's really hacky:

    • If you want to support textwrap truncate, create a custom widget that extends (or wraps) a widget.Hyperlink and overrides minSize to return something sensible to keep it from shrinking to zero
    • place the widget.Hyperlink or your custom hyperlink wrapper above in a HBox container with a spacer, and use this container where you'd use widget.Hyperlink otherwise. The layout will shrink the hyperlink to only show the text and take up the rest of the space to the right with the spacer

    Describe the solution you'd like to see.

    Ideally, the desktop pointer should only change when hovering over the text label, tapping/clicking the widget outside the width of the text label should do nothing, and the visual underline should never extend past the width of the text.

    opened by dweymouth 0
  • internal/cache: use expiringCache over expiringCacheNoLock in svgInfo

    internal/cache: use expiringCache over expiringCacheNoLock in svgInfo


    As of #2659, on darwin/arm64, most of the draw operations are run on the main thread. This mitigates many data races to appear in the official demo. However, after #2812, a new type of data race can appear at boot time:

    $ cd cmd/fyne_demo && go build -race
    $ ./fyne_demo
    2022/12/31 12:26:47 Lifecycle: Started
    Write at 0x00c0004dc960 by goroutine 14:*expiringCacheNoLock).setAlive()
          /Users/changkun/dev/ +0x94
          /Users/changkun/dev/ +0xd4
          /Users/changkun/dev/ +0x3e0
          /Users/changkun/dev/ +0xfc
          /Users/changkun/dev/ +0x340*gLDriver).refreshSystrayMenu()
          /Users/changkun/dev/ +0x94*gLDriver).refreshSystray()
          /Users/changkun/dev/ +0x80*gLDriver).SetSystemTrayMenu.func1.1()
          /Users/changkun/dev/ +0xe8
          /Users/changkun/dev/ +0x44
    Previous read at 0x00c0004dc960 by main goroutine:*expiringCacheNoLock).isExpired()
          /Users/changkun/dev/ +0xac
          /Users/changkun/dev/ +0xa0
          /Users/changkun/goes/go/src/sync/map.go:354 +0x1b4
          /Users/changkun/dev/ +0xb4
          /Users/changkun/dev/ +0x124*gLDriver).drawSingleFrame()
          /Users/changkun/dev/ +0x64*gLDriver).runGL()
          /Users/changkun/dev/ +0x624*gLDriver).Run()
          /Users/changkun/dev/ +0xb8*window).ShowAndRun()
          /Users/changkun/dev/ +0x44
          /Users/changkun/dev/ +0x5d8
    Goroutine 14 (running) created at:
          /Users/changkun/dev/ +0xe0
          /Users/changkun/dev/ +0x30*gLDriver).SetSystemTrayMenu.func1()
          /Users/changkun/dev/ +0xd8
          /Users/changkun/goes/go/src/sync/once.go:74 +0xb0
          /Users/changkun/goes/go/src/sync/once.go:65 +0x40*gLDriver).SetSystemTrayMenu()
          /Users/changkun/dev/ +0x58*fyneApp).SetSystemTrayMenu()
          /Users/changkun/dev/ +0x68
          /Users/changkun/dev/ +0x340
          /Users/changkun/dev/ +0x80
    2022/12/31 12:26:48 Lifecycle: Entered Foreground
    2022/12/31 12:26:49 Lifecycle: Exited Foreground
    2022/12/31 12:26:49 Lifecycle: Stopped
    Found 1 data race(s)

    This is because systray is running on a separate goroutine, and therefore the SVG caches are accessed from multiple goroutines.

    Instead of using expiringCacheNoLock, switch to expiringCache to eliminate this type of data race.

    Updates #2509


    • [ ] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
    opened by changkun 1
  • Grey theme

    Grey theme


    • [X] I have searched the issue tracker for open issues that relate to the same feature, before opening a new one.
    • [X] This issue only relates to a single feature. I will open new issues for any other features.

    Is your feature request related to a problem?

    After the version is updated, a. Settings(). SetTheme (theme. DarkTheme()) is not as beautiful as the original one, and the original effect is more gray. I hope the author can roll back and add theme. GreyTheme() as the original theme. I think it is very beautiful. I love fyne very much. Pay two contrast pictures of the former and the current DarkTheme

    before image

    now image

    It's too dark,Hope to get the support of the author

    Is it possible to construct a solution with the existing API?

    No response

    Describe the solution you'd like to see.


    opened by hq-zhonger 2
  • Add the ability to disable ToolbarActions #2306

    Add the ability to disable ToolbarActions #2306


    Issue addressed Add the ability to disable ToolbarActions #2306 The change is inspired from same properties as Button for ToolbarAction. Comments from issue were helpful and followed during code change.

    Fixes #2306


    • [x] Tests included.
    • [ ] Lint and formatter run with no errors.
    • [x] Tests all pass.
    opened by pravin772 6
  • v2.3.0(Dec 24, 2022)

    Whatever you celebrate at this time of year we hope you will enjoy this exciting, shiny new look release of the Fyne toolkit. With a refined design, cloud integration, images in rich text and a new text handling engine there is a lot to love in Fyne v2.3.0.


    • Shiny new theme that was designed for us
    • Improved text handling to support non-latin alphabets
    • Add cloud storage and preference support
    • Add menu icon and submenu support to system tray menus
    • More button importance levels ErrorImportance, WarningImportance
    • Support disabling of AppTabs and DocTabs items
    • Add image support to rich text (#2366)
    • Add CheckGroup.Remove (#3124)


    • The buttons on the default theme are no longer transparent, but we added more button importance types
    • Expose a storage.ErrNotExists for non existing documents (#3083)
    • Update go-gl/glfw to build against latest Glfw 3.3.8
    • List items in widget.List now implements the Focusable interface


    • Displaying unicode or different language like Bengali doesn't work (#598)
    • Cannot disable container.TabItem (#1904)
    • Update Linux/XDG application theme to follow the FreeDesktop Dark Style Preference (#2657)
    • Running fyne package -os android needs NDK 16/19c (#3066)
    • Caret position lost when resizing a MultilineEntry (#3024)
    • Fix possible crash in table resize (#3369)
    • Memory usage surge when selecting/appending MultilineEntry text (#3426)
    • Fyne bundle does not support appending when parameter is a directory
    • Crash parsing invalid file URI (#3275)
    • Systray apps on macOS can only be terminated via the systray menu quit button (#3395)
    • Wayland Scaling support: sizes and distances are scaled wrong (#2850)
    • Google play console minimum API level 31 (#3375)
    • Data bound entry text replacing selection is ignored (#3340)
    • Split Container does not respect item's Visible status (#3232)
    • Android - Entry - OnSubmitted is not working (#3267)
    • Can't set custom CGO_CFLAGS and CGO_LDFLAGS with "fyne package" on darwin (#3276)
    • Text line not displayed in RichText (#3117)
    • Segfault when adding items directly in form struct (#3153)
    • Preferences RemoveValue does not save (#3229)
    • Create new folder directly from FolderDialog (#3174)
    • Slider drag handle is clipped off at minimum size (#2966)
    • Entry text "flickering" while typing (#3461)
    • Rendering of not changed canvas objects after an event (#3211)
    • Form dialog not displaying hint text and validation errors (#2781)

    Have a very happy holiday and do let us know what you build with this new release. Head to GitHub to report issues or request new features, we will be hard at work after a few more mince pies!

    Source code(tar.gz)
    Source code(zip)
  • v2.2.4(Nov 9, 2022)

    This minor release cover bug fixes, especially addressing the area around mobile devices.

    The complete list is as follow:

    • Iphone incorrect click coordinates in zoomed screen view (#3122)
    • CachedFontFace seems to be causing crash (#3134)
    • Fix possible compile error if "fyne build" is used without icon metadata
    • Detect and use recent Android NDK toolchain
    • Handle fyne package -release and fyne release properly for Android and iOS
    • Fix issue with mobile simulation when systray used
    • Fix incorrect size and position for radio focus indicator (#3137)
    Source code(tar.gz)
    Source code(zip)
  • v2.2.2(Jun 30, 2022)

    In this release we updated applications so that if a system tray icon was visible the app would not exit when the last window closes. You can still set a window to be master if you would like the app to exit on close.

    We also have a great list of fixes to the command line and various widgets as follows:

    • Windows missing version metadata when packaged (#3046)
    • Fyne package would not build apps using old Fyne versions
    • System tray icon may not be removed on app exit in Windows
    • Emphasis in Markdown gives erroneous output in RichText (#2974)
    • When last visible window is closed, hidden window is set visible (#3059)
    • Do not close app when last window is closed but systrayMenu exists (#3092)
    • Image with ImageFillOriginal not showing (#3102)
    • Fix build issue with web target from macOS computers
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Jun 12, 2022)

    Apologies to a couple of our users who found issues with the v2.2.0 release. These fixes resolve the reported problems plus some high severity bugs.

    • Fix various race conditions and compatibility issues with System tray menus
    • Resolve issue where macOS systray menu may not appear
    • Updated yaml dependency to fix CVE-2022-28948
    • Tab buttons stop working after removing a tab (#3050)
    • os.SetEnv("FYNE_FONT") doesn't work in v2.2.0 (#3056)
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Jun 7, 2022)

    The exciting v2.2.0 is finally here and it has a long list of improvements bundled in. Top of the exciting features are sure to be the support for desktop system tray menus, the ability to run your Fyne apps through a web browser (technical preview - not feature complete) and also to specify themes more easily using JSON resources.

    Highlighted additions

    • Add SetIcon method on ToolbarAction (#2475)
    • Access compiled app metadata using new App.Metadata() method
    • Add support for System tray icon and menu (#283)
    • Support for Android Application Bundle (.aab) (#2663)
    • Initial support for OpenBSD and NetBSD
    • Add keyboard shortcuts to menu (#682)
    • Add technical preview of web driver and fyne serve command
    • Added iossimulator build target (#1917)
    • Allow dynamic themes via JSON templates (#211)
    • Custom hyperlink callback (#2979)
    • Add support for .ico file when compiling for windows (#2412)
    • Add binding.NewStringWithFormat (#2890)
    • Add Entry.SetMinRowsVisible
    • Add Menu.Refresh() and MainMenu.Refresh() (#2853)
    • Packages for Linux and BSD now support installing into the home directory
    • Add .RemoveAll() to containers
    • Add an AllString validator for chaining together string validators


    There are also a few changes that may be of note for some developers - there is a small chance you might need to update some code as a result, but none of them are breaking changes:

    • Toolbar item constructors now return concrete types instead of ToolbarItem
    • Low importance buttons no longer draw button color as a background
    • ProgressBar widget height is now consistent with other widgets
    • Include check in DocTabs menu to show current tab
    • Don't call OnScrolled if offset did not change (#2646)
    • Prefer ANDROID_NDK_HOME over the ANDROID_HOME ndk-bundle location (#2920)
    • Support serialisation / deserialisation of the widget tree (#5)
    • Better error reporting / handling when OpenGL is not available (#2689)
    • Memory is now better reclaimed on Android when the OS requests it
    • Notifications on Linux and BSD now show the application icon
    • Change listeners for preferences no longer run when setting the same value
    • The file dialog now shows extensions in the list view for better readability
    • Many optimisations and widget performance enhancements
    • Updated various dependencies to their latest versions

    So there you go. There are many, many bug fixes as well but we didn't want to bore you with them - just check the bug tracker :). Let us know how you get on and have a great time building even more awesome apps!

    Source code(tar.gz)
    Source code(zip)
  • v2.1.4(Mar 17, 2022)

    Just a few small fixes that improve stability of rapidly changing containers and fixes a sizing issue for some fixed size windows.


    • SetTheme() is not fully effective for widget.Form (
    • FolderOpenDialog SetDismissText is ineffective (
    • window.Resize() does not work if SetFixedSize(true) is set after (
    • Container.Remove() race causes crash (,,
    • FixedSize Window improperly sized if contains image with ImageFillOriginal (
    Source code(tar.gz)
    Source code(zip)
  • v2.1.3(Feb 25, 2022)

    As we continue work on the v2.2.0 release we wanted to get a few bug fixes delivered as well, these include:

    • The text on button can't be show correctly when use imported font (#2512)
    • Fix issues with DocTabs scrolling (#2709)
    • Fix possible crash for tapping extended Radio or Check item
    • Resolve lookup of relative icons in FyneApp.toml
    • Window not shown when SetFixedSize is used without Resize (#2784)
    • Text and links in markdown can be rendered on top of each other (#2695)
    • Incorrect cursor movement in a multiline entry with wrapping (#2698)

    We'll see you again soon with some great feature additions!

    Source code(tar.gz)
    Source code(zip)
  • v2.1.2(Dec 6, 2021)

    This bug fix release on the 2.1 feature set of Fyne brings various stability improvements amd re-introduces support for older macOS devices. You can use the -tags legacy to add support for older SDKs that are no longer supported by the OS provider.


    • Scrolling list bound to data programatically causes nil pointer dereference (#2549)
    • Rich text from markdown can get newlines wrong (#2589)
    • Fix crash on 32bit operating systems (#2603)
    • Compile failure on MacOS 10.12 Sierra (#2478)
    • Don't focus widgets on mobile where keyboard should not display (#2598)
    • storage.List doesn't return complete URI on Android for "content:" scheme (#2619)
    • Last word of the line and first word of the next line are joined in markdown parse (#2647)
    • Support for building cmd/fyne on Windows arm64
    • Fixed FreeBSD requiring installed glfw library dependency (#1928)
    • Apple M1: error when using mouse drag to resize window (#2188)
    • Struct binding panics in reload with slice field (#2607)
    • File Dialog favourites can break for certain locations (#2595)
    • Define user friendly names for Android Apps (#2653)
    • Entry validator not updating if content is changed via data binding after SetContent (#2639)
    • CenterOnScreen not working for FixedSize Window (#2550)
    • Panic in boundStringListItem.Get() (#2643)
    • Can't set an app/window icon to be an svg. (#1196)
    • SetFullScreen(false) can give error (#2588)

    As always please let us know how you find this release so we can keep on improving!

    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Oct 22, 2021)

    The following list of fixes are included:

    • Fix issue where table could select cells beyond data bound
    • Some fast taps could be ignored (#2484)
    • iOS app stops re-drawing mid-frame after a while (#950)
    • Mobile simulation mode did not work on Apple M1 computers
    • TextGrid background color can show gaps in render (#2493)
    • Fix alignment of files in list view of file dialog
    • Crash setting visible window on macOS to fixed size (#2488)
    • fyne bundle ignores -name flag in windows (#2395)
    • Lines with nil colour would crash renderer
    • Android -nm tool not found with NDK 23 (#2498)
    • Runtime panic because out of touchID (#2407)
    • Long text in Select boxes overflows out of the box (#2522)
    • Calling SetText on Label may not refresh correctly
    • Menu can be triggered by # key but not always Alt
    • Cursor position updates twice with delay (#2525)
    • widgets freeze after being in background and then a crash upon pop-up menu (#2536)
    • too many Refresh() calls may now cause visual artifacts in the List widget (#2548)
    • Entry.SetText may panic if called on a multiline entry with selected text (#2482)
    • TextGrid not always drawing correctly when resized (#2501)
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Sep 21, 2021)

    The v2.1.0 release represents a huge step forward since 2.0 - just as many commits as went into the v2.0.0 release! We added new widgets, a Lifecycle API, storage helpers, build metadata and lots of optimisations too. Check out the full release below and let us know what you think :)

    Note that custom focusable widgets will not automatically be focussed on tap any more, you may wish to update your code so it requests focus on tapped (see


    • DocTabs container for handling multiple open files
    • Lifecycle API for handling foreground, background and other event
    • Add RichText widget and Markdown parser
    • Add TabWidth to TextStyle to specify tab size in spaces
    • Add CheckGroup widget for multi-select
    • Add FyneApp.toml metadata file to ease build commands
    • Include http and https in standard repositories
    • Add selection color to themes
    • Include baseline information in driver font measurement
    • Document storage API (App.Storage().Create() and others)
    • Add "App Files" to file dialog for apps that use document storage
    • Tab overflow on AppTabs
    • Add URI and Unbound type to data bindings
    • Add keyboard support for menus, pop-ups and buttons
    • Add SimpleRenderer to help make simple widgets (#709)
    • Add scroll functions for List, Table, Tree (#1892)
    • Add selection and disabling to MenuItem
    • Add Alignment to widget.Select (#2329)
    • Expose ScanCode for keyboard events originating from hardware (#1523)
    • Support macOS GPU switching (#2423)


    • Focusable widgets are no longer focused on tap, add canvas.Focus(obj) in Tapped handler if required
    • Move to background based selection for List, Table and Tree
    • Update fyne command line tool to use --posix style parameters
    • Switch from gz to xz compression for unix packages
    • Performance improvements with line, text and raster rendering
    • Items not yet visible can no longer be focused
    • Lines can now be drawn down to 1px (instead of 1dp) (#2298)
    • Support multiple lines of text on button (#2378)
    • Improved text layout speed by caching string size calculations
    • Updated to require Go 1.14 so we can use some new features
    • Window Resize request is now asynchronous
    • Up/Down keys take cursor home/end when on first/last lines respectively


    • Correctly align text tabs (#1791)
    • Mobile apps theme does not match system (#472)
    • Toolbar with widget.Label makes the ToolbarAction buttons higher (#2257)
    • Memory leaks in renderers and canvases cache maps (#735)
    • FileDialog SetFilter does not work on Android devices (#2353)
    • Hover fix for List and Tree with Draggable objects
    • Line resize can flip slope (#2208)
    • Deadlocks when using widgets with data (#2348)
    • Changing input type with keyboard visible would not update soft keyboards
    • MainMenu() Close item does NOT call function defined in SetCloseIntercept (#2355)
    • Entry cursor position with mouse is offset vertically by theme.SizeNameInputBorder (#2387)
    • Backspace key is not working on Android AOSP (#1941)
    • macOS: 'NSUserNotification' has been deprecated (#1833)
    • macOS: Native menu would add new items if refreshed
    • iOS builds fail since Go 1.16
    • Re-add support for 32 bit iOS devices, if built with Go 1.14
    • Android builds fail on Apple M1 (#2439)
    • SetFullScreen(true) before ShowAndRun fails (#2446)
    • Interacting with another app when window.SetFullScreen(true) will cause the application to hide itself. (#2448)
    • Sequential writes to preferences does not save to file (#2449)
    • Correct Android keyboard handling (#2447)
    • MIUI-Android: The widget’s Hyperlink cannot open the URL (#1514)
    • Improved performance of data binding conversions and text MinSize
    Source code(tar.gz)
    Source code(zip)
  • v2.0.4(Aug 6, 2021)

    The latest set of fixes on top of the 2.0 version of Fyne brings stability improvements, speedups to many widgets and a variety of other bug fixes. Additionally we have updated the fyne tool to build using Android SDK 30 and resolved some issues with windows cross-compilation.


    • Disable Form labels when the element it applies to is disabled (#1530)
    • Entry popup menu now fires shortcuts so extended widgets can intercept
    • Update Android builds to SDK 30


    • sendnotification show appID for name on windows (#1940)
    • Fix accidental removal of windows builds during cross-compile
    • Removing an item from a container did not update layout
    • Update title bar on Windows 10 to match OS theme (#2184)
    • Tapped triggered after Drag (#2235)
    • Improved documentation and example code for file dialog (#2156)
    • Preferences file gets unexpectedly cleared (#2241)
    • Extra row dividers rendered on using SetColumnWidth to update a table (#2266)
    • Fix resizing fullscreen issue
    • Fullscreen changes my display resolution when showing a dialog (#1832)
    • Entry validation does not work for empty field (#2179)
    • Tab support for focus handling missing on mobile
    • ScrollToBottom not always scrolling all the way when items added to container.Scroller
    • Fixed scrollbar disappearing after changing content (#2303)
    • Calling SetContent a second time with the same content will not show
    • Drawing text can panic when Color is nil (#2347)
    • Optimisations when drawing transparent rectangle or whitespace strings
    Source code(tar.gz)
    Source code(zip)
  • v2.0.3(Apr 30, 2021)

    This latest release of the 2.0.x branch brings a host of new fixes from reported issues. We also worked to optimise rendering performance of TextGrid and supported compiling on the newly released FreeBSD 13.

    Fixes include

    • Optimisations for TextGrid rendering
    • Data binding with widget.List sometimes crash while scrolling (#2125)
    • Fix compilation on FreeBSD 13
    • DataLists should notify only once when change.
    • Keyboard will appear on Android in disabled Entry Widget (#2139)
    • Save dialog with filename for Android
    • form widget can't draw hinttext of appended item. (#2028)
    • Don't create empty shortcuts (#2148)
    • Install directory for windows install command contains ".exe"
    • Fix compilation for Linux Wayland apps
    • Fix tab button layout on mobile (#2117)
    • Options popup does not move if a SelectEntry widget moves with popup open
    • Speed improvements to Select and SelectEntry drop down
    • theme/fonts has an apache LICENSE file but it should have SIL OFL (#2193)
    • Fix build requirements for target macOS platforms (#2154)
    • ScrollEvent.Position and ScrollEvent.AbsolutePosition is 0,0 (#2199)

    We hope this improves your Fyne experience, please get in touch if you have any questions or feedback.

    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Apr 1, 2021)

    Various changes since 2.0.1 that help to improve stability and performance of the v2.0.x release line.


    • Text can now be copied from a disable Entry using keyboard shortcuts


    • Slider offset position could be incorrect for mobile apps
    • Correct error in example code
    • When graphics init fails then don't try to continue running (#1593)
    • Don't show global settings on mobile in fyne_demo as it's not supported (#2062)
    • Empty selection would render small rectangle in Entry
    • Do not show validation state for disabled Entry
    • dialog.ShowFileSave did not support mobile (#2076)
    • Fix issue that storage could not write to files on iOS and Android
    • mobile app could crash in some focus calls
    • Duplicate symbol error when compiling for Android with NDK 23 (#2064)
    • Add internet permission by default for Android apps (#1715)
    • Child and Parent support in storage were missing for mobile appps
    • Various crashes with Entry and multiline selections (including #1989)
    • Slider calls OnChanged for each value between steps (#1748)
    • fyne command doesn't remove temporary binary from src (#1910)
    • Advanced Color picker on mobile keeps updating values forever after sliding (#2075)
    • exec.Command and widget.Button combination not working (#1857)
    • After clicking a link on macOS, click everywhere in the app will be linked (#2112)
    • Text selection - Shift+Tab bug (#1787)

    If you have any feedback please get in touch.

    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Mar 4, 2021)

    Following the large v2.0.0 feature release we bring a list of bug fixes that correct unexpected issues arising. The main highlight is support for compiling on the Apple M1 processor, plus various enhancements to dialog resizing.

    The list reported issues resolve is as follows:


    • An Entry with Wrapping=fyne.TextWrapOff no longer blocks scroll events from a parent


    • Error compiling fyne on Apple M1 arm64 (#1739)
    • Dialog.Resize() has no effect if called before Dialog.Show() (#1863)
    • SelectTab does not always correctly set the blue underline to the selected tab (#1872)
    • Entry Validation Broken when using Data binding (#1890)
    • android runtime error with fyne.dialog (#1896)
    • List widget panic when refreshing after changing content length (#1864)
    • Pointer and cursor misalignment in widget.Entry (#1937)
    • SIGSEGV Sometimes When Closing a Program by Clicking a Button (#1604)
    • Advanced Color Picker shows Black for custom primary color as RGBA (#1970)
    • Canvas.Focus() before window visible causes application to crash (#1893)
    • Menu over Content (#1973)
    • Cells are not getting draw in correct location after column resize. (#1951)
    • Possible panic when selecting text in a widget.Entry (#1983)
    • Form validation doesn't enable submit button (#1965)
    • Creating a window shows it before calling .Show() and .Hide() does not work (#1835)
    • Dialogs are not refreshed correctly on .Show() (#1866)
    • Failed creating setting storage : no such directory (#2023)
    • Erroneous custom filter types not supported error on mobile (#2012)
    • High importance button show no hovered state (#1785)
    • List widget does not render all visible content after content data gets shorter (#1948)
    • Calling Select on List before draw can crash (#1960)
    • Dialog not resizing in newly created window (#1692)
    • Dialog not returning to requested size (#1382)
    • Entry without scrollable content prevents scrolling of outside scroller (#1939)
    • fyne_demo crash after selecting custom Theme and table (#2018)
    • Table widget crash when scrolling rapidly (#1887)
    • Cursor animation sometimes distorts the text (#1778)
    • Extended password entry panics when password revealer is clicked (#2036)
    • Data binding limited to 1024 simultaneous operations (#1838)
    • Custom theme does not refresh when variant changes (#2006)
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Jan 25, 2021)

    The v2.0.0 release of Fyne marks a big step in the development of the project. It was a chance to step back, see what was working well and what could be improved - and then make the changes in a way that had not been possible whilst maintaining 1.0 compatibility. As a result there are some breaking changes to point the APIs in a better direction for the future. Additionally this means that the import path has now changed to following the go module convention.

    This release also sees the introduction of data binding (that keeps widgets in sync with a data source), storage repositories (allowing developers to connect different types of file stores to our APIs), animation (to give some motion to elements of an application) and a new theme API (that allows more flexible theming of standard components).

    The full list of changes follow. Before upgrading an existing project please be sure to read the upgrading doc for information about relevant changes.

    Changes that are not backward compatible

    The import path is now - be sure to update all files when you are ready to make the update.

    • Coordinate system to float32

      • Size and Position units were changed from int to float32
      • Text.TextSize moved to float32 and fyne.MeasureText now takes a float32 size parameter
      • Removed Size.Union (use Size.Max instead)
      • Added fyne.Delta for difference-based X, Y float32 representation
      • DraggedEvent.DraggedX and DraggedY (int, int) to DraggedEvent.Dragged (Delta)
      • ScrollEvent.DeltaX and DeltaY (int, int) moved to ScrollEvent.Scrolled (Delta)
    • Theme API update

      • fyne.Theme moved to fyne.LegacyTheme and can be load to a new theme using theme.FromLegacy
      • A new, more flexible, Theme interface has been created that we encourage developers to use
    • The second parameter of theme.NewThemedResource was removed, it was previously ignored

    • The desktop.Cursor definition was renamed desktop.StandardCursor to make way for custom cursors

    • Button Style and HideShadow were removed, use Importance

    • iOS apps preferences will be lost in this upgrade as we move to more advanced storage

    • Dialogs no longer show when created, unless using the ShowXxx convenience methods

    • Entry widget now contains scrolling so should no longer be wrapped in a scroll container

    • Removed deprecated types including:

      • dialog.FileIcon (now widget.FileIcon)
      • widget.Radio (now widget.RadioGroup)
      • widget.AccordionContainer (now widget.Accordion)
      • layout.NewFixedGridLayout() (now layout.NewGridWrapLayout())
      • widget.ScrollContainer (now container.Scroll)
      • widget.SplitContainer (now container.Spilt)
      • widget.Group (replaced by widget.Card)
      • widget.Box (now container.NewH/VBox, with Children field moved to Objects)
      • widget.TabContainer and widget.AppTabs (now container.AppTabs)
    • Many deprecated fields have been removed, replacements listed in API docs 1.4

      • for specific information you can browse


    • Data binding API to connect data sources to widgets and sync data
      • Add preferences data binding and Preferences.AddChangeListener
      • Add bind support to Check, Entry, Label, List, ProgressBar and Slider widgets
    • Animation API for handling smooth element transitions
      • Add animations to buttons, tabs and entry cursor
    • Storage repository API for connecting custom file sources
      • Add storage functions Copy, Delete and Move for URI
      • Add CanRead, CanWrite and CanList to storage APIs
    • New Theme API for easier customisation of apps
      • Add ability for custom themes to support light/dark preference
      • Support for custom icons in theme definition
      • New theme.FromLegacy helper to use old theme API definitions
    • Add fyne.Vector for managing x/y float32 coordinates
    • Add MouseButtonTertiary for middle mouse button events on desktop
    • Add canvas.ImageScaleFastest for faster, less precise, scaling
    • Add new dialog.Form that will phase out dialog.Entry
    • Add keyboard control for main menu
    • Add Scroll.OnScrolled event for seeing changes in scroll container
    • Add TextStyle and OnSubmitted to Entry widget
    • Add support for HintText and showing validation errors in Form widget
    • Added basic support for tab character in Entry, Label and TextGrid


    • Coordinate system is now float32 - see breaking changes above
    • ScrollEvent and DragEvent moved to Delta from (int, int)
    • Change bundled resources to use more efficient string storage
    • Left and Right mouse buttons on Desktop are being moved to MouseButtonPrimary and MouseButtonSecondary
    • Many optimisations and widget performance enhancements
    • Moving to new container.New() and container.NewWithoutLayout() constructors (replacing fyne.NewContainer and fyne.NewContainerWithoutLayout)
    • Moving storage APIs OpenFileFromURI, SaveFileToURI and ListerForURI to Reader, Writer and List functions


    • Validating a widget in widget.Form before renderer was created could cause a panic
    • Added file and folder support for mobile simulation support (#1470)
    • Appending options to a disabled widget.RadioGroup shows them as enabled (#1697)
    • Toggling toolbar icons does not refresh (#1809)
    • Black screen when slide up application on iPhone (#1610)
    • Properly align Label in FormItem (#1531)
    • Mobile dropdowns are too low (#1771)
    • Cursor does not go down to next line with wrapping (#1737)
    • Entry: while adding text beyond visible reagion there is no auto-scroll (#912)
    Source code(tar.gz)
    Source code(zip)
  • v1.4.3(Jan 4, 2021)

    We hope that everyone had a good holiday and enjoyed the festivities. Now that 2021 is here we are hard back at work, here is the latest bugfix release with a load of tasty fixes for you :).


    • Fix crash when showing file open dialog on iPadOS
    • Fix possible missing icon on initial show of disabled button
    • Capturing a canvas on macOS retina display would not capture full resolution
    • Fix the release build flag for mobile
    • Fix possible race conditions for canvas capture
    • Fix tree, so it refreshes visible nodes on Refresh()
    • TabContainer Panic when removing selected tab (#1668)
    • Incorrect clipping behaviour with nested scroll containers (#1682)
    • MacOS Notifications are not shown on subsequent app runs (#1699)
    • Fix the behavior when dragging the divider of split container (#1618)

    We are hard at work for the 2.0 release now which should be with you in 3 weeks.

    Source code(tar.gz)
    Source code(zip)
  • v1.4.2(Dec 9, 2020)

    In this bugfix release we delivered a number of improvements to the fyne command that give more control when building releases and completes the code signing of macOS apps for the App Store as well!

    A number of other fixes including improvements to Entry validation and Android keyboards are included as well.


    • [fyne-cli] Add support for passing custom build tags (#1538)


    • Run validation on content change instead of on each Refresh in widget.Entry


    • [fyne-cli] Android: allow to specify an inline password for the keystore
    • Fixed Card widget MinSize (#1581)
    • Fix missing release tag to enable BuildRelease in Settings.BuildType()
    • Dialog shadow does not resize after Refresh (#1370)
    • Android Duplicate Number Entry (#1256)
    • Support older macOS by default - back to 10.11 (#886)
    • Complete certification of macOS App Store releases (#1443)
    • Fix compilation errors for early stage Wayland testing
    • Fix entry.SetValidationError() not working correctly
    Source code(tar.gz)
    Source code(zip)
  • v1.4.1(Nov 20, 2020)

    After a successful v1.4.0 release we wanted to clear up a few bugs and add some items that didn't get there in time :). The highlights for many developers will be:

    • iOS App Store uploads now successful using "fyne release" command
    • macOS menu bar initially doesn't respond to mouse input in Catalina
    • Adding SetColumnWidth for Table

    The full list of changes is as follows:


    • Table columns can now be different sizes using SetColumnWidth
    • Avoid unnecessary validation check on Refresh in widget.Form


    • Tree could flicker on mouse hover (#1488)
    • Content of table cells could overflow when sized correctly
    • file:// based URI on Android would fail to list folder (#1495)
    • Images in iOS release were not all correct size (#1498)
    • iOS compile failed with Go 1.15 (#1497)
    • Possible crash when minimising app containing List on Windows
    • File chooser dialog ignores drive Z (#1513)
    • Entry copy/paste is crashing on android 7.1 (#1511)
    • Fyne package creating invalid windows packages (#1521)
    • Menu bar initially doesn't respond to mouse input on macOS (#505)
    • iOS: Missing CFBundleIconName and asset catalog (#1504)
    • CenterOnScreen causes crash on MacOS when called from goroutine (#1539)
    • desktop.MouseHover Button state is not reliable (#1533)
    • Initial validation status in widget.Form is not respected
    • Fix nil reference in disabled buttons (#1558)
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Nov 4, 2020)

    The 1.4 release is a huge step forward for the Fyne project. as well as refreshing the theme and bringing a host new features we are introducing a new type of widget - the /Collection Widgets/. These are designed for high performance display of large data sets as either List, Table or Tree. As always let us know your feedback so we can keep making the toolkit better!

    Added (highlights)

    • List (#156), Table (#157) and Tree collection Widgets

    • Card, FileItem, Separator widgets

    • ColorPicker dialog

    • User selection of primary colour

    • Container API package to ease using layouts and container widgets

    • Add input validation

    • ListableURI for working with directories etc

    • Added PaddedLayout

    • Window.SetCloseIntercept (#467)

    • Canvas.InteractiveArea() to indicate where widgets should avoid

    • TextFormatter for ProgressBar

    • FileDialog.SetLocation() (#821)

    • Added dialog.ShowFolderOpen (#941)

    • Support to install on iOS and android with 'fyne install'

    • Support asset bundling with go:generate

    • Add fyne release command for preparing signed apps

    • Add keyboard and focus support to Radio and Select widgets


    • Theme update - new blue highlight, move buttons to outline

    • Android SDK target updated to 29

    • Mobile log entries now start "Fyne" instead of "GoLog"

    • Don't expand Select to its largest option (#1247)

    • Button.HideShadow replaced by Button.Importance = LowImportance

    • Deprecate NewContainer in favour of NewContainerWithoutLayout

    • Deprecate HBox and VBox in favour of new container APIs

    • Move Container.AddObject to Container.Add matching Container.Remove

    • Start move from widget.TabContainer to container.AppTabs

    • Replace Radio with RadioGroup

    • Deprecate WidgetRenderer.BackgroundColor


    • Support focus traversal in dialog (#948), (#948)

    • Add missing AbsolutePosition in some mouse events (#1274)

    • Don't let scrollbar handle become too small

    • Ensure tab children are resized before being shown (#1331)

    • Don't hang if OpenURL loads browser (#1332)

    • Content not filling dialog (#1360)

    • Overlays not adjusting on orientation change in mobile (#1334)

    • Fix missing key events for some keypad keys (#1325)

    • Issue with non-english folder names in Linux favourites (#1248)

    • Fix overlays escaping screen interactive bounds (#1358)

    • Key events not blocked by overlays (#814)

    • Update scroll container content if it is changed (#1341)

    • Respect SelectEntry datta changes on refresh (#1462)

    • Incorrect SelectEntry dropdown button position (#1361)

    • don't allow both single and double tap events to fire (#1381)

    • Fix issue where long or tall images could jump on load (#1266, #1432)

    • Weird behaviour when resizing or minimizing a ScrollContainer (#1245)

    • Fix panic on NewTextGrid().Text()

    • Fix issue where scrollbar could jump after mousewheel scroll

    • Add missing raster support in software render

    • Respect GOOS/GOARCH in fyne command utilities

    • BSD support in build tools

    • SVG Cache could return the incorrect resource (#1479)

    • Many optimisations and widget performance enhancements

    • Various fixes to file creation and saving on mobile devices

    Source code(tar.gz)
    Source code(zip)
  • v1.3.3(Aug 10, 2020)

    Version 1.3.3 brings many bug fixes and some minor enhancements to the file picker dialog. Thanks for all the feedback, enjoy this update :)


    • Use icons for file dialog favourites (#1186)
    • Add ScrollContainer ScrollToBottom and ScrollToTop


    • Make file filter case sensitive (#1185)


    • Allow popups to create dialogs (#1176)
    • Use default cursor for dragging scrollbars (#1172)
    • Correctly parse SVG files with missing X/Y for rect
    • Fix visibility of Entry placeholder when text is set (#1193)
    • Fix encoding issue with Windows notifications (#1191)
    • Fix issue where content expanding on Windows could freeze (#1189)
    • Fix errors on Windows when reloading Fyne settings (#1165)
    • Dialogs not updating theme correctly (#1201)
    • Update the extended progressbar on refresh (#1219)
    • Segfault if font fails (#1200)
    • Slider rendering incorrectly when window maximized (#1223)
    • Changing form label not refreshed (#1231)
    • Files and folders starting "." show no name (#1235)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.2(Jul 8, 2020)

    Release v1.3.2 provides much smoother resize and refresh of windows and scroll containers. There are also various other bug fixes and improvements including the following highlights:


    • Linux packaged apps now include a Makefile to aid install


    • Fyne package supports specific architectures for Android
    • Reset missing textures on refresh
    • Custom confirm callbacks now called on implicitly shown dialogs
    • SelectEntry can update drop-down list during OnChanged callback
    • TextGrid whitespace color now matches theme changes
    • Order of Window Resize(), SetFixedSize() and CenterOnScreen() does no matter before Show()
    • Containers now refresh their visuals as well as their Children on Refresh()


    • Capped StrokeWidth on canvas.Line (#831)
    • Canvas lines, rectangles and circles do not resize and refresh correctly
    • Black flickering on resize on MacOS and OS X (possibly not on Catalina) (#1122)
    • Crash when resizing window under macOS (#1051, #1140)
    • Set SetFixedSize to true, the menus are overlapped (#1105)
    • Ctrl+v into text input field crashes app. Presumably clipboard is empty (#1123, #1132)
    • Slider default value doesn't stay inside range (#1128)
    • The position of window is changed when status change from show to hide, then to show (#1116)
    • Creating a windows inside onClose handler causes Fyne to panic (#1106)
    • Backspace in entry after SetText("") can crash (#1096)
    • Empty main menu causes panic (#1073)
    • Installing using fyne install on Linux now works on distrubutions that don't use /usr/local
    • Fix recommendations from staticcheck
    • Unable to overwrite file when using dialog.ShowFileSave (#1168)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Jun 5, 2020)

    After a lot of hard work (over 1000 commits) by our hard working team (including many new contributors) we are excited to announce our v1.3 release!

    The main API additions are file dialogs for opening files across all our platforms (though on mobile save will arrive a little later), simple notifications to alert your users, some cross-platform file IO handling and new widgets including Accordion, SplitContainer and TextGrid.

    We also added splash windows, image scaling configuration and the ability to set cursors and keyboard hints where platforms support that. Please dive in and let us know how you find this huge update.


    • File open and save dialogs (#225)
    • Add notifications support (#398)
    • Add text wrap support (#332)
    • Add Accordion widget (#206)
    • Add TextGrid widget (#115)
    • Add SplitContainer widget (#205)
    • Add new URI type and handlers for cross-platform data access
    • Desktop apps can now create splash windows
    • Add ScaleMode to images, new ImageScalePixels feature for retro graphics
    • Allow widgets to influence mouse cursor style (#726)
    • Support changing the text on form submit/cancel buttons
    • Support reporting CapsLock key events (#552)
    • Add OnClosed callback for Dialog
    • Add new image test helpers for validating render output
    • Support showing different types of soft keyboard on mobile devices (#971, #975)


    • Upgraded underlying GLFW library to fix various issues (#183, #61)
    • Add submenu support and hover effects (#395)
    • Default to non-premultiplied alpha (NRGBA) across toolkit
    • Rename FixedGridLayout to GridWrapLayout (deprecate old API) (#836)
    • Windows redraw and animations continue on window resize and move
    • New...PopUp() methods are being replaced by Show...Popup() or New...Popup().Show()
    • Apps started on a goroutine will now panic as this is not supported
    • On Linux apps now simulate 120DPI instead of 96DPI
    • Improved fyne_settings scale picking user interface
    • Reorganised fyne_demo to accomodate growing collection of widgets and containers
    • Rendering now happens on a different thread to events for more consistent drawing
    • Improved text selection on mobile devices

    Fixed (highlights)

    • Panic when trying to paste empty clipboard into entry (#743)
    • Scale does not match user configuration in Windows 10 (#635)
    • Copy/Paste not working on Entry Field in Windows OS (#981)
    • Select widgets with many options overflow UI without scrolling (#675)
    • android: typing in entry expands only after full refresh (#972)
    • iOS app stops re-drawing mid frame after a while (#950)
    • Too many successive GUI updates do not properly update the view (904)
    • iOS apps would not build using Apple's new certificates
    • Preserve aspect ratio in SVG stroke drawing (#976)
    • Fixed many race conditions in widget data handling
    • Various crashes and render glitches in extended widgets
    • Fix security issues reported by gosec (#742)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.4(Apr 13, 2020)

    The 1.2.4 release brings on improvements on previous 1.2 releases and in particular focuses on mobile runtime. Fyne apps will now layout inside the screen "safe area" so no more gaps or overlaps with soft buttons or cutouts. Also we have added clipboard integration for iOS and Android and fixed issues with some Android virtual keyboards.

    This release also adds some helpful tools to the fyne command to help manage code and report new issues as this is the last 1.2.x release as we focus on the larger 1.3 feature release.


    • Added Direction field to ScrollContainer and NewHScrollContainer, NewVScrollContainer constructors (#763)
    • Added Scroller.SetMinSize() to enable better defaults for scrolled content
    • Added "fyne vendor" subcommand to help packaging fyne dependencies in projects
    • Added "fyne version" subcommand to help with bug reporting (#656)
    • Clipboard (cut/copy/paste) is now supported on iOS and Android (#414)
    • Preferences.RemoveValue() now allows deletion of a stored user preference


    • Report keys based on name not key code - fixes issue with shortcuts with AZERTY (#790)


    • Mobile builds now support go modules (#660)
    • Building for mobile would try to run desktop build first
    • Mobile apps now draw the full safe area on a screen (#799)
    • Preferences were not stored on mobile apps (#779)
    • Window on Windows is not controllable after exiting FullScreen mode (#727)
    • Soft keyboard not working on some Samsung/LG smart phones (#787)
    • Selecting a tab on extended TabContainer doesn't refresh button (#810)
    • Appending tab to empty TabContainer causes divide by zero on mobile (#820)
    • Application crashes on startup (#816)
    • Form does not always update on theme change (#842)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.3(Mar 2, 2020)

    The 1.2.3 release adds to previous 1.2 releases with some new features and a focus on improving support for older and low powered Android devices. This improves support for preparing mobile app releases using the builtin tools.


    • Add media and volume icons to default themes (#649)
    • Add Canvas.PixelCoordinateForPosition to find pixel locations if required
    • Add ProgressInfinite dialog


    • Warn if -executable or -sourceDir flags are used for package on mobile (#652)
    • Update scale based on device for mobile apps
    • Windows without a title will now be named "Fyne Application"
    • Revert fix to quit mobile apps - this is not allowed in guidelines


    • App.UniqueID() did not return current app ID
    • Fyne package ignored -name flag for ios and android builds (#657)
    • Possible crash when appending tabs to TabContainer
    • FixedSize windows not rescaling when dragged between monitors (#654)
    • Fix issues where older Android devices may not background or rotate (#677)
    • Crash when setting theme before window content set (#688)
    • Correct form extend behaviour (#694)
    • Select drop-down width is wrong if the drop-down is too tall for the window (#706)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Jan 29, 2020)

    The 1.2.2 release covers mostly the cases where some widgets did not extend correctly or could cause crashes. We have also updated the Scale handling so that it better matches operating system specifics - the user value is now relative to the OS default, which should mean that in all places setting "1.0" will mean that Fyne apps appear at the same scale as existing apps. There are also some new APIs added following requests.


    • Add SelectedText() function to Entry widget
    • New mobile.Device interface exposing ShowVirtualKeyboard() (and Hide...)


    • Scale calculations are now relative to system scale - the default "1.0" matches the system
    • Update scale on Linux to be "auto" by default (and numbers are relative to 96DPI standard) (#595)
    • When auto scaling check the monitor in the middle of the window, not top left
    • bundled files now have a standard header to optimise some tools like go report card
    • Shortcuts are now handled by the event queue - fixed possible deadlock


    • Scroll horizontally when holding shift key (#579)
    • Updating text and calling refresh for widget doesn't work (#607)
    • Corrected visual behaviour of extended widgets including Entry, Select, Check, Radio and Icon (#615)
    • Entries and Selects that are extended would crash on right click.
    • PasswordEntry created from Entry with Password = true has no revealer
    • Dialog width not always sufficient for title
    • Pasting unicode characters could panic (#597)
    • Setting theme before application start panics on macOS (#626)
    • MenuItem type conflicts with other projects (#632)

    As always please report any new issues that are found. We are busy working away on 1.3 now but we want to continue to improve the existing code as well :).

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Dec 24, 2019)

    A selection of bug fixes and improvements following our 1.2 release.


    • Add TouchDown, TouchUp and TouchCancel API in driver/mobile for device specific events
    • Add support for adding and removing tabs from a tab container (#444)


    • Issues when settings changes may not be monitored (#576)
    • Layout of hidden tab container contents on mobile (#578)
    • Mobile apps would not quit when Quit() was called (#580)
    • Shadows disappeared when theme changes (#589)
    • iOS apps could stop rendering after many refreshes (#584)
    • Fyne package could fail on Windows (#586)
    • Horizontal only scroll container may not refresh using scroll wheel
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Dec 13, 2019)

    The 1.2 release of the fyne toolkit marks an exciting milestone in the project as we now support building for iOS and Android devices as well as macOS, Windows, Linux and BSD. We also vastly improved the developer experience for creating your own widgets and extending existing widgets to add custom functionality.

    This update follows nearly 500 commits of hard work, the following list is an overview of the main points.


    • Mobile support - iOS and Android, including "fyne package" command
    • Support for OpenGL ES and embedded linux
    • New BaseWidget for building custom widgets
    • Support for diagonal gradients
    • Global settings are now saved and can be set using the new fyne_settings app
    • Support rendering in Go playground using playground.Render() helpers
    • "fyne install" command to package and install apps on the local computer
    • Add horizontal scrolling to ScrollContainer
    • Add preferences API
    • Add show/hide password icon when created from NewPasswordEntry
    • Add NewGridLayoutWithRows to specify a grid layout with a set number of rows
    • Add NewAdaptiveGridLayout which uses a column grid layout when horizontal and rows


    • New Logo! Thanks to Storm for his work on this :)
    • Input events now execute one at a time to maintain the correct order
    • FYNE_THEME and FYNE_SCALE are now overrides to the global configuration
    • The first opened window no longer exits the app when closed (unless none others are open or Window.SetMaster() is called)
    • "fyne package" now defaults icon to "Icon.png" so the parameter is optional
    • Calling ExtendBaseWidget() sets up the renderer for extended widgets
    • Bundled images optimised to save space
    • Optimise rendering to reduce refresh on TabContainer and ScrollContainer


    • Correct the colour of Entry widget cursor if theme changes
    • Error where widgets created before main() function could crash (#490)
    • App.Run apnics if called without a window (#527)
    • Support context menu for disabled entry widgets (#488)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0-beta2(Dec 10, 2019)

    This release candidate for 1.2 adds the following items over and above the beta1 release 2 weeks ago.


    • Add show/hide password icon when created from NewPasswordEntry
    • Add NewGridLayoutWithRows to specify a grid layout with a set number of rows
    • Add NewAdaptiveGridLayout which uses a column grid layout when horizontal and rows


    • Bundled images optimised to save space
    • Optimise rendering to reduce refresh on TabContainer and ScrollContainer


    • Support context menu for disabled entry widgets (#488)

    As before please report any bugs so we can polish the final 1.2 release.

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0-beta1(Nov 28, 2019)

    This is an exciting chance to try out the new mobile functionality and code against the new custom widget support before it is finally released later this year.


    This is a prerelease and does not represent a complete solution to all the features listed below. Still to be implemented before the 1.2 final release are:

    • Keyboard support for iOS and Android
    • Clipboard integration for iOS and Android


    • Mobile support - iOS and Android, including "fyne package" command
    • Support for OpenGL ES and embedded linux
    • New BaseWidget for building custom widgets
    • Support for diagonal gradients
    • Global settings are now saved and can be set using the new fyne_settings app
    • Support rendering in Go playground using playground.Render() helpers
    • "fyne install" command to package and install apps on the local computer
    • Add horizontal scrolling to ScrollContainer
    • Add preferences API


    • New Logo! Thanks to Storm for his work on this :)
    • Input events now execute one at a time to maintain the correct order
    • FYNE_THEME and FYNE_SCALE are now overrides to the global configuration
    • The first opened window no longer exits the app when closed (unless none others are open or Window.SetMaster() is called)
    • "fyne package" now defaults icon to "Icon.png" so the parameter is optional
    • Calling ExtendBaseWidget() sets up the renderer for extended widgets


    • Correct the colour of Entry widget cursor if theme changes
    • Error where widgets created before main() function could crash (#490)
    • App.Run apnics if called without a window (#527)

    Please let us know how you get on using this release and report any issues you find so we can make a great 1.2 release.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.2(Oct 12, 2019)

    A bug fix release for the 1.1 release branch. This will probably be the final release before we release 1.2 in November.


    • Default scale value for canvases is now 1.0 instead of Auto (DPI based)


    • Correct icon name in linux packages
    • Fullscreen before showing a window works again
    • Incorrect MinSize of FixedGrid layout in some situations
    • Update text size on theme change
    • Text handling crashes (#411, #484, #485)
    • Layout of image only buttons
    • TabItem.Content changes are reflected when refreshing TabContainer (#456)
    Source code(tar.gz)
    Source code(zip)
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.6k Dec 28, 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.6k Jan 9, 2023
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 388 Dec 11, 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 8.1k Jan 7, 2023
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 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 3 Oct 31, 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
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.7k Dec 30, 2022
Golang bindings for XCGUI, Windows GUI library, DirectUI design idea.

XCGUI 项目文档 帮助文档 程序示例 介绍 English | 简体中文 DirectUI设计思想: 在窗口内没有子窗口,界面元素都是逻辑上的区域(无HWND句柄,安全,灵活), 所有UI元素都是自主开发(不受系统限制), 更加灵活的实现各种程序界面,满足不同用户的需求.

twgh 224 Dec 22, 2022
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.2k Jan 9, 2023
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 Jan 6, 2023
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.6k Jan 6, 2023
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.8k Dec 28, 2022
Cross-platform Go library to place an icon in the host operating system's taskbar.

trayhost Package trayhost is a cross-platform Go library to place an icon in the host operating system's taskbar. Platform Support macOS - Fully imple

null 235 Nov 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 Documentation Document

Milan Nikolic 367 Dec 24, 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 101 Dec 1, 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 868 Dec 24, 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.8k Jan 1, 2023