2 Developing and Releasing
NoopApp edited this page 2026-06-17 19:23:37 +01:00

Developing & Releasing NOOP

NOOP is now self-hosted at noop.fans (Forgejo) after being deplatformed from GitHub. This page covers how to contribute and, for maintainers, how to cut a release.

NOOP runs entirely on donations now. If it's useful to you, please chip in — #KeepNOOPAlive (BTC/ETH buttons are in the banner at the top of every page).


For contributors

Browse & clone

Everything is public to read — no account needed.

git clone https://noop.fans/NoopApp/noop.git
cd noop

Build it

  • macOS / iOS: xcodegen generate then open in Xcode (schemes Strand for macOS, NOOPiOS for iOS). See the Installation and How NOOP Works pages.
  • Android: ./gradlew assembleFullDebug (JDK 17). See Tutorial: Android Widget and Notifications.
  • Shared logic lives in the Swift packages under Packages/ (WhoopProtocol, WhoopStore, StrandAnalytics, StrandImport, StrandDesign). Run their tests with swift test in each package — fast and CI-free.

Report a bug / request a feature

Open an Issue at noop.fans/NoopApp/noop/issues. For bugs, attach a strap log (Settings → Export log) — issues without logs are hard to action. Labels: bug, enhancement, roadmap, multi-source, help wanted.

Submit a change

  1. Get an account — sign-ups are open and instant (just a quick captcha to keep bots out). A throwaway email is fine — nothing is verified or shared. Or stay fully anonymous and send patches by email / raise it on r/NOOPApp.
  2. Fork NoopApp/noop, branch, commit, and open a Pull Request against main.
  3. Keep changes cross-platform where it matters — a fix in shared Swift usually needs an Android (Kotlin) port too.
  4. No account / prefer email? Send a git format-patch set via the contact on the Donations page.

House rules

  • Privacy first — NOOP is local-first and fully offline. Don't add network calls or telemetry.
  • No firmware-derived code. We only use independently re-derived, publicly documented protocol knowledge.
  • Match the existing code style; include tests for protocol/analytics changes.

For maintainers — the release workflow

Releases are cut from a Mac (binaries are built + anonymized locally; nothing is built in cloud CI). The forge has a GitHub-compatible API, so the flow mirrors the old one with the tooling pointed at noop.fans.

# 0. one-time: save a Forgejo API token (Settings → Applications) so the scripts can push
printf '%s' '<token>' > ~/.config/noop/forge_token && chmod 600 ~/.config/noop/forge_token

# 1. bump version + write the changelog FIRST
#    Strand/System/AppChangelog.swift  +  android/app/.../AppChangelog.kt  +  CHANGELOG.md
# 2. build the anonymized binaries (universal macOS .zip, iOS .ipa, Android .apk)
#    xcodegen → xcodebuild Release → Tools/anonymize-macos-app.sh → ditto zip
#    ./gradlew assembleFullRelease  (signed with android/noop-release.jks)
# 3. refresh the in-app community stats
Tools/update-donation-stats.sh

# 4. cut the release on the forge (creates the tag + release + uploads all 3 assets)
Tools/forgejo-release.sh 4.7.0 \
  dist/NOOP-v4.7.0-macos.zip dist/NOOP-v4.7.0-ios.ipa dist/NOOP-v4.7.0-android.apk

# 5. refresh the install channels
Tools/update-homebrew-cask.sh 4.7.0 dist/NOOP-v4.7.0-macos.zip
Tools/update-altstore-source.sh 4.7.0 dist/NOOP-v4.7.0-ios.ipa "what changed"

# 6. commit + push (the Codeberg push-mirror replicates automatically)
git -c user.name=NoopApp -c user.email=thenoopapp@gmail.com commit -am "vX.Y.Z: ..."
git push origin main

Hard rules (unchanged from before)

  • Commit only as NoopApp <thenoopapp@gmail.com>. Before every push, the pre-push gate must show 0 hits for real-name / AI-assistant / £ markers.
  • The Android signing key (android/noop-release.jks) never leaves offline backup — it's not on the server.
  • Every change must reach all three platforms (macOS, iOS, Android) where applicable.

Anonymity / safety

Same as always: never reveal the development toolchain, keep all identities as NoopApp, prefer USD in donation copy, and don't evade the old GitHub suspension (this is new infrastructure, which is fine).