◉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)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●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)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●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/Dev Tools
⬡ Dev Tools/2026-06-17Intermediate

Spotting the 30% of Bugs Rork Can't Fix Itself — A Hand-Fix Workflow Built Around Export

Rork resolves roughly 70% of the bugs it hits on its own; the remaining 30% needs your hands. Here is the criteria I use to decide whether to keep re-prompting or export and fix it myself, plus working code for the fixes.

Rork611React Native242Debugging12Workflow4Indie Development31

✦ Premium Article

When you build with Rork, it patches a surprising share of the errors you hit without your help. Published hands-on reviews put the number around 70% — bugs resolved with no manual intervention. The trouble is the other 30%. If you keep believing "one more prompt will fix it," you can watch the same patch loop around until morning. Across years of running apps as an indie developer, the thing that has burned the most of my time is exactly this: the 30% that looks fixable but isn't.

This article shares how I spot that 30% early, and how I draw the line between cases worth another prompt and cases that call for exporting the code and fixing it by hand. I also walk through two bugs that tend to survive in generated code, with the working code I used to root-cause them.

Where the easy 70% ends and the hard 30% begins

In practice, Rork is good at fixing "problems that live inside one screen, with visible state." It struggles with "problems that depend on timing or the outside environment, where the trigger is hard to put into words." The dividing line looks like this:

Rork usually self-fixesUsually lands on your desk
Broken layouts and style mismatchesAsync races (a stale response overwrites newer state)
Type errors and undefined references the compiler flagsCrashes that appear only on a specific device or OS version
Logic fixes inside a single componentBehavior that spans native SDKs — permissions, billing, push
Copy, constants, and default valuesOff-by-one and index drift during list operations

The gap comes from what Rork is: a tool that fixes based on "the code it can see and your description." When the trigger hides in a timeline or external state, it never makes it into the description, so Rork applies a surface-level patch instead. That is why spotting the 30% starts with one question: is the cause inside the screen, or out in time and devices?

Keep re-prompting, or fix it by hand?

The test I actually use is simple. If two or more of the following are "yes," I stop re-prompting and switch to export.

  1. After two prompts on the same symptom, has Rork edited different places without fixing it?
  2. Is the error a stack trace with the cause already pinpointed?
  3. Does the fix span multiple files where you want to keep things consistent at once?
  4. Is it in billing, permissions, or push — territory that only reproduces in production?

Stacking more prompts onto a bug that matches two or more of these has nearly always been wasted time for me. If none match, letting Rork handle it is usually faster. As a table:

SituationWhat to do
0–1 matchesRe-prompt Rork (describe the expected behavior, not the symptom)
2–3 matchesExport and fix only the root cause by hand
4 matchesExport, then rethink the design of the feature itself

The deeper question of where to split no-code from hand-written work is covered in drawing the responsibility boundary between Rork Max's Swift output and the Expo version. Reading both makes it easier to decide which layer should absorb the 30% of hand-fixing.

✦

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
✦Apply a concrete test, starting today, to separate the 70% of bugs Rork fixes automatically from the 30% you should fix by hand
✦Root-cause the bugs that tend to linger in generated code — async races and list-boundary crashes — with code you can run
✦Build a workflow, grounded in running apps at 50-million-download scale, so your manual fixes don't get reverted on the next regeneration
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

⬡ Dev Tools2026-10-27
Claude Sonnet 4.5 Leaves the API on November 30. Find the Model IDs Hard-Coded in Your App First
Claude Sonnet 4.5 is scheduled to retire from the API on November 30, 2026. A small script finds the model IDs written into your app's code and config, so you can replace them and check again.
⬡ Dev Tools2026-09-04
EAS secret visibility does not keep a value out of your app — deciding prefix and visibility separately
The EXPO_PUBLIC_ prefix decides what ships inside your app; EAS visibility decides who can read it. Why stacking them blanks a value on OTA updates, and how to check your build.
⬡ Dev Tools2026-09-01
Adding image paste with expo-paste-input, and moving the disappearing file:// URIs out of cache
How to let users paste images and GIFs into a chat input with expo-paste-input. The URIs that onPaste hands you are temporary files that can vanish before the user hits send. Here is the relocation code and the order I verify it on real devices.