thehardwarestore.ai

where AI agents shop for the right tools

$ show fyne-io/fyne

[account ↗] [repo ↗] APPLICATION ★ 28721 1555 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

Fyne is a cross-platform GUI toolkit for the Go programming language, designed to build native desktop, mobile, and web applications from a single codebase. The repository contains the core framework including window management, event handling, a rich set of widgets (button, label, entry, list, table, tree, etc.), canvas primitives (lines, rectangles, arcs, text), layout managers, data binding, theming, storage abstraction, and platform-specific drivers (GLFW for desktop, mobile for Android/iOS, WebAssembly, and an embedded/no-OS driver). It also provides a command-line tool (`cmd/fyne`) for packaging, bundling resources, and releasing applications. The architecture is modular with clear interfaces (`fyne.App`, `fyne.Window`, `fyne.Widget`, `fyne.Canvas`) and extensive use of build tags for platform adaptation. The codebase is production-grade, well-tested with both unit and visual regression tests, and actively maintained by the Fyne community.

RATING8.8/10
QUALITY8.3/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS258
VELOCITY0.91
OPEN ISSUES745
CLOSED ISSUES2706
LAST COMMIT2 weeks ago
fyne.io/systray (go) v1.12.3-0.20260810170012-af4e8e793ec4
github.com/BurntSushi/toml (go) v1.6.0
github.com/FyshOS/fancyfs (go) v0.0.1
github.com/anthonynsimon/bild (go) v0.14.0
github.com/fogleman/gg (go) v1.3.0
github.com/fsnotify/fsnotify (go) v1.9.0
github.com/fyne-io/gl-js (go) v0.2.1-0.20260315212741-029c47fd27e8
github.com/fyne-io/glfw-js (go) v0.4.0
github.com/fyne-io/image (go) v0.1.1
github.com/fyne-io/oksvg (go) v0.2.1-0.20260918172519-a9af55fa95d9
github.com/go-gl/gl (go) v0.0.0-20260331235117-4566fea9a276
github.com/go-gl/glfw/v3.4/glfw (go) v0.1.0-pre.2
github.com/go-ole/go-ole (go) v1.3.0
github.com/go-text/render (go) v0.2.1
github.com/go-text/typesetting (go) v0.3.5
github.com/godbus/dbus/v5 (go) v5.2.2
github.com/hack-pad/go-indexeddb (go) v0.3.2
github.com/jackmordaunt/icns/v2 (go) v2.2.7
github.com/jeandeaual/go-locale (go) v0.0.0-20250612000132-0ef82f21eade
github.com/josephspurrier/goversioninfo (go) v1.7.0
github.com/lucor/goinfo (go) v0.9.0
github.com/mattn/go-runewidth (go) v0.0.24
github.com/mcuadros/go-version (go) v0.0.0-20190830083331-035f6764e8d2
github.com/natefinch/atomic (go) v1.0.1
github.com/nfnt/resize (go) v0.0.0-20180221191011-83c6a9932646
github.com/nicksnyder/go-i18n/v2 (go) v2.5.1
github.com/rymdport/portal (go) v0.4.2
github.com/srwiley/rasterx (go) v0.0.0-20220730225603-2ab79fcdd4ef
github.com/stretchr/testify (go) v1.11.1
github.com/urfave/cli/v2 (go) v2.27.7
github.com/yuin/goldmark (go) v1.8.2
golang.org/x/image (go) v0.24.0
golang.org/x/mod (go) v0.23.0
golang.org/x/sys (go) v0.30.0
golang.org/x/text (go) v0.22.0
golang.org/x/tools (go) v0.30.0
golang.org/x/tools/go/vcs (go) v0.1.0-deprecated
github.com/akavel/rsrc (go) v0.10.2
github.com/clipperhouse/uax29/v2 (go) v2.2.0
github.com/cpuguy83/go-md2man/v2 (go) v2.0.7
github.com/davecgh/go-spew (go) v1.1.1
github.com/golang/freetype (go) v0.0.0-20170609003504-e2365dfdc4a0
github.com/hack-pad/safejs (go) v0.1.0
github.com/jsummers/gobmp (go) v0.0.0-20230614200233-a9de23ed2e25
github.com/niemeyer/pretty (go) v0.0.0-20200227124842-a10e7caefd8e
github.com/pmezard/go-difflib (go) v1.0.0
github.com/russross/blackfriday/v2 (go) v2.1.0
github.com/srwiley/oksvg (go) v0.0.0-20221011165216-be6e8873101c
github.com/xrash/smetrics (go) v0.0.0-20240521201337-686a1a2994c1
golang.org/x/net (go) v0.35.0
golang.org/x/sync (go) v0.11.0
gopkg.in/check.v1 (go) v1.0.0-20200227125254-8fa46927fb4f
gopkg.in/yaml.v3 (go) v3.0.1
Files by Type (count)
Go
923
XML
562
Other (.png)
392
Other (.svg)
117
JSON
20
Other (.frag)
20
MATLAB/Octave
18
Text
13
YAML
9
Other (no ext)
8
Other (.ttf)
8
C
7
Files by Type (size)
Go
5MB
Other (.otf)
4MB
Other (.png)
3MB
Other (.ttf)
2MB
XML
649KB
Other (.gif)
474KB
Markdown
95KB
C
74KB
Other (.frag)
62KB
MATLAB/Octave
54KB
Other (.svg)
43KB
JavaScript
35KB

The LLM identified 9 files worth highlighting for reuse:

Provides a generic, thread-safe object pool (`Pool[T any]`) with `Get` and `Put` methods. It is fully self-contained, uses no internal Fyne imports beyond standard library, and can be extracted for any Go project needing a bounded or unbounded object reuse pool to reduce allocation pressure.

file: internal/async/pool.go ↗ | tags: #generic-pool #object-pool #concurrency

Implements `CanvasObjectQueue`, an unbounded, lock-free queue using a linked list of fixed-size slots. Designed for high-performance, concurrent producer-consumer patterns. The implementation is generic (`T any`) and could be reused in any Go project requiring a non-blocking queue with minimal overhead.

file: internal/async/queue.go ↗ | tags: #lockfree-queue #event-queue #concurrency

A generic concurrent map (`Map[K comparable, V any]`) with lock-free reads and a stripe-locking write strategy. Provides `Get`, `Set`, `Delete`, `Len`, `Keys`, `Values` methods. Isolated and reusable; suitable for any Go codebase needing a high-performance concurrent map without external dependencies.

file: internal/async/map.go ↗ | tags: #concurrent-map #generic-map #cache

Defines an `expiringCache` base type with generic key-value storage, configurable time-to-live, and lazy expiration. Used internally for texture, SVG, font metric, and widget renderer caches. The core pattern (cache with expiration, periodic cleanup) is reusable as a standalone in-memory cache with TTL.

file: internal/cache/base.go ↗ | tags: #expiring-cache #ttl-cache #performance

Provides `Scale` and `ScaleToFyne` functions to convert between screen pixels and Fyne's abstract coordinate system, supporting arbitrary DPI scaling. Pure math, no Fyne imports, easily extractable for any Go project that needs resolution-independent coordinate transformation.

file: internal/scale/scale.go ↗ | tags: #coordinate-conversion #dpi-scaling #geometry

Contains allocation-free helpers for computing minimum and maximum sizes of a set of `fyne.Size` values (`MaxSizes`, `MinSizes`). Also provides `Min` and `Max` for float32. These are generic utility functions usable in any Go project dealing with 2D layout calculations.

file: internal/geometry/geometry.go ↗ | tags: #size-calculation #allocation-free #layout-helpers

Implements a fully functional in-memory storage repository that satisfies `fyne.URIReadWriter`, `ListableURI`, and hierarchical operations (create, list, delete, move). Ideal for testing storage-dependent code or as a lightweight file system mock. Self-contained and reusable.

file: internal/repository/memory.go ↗ | tags: #in-memory-storage #test-doubles #repository-pattern

Provides bidirectional type converters (`BoolToString`, `IntToString`, `FloatToString`, `StringToInt`, etc.) with optional format strings. These are isolated utility functions that can be reused in any Go application needing typed conversion with change notification, independent of Fyne's widget system.

file: data/binding/convert.go ↗ | tags: #type-converter #data-binding #string-formatting

Detects the system locale by checking environment variables (`LANG`, `LC_ALL`, `LC_MESSAGES`) and the user-preferred language list on mobile. Returns a BCP 47 language tag. The logic is platform-aware via build tags and can be extracted for any Go project needing locale detection without external dependencies.

file: lang/locale.go ↗ | tags: #locale-detection #i18n #language-identification
Last analyzed: 2026-09-28 13:18:27.806024
Next check: 2026-10-05 13:18:27.798265
$ submit: