◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Expo SDK 58 is out of beta as of 10/15 (beta since 09/15). Check your dependencies before upgrading●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Expo SDK 58 is out of beta as of 10/15 (beta since 09/15). Check your dependencies before upgrading●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
Articles/Business
⟐ Business/2026-09-03Intermediate

My Second App From the Same Codebase Ships With a Distinct-Value Manifest

Google Play has drawn a clearer line around low-value apps. Here is how I decide where the distinct value of a sibling app lives, and the small script I run before every submission to check that the two apps have actually diverged.

rork59google-play6app-reviewindie-dev12expo12

✦ Premium Article

The Question That Stopped Me on Submission Morning

I had a new wallpaper build ready for Play Console one morning, and my hand stopped over the button. Nothing was technically wrong. What stopped me was a question I could not answer in my own words: how is this app different from the other one?

The codebase is shared. The screen skeleton, the purchase flow, the settings page — all reused. The only difference was the images being served, and as I started to say that out loud, I realised it was not an answer at all.

If you run several apps as an indie developer, this question comes back on a schedule. It got a little warmer this month, when Google Play clarified what it considers a low-value app. What follows is the check I actually run before I submit.

Low Value Has Two Branches

The clarification splits into two cases. One is a rehash of an existing app. The other is wrapping a third-party model without adding any value of your own.

Those two branches catch very different people.

BranchWho it catchesWhat is being asked
Rehash of an existing appAnyone shipping siblings from one codebaseIs the second app a different experience?
Wrapping a modelAnyone who shaped an app quickly with an AI builderWhat remains if you remove the model?

If you started with a tool like Rork, the second branch is the one you notice first. But once you are on your second or third app, a foot quietly lands in the first branch too. That crossing over is exactly where I got caught.

One more piece landed alongside it: user-data requirements now clearly extend to third-party AI integrations, and the duty to disclose what you send sits with the developer who publishes the app, not with the builder that generated it. I will come back to that.

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦You will be able to count, before you press submit, exactly which surfaces of two sibling apps still overlap
✦You will be able to answer a reviewer's question about distinct value from a record you already keep, instead of reconstructing it from memory
✦You will be able to catch the disclosure lines that a single third-party model call adds, on the day you write it rather than after the app is live
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

⟐ Business2026-04-28
Choosing a Revenue Model for Your Rork App — Ads, Subscriptions, or One-Time Purchase, Backed by Real Operating Numbers
Drawing on the years I spent running ads in my own wallpaper apps, I rebuilt the comparison of ads, subscriptions, and one-time purchases under identical conditions — with genre-by-genre guidance and implementation notes for Rork.
⟐ Business2026-04-26
App Store Rejection Playbook for Rork Apps
Rork-generated apps tend to bump into specific App Store review patterns. Here is a guideline-by-guideline playbook of the rejections I actually hit, a quick-reference table, the age rating answers that became mandatory in September 2026, review-note pitfalls, and a pre-resubmission checklist.
⬡ Dev Tools2026-05-20
Fixing 0x8badf00d Watchdog Kills That Wipe Out Rork Apps at Launch
Your Rork iOS app dies right after launch on real devices, but never on your bench. Crashlytics shows exception code 0x8badf00d. Here is how to read the exact watchdog budget out of the crash log and rearrange your launch path so it stops.