Getting started

1. Register your project

Log in with GitHub and add your project. You pick the repository from the public repositories you can push to, and a cover image is required.

2. Keep the API key

The API key is shown once, right after creating the project. Store it as a secret in your CI, for example DECOMP_API_KEY. You can generate a new one at any time from the project's dashboard page; the old one stops working immediately.

3. Send a report

The smallest report only has code totals:

curl -X POST https://decompilati.onl/api/v1/progress \
  -H "Authorization: Bearer $DECOMP_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{ "code": { "total": 4194304, "matching": 1887436, "non_matching": 209715 } }'

Responses are JSON:

  • {"status":"updated"} — the report was stored.
  • {"status":"unchanged"} — identical to the current progress, so nothing was stored.
  • {"status":"history"} — an older, timestamped report added to the history (see backfilling).
  • 4xx {"error":"…"} — something is wrong with the key or the report; the message says what.

See Report format for everything a report can contain, or objdiff & GitHub App if your project uses objdiff.

4. Automate it in CI

Report from your main branch only, so pull requests don't change the public numbers. A GitHub Actions step:

- name: Report progress
  if: github.ref == 'refs/heads/main'
  run: |
    python3 tools/progress.py --json > progress.json
    curl --fail -sS -X POST "$BASE/api/v1/progress?commit=$GITHUB_SHA" \
      -H "Authorization: Bearer ${{ secrets.DECOMP_API_KEY }}" \
      -H "Content-Type: application/json" \
      --data @progress.json
  env:
    BASE: https://decompilati.onl

After each report, the project page also lists the commits since the previous one, fetched from GitHub.