Back to Synton

What Synton actually does.

Synton is a release metadata service for Android apps. It sits between your CI, GitHub, and Google Play so a build can be linked to the commits that created it, the version policy that named it, and the Play track where it currently lives.

Version as a service

Ask Synton for the next version name during CI, based on the previous known build and commit messages.

Release ledger

Keep the version, version code, commit range, bump type, generated notes, and source SHA together.

Google Play tracks

Sync current track state and promote known version codes across Play tracks.

The CI asks for a version. Synton returns a decision.

The core API is intentionally small. Your build pipeline tells Synton which app and commit it is about to build. Synton reads the GitHub commit range, applies the configured versioning policy, saves the result, and returns the version metadata your Android build can stamp into the app.

01

Your CI sends the build context

Synton receives the Android package name, the current branch, and the commit SHA that should become the next app version.

02

Synton reads the GitHub commit range

It compares the previous known build commit, or the configured base SHA for the first build, with the requested commit.

03

A bump policy is applied

Breaking changes bump the major version, feat: commits bump the minor version, and every other non-empty commit range bumps the patch version.

04

The build becomes part of the release trail

Synton stores the version name, version code, bump type, commit list, generated notes, branch, and source commit.

Request contract

commit

Required. Full or resolvable commit SHA for the build.

branch

Required. Currently only main is accepted for release builds.

bundle_id

Optional if a default app exists, but recommended in real CI.

Response contract

version

The next Android version name, for example 1.8.4.

version_code

The generated version code for the stored Synton build.

bump_type

major, minor, or patch.

commits

The GitHub commits used to decide the bump.

notes

A deterministic changelog generated from the commit messages.

Example CI call

curl -X POST https://synton.app/api/builds \
  -H "Authorization: Bearer $SYNTON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "bundle_id": "app.synton.demo",
    "branch": "main",
    "commit": "8f31c2a9b7..."
  }'

A minimal GitHub Actions flow.

The first integration does not require Synton to build the app. Synton only decides the Android version, then your existing Gradle build consumes that decision.

01

Create the Android app in Synton and configure its package name.

02

Configure the GitHub repository, base SHA, and GitHub token in app settings.

03

Store SYNTON_API_KEY as a CI secret.

04

Call POST /api/builds before the Android build step.

05

Pass the returned version and version code into Gradle.

- name: Ask Synton for Android version
  id: synton
  run: |
    response=$(curl -sSf -X POST https://synton.app/api/builds \
      -H "Authorization: Bearer ${{ secrets.SYNTON_API_KEY }}" \
      -H "Content-Type: application/json" \
      -d "$(jq -n \
        --arg bundle_id "app.synton.demo" \
        --arg branch "${GITHUB_REF_NAME}" \
        --arg commit "${GITHUB_SHA}" \
        '{bundle_id: $bundle_id, branch: $branch, commit: $commit}')")

    echo "version_name=$(echo "$response" | jq -r .version)" >> "$GITHUB_OUTPUT"
    echo "version_code=$(echo "$response" | jq -r .version_code)" >> "$GITHUB_OUTPUT"

- name: Build Android app
  run: ./gradlew assembleRelease \
    -PversionName="${{ steps.synton.outputs.version_name }}" \
    -PversionCode="${{ steps.synton.outputs.version_code }}"

Google Play remains the runtime authority.

Synton does not replace the Play Console. It records what Google Play says is active, links known version codes back to Synton builds, and can apply controlled promotions using the Android Publisher API.

Track sync

Synton opens a temporary Google Play edit, reads internal, alpha, beta, and production tracks, then stores the current active version for each track.

Implemented

Track promotion

Synton can promote an existing version code to a target track, commit the Play edit, and immediately sync Google Play state back into the dashboard.

Implemented, needs hardening

Release notes per track

Synton can generate plain-text Play Store notes by comparing the latest build with the build currently active on a target track.

Early implementation

Useful today, still intentionally narrow.

These limits keep the product understandable while the first release workflow gets hardened.

Only GitHub is supported as a commit source.

Only the main branch is accepted by the version API today.

The version code is generated from the number of stored Synton builds, not from Google Play's highest existing version code.

Synton does not build or upload APK/AAB artifacts.

Promotion uses an existing Google Play version code. The artifact must already exist in Google Play.

Promotion currently uses completed releases from the dashboard path; staged rollout controls can come later.

Generated release notes are deterministic and commit-based. Human or AI rewriting is a later layer.

Recommended next build step

Make the version API easy to try from a real CI job, then harden the Play track dashboard around known and unknown version codes.

Open dashboard