Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/JonathanHerSa/xolo-api-hub/llms.txt

Use this file to discover all available pages before exploring further.

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.
RequirementVersionNotes
Flutter SDK≥ 3.32.0Pinned to 3.32.0 in CI (release.yml). Use FVM to manage multiple Flutter versions.
Dart SDK^3.10.4Bundled with Flutter — no separate install needed.
Android SDKAPI 21+Required for Android builds. Android Studio or the standalone command-line tools both work.
XcodeLatest stableRequired for iOS builds (macOS only).
CocoaPodsLatest stableRequired for iOS dependency resolution (pod install).
Java17Required by the Android Gradle toolchain. The CI uses Zulu 17.
Verify your Flutter setup at any time with:
flutter doctor -v

Build from Source

1

Clone the repository

Clone the Xolo API Hub repository from GitHub and enter the project directory:
git clone https://github.com/JonathanHerSa/xolo-api-hub.git && cd xolo-api-hub
2

Install dependencies

Fetch all Dart and Flutter packages declared in pubspec.yaml:
flutter pub get
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:
dart run build_runner build --delete-conflicting-outputs
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 run
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:
cd ios && pod install && cd .. && flutter run
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.
# Run on a connected Android device or emulator
flutter run

Build Release APK

To produce an unsigned release APK — the same artifact published to GitHub Releases by CI — run:
flutter build apk --release
The output file is written to:
build/app/outputs/flutter-apk/app-release.apk
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:
lib/core/config/app_config.dart
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:
flutter test --coverage
Coverage data is written to coverage/lcov.info. Use genhtml (from the lcov package) to render an HTML report:
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html
CI also runs formatting and static analysis before every build:
dart format --set-exit-if-changed .
flutter analyze
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.

Build docs developers (and LLMs) love