Coming from decomp.dev

decomp.dev read objdiff reports that CI uploaded as GitHub Actions artifacts. The same reports work here, and moving over takes a few minutes.

1. Register the project

Add the project while logged in with a GitHub account that can push to the repository. A cover image is required.

2. Connect CI (pick one)

With the GitHub App: no workflow changes

If your workflow still uploads the report as an artifact named <version>_report (for example us_report), install the GitHub App on the repository. Each successful run on the default branch is imported automatically. If you removed the upload step when decomp.dev closed, add it back:

- name: Upload progress report
  uses: actions/upload-artifact@v4
  with:
    name: us_report
    path: report.json

With the API

Send the report from CI with the project's API key; objdiff & GitHub App has a ready-made step. Add version=… to the URL if the project has several versions.

3. Versions

Each <version>_report artifact (or ?version=) becomes a version with its own progress, history and tab on the project page. The project's settings choose which version is shown on cards, listings and badges.

4. Import your history

From decomp.dev: on the project's dashboard page, "Import from decomp.dev" takes the project's decomp.dev URL (for example https://decomp.dev/owner/repo) and imports its whole history: every version and every report, with the latest report's areas. It doesn't need the GitHub App, and it can be run again safely.

From GitHub Actions: on the project's dashboard page, "Import history from GitHub Actions" (needs the GitHub App) imports the report artifacts of past successful runs, each at the time of its run. GitHub deletes artifacts after their retention period (90 days by default), so this usually covers the last few months.

Anything else: rebuild the report for past commits and send it with a timestamp. For example, every 20th commit (adjust the build commands to your project):

#!/bin/sh
# Run from a clean checkout with DECOMP_API_KEY set; reports every 20th commit on main.
BASE=https://decompilati.onl
for sha in $(git rev-list --first-parent --reverse main | awk 'NR % 20 == 0'); do
  git checkout -q "$sha" || continue
  make NON_MATCHING=1 report && objdiff-cli report generate -o report.json || continue
  ts=$(git show -s --format=%ct "$sha")
  gzip -kf report.json
  curl -sS -X POST "$BASE/api/v1/progress?commit=$sha&timestamp=$ts" \
    -H "Authorization: Bearer $DECOMP_API_KEY" \
    -H "Content-Encoding: gzip" --data-binary @report.json.gz
  echo
done
git checkout -q main

Re-running it is safe: commits already in the history are skipped.

decomp.dev URLs work on this domain too: replace decomp.dev with decompilati.onl and /{owner}/{repo}, /{owner}/{repo}/{version}, .json and .svg badge links (with measure=code, data or functions) redirect to the project registered for that repository.

Differences from decomp.dev

  • objdiff has no exact "decompiled but not matching" figure, so non-matching code is estimated from the fuzzy match percentage.
  • Categories (progress_categories) become the areas of the map, with their units inside.
  • Only JSON reports are supported, not binary protobuf ones.
  • Badges have their own URLs (see Badges & data), but old decomp.dev badge links redirect to them.
  • The map of areas shows code only; data appears in the progress cards and the area table.