codeepicenter for developers

Ship updates through Epicenter in three steps. It takes about five minutes, and after that every release is one command.

rule

The rule: every downloadable app (APK, installer, disk image, package…) must give Epicenter an update manifest, a small JSON file at a link that never changes. Submissions without a readable manifest are refused. Web apps and store links (App Store, TestFlight) update themselves and are exempt.

1Host an update.json

Put this next to your download, at an address you keep the same for every release (a GitHub release asset called update.json on a rolling tag works well). The helper in step 3 writes it for you.

update.json

2Submit the app once

On oeper.dev/epicenter press submit an app , fill in the id, name, version and version code, and use upload the file to oeper.dev on every download (APK, installer, disk image…). The file and its manifest are stored on oeper.dev (up to 100 MB a file, 1 GB an app). An owner approves new apps; after that, uploading a new build releases it.

3Release with one command

The helper uploads your build to oeper.dev, writes its manifest and publishes the release. Make a publish key first (store page → my apps → publish keys). Get the helper at epicenter-release.mjs (Node 18+, no installs).

terminal

A key can only touch apps you own. Without --id the helper only writes update.json for you to host yourself (owners' own hosting).

4Make your app check for updates

One call answers “is there a newer version of me?” and works from any language:

HTTP

Copy EpicenterUpdate.kt into your project (no libraries) and call it from your launch screen. install downloads the new APK itself, checks its SHA-256 and that it is your app, and hands it to Android's installer: the Epicenter app does not have to be installed. Add the INTERNET and REQUEST_INSTALL_PACKAGES permissions to your manifest, and sign every release with the same key. (open instead hands over to the Epicenter app, or the store page.)

MainActivity.kt

Prompt for your Claude / AI coding session (paste it into the session that works on your app; replace the package name):

prompt
update-check.js
update_check.py

It is one HTTPS GET that returns JSON (see above). Compare versionCode (or version) with your own and show your usual “update available” message with a button that opens deeplink or page. Never install silently.

5Automate it (GitHub Actions)

Add your publish key as a repository secret named EPICENTER_KEY. This builds, uploads the APK to oeper.dev and publishes the release:

.github/workflows/release.yml

Reference

CallWhat it does
GET /api/epicenter/latest?id=&platform=Newest release of an app (public, cached a minute). platform: android, windows, macos, linux, ios.
PUT /api/epicenter/publishAdd or update your app with a publish key. Only the fields you send change.
GET /api/epicenter/manifest?url=Reads an update.json and returns the cleaned fields (what the website uses).

API address: https://oeper-ai.oeper.workers.dev. The full catalog format is in epicenter/README.md.

addsubmit an appstorefrontback to epicenter