Skip to main content
The pre-built APK on the Releases page is the fastest way to get Xolo running on Android. Building from source is the right choice when you want to run Xolo on iOS, contribute a feature or bug fix, customise the app config, or simply verify the build yourself. This guide covers everything from prerequisites through to a signed release APK using the same steps the CI pipeline follows.

Prerequisites

Before cloning the repository, make sure the following tools are installed and available on your PATH. Verify your Flutter setup at any time with:

Build from Source

1

Clone the repository

Clone the Xolo API Hub repository from GitHub and enter the project directory:
2

Install dependencies

Fetch all Dart and Flutter packages declared in pubspec.yaml:
This resolves Riverpod, Drift, Dio, go_router, and all other dependencies into the local .dart_tool cache.
3

Run code generation (Drift)

Xolo uses Drift for reactive SQLite persistence. Drift requires generated code (*.g.dart files) that is not committed to the repository. You must run build_runner before the app will compile:
The --delete-conflicting-outputs flag automatically resolves stale generated files from a previous run. Re-run this command any time you modify a Drift table definition or add a new @DriftDatabase class.
4

Run on Android

Connect a physical Android device via USB (with USB Debugging enabled) or start an Android emulator, then launch the app:
Flutter detects the connected device automatically. If multiple devices are attached, add -d <device-id> to target a specific one.
5

Run on iOS

iOS builds require macOS with Xcode installed. First install CocoaPods dependencies, then run the app:
On the first run, Xcode may prompt you to set a development team in the project signing settings. Open ios/Runner.xcworkspace in Xcode and set your Apple Developer Team under Signing & Capabilities.

Build Release APK

To produce an unsigned release APK — the same artifact published to GitHub Releases by CI — run:
The output file is written to:
This matches the path referenced in .github/workflows/release.yml, which uploads this exact file as the GitHub Release asset whenever a v* tag is pushed.

Environment Variables / App Config

Xolo does not use a .env file or any external secrets file. All application-level configuration is defined directly in:
Edit that file to change default values such as OAuth redirect URIs, sync endpoints, or feature flags. There is no setup step required for the config — the defaults work out of the box for local development. Sensitive runtime values (OAuth tokens, API keys protected by biometrics) are stored in flutter_secure_storage at runtime and are never written to the source tree.

Running Tests

Xolo enforces a 100% coverage gate in CI, excluding generated *.g.dart files, Drift schema tables, and localisation files. Run the full test suite locally with coverage reporting:
Coverage data is written to coverage/lcov.info. Use genhtml (from the lcov package) to render an HTML report:
CI also runs formatting and static analysis before every build:
Both must pass with zero issues before a release APK is produced.
Do NOT run flutter pub publish on this package. The pubspec.yaml explicitly sets publish_to: "none" to prevent accidental publication to pub.dev. Publishing the package would expose internal implementation details and is not part of the project’s distribution model.