Skip to content

Quickstart

Requires Docker with the Compose v2 plugin. Prebuilt images are multi-arch (linux/amd64 + linux/arm64) — Apple Silicon and ARM hosts pull the native arm64 image, no emulation needed. One gap: edit & recompile depends on Google's Android build-tools, which are Linux x86_64-only, so that feature is amd64-only.

Install a release from Docker Hub

MobARK runs as four containers that docker-compose.yml orchestrates: app (the web UI + API), worker (runs the analysis), redis (the job queue between them), and searxng (the search engine the agent's web research uses). Everything is downloaded from Docker Hub — a release install never builds or clones the source code.

Step 1 — Download the config files. docker-compose.yml is the recipe that tells Docker which images to run and how to connect them; .env holds your settings. In a folder of your choice:

curl -O https://raw.githubusercontent.com/suwasto/MobARK/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/suwasto/MobARK/main/.env.example
mv .env.example .env
mkdir -p docker/searxng
curl -o docker/searxng/settings.yml https://raw.githubusercontent.com/suwasto/MobARK/main/docker/searxng/settings.yml

That last file is the SearXNG config the stack mounts into the search container (it enables the JSON API the agent's web research searches through) — the stack will not start without it.

Step 2 — Download the images. docker compose pull reads the recipe and downloads the three images it references from Docker Hub: suwasto/mobark:0.3.0 (the app + worker), redis:7-alpine, and searxng/searxng:latest. Nothing runs yet — this step is just the download:

docker compose pull

Step 3 — Start the stack. docker compose up launches the four containers — app and worker both run the suwasto/mobark image with different commands — and starts them wired together:

docker compose up

To pin another release instead of 0.3.0, set MOBARK_IMAGE_TAG=<version> in .env, then re-run docker compose pull and docker compose up.

Build from source (dev)

git clone https://github.com/suwasto/MobARK.git
cd MobARK
docker compose up --build

Then open http://localhost:8000.

First run: authentication

A fresh install lands on the register/login screen: auth is ON by default. The first account registered becomes the instance admin and adopts any pre-existing (unowned) scans.

Register an account, sign in, and upload an APK or IPA. MobARK analyzes it on your own infrastructure: nothing leaves your install by default.

Platform coverage

Android (APK) and iOS (IPA) both get full static analysis and the AI Agent. Past that, Android is ahead: edit & recompile (apktool decode, smali edits, resigned test APK) is Android-only - iOS stays read-only in v1, and rebuilding an IPA would need an Apple Developer account and signing certificates. See Features for the full parity table.

First account is the admin

There are no seeded accounts: the first account you register becomes the instance admin, and every later account is a regular user who sees only their own scans (a foreign scan reads as 404: no existence leak). The first account also automatically claims any unowned scans — data scanned while auth was disabled (pre-auth builds) or via the CLI without --user — so it appears on the admin's dashboard.

For example, register a first account with the username of your choice (e.g. admin) and a password you pick yourself: the password123 used throughout these docs is only an example, never a default or seeded credential.

Example credentials only

Credentials shown in these docs (password123, etc.) are examples only: nothing is pre-seeded and no account ships with a known password. Use real, unique passwords on any install that faces a network, and never ship a public deployment with example passwords.

Skip auth entirely (dev/CI)

Set MOBARK_AUTH_ENABLED=0 in .env: MobARK then behaves exactly as the pre-auth single-user tool (the dev/CI parity mode).

Local development

Backend (Python 3.11+)

cd backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements-dev.txt
alembic upgrade head          # create the SQLite schema
uvicorn app.main:app --reload # http://localhost:8000

Tests:

pytest                       # unit tests (no services needed)

RQ integration tests need Redis + a running worker. With the compose stack up (the redis service isn't published to the host, so run them inside the worker container):

docker compose exec worker sh -c "pip install pytest httpx && python -m pytest tests/test_worker.py -m integration"

Or locally with a Redis on localhost:6379 and python worker.py running in a second terminal: pytest -m integration.

Lint: ruff check .

Frontend (Node 18+)

cd frontend
npm install
npm run dev                  # http://localhost:5173 - proxies /api -> http://localhost:8000

Configuration

All settings are optional and read from the MOBARK_ environment prefix (see .env.example).

Variable Default Purpose
MOBARK_DATABASE_URL sqlite:///./data/mobark.db SQLite location
MOBARK_REDIS_URL redis://localhost:6379/0 RQ queue/worker broker
MOBARK_DATA_DIR ./data Uploads / decompiled output / graphs
MOBARK_LOG_LEVEL INFO Logging level
MOBARK_AUTH_ENABLED 1 0 restores the fully-open single-user behavior (dev/CI)
MOBARK_SESSION_DAYS 7 Session lifetime (sliding: refreshed on use)
MOBARK_COOKIE_SECURE 0 1 when serving over TLS (session cookie gets the Secure attribute)
MOBARK_GITHUB_CLIENT_ID / MOBARK_GITHUB_CLIENT_SECRET - GitHub OAuth (login page shows the button only when both are set)
MOBARK_GOOGLE_CLIENT_ID / MOBARK_GOOGLE_CLIENT_SECRET - Google OAuth (same, configured-only button)
MOBARK_PUBLIC_BASE_URL http://localhost:8000 Public origin: OAuth redirect_uris are derived from it
MOBARK_IMAGE_TAG 0.3.0 Compose-only: which suwasto/mobark tag to run (docker compose pull)
MOBARK_VERSION 0.3.0 Compose-only: version baked into locally-built images

See Authentication for the full auth surface (OAuth setup, per-user isolation, the vault).