Skip to main content

ctrlapp 0.1.4 copy "ctrlapp: ^0.1.4" to clipboard
ctrlapp: ^0.1.4 copied to clipboard

Remote kill-switch, feature flags, forced update, forms and inbox for Flutter, plus diagnostics, device-integrity checks, push permission and hosted login.

CtrlApp Flutter — Changelog #

0.1.4 — 2026-10-21 #

  • In-app messages are shown by the package. Modals, banners and ads sent from the dashboard now appear automatically with ready-made designs that follow your app's Theme. Customize with CtrlApp.init(messageUi: ...): colors, translated text, your own builders, or enabled: false to draw nothing. Before, every app had to listen to messages and draw them itself.

  • Countdown ads. Set "Must watch for (seconds)" on an ad in the dashboard: the close button and the back button are locked until the timer ends, then the ad is never shown again. If the person leaves early it is shown again next time. Every showing is counted as a view, and distinct devices as viewers.

  • New designs: full-screen interstitial ad with a countdown ring, bottom banner ad, and CtrlAppInlineAd (a "Sponsored" card for lists).

  • CtrlAppMessage now carries creative (button text, background color, countdown) and variant. ackMessage accepts viewed and completed.

  • CtrlApp.instance.addTags([...]) / removeTags([...]) put tags on this device so campaigns and flags can target groups your app knows about.

  • New dependency: url_launcher (to open an ad's link).

  • iOS: a reinstall keeps the same device. The device id is now kept in the Keychain (this device only), so deleting and reinstalling the app no longer creates a second device in the dashboard. Existing installs keep their id.

  • Device Integrity now works out of the box. CtrlApp.init detects root / jailbreak, emulator / simulator, debugger and developer-mode signals and registers them, so the dashboard's allow / warn / block rules apply. Before this, nothing sent these signals and the rules never triggered. Opt out with CtrlApp.init(..., reportIntegrity: false).

  • CtrlApp.instance.integrityDecision exposes the verdict (allow, warn or block, and which signal caused it) so your app can show a warning. A block also sets isBlocked.

  • Android: much better emulator detection. It now catches emulators that copy a real phone's brand and model (by their x86 image), QEMU kernel flags and device files, VirtualBox / Genymotion / Nox / BlueStacks images. Chromebooks are not mistaken for emulators. Root detection also looks for Magisk and KernelSU leftovers, and test-keys builds count as rooted, not as emulators.

  • Android: developer mode is now read from the right setting (it never detected anything before), and a debugger or tracer (gdb, Frida) attached to the process is detected.

  • iOS: more jailbreak checks (rootless jailbreaks under /var/jb, Filza, injected Substrate / libhooker / Frida libraries).

0.1.3 — 2026-10-17 #

  • Replaced the example app with a small, readable one that shows the kill-switch, a feature flag, remote config and text, an experiment and event tracking. Run it with your own API key (see example/README.md).
  • Removed the example's extra audio dependency.

0.1.2 — 2026-10-17 #

  • Rewrote the README for people new to CtrlApp: what it does, three steps to start, and examples that match the real API.
  • Removed badges and links that pointed at an unrelated GitHub repository.

0.1.1 — 2026-10-17 #

No functional changes. First release published through the automated pipeline (production branch to pub.dev); it also confirms the package is owned by the ctrlapp.dev publisher.

0.1.0 — 2026-10-17 #

First public release.

Features #

  • Remote kill-switch — block the app, or any single feature, from the CtrlApp dashboard; enforced from the local cache when offline.
  • Feature flags and remote config with typed accessors, plus forced update / minimum-version checks.
  • Screen Capture Protection (opt-in, default off).
    • Android — FLAG_SECURE applied on the main thread with latest-policy-wins ordering; ownership-aware so a host-set FLAG_SECURE is never cleared.
    • iOS — per-plugin instance mask controller (no global singleton). Overlays installed while UIScreen.isCaptured reports active capture/mirroring and before app-switcher snapshots (willResignActive). Multi-window / multi-scene aware.
  • Diagnostics and error capture (opt-in): breadcrumbs, redaction, bounded queue, global FlutterError / platform handler chaining, debug overlay.
  • Device integrity signals (jailbreak, root, emulator/simulator, debugger, developer mode), device info and installation telemetry.
  • Push permission bridge (CtrlAppPush) for iOS and Android 13+.
  • Live block watch (CtrlAppBlockWatch) to apply a kill-switch to an app that is already open.
  • Hosted social login and app session (package:ctrlapp/auth.dart) with a pluggable secure session store.
  • Low-level CtrlAppClient with HTTP and mock transports.
  • Zero Firebase dependencies in your Dart code.

Behavior #

  • init() throws StateError on mismatched apiKey / baseUrl re-initialization; same-identity re-init is idempotent.
  • dispose() is idempotent and releases native enforcement before closing stream controllers.
  • Strict argument contract on the ctrlapp MethodChannel: int / string / null / non-boolean arguments are rejected with a BAD_ARG FlutterError.
  • Defaults to https://ctrlapp.dev; pass baseUrl to use another host.

Truthful limitations #

  • iOS: Apple provides no supported API to prevent still screenshots. The plugin does not use SecureTextField hacks, DRM, canvas tricks, or private APIs. userDidTakeScreenshotNotification is a post-event signal only.
1
likes
130
points
448
downloads

Documentation

Documentation
API reference

Publisher

verified publisherctrlapp.dev

Weekly Downloads

Remote kill-switch, feature flags, forced update, forms and inbox for Flutter, plus diagnostics, device-integrity checks, push permission and hosted login.

Homepage

Topics

#feature-flags #kill-switch #remote-config #forced-update #screen-capture

License

MIT (license)

Dependencies

device_info_plus, flutter, http, package_info_plus, shared_preferences, url_launcher, video_player

More

Packages that depend on ctrlapp

Packages that implement ctrlapp