For Flutter apps. More SDKs are on the way.
Change your app after it’s in the store.
CtrlApp is a dashboard and a small package you add to your app once. From then on you can switch a broken feature off, ask old versions to update, change text and settings, and message the people using it. No new release, no waiting for store review.
Six things you no longer need a release for
Each one is a setting in the dashboard and a line or two in your app.
Switch things off
Pause one feature or the whole app. People on an old build see your message instead of a crash.
if (!ctrl.boolFlag('checkout')) {
showPausedScreen();
}Ask people to update
Set the oldest version you still support. Older builds get an update screen with a link to the store.
ctrl.blockChanges.listen((block) {
if (block.action == 'force_update') {
openStore(block.forceUpdateUrl);
}
});Change text, numbers and images
Edit a title, a limit or a banner in the dashboard. If a value is missing, your default is used.
final title = ctrl.text(
'home.title',
fallback: 'Welcome',
);
final max = ctrl.configValue<int>(
'cart.max',
defaultValue: 10,
);Send a message
Modals, banners and ads appear inside the app in your own theme. Push notifications reach the phone when the app is closed.
// Nothing to add. The package shows
// modals, banners and ads for you.Aim at a group
Put tags on devices from your app, then send a campaign to a tag. One tag can match a single person.
await ctrl.addTags(['vip']);Keep tampered devices out
The package reports emulators, rooted and jailbroken phones. You decide whether to allow, warn or block them.
// On by default. Choose the rule
// in the dashboard.Three steps, about ten minutes
Create an app
Make an account, add your app, and copy its key. It starts with ck_sdk_.
Add the package
Run flutter pub add ctrlapp in your project.
Start it when the app launches
That is all the setup. Use CtrlApp.instance from anywhere after this.
import 'package:ctrlapp/ctrlapp.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await CtrlApp.init(apiKey: 'ck_sdk_YOUR_KEY');
runApp(const MyApp());
}Flutter is ready. The rest are coming.
| SDK | Status | Install |
|---|---|---|
| Flutter | Available | flutter pub add ctrlapp |
| JavaScript | In development | Not released yet |
| Android | In development | Not released yet |
| iOS | In development | Not released yet |
| .NET | In development | Not released yet |
Things people ask first
Do I need to release a new version to use it?
Once. Add the package and ship that release. After it is out, everything above is changed from the dashboard.
What happens when a phone has no internet?
The package keeps the last decision on the device. A feature you switched off stays off, even if someone opens the app offline.
What if I delete a flag or misspell a key?
Every call returns the default you pass in when the control does not exist, so a missing key never breaks the app.
Which platforms can I use it on?
Flutter today, on iOS and Android. The JavaScript, Android, iOS and .NET SDKs are being built and are not released yet.
Connect your app and try it on a real device.
Every account starts on the free plan.