Fyne is currently developed by a team of volunteers and is supported by around 40 contributors. Members of this group also work on the FyneDesk project to create a new Linux desktop environment. The Fyne toolkit is written primarily in Go. The team focuses on clean APIs and follows the principles of Clean Code to sustain maintainability of the project. All Fyne projects are continuously tested to check correctness, stability as well as formatting and documentation.
Example
The code required for a simple "Hello World" application is minimal, as follows: package main import
To build this application you will need the Go language and a C compiler installed, as well as a graphics driver that supports OpenGL. It an be built and run using the command: $ go run main.go
Design
Design of the Fyne API and user interface components follows a careful process to ensure the simplicity. The Fyne toolkit is built in various layers, with each in separate packages. Notable layers include:
API
, or Application programming interface, is an interface or protocol that allows for communication across different parts of the software. Fyne has a self-documenting API that is also extensible resulting in the ability for each developer to create custom tools unique to their project that will mesh with Fyne itself.
Vector graphics
The use of vector graphics to paint the UI provides a method of adapting to different device and display sizes without losing image fidelity. This allows the programmer to only need to create the UI once and it will look as expected on any device.
Hierarchy
Canvas
Canvas contains all of the contents of a window ranging from the full screen to a group of CanvasObjects.
CanvasObject
CanvasObjects are what actually get rendered on screen such as Text, Rectangle, Line. The objects store size, position and color information for the rendering process.
Container
Containers are groups of CanvasObjects, each container can specify a layout which will contain the sizing and position of its child components. Layouts help the developer arrange components in a manner that response to the container or window size, with several layout types provided including Border, Center, and Grid.
Widget
All of the components of a window in a CanvasObject are widgets that contain standard user interface elements. Fyne widgets include but are not limited to UI basics such as: Button, Check, Form, Hyperlink, Label, TabContainer, and Toolbar. Basic UI widgets ensure that standard aspects of GUI interactivity act in a predictable and expected way across applications. This helps improve quality of programs while assisting the programmer by removing the need for them to create these tools themself.
Packages
All components of Fyne are split into packages and then connected via the API to create a final GUI application. In addition to the canvas, layout, and widget packages, notable packages include:
App package which is the main entry point for the app which manages understanding the type of device the application is running on and ensures the code will run as expected on that device.
Test package enabling test-driven development to validate the GUI itself functions as expected.
Use
The largest project currently using the Fyne toolkit is the FyneDesk project, a complete desktop environment for Linux. There are many other applications being built using the toolkit, those that are open source can be found in an application listing website managed by the project. Many businesses are using the Fyne toolkit to quickly add a graphical user interface to command line tools which they have already built using Go.
Issue 299 of Golang Weekly noted the new mobile support from the Fyne project but suggested the design aesthetic was less Material Design and more "generally Linux-y".