SteelSidekick Classic is the original cross-platform companion for pedal steel, lap steel, and related instruments. It visualizes chords and scales on interactive fret board, making it easy to explore tunings, pedal/knee lever setups, and note relationships.
This repository hosts the legacy "Classic" implementation that currently ships on iOS, Android, and macOS. A ground-up rewrite is in development for the AppStore release; use this codebase for maintenance or historical reference.
- Stable feature set shared by loyal users across App Store, Google Play, and macOS builds.
- My first iOS app — plenty of lessons learned along the way, but Classic still delivers for longtime users.
- Only receives critical fixes and compatibility updates—major new work targets the AppStore rewrite.
- Remains GPL-2.0 licensed.
- Interactive fret board canvas, highlighting roots and intervals in real time.
- Extensive library of lap steel and pedal steel copedents, plus custom guitar editor with pedals and knee levers.
- Scale and chord explorers that switch between theory systems and root notes on the fly.
- Toggle accidentals (sharps or flats) and “show all notes” overlays to match your learning style.
- Data-driven configuration (JSON/settings files) so new tunings, adjustments, or scales can be added without recompiling.
- Shared SGuitar C++ engine exposed to each client via SWIG-generated bindings for consistent behavior.
Android/– Android Studio project (Java + OpenGL) with Gradle + CMake for the SGuitar shared library.iOS/– Objective-C/Swift UIKit project, consuming SGuitar through Objective-C++ wrappers.macOS/– Swift AppKit/OpenGL project for desktop users, also backed by SGuitar.SGuitar/– Cross-platform C++ core, SWIG interface definitions, and embedded third-party dependencies (JsonBox,nanovg).Resources/– Tunings, scales, chord definitions, and shared images loaded by every platform.Screenshots/– Product imagery referenced by this README._config.yml– GitHub Pages configuration (kept for legacy docs).
- Git, CMake ≥ 3.4, and a C++11-capable toolchain.
- SWIG 4.x installed and available on your PATH. Classic expects
/usr/local/bin/swig; if absent the generated bindings inSGuitar/swig/javaandSGuitar/swig/objcare reused. - Android Studio (2022.3+ recommended) with the Android SDK, NDK r21+ (or newer compatible release), and the CMake component.
- Xcode 14+ with command-line tools for iOS and macOS development.
- Optional: Homebrew or another package manager to install SWIG and OpenGL dependencies quickly.
Clone the repository and step into the root:
git clone [email protected]:jbsohn/SteelSidekick-Classic.git
cd SteelSidekick-ClassicAll external libraries are committed in SGuitar/External, so no additional submodules are required.
- Open
Android/in Android Studio, or run./gradlewcommands from that directory. - Confirm your local NDK path in
local.properties. Android Studio will prompt if it cannot find one. - Install SWIG if you need to modify the C++ interface; Gradle’s
runSwigtask regenerates the JNI bindings beforepreBuild. Without SWIG, existing generated sources are reused. - Build and run via Run > Run 'app' or the CLI:
./gradlew assembleDebug. - Resources from
../Resourcesare packaged automatically into the APK via the customassets.srcDirsmapping.
- Open
iOS/SteelSidekick.xcodeprojin Xcode. - Select the
SteelSidekickscheme and an appropriate simulator or device target. - Build and run (⌘R). The project mixes Objective-C, Objective-C++, and Swift; Xcode compiles the SGuitar bridge automatically.
- Assets and settings are bundled from
Resources/at build time.
- Open
macOS/SteelSidekick.xcodeproj. - Choose the
SteelSidekickscheme. - Run (⌘R) to launch the desktop app, which uses
SwiftOpenGLViewto render the shared fretboard.
- Located in
SGuitar/srcandSGuitar/include, the SGuitar engine centralizes music theory logic, fret board rendering, and data loaders. - SWIG interface files live in
SGuitar/swigand generate:- Java wrappers under
SGuitar/swig/java/com/steelsidekick/sguitarfor Android. - Objective-C++ glue consumed by iOS and macOS.
- Java wrappers under
- Third-party components:
JsonBox(JSON parsing) andnanovg(vector rendering). Their licenses reside alongside their sources.
To regenerate bindings manually:
cd SGuitar/swig
swig -java -c++ -cppext .cpp -package com.steelsidekick.sguitar \
-outdir java/com/steelsidekick/sguitar -o cpp/SG.cpp SGuitar.iAdjust the flags to emit Objective-C wrappers if you change the interface.
Resources/Guitars/contains copedents (for example, E9, C6) with defined string tunings and pedal/knee lever steps.Resources/Settings/Scales.settings,Chords.settings, andGuitarTypes.settingsdeclare the theory library. Add entries here to surface new intervals or instrument families.Resources/Images/stores UI artwork shared by each platform.
Update these files to expand the library, then rebuild the relevant client.
- Active rewrite: migrating SteelSidekick to a modernized codebase for the AppStore distribution.
- Classic branch: accepts critical bug fixes, platform compatibility tweaks, and data updates only.
SteelSidekick Classic is distributed under the terms of the GNU General Public License v2.0. Third-party libraries bundled in SGuitar/External retain their original licenses—review their headers for details.


