Kept on Wikipedia:Fyne (software)
Screenshot of fyne_demo showcasing many widgets | |
| Original author(s) | Andrew Williams |
|---|---|
| Developer(s) | Andrew Williams, Tilo Prütz, Luca Corbo, Steve O'Connor, Stephen Houston |
| Initial release | February 5, 2018 |
| Stable release | 1.2.3
/ March 2, 2020[1] |
| Written in | Go |
| Engine | |
| Operating system | Linux, Unix-like, macOS, Windows, IOS, Android (operating system) |
| Type | Widget toolkit |
| License | New BSD License |
| Website | fyne |
Search Fyne (software) on Amazon.
Fyne is a free and open-source cross-platform widget toolkit for creating graphical user interfaces (GUIs) across desktop and mobile platforms. It's API design and tools are built to encourage building applications that will work across any supported operating system from a single application source code. Unlike older toolkits it is built entirely using vector graphics to produce a high quality user experience that scales to desktop, mobile and other graphical devices. Using this approach provides great support for the rising popularity of high density displays on mobile devices and high-end computers.[2]
Fyne's APIs aim to be the best for developing beautiful, usable, lightweight applications for desktop and beyond.[3]
— Andrew Williams, Fyne Vision
The toolkit's user interface is inspired by the principles of Material Design Material Design to create applications that look and behave consistently across all platforms instead of incorporating system standard visuals. It is licensed under the terms of the 3 Clause BSD License, supporting the creation of free and proprietary applications. In December 2019 Fyne became the most popular GUI toolkit for Go, by GitHub star count[4] and in early February 2020 it was trending as #1 project in GitHub trending ranks.[5]
Articles about Fyne have appeared in the printed press, most recently in "Straight to the Point"[6], a segment of "Linux Magazine 229" in which Mike Schilli describes using the toolkit to tackle a graphical application challenge. Also the book "Hands-On GUI Application Development in Go"[7] (by Andrew Williams, the project founder) compares 7 of the most popular GUI toolkits for Go. The chapter about Fyne shows code samples and screenshots demonstrating the toolkit features and in later chapters compares these with other projects' approach to modern application development challenges.
Development
Fyne is currently developed by a team of volunteers working in their spare time, and is supported by around 40 contributors.[8] Members of this group also work on the FyneDesk project to create a new Linux desktop environment.[9]
The Fyne toolkit is written primarily in Go (with various languages to access system specific components).[10] The team focuses on clean APIs and follows the principles of Clean Code to sustain maintainability of the code.[11]
Design of the Fyne API and user interface components follows a careful process to ensure the project's simplicity.[12] The resulting plan and vision is shared on their "Open Plan" page.[13]
All Fyne projects are continuously tested to check correctness, stability as well as formatting and documentation. Results can be tracked for the project on Travis [14] and code coverage is published using Coveralls.[15]
Example
The code required for a simple "Hello World" application is minimal, as follows:
package main
import (
"fyne.io/fyne/app"
"fyne.io/fyne/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Hello")
w.SetContent(widget.NewVBox(
widget.NewLabel("Hello Fyne!"),
widget.NewButton("Quit", func() {
a.Quit()
}),
))
w.ShowAndRun()
}
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
Software architecture
The Fyne toolkit is built in various layers, with each in separate packages, the following are the most important[16]
canvas: The canvas API contains drawing primitives that can be drawn to a window canvas. This includes Circle, Gradient, Image, Line, Raster, Rectangle and Text.
layout: Layouts control how elements within a container are arranged, The provided layouts are Border, Center, FixedGrid, Form, Grid, HBox, Max and VBox.
widget: The main widget package provides the standard user interface elements, including: Box, Button, Check, Entry, Form, Group, Hyperlink, Icon, Label, PopUp, ProgressBar, Radio, ScrollContainer, Select, Slider, TabContainer and Toolbar.
app: The app package is the entry point for any application, it manages creation of a new application instance and loads drivers required for the current platform when the software runs.
test: Test utilities that help applications with unit testing or Test-driven development
Use
There are many applications being built using the toolkit, those that are open source and most popular are listed below:
| Name | Author | Description |
|---|---|---|
| BeebUI | Andrew Williams | A BBC Micro Emulator based on Fyne and skx/gobasic |
| DICOM Viewer | Andrew Williams | A DICOM image viewer and utilities |
| FyneDesk | The Fyne team | A full desktop environment for Linux/Unix using Fyne |
| FyneTerm | The Fyne team | A graphical terminal emulator for Linux using Fyne |
| Fyne OpenSnitch | Luca Corbo | An OpenSnitch UI in Go using Fyne |
| PixelEdit | The Fyne team | A pixel based image editor built using Fyne. |
| Potato Arcade | Steve O'Connor | The P64 computer console. In Golang. |
| Solitaire | The Fyne team | Solitaire card game |
| Tic-tac-Toe | Jacob Alzén | A simple tic-tac-toe game |
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. These applications are typically private or commercially sensitive and so are not listed above.
Releases
- 1.2 - Mobile Support[17]
Addition of Mobile support (iOS and Android) Addition of support for Raspberry Pi devices (and other OpenGL ES devices) BaesWidget introduced to simplify creation of custom widgets
- 1.1 - Feature Release[18]
MenuBar, PopUpMenu, Select widgets added Gradient primitive added and shadows introduced Added support for text selection Support for disabling widgets Tab / Shift-Tab introduced to rotate focused elements
- 1.0 - First Major Release[19]
Introduced canvas API for drawing primitives Introduced widget API including Box, Button, Check, Entry, Form, Group, Hyperlink, Icon, Label, ProgressBar, Radio, Scroller, TabContainer and Toolbar Light and dark themes for user interface Support for Linux, macOS and Windows operating systems
Criticism
Issue 229 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".
References
- ↑ "Focus on older Android devices". github.com. 2020-03-02.
- ↑ https://fyne.io/develop/geometry.html
- ↑ https://github.com/fyne-io/fyne/wiki/Vision
- ↑ https://twitter.com/Fyne_io/status/1207621758414704640
- ↑ https://twitter.com/Fyne_io/status/1227238218879291398
- ↑ Schilli, Mike (1 November 2019), Linux Magazine 229 - Straight to the Point, Linux New Media
- ↑ Williams, Andrew (25 February 2019), Hands-On GUI Application Development in Go (1st ed.), Packt, ISBN 978-1-78913-841-2
- ↑ "Contributors to fyne-io/fyne · GitHub". 2020-02-25.
- ↑ https://twitter.com/stephenmhouston/status/1212078602889641984
- ↑ "Unusual uses for Go: GUIs (Go Time #116)".
- ↑ "fyne/CONTRIBUTING.md at master · fyne-io/fyne · GitHub". 2020-02-25.
- ↑ "The careful process behind Fyne's simplicity".
- ↑ "Fyne Vision".
- ↑ "Fyne.io - Travis CI".
- ↑ "Coveralls.io - Test Coverage History and Statistics".
- ↑ https://www.youtube.com/watch?v=jbsYrrNiqAs
- ↑ "Release 1.2 brings Mobile Support · fyne-io/fyne · GitHub". 2020-02-25.
- ↑ "Release v1.1 feature release · fyne-io/fyne · GitHub". 2020-02-25.
- ↑ "Release Fyne's first major release · fyne-io/fyne · GitHub". 2020-02-25.
External links
This article "Fyne (software)" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Fyne (software). Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.
| This page exists already on Wikipedia. |
