Changelog

Every NowKit update, newest first. Buyers get every update for life — pull the latest from your private repo and apply what fits your app.


August 23, 2026

Fixed — Play Console asks for your package name when you create the app, and the kit didn't tell you. Google moved the Package name field onto the Create app form. /kit-publish-to-play still had the old five-field version, so you'd reach a field the walkthrough never mentioned — and it's permanent once you save it. The step now shows your real applicationId to paste in, the same way /kit-sign-release already did.

Fixed — /kit-setup-paywall was missing five steps on Cursor, OpenCode, Antigravity and Codex. The create-your-app block stopped after the app name, and the "put a signed build on a testing track" step — the one that unblocks creating your products — was gone entirely, while the next step still said "now unblocked by step 2". Claude Code had the full version all along. Every agent has it now.

Fixed — going live on your first release sent you to an empty page. After the CLI uploads your build, the kit told you to open Publishing overview and click Send app for review. On a brand-new app that page is empty: Google won't accept a review submission through the API for an app it has never reviewed, so the release sits waiting for you to confirm it in the browser — through the Dashboard → Create and publish a release card, not Publishing overview. /kit-publish-to-play now checks where your release actually stands, walks the right card for a first release, keeps the Publishing-overview route for updates, and confirms your app really is in Google's queue before congratulating you.

Better — OpenCode now asks with real options instead of a text box. OpenCode has a built-in question picker, and the kit wasn't using it, so every choice arrived as a plain question you had to type an answer to. Now you get the same tappable options and multi-select that Claude Code users get, across every command.

Fixed — two commands showed no description in OpenCode. /kit-setup-theme and /kit-change-app-id had a formatting error in their header that OpenCode couldn't read, so they appeared blank in the command list and leaked their own metadata into the conversation.


August 17, 2026

New — publish to Google Play from your terminal, not the browser. NowKit now works with gplay, a free open-source command-line tool for Google Play Console. When you run /kit-sign-release, it offers to set it up: one Google sign-in, one click in Play Console, and it's done for good. After that the agent does the parts you used to do by hand.

Uploading a build. /kit-sign-release sends the signed AAB to your testing track itself — no dragging files into Play Console. Updates get the biggest win: /kit-publish-to-play's update path becomes a single command instead of a walk through the console.

Creating your in-app products. This was the most annoying step in the whole kit. Google nests a subscription inside a base plan and you have to activate both — miss one and your paywall silently shows nothing, which is the number one cause of an "offerings empty" screen. /kit-setup-paywall now creates your products from the plan /kit-plan-monetization wrote, with everything activated correctly. It shows you every product ID and price and waits for your yes first, because Google reserves a product ID permanently once it exists.

Your store listing and translations. /kit-publish-to-play pushes your title, descriptions, screenshots, feature graphic and release notes straight to Play. If you used /kit-translate-listing, every language goes up at once — no more pasting three fields per locale into a browser.

Staged rollouts. New: release to 10% of users first, watch, then ramp to 50% and 100% — or halt in one command if something's wrong. The kit couldn't do this at all before.

Per-country pricing. /kit-plan-monetization can now convert a single price into the local equivalent for every market, so you're not pricing India and Brazil at US rates.

All of this is optional. Say no and every command works exactly as before, walking you through Play Console by hand. Nothing is installed without asking, and the setup is skipped entirely until you're actually ready to publish.

Fixed — the production release step was confusing, and assumed you'd used gplay. Going live read as a jumble: the automated path told the agent to do "step 4 below", which lived inside the manual instructions, so developers got a numbered step 4 with no 1, 2 or 3 in front of it. Phase 7 now opens by answering the question everyone actually has — your build is already on Play from internal testing, going live doesn't rebuild anything — and each path is self-contained: choose your countries, move the build to production, submit for review. Staged rollout is now clearly marked as something you do over the following days rather than another thing to finish today.

It also no longer assumes your build reached Play through the CLI. The step checks where the build actually is before saying anything about it, and if you're publishing through the browser it tells you which of two things to do — reuse the bundle already sitting on internal testing, or upload for the first time — instead of offering both and leaving you to guess.

New — the AI asset declaration on your store listing. Play now asks, on the listing's Review step, whether your icon and screenshots were created or edited with AI. /kit-publish-to-play walks it as part of the store-listing task, and works the honest answer out from what the kit actually did: the framed-screenshot renderer and icon.kitchen are not AI, while the Gemini screenshot path and the Gemini/Nano-Banana icon option are. /kit-generate-screenshots now records which renderer it used, so a resumed session can still answer correctly. It's a legal declaration, so the kit shows you the answer and its reasoning and lets you confirm rather than ticking it for you.

Fixed — the publish flow could skip your app's content declarations. On a first release, /kit-publish-to-play reached Phase 5 and jumped straight to the store listing, because that is the one task in the 11-task checklist that can be automated — pushing the listing while privacy policy, content rating, data safety and the rest were still untouched. Play then rejected the listing with a 403 that looks exactly like a permissions error and isn't. The checklist is now explicitly ordered, the store listing is gated behind the other ten being finished, and the 403 has a proper diagnosis path instead of a guess.

Fixed — /kit-publish-to-play never showed its progress checklist. Other commands show a live task list as they work; this one silently didn't, because it was the only one that never listed what the tasks actually were. It now shows the phases as it goes. Resume behaviour is unchanged — the durable progress file was always the thing that survived restarts, and still is.

Fixed — the release preview never worked. Every upload command passed a --dry-run flag that gplay doesn't have on releases, so the preview step failed every time and fell through to the real upload. Releases now run gplay validate first — a fuller readiness report than a dry run would have been — then show you the exact command and wait for your go.

Fixed — "User already exists" when setting up your second app. The robot account is created once per Google Cloud project, so app number two gets the same email and Play refuses to invite it twice. The kit now recognises this and walks you through adding the app to the existing account instead, and mentions the account-level grant that covers every future app at once.

Improved — the Data safety step now asks how it went. It used to wait for you to say "done", which is fine for steps that either work or obviously don't. This one fails with machine strings like "You cannot answer PSL_ACCOUNT_DELETION_URL", and has a third state where the import succeeds and the page then won't let you continue. It now asks — imported cleanly, showed an error, or imported but stuck — and diagnoses the failure from the actual message instead of sending you to fill 780 rows by hand.

Fixed — Data safety CSV import rejected on apps with no sign-in. If your app has no authentication, the generated CSV still filled in the account deletion URL. Play hides that question entirely when an app has no account creation, and answering a hidden question fails the whole import with "You cannot answer PSL_ACCOUNT_DELETION_URL". The generator now fills the account-deletion URL only when your app actually supports account creation; the general data deletion URL is unaffected. Its self-check used to require the account URL, so it enforced the very thing Play rejects — it now checks the condition in both directions instead.

The same run turned up a second blocker: ticking "my app does not allow users to create an account" makes Play reveal a nested "Can users login to your app with accounts created outside of the app?" question, and it won't let you past the page until it's answered — even though Google's own import template marks that field optional. The CSV left it blank, so the import succeeded and then the form dead-ended. It's now answered automatically for apps with no sign-in. Run /kit-update to pick up both fixes, then re-run /kit-generate-legal.

Fixed — "no device connected" no longer sends you to Android Studio. If nothing is plugged in when /kit-run-app goes to install your app, it used to tell you to open Android Studio's Device Manager — which contradicts the whole point of the kit. It now sets up a virtual phone for you from the terminal: it checks what emulators you already have, offers to create one if you have none, starts it, and waits until it's actually booted. Plugging in a real phone is still offered, now with the full steps (including the Build-number-tap-7-times bit) instead of assuming you know where Developer options live.

The setup guides were updated to match: Android Studio is still how you download the Android SDK, but it's no longer needed for emulators.

Changed — background builds are now OpenCode-only. Yesterday's fix started Gradle in the background and polled it in every agent. That was the wrong call for most of them: Claude Code, Cursor, Antigravity and Codex all happily run a long build, so polling just turned a build you could wait on into a stop-start loop that felt slower and looked confusing. Those four now run Gradle directly again. OpenCode keeps the background recipe — its two-minute shell limit is a hard one, so it genuinely needs it. The Windows Defender guidance, the "first build downloads ~1 GB" warning and the stale-lock recovery steps are unchanged and still apply everywhere.


August 16, 2026

Fixed — first builds that hung forever, especially on Windows + OpenCode. Three students hit first builds of 18 minutes, 27 minutes, and one that never finished at all. Three causes, all now handled:

AI agents cut off long commands. Most agents stop a single shell command after about two minutes — OpenCode's limit is a hard one you can't raise. A first build takes far longer than that, so the agent would kill Gradle mid-download, retry, and kill it again. Worse, a killed Gradle leaves lock files behind, and the next run blocks on them silently and forever — that's the build that "ran for an hour". Every /kit-* command that builds now starts Gradle in the background and polls it, so no timeout can fire, you get progress updates instead of silence, and the agent knows how to clear stale locks when it finds them.

(Updated August 17: the background-and-poll recipe is now used by OpenCode only — the other agents run Gradle directly, which is faster and clearer. See the August 17 entry.)

Windows Defender was scanning every build file. An Android build creates tens of thousands of files and Defender scans each one, which is most of the difference between a 6-minute and a 25-minute build. /kit-env-check and the Windows setup guide now walk you through excluding the three folders involved — with the security trade-off stated plainly, so it's your call, not a silent change to your machine.

Nobody told you the first build is slow. It downloads about 1 GB of build tools and libraries and prints almost nothing while it does, so it looks frozen. The kit now says so up front, warms the download up early during /kit-env-check rather than letting it ambush you at the end of setup, and RUN.md carries the same note.

Also — more memory for Gradle and the Kotlin compiler. The kit shipped with a 2 GB Gradle heap and no setting at all for the Kotlin daemon, which thrashes on Compose + KSP builds. New clones get 3072m for Gradle and 2048m for the Kotlin daemon — sized to stay safe on an 8 GB laptop rather than to be as large as possible. Existing apps: this one lives in your gradle.properties, so run /kit-update and apply the changelog patch for it.

Fixed — the Data safety CSV now imports cleanly when data is both collected and shared. Uploading playstore/play_data_safety.csv in Play Console could fail with a cryptic You cannot answer PSL_DATA_USAGE_RESPONSES:PSL_EMAIL:PSL_DATA_USAGE_EPHEMERAL. Play's per-type question is "Is this data collected, shared, or both?" — and the generator treated collected and shared as either/or, so any data type you marked Shared = Yes was written as shared but not collected. Play then hides the "processed ephemerally" question for that type (it only exists for collected data) and rejects the file. Worse, it silently under-declared collection for every shared row — the exact contradiction between your Data safety form and your privacy policy that Play strikes apps for. The generator now ticks both boxes for a shared type, and its self-check verifies it.

Fixed — /kit-generate-legal was over-marking data as "shared". Play defines sharing as transferring data to a third party that uses it for its own purposes, and explicitly excludes a service provider processing on your behalf. Supabase, Firebase, Crashlytics, PostHog, Sentry, RevenueCat, OpenRouter and friends are all service providers — so they're not "shared". The command now defaults those to Shared = No and reserves Yes for real onward transfers (ad and attribution networks, data brokers), which keeps your public Data-safety card honest instead of needlessly scary.

Updated — where to find your release SHA-1 in Play Console. Google moved the app-signing page again and changed how the fingerprint is presented. /kit-publish-to-play now walks the current UI: Protected with Play → Play Store protection → Protect app signing key → Manage Play app signing, then on the App signing page the fingerprint is a copy button (it copies to your clipboard — nothing visibly changes), not a value you can read off the page. It also warns you off the wrong one: the same page has an Upload key certificate section further down with its own SHA-1, and registering that leaves Google sign-in broken for every Play user.

Run /kit-update to pull all three.


August 4, 2026

Fixed — JDK 21 no longer blocks setup. /kit-env-check (and /kit-start-setup) hard-checked your Java version for exactly 17 and told anyone on JDK 21 to downgrade — even though the kit builds fine on it. JDK 17 was never actually required: the kit targets Java 17 bytecode, but Gradle 8.14 + AGP 8.9 run happily on JDK 21 (verified — full assembleDebug is green on 21). The check now passes any JDK 17 or newer and only fails below 17. If you were told to install JDK 17 while on 21, run /kit-update to pull the fixed commands and you're good — no downgrade needed. (17 is still the safe baseline if you're installing fresh.)


August 3, 2026

Added — a pre-built Manage Subscription screen for paid apps. If your app charges, your users need a way to see their plan, restore a purchase, or cancel — and Google Play expects easy access to it. Until now every buyer had to build that themselves. The kit now ships it: Settings → Subscription, shown automatically whenever PAYWALL_ENABLED. Subscribers get a Manage subscription row that opens RevenueCat's prebuilt Customer Center — cancel, restore, refunds, and cancel-retention flows, all configured in the RevenueCat dashboard (same hands-off pattern as the paywall, so there's no UI for you to maintain). Non-subscribers see an Upgrade to Premium row that opens your paywall instead. It works out of the box with your existing RevenueCat setup; to customise the retention offers and surveys, /kit-setup-paywall now points you at RevenueCat → your Project → Lifecycle → Customer Center (optional). Free apps (PAYWALL_ENABLED = false) never see any of it. Existing apps: run /kit-update to pull the updated /kit-setup-paywall, then apply this screen from the changelog patch (it's a new screen + a Settings row + a nav route).


July 21, 2026

Added — /kit-update-deps: update your dependencies without breaking your app. Keeping an Android project's dependencies current is a minefield — AGP, Gradle, Kotlin, KSP and the Compose compiler all move in lockstep, several libraries in the kit are pinned on purpose (Firebase BOM, the Supabase + Ktor pair, RevenueCat), and a version that compiles fine can still break the paywall or sign-in at runtime. A blind "bump everything to latest" is the fastest way to a dead build. The new /kit-update-deps command does it the safe way: it reads your libs.versions.toml, checks the latest version of each library from Maven, and sorts everything into three buckets — ✅ safe (routine library bumps, applied automatically), ⚠️ toolchain (AGP / Kotlin / Compose / compileSdk — careful, opt-in, and it hands the big migrations to the official Android upgrade skills), and 🔒 pinned (left alone unless you explicitly override, behind a loud warning + guaranteed rollback). It applies one group at a time — compile, lint, then smoke-run on your device — and makes a separate commit per group, so if anything misbehaves you revert exactly one commit. It also flags the one bump that is not optional: Google Play's targetSdk deadline, which blocks your uploads once it passes. Also updated: /kit-env-check now shows how to keep your machine tools (Android SDK, gh, ImageMagick…) current and points you at /kit-update-deps for the app's Gradle dependencies. Run /kit-update to pull the new commands, then /kit-update-deps whenever you want to freshen your dependencies (a good habit before each release).

The kit itself is now on fresher dependencies + targets Android 16. New clones ship with ~17 libraries bumped to their current stable versions and targetSdk raised to 36 (Android 16) — so you start current and ahead of Google Play's target-API deadline. Already have an app you built on an older clone? These do not arrive through /kit-update — that command only refreshes the /kit-* commands and skills, never your libs.versions.toml or build.gradle.kts (those are your code, and blindly overwriting them could clobber your own changes). Instead, run /kit-update-deps — it re-derives the current versions for your project, bumps the safe ones, and walks you through targetSdk 36 so you clear the Play deadline. Do it before your next release. (The kit stays on AGP 8.x / compileSdk 36 for now; the AGP 9 migration is a separate, bigger step we'll ship its own guided path for.)


July 15, 2026

Added — your subscription now follows the signed-in user, not the phone. Out of the box the kit configured RevenueCat with a random anonymous id per install — it never told RevenueCat who your user was. So a subscriber who reinstalled, or signed in on a second device with a different Play account, looked like a brand-new customer, and your RevenueCat dashboard showed opaque UUIDs instead of real people. (Separately, the kit had a setUser analytics call that was written but never wired up — so PostHog / Firebase were never told who the user was either.) A new SessionIdentitySync watches your auth session and, on every sign-in / sign-out, keeps both analytics and RevenueCat in sync with the app user: RevenueCat logIn(uid) / logOut(), plus the user's email and PostHog id sent to RevenueCat so the dashboard is readable and each subscriber links back to their analytics profile. The uid is your Supabase or Firebase id automatically — whichever provider you chose. Everything no-ops safely when you have no auth (anonymous is correct then), no RevenueCat key, or no PostHog. Heads-up: sending email to RevenueCat shares it with a third party, so re-run /kit-generate-legal to add that line to your privacy policy + Play Data Safety. Existing apps: run /kit-update and apply the "Link RevenueCat identity to the signed-in user" fix (only relevant if your app has auth enabled).

July 13, 2026

Fixed — cleared two Google Play "edge-to-edge" recommendations. Play flagged "your app uses deprecated APIs or parameters for edge-to-edge" and "edge-to-edge may not display for all users." Both traced to res/values/themes.xml, which set android:statusBarColor and android:windowLightStatusBar — attributes that are deprecated on Android 15 (API 35), the kit's target. The kit already calls enableEdgeToEdge() in MainActivity, which makes the system bars transparent and auto-adapts the status-bar icons to your light/dark theme — so those XML attributes were redundant, and the hardcoded light-status-bar flag actually broke icon contrast in dark theme (the "may not display" warning). Removed both lines; no visual regression, no code change. Existing apps: run /kit-update to apply the one-line theme fix.

July 8, 2026

Fixed — your app icon now actually changes on the phone. In /kit-publish-to-play's app-icon step, giving your own PNG (or a Gemini-generated one) only rewrote the legacy icon bitmaps — but the kit's minSdk is 26, so every device shows the adaptive icon (foreground + background), which was left untouched. Net result: you'd set a new icon, upload it to Play, and your phone still showed the old NowKit placeholder. Now the step regenerates the adaptive foreground/background (your art centred in the icon safe-zone so no launcher mask clips it) and the legacy bitmaps and the 512 Play icon — and, crucially, reinstalls the app on your device (a Play upload never updates the app on your phone, and Android caches launcher icons), then tells you to eyeball the home screen before moving on. icon.kitchen output already did the adaptive part; the reinstall applies to that path too. Ships for all five agents. Existing apps: run /kit-update, then re-run the icon step in /kit-publish-to-play.

July 5, 2026

Fixed — /kit-generate-legal now writes a Data safety CSV you can actually trust. The old flow asked the AI to hand-fill Play's 780-row Data safety import CSV, separately from the human-readable play_data_safety.md table. In practice the two drifted: a published app could declare 2 data types when it actually collected 10 — under-reporting that contradicts your own privacy policy, which is exactly what Google strikes apps for. It also sometimes left the two required deletion-URL rows blank, so the import failed with "Response missing for PSL_ACCOUNT_DELETION_URL". Now the .md is the single source of truth, and a bundled generator (scripts/DataSafetyCsv.java, runs on the JDK you already have — no install) derives the CSV deterministically from it and refuses to write a wrong file: it hard-fails, listing the exact problem, if any data type is non-canonical, a purpose is unrecognised, a URL row is missing, or the CSV wouldn't match the .md. Both deletion-URL rows are always filled. Verified end-to-end against real Play Console. Existing apps: run /kit-update, then re-run /kit-generate-legal and re-import the CSV — check your live Data safety lists every type your privacy policy does.

Fixed — /kit-publish-to-play first-release maze, three real snags buyers hit.

  • Set countries/regions. A first Production release starts with 0 countries and Play silently blocks rollout ("you must select at least one country/region") until you add them. The command now has an explicit step: Production → Countries / regions tab → Edit countries. (Also noted on the update path.)
  • Advertising ID declaration. Because the kit ships Firebase Analytics, your manifest includes the AD_ID permission, so Play requires an Advertising ID declaration — a step outside the 11-task checklist that only surfaces as a "1 issue" at the final review and blocks rollout. New Phase 5.4b walks it (declare Yes, purpose Analytics), plus a catch at submit time.
  • App signing / SHA-1 moved. Google relocated the app-signing page; the SHA-1 step now points at Protected with Play → Play Store protection → Manage Play app signing (was the old Test and release → App integrity path).

All changes ship for every agent (Claude Code, Cursor, Antigravity, OpenCode, Codex). See the Commands reference.

July 3, 2026

New

  • New command: /kit-plan-monetization — decide how your app makes money, then wire it in. Until now the kit set up the paywall plumbing (/kit-setup-paywall) but left the actual money strategy to you: which model, what to lock, what to charge. This new command fills that gap. Run it after /kit-design-app and it reads your real screens, helps you pick a model (freemium, free-trial, or pay-once), recommends which features to lock and what to price them at, then wires the premium gates into your screens for you. It's strictly entitlement-only — your app just checks the premium switch, so products, prices, trials, and paywall design stay editable in RevenueCat with zero code changes (nothing is hardcoded). If your paywall isn't set up yet, it runs /kit-setup-paywall first; at the end it walks you through creating the products, attaching them to premium, and publishing the paywall — and it'll even review a screenshot of your paywall for conversion tips. Ships for all five agents (Claude Code, Cursor, Antigravity, OpenCode, Codex). See Pricing Strategy and the Commands reference.

Fixed

  • The app no longer crashes on the paywall when RevenueCat isn't set up yet. If you had the paywall switched on (PAYWALL_ENABLED = true, the default) but hadn't added your RevenueCat API key yet — e.g. you ran the app before finishing /kit-setup-paywall — the app crashed the moment the paywall appeared (usually right after onboarding) with "There is no singleton instance… configure Purchases…". RevenueCat's prebuilt paywall reads its SDK singleton on creation and throws when it isn't configured, and the kit was showing that paywall unconditionally. Now the kit skips the paywall when RevenueCat has no key and continues to your app, so a half-finished setup (or a paid app mid-build) runs fine; the paywall appears as soon as the key is in. Existing apps: run /kit-update and apply the paywall-crash fix.

July 2, 2026

Docs

  • Setup guides now install the GitHub CLI (gh). gh is what /kit-save-to-github uses to create your private repo and push — the macOS, Windows, and Linux setup pages now include it as a step (install + gh auth login), with GitHub Desktop mentioned as an optional GUI.
  • Codex is now a first-class agent in the docs. NowKit's /kit-* commands already shipped for OpenAI Codex — the setup guides and Requirements page now list it alongside Claude Code, Cursor, Antigravity, and OpenCode (with install command + pricing).
  • Cleaner Requirements page. The "Optional accounts" table is now easy-to-scan per-service cards (like GitHub), and the AI-agent section has a proper comparison table — what each agent is, its cheapest plan, and notes — plus a "cheaper plan still ships a full app" explainer.
  • Dropped Holo from the setup guides and /kit-env-check. The optional terminal profiler confused people, so it's gone everywhere — one less thing to think about. scrcpy stays as the optional screen-mirroring tool. (Also fixed the Windows setup page's sdk.dir note to use escaped backslashes.)
  • Proper step-by-step Setup Linux page. Linux used to be a single crammed code block at the bottom of the macOS page — it's now a full guide (apt / .bashrc, each step with a verify) alongside Setup macOS and Setup Windows.

Fixed

  • /kit-generate-legal no longer flashes an "invalid tool parameters" error mid-run. Its question step tried to use a fixed-option picker for free-text answers (your company name, email, region) — now the open-ended questions are asked as plain prompts and only the yes/no ones use the picker. (It recovered before, but the red error was confusing.)
  • /kit-generate-legal now catches services you added by hand — and never invents a claim. The scan used to only recognise the kit's own SDKs and Retrofit endpoints, so if you wired up a transcription service (Deepgram, AssemblyAI), your own OpenRouter call, or anything over raw OkHttp/WebSocket, it was missed — and the agent could write a confident but wrong line like "voice is on-device, audio isn't sent," which is exactly the kind of Data Safety mismatch that gets an app pulled from Play. It now scans the whole codebase for raw HTTP/WebSocket calls, external hosts, API keys, and audio/camera/location/file capture; always asks what you added and whether you send audio/media/files/location anywhere; discloses third-party sharing (a service that receives your audio or text is a recipient); and is forbidden from claiming "on-device / not sent / not stored" unless it's verified from the code. If you shipped a policy before this, re-run /kit-generate-legal and double-check it.
  • /kit-publish-to-play points at the real Play Console for your version code. The "find your highest uploaded versionCode" step named App bundle explorer, which Google removed — it now sends you to Test and release → Latest releases and bundles → Latest app bundles (the Version code column).
  • Windows setup now writes a correct sdk.dir. On Windows, /kit-start-setup wrote the Android SDK path with forward slashes (and sometimes left the macOS placeholder line behind), which fails on some machines. It now writes exactly one line with doubled backslashessdk.dir=C:\\Users\\<name>\\AppData\\Local\\Android\\Sdk — the format a Java .properties file actually needs.
  • /kit-update now pulls the Data safety template too. The one-click Data safety CSV needs data_safety_sample_reference.csv (Google's import schema); /kit-update only refreshed the command files, so apps cloned before that template existed didn't get it and /kit-generate-legal had nothing to fill. /kit-update now fetches it alongside the commands.

June 30, 2026

New

  • Your store listing's feature graphic is now generated for you. /kit-generate-screenshots creates playstore/feature_graphic.png (1024×500 — required by Play) with your logo + app name on your brand colour, in every screenshot path. No more getting blocked at the listing because you don't have a 1024×500 banner.
  • /kit-publish-to-play now registers your release SHA-1 and checks paywall billing. Two things that quietly broke launches are now in the flow: a Register your release SHA-1 step (after the checklist) so Google sign-in actually works on Play builds — Play re-signs your app, so the debug fingerprint you registered during setup isn't the one users get — and a paywall billing-readiness check before the build (uncomments the BILLING permission, confirms your RevenueCat ↔ Play products are live) so purchases credit real users.
  • Shipping an update now catches stale legal + lets you track the release. /kit-publish-to-play's update path asks whether you changed any SDK since last release (paywall, analytics, AI, auth) and, if so, regenerates your privacy policy + Data Safety and re-hosts them — so you don't ship a Data Safety declaration that no longer matches your app (which Play strikes). It also offers /kit-plan-release-analytics before the build so a new feature ships with its funnel.

Changed

  • /kit-upload-on-google-play has been removed — use /kit-publish-to-play. The newer command does everything the old one did (and walks the Play Console in the right order, one step at a time), so the legacy command is gone to avoid confusion. Anything that used to point at /kit-upload-on-google-play now points at /kit-publish-to-play, and /kit-update deletes the old command file from your repo if you still have it.

Fixed

  • /kit-publish-to-play now matches the real Play Console, screen for screen. The "Set up your app" steps used to send you to menus that no longer exist (the old "App content" nav, "App access"). Every task now opens its row in the Dashboard checklist with the exact current wording — Sign in details (incl. the full "Add sign in details" reviewer-account dialog), Ads, Government apps, store listing, and the rest. The command also now tells you to dismiss the per-save "Go to Publishing overview?" dialog with Not now, and ends with the one batched Publishing overview → Send app for review submission (the production submit for accounts exempt from the 14-day test).

  • Data safety is one-click again — the CSV is actually created now. /kit-generate-legal fills playstore/play_data_safety.csv from your app's SDKs (it previously only made the reference page, so there was nothing to import). In Play, Data safety → Import from CSV and the whole form fills. (It also stopped pointing at the dead "App content" menu.)

  • /kit-generate-landing stopped using the old "App content → Privacy policy" path too.

  • /kit-publish-to-play — the rebuilt 0-to-Google-Play command. Walks the whole Play Console journey in the right order, one step at a time (no more dependency maze), generates a Data safety CSV you import in one click, and covers the 12-tester / 14-day closed-testing gate through to production. Replaces the legacy /kit-upload-on-google-play.

Improved

  • /kit-sign-release now archives every build. Each signed AAB is copied to releases/ under a versioned name (e.g. Focus5_v1.0.0_1.aab) so your build history is kept instead of Gradle overwriting app-release.aab each time.

  • /kit-publish-to-play now makes your app icon. Phase 1 adds a launcher-icon step (before the build) with three ways to make it: icon.kitchen, generate with Gemini / Nano Banana (the command writes the image prompt from your app's purpose + brand colour), or bring your own ≥512×512 PNG — then it resizes into every density + the 512×512 Play icon for you.

  • The Gemini icon prompt now copies to your clipboard. Instead of printing the prompt in the terminal (where the gutter and line-wrap made it impossible to copy cleanly), the command saves it to playstore/icon-prompt.txt and copies it straight to your clipboard, then walks you through generating the image on gemini.google.com (Create images → Thinking / Nano Banana Pro) and downloading the PNG — no guessing where to paste.

  • /kit-publish-to-play builds after the landing page now. The build step moved to run once your hosted privacy/terms URLs exist and are written into KitConfig, so the shipped app's in-app Settings → Privacy / Terms links are correct (they used to point at placeholders).

  • /kit-publish-to-play now remembers where you left off — across restarts. A first release is multi-day, and the screenshots step makes you restart Claude Code (for the image MCP), which used to wipe its progress and dump you back at Step 1. It now saves a small playstore/.publish-progress.md and reads it on every run, so it resumes at the exact phase you stopped at — your finished icon, created app, and installed MCP are all recognised instead of re-asked. (The file is git-ignored.)

  • You no longer run the Gemini MCP setup by hand. When /kit-generate-screenshots needs the image MCP, the agent now runs npm install -g @houtini/gemini-mcp and registers the server itself (via claude mcp add) — you only paste your API key and restart, instead of copy-pasting install + config commands.

  • Screenshots now have a free, no-distortion option. /kit-generate-screenshots analyses your app and writes the ASO captions once, then lets you pick how to render: the new free framed editor (ParthJadhav app-store-screenshots, MIT) frames your real screenshots with captions + a background at the exact Play resolution — no AI, no stretching (the old Gemini-only path stretched shots to fit and could look distorted) — or the Gemini AI path for richer marketing scenes (now flagged as paid: API credits + MCP setup + restart). Both reuse the same captions and your raw shots.

Fixed

  • Screenshot MCP setup is now correct + step-by-step. /kit-generate-screenshots walks the Gemini (Nano Banana Pro) image-MCP setup one step at a time using the skill's actual package — @houtini/gemini-mcp — instead of dumping a different fork's instructions in one wall of text.
  • The agent runs the build (and other non-interactive steps) itself. /kit-sign-release (and /kit-publish-to-play Phase 4) sometimes asked you to run ./gradlew :app:bundleRelease by hand. The signed build is non-interactive — the keystore passwords live in local.properties — so the agent now runs it directly, same as npm install and other setup commands. You only run things that genuinely need you (logins, browser steps). A guard in AGENTS.md keeps every command consistent.
  • First release no longer collides with your RevenueCat placeholder build. /kit-publish-to-play used to leave versionCode = 1 on a first release — but connecting RevenueCat already uploads a placeholder build at code 1, so Play rejected your real build as a duplicate. Phase 1 now asks whether any build is already on a track and bumps versionCode above it before building, so the upload goes through the first time.

June 28, 2026

New

  • /kit-pre-register-setup — put your app on Google Play pre-registration so the listing goes public before launch and collects sign-ups + day-one installs. Reuses the signed AAB from /kit-sign-release (nothing new to build) and can wire a reward — for subscription apps a free 30-day Premium pass. (Play forbids subscriptions as rewards and grants one-time products for life, so the kit time-boxes the pass in code from the Play purchase date — survives reinstalls.) Walks the Play Console + RevenueCat steps and the new-account closed-testing requirement up front.

Improved

  • Entitlements now refresh when the app returns to the foreground — an entitlement granted outside the app (a pre-registration reward claimed in the Play Store, or a purchase made on another device) unlocks premium the same session instead of waiting for the next cold start. Code change — /kit-update applies it.
  • /kit-upload-on-google-play now walks the "Set up your app" content declarations — content rating, target audience, ads, financial features, health, government — the ones that block a release with "you must complete…" errors. It's codebase-aware: it reads your app to suggest each answer with the evidence (e.g. "Ads: No — no ad SDK") and notes that a paid subscription is not a "financial feature".

Fixed

  • Cursor, OpenCode, and Codex got the full versions of three commands. Their copies of /kit-upload-on-google-play, /kit-setup-auth, and /kit-start-setup had drifted behind the Claude versions and were missing whole sections (the release flow's later steps, the Google sign-in sub-steps, the resume + later setup steps). All three are now back in full parity across every agent.

June 25, 2026

New

  • Automatic Google Play ↔ RevenueCat connection. /kit-setup-paywall asks "automatic or manual?" — pick automatic and the agent uses gcloud to provision the Google Cloud service account, APIs, and roles for you (reusing your Firebase project if you have one). You're left with two clicks: grant Play access and upload the key to RevenueCat. Manual still available.
  • Pick up setup where you left off. The long flows (/kit-start-setup, /kit-design-app, /kit-upload-on-google-play) can be stopped half-way and resumed later — even the next day or in a new chat. Re-run and the command reads your project, shows a "welcome back" status, and continues from the next unfinished step.

Improved

  • A few more commands got smarter about not repeating work: /kit-change-app-id notices if you've already renamed, /kit-generate-legal asks before overwriting existing policy docs, and /kit-translate + /kit-translate-listing skip languages you've already translated.

June 23, 2026

Fixed

  • No more "domain not verified" warning in Play Console. The kit shipped an active App Links filter for shipkaro.dev your app inherited, so Play tried to verify a domain you don't own. Now disabled by default (opt-in template for your own domain). Code change — /kit-update applies it.
  • Open source licenses screen no longer crashes (and is back in Settings). It called a Compose API whose signature changed; the kit now renders the license list itself, stable across Compose updates. Code change — /kit-update applies it.

June 22, 2026

New

  • /kit-update — pull the latest NowKit commands + skills into your app, with your code untouched. It refreshes only the /kit-* commands and skills (on a review branch, no merge conflicts even though you've renamed + customised your app), then offers to apply any code-level bug fixes from this changelog that you choose. Lifetime updates, the safe way.

June 21, 2026

Fixed

  • Paywall purchases now unlock premium immediately. RevenueCat's prebuilt paywall completed the purchase but never refreshed the kit's subscription state, so a paid user could stay locked out. The paywall now refreshes entitlements on purchase and restore.
  • Supabase profile name + avatar no longer come back quoted. Name showed as "name" and the avatar URL wouldn't load because the JSON value kept its quotes. Both now read as clean strings.

Improved

  • Billing setup is gentler. The service-account JSON and RevenueCat (products → entitlement → offering → paywall) steps are now walked one at a time with a "done" gate after each — no more wall of ~12 instructions at once.
  • The Google sign-in setup dropped its overwhelming up-front overview — it just walks the next step.
  • Data Safety answers now print as a table in the terminal (and in the file), so you can fill the Play form without opening anything.
  • RUN.md gained a one-command build + run (./gradlew :app:installDebug && …), printed when it's created so you can paste it into a terminal and launch the app yourself.

June 14, 2026

New

  • /kit-generate-changelog — writes your Play Store "What's new" notes from your git history, as plain user-facing bullets.
  • /kit-translate-listing — translate your store listing (title, short + long description, "What's new") into multiple languages.
  • /kit-run-app writes a RUN.md — the plain build / install / launch commands, so you can run your app from a terminal without an AI agent.

Improved

  • /kit-design-app now reproduces your design faithfully. It asks Reproduce exactly vs Adapt to the kit's look — in Reproduce mode it matches your Stitch / Figma / mockup layout, colours, and copy, then diffs the result against your source.
  • Cleaner default look — the kit's default neutrals are now Material-classic gray (gray background + white cards) instead of purple-tinted, so any brand colour sits on neutral surfaces.
  • /kit-generate-landing now hosts the page for you — pick GitHub Pages (fully automated), Firebase Hosting, Vercel, or self-host, and get your public privacy-policy URL.
  • /kit-upload-on-google-play bumps your version automatically before every build, so re-uploads never hit Play's "version code already used" error.
  • Release SHA-1 lookup updated for Google's current console (Protected with Play → Manage Play app signing).
  • Data Safety guidance now explains the "processed ephemerally" and "required vs optional" toggles.

Known issue

  • The Settings → Open source licenses screen is temporarily hidden pending a dependency update (it crashed on some setups). Everything else is unaffected.

June 13, 2026

Improved

  • Billing setup walks the order that actually works — create the Play app → signed build on a testing track → products → service-account JSON → attach the entitlement → publish the paywall. (Play blocks product creation until a billing build is on a track — this stops the #1 thing people got stuck on.)
  • Create-app step walks the real Play form and pre-fills your package name — no more guessing your applicationId.
  • The paywall's "set up real billing now?" question no longer interrupts initial setup — it's asked after your first build runs.
  • Products + RevenueCat steps expanded with the fiddly bits (Subscription → Base plan with "activate both", and attaching products to the premium entitlement).
  • Google sign-in setup updated for Google's new Google Auth Platform consent screen.

Fixed

  • Onboarding / auth / permission screens respect system bars (buttons no longer hide under the status or navigation bar).
  • /kit-design-app no longer detours into onboarding mid-flow.

June 12, 2026

New

  • /kit-sign-release — create a release keystore, build a signed AAB, and upload it to a testing track. This is the build RevenueCat needs to verify the Play billing connection — no products required yet.
  • Every /kit-* command now ships for all supported agents — Claude Code, Cursor, Google Antigravity, OpenCode, and Codex.

June 11, 2026

New

  • /kit-generate-aso — Play Store listing copy (title + descriptions) from a keyword strategy.
  • /kit-generate-landing — a simple static landing page (hero, features, privacy, terms, contact).
  • /kit-save-to-github — back up your app to your own private GitHub repo.

Improved

  • Ships Material icons by default; Feather / Tabler are opt-in.
  • Paywall declares the billing permission and gates RevenueCat release-time setup, with an option to start the slow billing clocks early.

June 1–4, 2026

New

  • /kit-generate-screenshots — ASO-optimised Play Store screenshots.
  • /kit-env-check — verify your machine has every tool the kit needs.
  • /kit-setup-ai (OpenRouter), /kit-setup-review-dialog, and the in-app review prompt.
  • 8 full-screen permission flows (camera, notifications, location, …).
  • 20+ new design-system components (pickers, snackbars, shimmer, badges, bottom-nav, and more) + a Components catalog screen.
  • Timber logging, Sentry crash reporting, and an encrypted SecureDataStore.

Improved

  • Every /kit-setup-* command now detects what's already configured and is paced with stop-and-wait steps (no walls of instructions).
  • Open-source licenses screen switched to AboutLibraries (lists every dependency, not just Google's).

Fixed

  • Removed a Sentry launch crash and the duplicate in-app splash screen.

v1.0.0 — Launch

The first public release. Everything you need to take an Android app from idea to the Play Store, driven by slash commands.

In the box

  • 🔑 Auth — email + Google sign-in (Supabase or Firebase)
  • 💳 Paywall — RevenueCat, soft or hard
  • 📊 Analytics — PostHog, Firebase, Crashlytics, Sentry
  • 🤖 AI — OpenRouter (one key, 100+ models)
  • 🎨 Design system — 40+ Compose components in your brand color + icon pack
  • 🧭 Onboarding — simple 3-page intro or a personalised questionnaire flow
  • 🛡️ Permissions — 8 prebuilt full-screen permission flows
  • 🌐 Localization — English by default, any language on demand
  • ⚙️ Ops — remote config, force/soft update gate, maintenance mode, changelog
  • 🚀 Release — Play Store assets, listing copy, privacy policy, Data Safety, upload

Setup commands

A full set of /kit-* commands your AI agent runs for you — /kit-start-setup, /kit-setup-auth, /kit-design-app, /kit-upload-on-google-play, and more.

📖 Full docs: kit.shipkaro.dev/docs


Updates are diffs + migration notes — you own the code, so you apply what fits your app.