Skip to content

Building from Source

Lane Holloway edited this page Sep 28, 2026 · 3 revisions

Building from source

Source: https://github.com/drlholloway/fretboardtrainer, licensed under PolyForm Shield 1.0.0 (use, build, modify and share freely; do not build a competing product).

Requirements: Flutter stable (3.47 or newer). iOS needs Xcode; Android needs the SDK (platform 36) and JDK 17 or newer; Linux needs clang cmake ninja-build pkg-config libgtk-3-dev. The Android build uses Android Gradle Plugin 9.4 with Gradle 9.7 and built‑in Kotlin.

git clone https://github.com/drlholloway/fretboardtrainer.git
cd fretboardtrainer
dart pub get
cd apps/fretboard_trainer && flutter run        # -d macos, -d linux, -d ios, or an Android device

Tests: just test runs the theory package's tests plus the app's widget tests (or dart test in packages/fretboard_theory and flutter test in apps/fretboard_trainer).

Layout: packages/fretboard_theory is pure Dart with no Flutter: pitches, tunings, instruments, chord shapes and naming, drill generation and the curriculum. apps/fretboard_trainer is the Flutter app. packaging/icon/make_icon.py draws the icon, packaging/splash/make_splash.py the launch cryptids and packaging/audio/make_samples.py builds the note samples from the University of Iowa guitar and Karoryfer Growlybass recordings (it downloads, splits, checks the pitch of and tunes every note); docs/screenshots/ holds the rendered screens (just screenshots regenerates them, including the ones on this wiki).

Adding a chord shape: it is a list of semitone offsets from the root per string in ChordLibrary, defined from a tab in standard tuning; add a test that pins its tab and name. Names are never hard‑coded; identifyChord works them out from the sounding pitches, so a new shape is automatically right in every tuning.

Releases: move the changelog's Unreleased section under the new version, bump version: in apps/fretboard_trainer/pubspec.yaml, commit, push a vX.Y.Z tag; GitHub Actions builds the signed Android APK, an ad‑hoc signed macOS zip and the Linux tarball, AppImage (Fretman-<version>-x86_64.AppImage with its .zsync) and Flatpak bundle and attaches them to a Release with the changelog section as the notes. iOS is built in CI without signing to check it compiles; store builds are made locally with Xcode.

Sound plays through flutter_soloud with its Ogg/Opus/FLAC codecs switched off (no_xiph_libs in the workspace pubspec.yaml): the samples are MP3, so the build downloads nothing extra.

Dependencies: Dependabot opens weekly PRs for pub, Gradle and GitHub Actions.

Clone this wiki locally