nblockchain/geewallet
53.2
Adequate · 17 September 2026
17.6k
lines of production code
F#
primary language
1
measurement over time
What this system is
Geewallet is a multi-platform cryptocurrency wallet application built with F\# and Xamarin.Forms, supporting Bitcoin, Ethereum, and ERC20 tokens across Android, iOS, macOS, Linux, and Windows. The system features a modular backend that manages account states, currency definitions, and blockchain interactions via Electrum and RPC protocols, while providing both a graphical user interface and a console-based frontend. It supports advanced workflows including cold storage signing, read-only watch wallets, and account archiving, with build automation and release pipelines standardized in F\#.
How it got here
2017 — Initial project scaffolding and core features
9 changes.
This period established the foundational structure of the geewallet project, introducing the build system, backend modules for multi-currency support, and the initial Xamarin.Forms frontend. Key features implemented included offline transaction signing workflows, account archiving, and native Ethereum/ERC20 token handling, alongside a migration to .NET 6.
2018–2020 — multi-platform frontend expansion
15 changes.
The project significantly expanded its desktop and mobile support by introducing dedicated frontends for GTK (Linux/macOS), macOS, UWP (Windows), and refined Android and iOS implementations. Concurrently, the backend was modernized with Electrum protocol 1.4 support and improved fee handling, while build automation was standardized by migrating scripts to F\#.
Features
Add GTK frontend for Linux and macOS
A new GTK-based frontend is introduced for the GWallet application, primarily targeting Linux users while also providing support for macOS. This addition includes a dedicated entry point (Program.fs) that initializes the Xamarin.Forms GTK platform, configures the application window with a default size of 500x1000 pixels, and handles command-line arguments such as --version and --console. The frontend also integrates specific configuration for OpenTK via OpenTK.dll.config to map native libraries on Linux and macOS, and includes logic to correctly load the application icon within Snap environments.
src/GWallet.Frontend.XF.Gtk · high confidence
Added desktop integration for the Geewallet snap
The snap package now includes a desktop entry file (geewallet.desktop) and a logo symlink, enabling the application to appear in the system's application menu and providing proper iconography. This allows users to launch Geewallet directly from their desktop environment's application launcher.
snap/gui · high confidence
Android UI theme and layout resources added
The Android frontend now includes standard UI resource files: a base theme (MyTheme) inheriting from Theme.AppCompat.Light.DarkActionBar with specific primary, dark, and accent colors; layout definitions for the main Toolbar and Tabbar components; and the generated Resource.designer.cs file which maps these resources and dependencies (including Xamarin.Essentials and AndroidX compatibility libraries) for use by the application.
src/GWallet.Frontend.XF.Android/Resources · high confidence
Initial UWP platform support for GWallet
This change introduces the Windows 10 (UWP) client for GWallet, allowing users to run the application on Windows devices. The implementation includes the core UWP project structure (App, MainPage, and manifest files) and integrates the shared Xamarin.Forms logic via the \GWallet.Frontend.XF.App\ entry point. It also initializes the ZXing barcode scanner renderer for UWP, enabling QR code scanning functionality on this platform.
src/GWallet.Frontend.XF.UWP · high confidence
Initial implementation of Ether and ERC20 token account support
This change introduces the core backend logic for managing Ethereum-based accounts, including native ETH and ERC20 tokens like DAI and SAI. The new files in the Ether module provide account creation (both read-only and normal), balance retrieval with caching and parallelization, transaction fee estimation, and address validation. It also includes specific handling for ERC20 token transfers via the Nethereum library, RPC error retry logic for various Ethereum node errors, and miner fee calculations to ensure transactions are not rejected due to low fees.
src/GWallet.Backend/Ether · high confidence
Initial macOS platform support for GWallet
This change introduces the macOS client for GWallet, built on Xamarin.Forms. It adds the necessary entry point (AppDelegate), application configuration (Info.plist, Entitlements), and UI storyboard to launch the shared frontend on macOS. The implementation initializes the Xamarin.Forms runtime and the ZXing QR code library, enabling users to scan QR codes on the Mac platform.
src/GWallet.Frontend.XF.Mac · high confidence
Initial project scaffolding and build system introduction
This change introduces the foundational structure for the geewallet project, including a new Makefile and configure scripts (configure.sh, configure.bat) to automate the build process on Unix and Windows. It adds a Directory.Build.props file to enforce strict compiler warnings and treat warnings as errors in non-Debug builds, and establishes a .gitmodules file to manage the fsx script submodule. Additionally, it provides essential documentation files (ReadMe.md, CONTRIBUTING.md, PrivacyPolicy.txt, LICENCE.txt) and updates the .gitignore to exclude IDE-specific and build artifacts.
(repo-wide) · high confidence
Initial release of the geewallet Xamarin.Forms frontend
The application frontend has been established using Xamarin.Forms, introducing the core user interface for the geewallet product. This release provides the initial screens for the user journey, including a Welcome page for wallet creation and recovery, a Loading page with animated status indicators, and a Balances page featuring a donut chart and total asset display. It also implements the primary transaction workflows: a Receive page for generating QR codes and copying addresses, a Send page for composing and signing transactions, and Pairing pages to support cold storage integration. The app lifecycle is managed through global state events for sleep and resume, and the UI is built on a Grid-based layout system.
src/GWallet.Frontend.XF · high confidence
Introduce SendPage and CircleChartView controls
The GWallet.Frontend.XF module adds a new SendPage for initiating transactions, featuring QR code scanning for addresses, support for cold storage signing workflows, and improved input validation. Additionally, a new CircleChartView control is introduced to render balance distributions using the Xamarin.Forms Shapes API, replacing previous SVG-based implementations.
GWallet.Frontend.XF · high confidence
Introduce account archiving and read-only account support
The backend now supports three distinct account modes: Normal, Read-Only, and Archived. This change introduces the \AccountKind\ enum and corresponding account types (\NormalAccount\, \ReadOnlyAccount\, \ArchivedAccount\) in \AccountTypes.fs\, allowing users to archive accounts (removing private key access while retaining history) or add read-only watch wallets. The caching system (\Caching.fs\) has been updated to handle these modes, specifically optimizing storage for read-only accounts by separating their balance data into a 'diet cache' format.
GWallet.Backend · high confidence
Introduce dedicated backend modules for currency definitions, formatting, and block explorer links
The backend now includes new modules to centralize core wallet logic: Currency.fs defines the supported cryptocurrencies (BTC, LTC, ETH, ETC, DAI, SAI) and their properties; Formatting.fs handles precise decimal rounding and truncation for display; BlockExplorer.fs generates correct transaction history and detail URLs for each currency using dedicated explorers like Mempool.space and Etherscan; and Infrastructure.fs sets up crash reporting via Sentry. These changes improve code organization and ensure consistent handling of currency-specific data and external links.
src/GWallet.Backend · high confidence
Introduce offline transaction signing and broadcast workflow
The console frontend now supports a cold-storage workflow where unsigned transaction proposals can be saved to disk, signed offline using the 'Sign Off Payment' operation, and subsequently broadcast online via 'Broadcast Payment'. This change adds file-based import/export for transactions, validates that the signing account matches the transaction origin, and displays transaction details (including estimated USD values and fees) before final confirmation. It also includes validation to prevent sending to the same account and handles miner fee warnings during the broadcast phase.
src/GWallet.Frontend.Console · high confidence
Architecture
Backend assembly metadata reorganized and versioned
The GWallet.Backend assembly metadata has been reorganized: a new CommonAssemblyInfo.fs file centralizes company, product, and copyright attributes, setting the assembly version to 0.7.445.0, while the legacy AssemblyInfo.fs has been moved into the Properties folder and stripped of its version attributes (which were previously hardcoded to 1.0.0.0) and redundant metadata, relying now on the centralized version definition.
src/GWallet.Backend/Properties · high confidence
Behavioural changes
Android app initialization and permission handling updated
The Android entry point (MainActivity) now explicitly initializes Xamarin.Essentials and ZXing.Net.Mobile platforms during startup and implements OnRequestPermissionsResult to properly handle runtime permission callbacks, ensuring QR code scanning and other platform-specific features function correctly.
src/GWallet.Frontend.XF.Android · high confidence
Android app manifest and assembly metadata updated
The Android application manifest (AndroidManifest.xml) has been updated to set the minimum SDK version to 19 and the target SDK version to 33, ensuring compatibility with modern Android devices. The assembly information file (AssemblyInfo.fs) has also been refreshed to include proper resource designer attributes and conditional debug settings for the Android frontend.
src/GWallet.Frontend.XF.Android/Properties · high confidence
Android date picker now displays year selection first
On Android devices, the date picker dialog has been updated to show the year selection first, changing the default interaction flow. This is implemented via a new custom renderer that navigates the internal layout of the date picker dialog to programmatically trigger the year field click. The implementation includes robust error handling that reports warnings via the application's logging infrastructure if the expected UI layout structure is not found, rather than crashing.
src/GWallet.Frontend.XF.Android/Renderers · high confidence
Assembly metadata cleanup and file reorganization
The AssemblyInfo file has been moved into the Properties folder to align with standard project structure conventions. Additionally, several assembly attributes (company, product, copyright) and version information attributes have been removed, simplifying the metadata exposed by the console frontend application.
src/GWallet.Frontend.Console/Properties · high confidence
Legacy solution structure and build configuration
The project's non-main solutions have been moved into the src/ directory, accompanied by the introduction of a new console application entry point (GWallet.Frontend.ConsoleApp) and a dedicated .gitignore for the source tree. Build behavior is updated via CommonBuildProps-legacy.proj to enforce warnings as errors in non-Debug configurations and suppress specific F\# compiler warnings (0193, 1182, 3218). Additionally, assembly binding redirects for FSharp.Core, System.Buffers, and System.Memory are configured for the .NET Framework 4.6.1 target.
src · high confidence
Migration of build and release automation scripts to F\#
The project's build, configuration, and release automation scripts (including make, configure, bump, sanitycheck, and snap release workflows) have been rewritten in F\# (fsx) and integrated with the Fsdk library. This change standardizes the scripting environment, improves cross-platform compatibility (particularly for Windows and .NET 6+), and introduces stricter versioning logic for stable versus unstable releases. The new scripts also enhance CI/CD integration by automating artifact handling, snap package uploads, and dependency checks, replacing the previous mixed shell and script approach.
scripts · high confidence
Revamped iOS project structure and initialization
The iOS project has been updated to use new Visual Studio for Mac templates, introducing a rewritten AppDelegate that explicitly initializes Xamarin.Forms and ZXing.Net.Mobile before loading the application. The project now includes standard iOS configuration files (Info.plist, Entitlements.plist, and LaunchScreen.storyboard) to define app metadata, permissions, and the launch screen interface.
src/GWallet.Frontend.XF.iOS · high confidence
Standardized assembly metadata for Xamarin.Forms frontend projects
The assembly information files for the GWallet Xamarin.Forms core library and its GTK and iOS platform-specific frontends have been updated to explicitly define standard assembly attributes (such as Title, Description, Configuration, and Trademark) using F\# syntax. This change ensures that these frontend projects maintain consistent and explicit metadata definitions, aligning with the backend's approach to common assembly information.
src/GWallet.Frontend.XF.Gtk/Properties, src/GWallet.Frontend.XF.iOS/Properties, src/GWallet.Frontend.XF/Properties · high confidence
UtxoCoin backend refactored with Electrum protocol 1.4 support and improved fee handling
The UtxoCoin backend module has been restructured into dedicated files (ElectrumClient, UtxoCoinMinerFee, UtxoCoinServer) to improve code organization. The Electrum client now supports protocol version 1.4, with explicit handling for server version compatibility (rejecting servers that are too old or too new). Fee estimation logic has been refined to validate responses and convert between BTC and Satoshi units correctly, while a new MinerFee type enforces minimum fiat-value thresholds to avoid 'ridiculous' fees. Server selection now uses a fault-tolerant parallel client with configurable consistency modes for balance checks, fee estimation, and transaction broadcasting.
src/GWallet.Backend/UtxoCoin · high confidence
Test coverage
Added test coverage for backend components
Added comprehensive unit and integration tests for the backend, including tests for async cancellation behavior in the FaultTolerantParallelClient, compound balance caching logic, JSON deserialization of transactions and cache data, Electrum server connectivity, exception marshalling, and F\# utility functions.
src/GWallet.Backend.Tests · high confidence
Dependencies
Migrate legacy .NET Framework projects to .NET 6 and modernize dependency management
The GWallet.Backend.Tests, GWallet.Frontend.Console, and GWallet.Frontend.ConsoleApp projects have been migrated from the legacy .NET Framework (v4.7.1) to .NET 6. This migration replaces the older packages.config dependency management with the modern SDK-style project format and PackageReference, utilizing NuGet packages such as NUnit 3.13.3 and Microsoft.NET.Test.Sdk 17.1.0 for testing. The GWallet.Backend.Tests project now targets net6.0, while the console applications also target net6.0, ensuring compatibility with the modern .NET ecosystem and simplifying build configurations.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 53.
Lenses
- Code Health 79
- Architecture 97
- Maturity 49
- Readiness 48
- Security 50
Changes since last survey
- 300 commits — 273 feature/other, 27 fixes
By area
- src/GWallet.Backend — 115 commits
- (repo) — 38 commits
- (root) — 34 commits
- snap/snapcraft.yaml — 17 commits
- src/GWallet.Frontend.XF — 14 commits
- src/GWallet.Frontend.XF.Android — 14 commits
- .github/workflows — 13 commits
- src/GWallet.Backend.Tests — 11 commits
- scripts/make.fsx — 7 commits
- scripts/bump.fsx — 6 commits
- src/GWallet.Frontend.Console — 5 commits
- scripts/configure.fsx — 4 commits
- scripts/snap_release.fsx — 3 commits
- src/GWallet.Frontend.XF.Gtk — 3 commits
- scripts/fsxHelper.fs — 2 commits
- scripts/merge.sh — 2 commits
- scripts/push.sh — 2 commits
- src/CommonBuildProps-legacy.proj — 2 commits
- src/GWallet.Frontend.ConsoleApp — 2 commits
- docs/DevRoadmap.md — 1 commit
Notable commits
- fix: Backend(Ether): fix sweep when high fees
- fix: Backend(UtxoCoin): fix deserialization error
- fix: Backend.*: fix assembly version attribs
- fix: Backend.Tests: acceptance t for bug 242's 2nd part
- fix: Backend/Config: fix ETH-token readonly removal
- fix: Backend/FiatValueEst: fix avg calc's edge case
- fix: Backend: fix build (remove XamEssentials code)
- fix: Backend: fix wrong UTXO-server exception thrown
- fix: Backend: rm Sys.Numeric.Vectors dep to fix MSB3243
- fix: Backend: rm System.Console dep to fix MSB3277 err
- fix: Frontend.XF*: fix build via Fsdk version sync
- fix: Frontend.XF.*: fix references in .fsproj files
- fix: Frontend.XF.Android: fix Release build
- fix: Frontend.XF.GTK: rm Runtime deps to fix MSB errs
- fix: Frontend.XF.iOS: fix recently introduced HintPath
- fix: Frontend.XF.{Android,iOS}: fix MSB3277 warn (err)
- fix: Frontend.XF: fix NETSDK1023 (warn as) error
- fix: Frontend.XF: fix build after merge
- fix: Frontend.XF: fix flickering in CircleChartView
- fix: Frontend.XF: fix recently introduced crash
- …and 280 more
Architecture
- 0 containers · 2 bounded contexts · 1 dependency edges (baseline)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
nblockchain/geewallet was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 17 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 908feb7e10b8100a3742c90e05dd2111161b299d — the exact code this score is about.
- Scored under rubric-2026.09.13 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-d1ef6c0bd534.