{
  "name": "bramble",
  "icon": "https://bb10repo.whytofly.de/img/bb10-bramble.png",
  "category": "System",
  "type": "cli",
  "author": "whytofly",
  "homepage": "https://bb10repo.whytofly.de/",
  "description": "bramble — a runtime code-injection framework for BlackBerry 10, the equivalent of Cydia Substrate/iOS tweaks for QNX. It loads small \"tweak\" libraries into running apps and hooks their function calls (imported-symbol GOT/PLT rewrites, C++ vtable swaps, and libc/Qt/Cascades/PPS symbol interposition) with no reflash and no image modification.\n\nThis package is the FRAMEWORK only. It installs the libbramble engine, the bramble-patch ELF tool, and a boot-time deployer. It is tweak-driven: install tweak packages (they drop their tweak into /var/bramble/tweaks/<name>/{tweak.so,filter.json}), and on the next boot bramble automatically injects libbramble into exactly the apps each tweak targets.\n\nHow injection works: bramble does NOT touch the flashed OS image. For every /apps app a tweak targets, the deployer patches the app's Entry-Point library IN PLACE — a byte-for-byte-sized DT_NEEDED string swap (libslog2.so.1 -> libbramble.so; libbramble re-provides slog2 transitively) that QNX's loader accepts — and drops libbramble beside it, then PathTrust-trusts both. When the app next launches, its forked process loads libbramble, which scans /var/bramble/tweaks, matches by app dname, and installs the matching tweak's hooks. A safe-mode auto-disables any tweak that crash-loops its host.\n\nScope/limits: injectable targets are /apps-resident Cascades apps (Settings, most system apps). The BB10 launcher process and the cascades zygote cannot be injected without a full OS reflash (the delegate spawn refuses overlay-added libraries); navigator lives on a read-only filesystem. Those are skipped. Each patched app keeps a .bramble-bak backup; `apk del bb10-bramble` restores every patched lib.\n\nActivation needs ONE reboot after install (the boot hook rides bb10-rootd's btool boot window, which has already run by install time). Requires bb10-rootd.",
  "history": [
    {
      "version": "20260716",
      "released": "2026-07-16",
      "changes": "- Initial release. libbramble engine (GOT/PLT + vtable hooks, dlopen-interposer per-app rescan, crash-loop safe-mode) + bramble-patch (in-place same-length DT_NEEDED swap) + tweak-driven boot deployer. Validated on hardware: a GOT hook of gettimeofday() fires live inside the Settings app, injected via the packaged in-place patch. Reversible (per-app .bramble-bak backups restored on removal)."
    }
  ]
}
