RORK LABJP
EVENT — Apple holds its Surprise and Shine event today, September 9, starting at 10:00 Pacific. That lands in the small hours of September 10 in JapanEXPECT — Expected are the iPhone 18 Pro and Pro Max, a foldable, the 2nm A20 Pro chip, and release dates for iOS 27 and its sibling updatesWAIT — As this is written the event has not happened yet. Rumor-stage writing and post-announcement writing look identical once they are mixed togetherMAX — Since Rork Max generates native Swift, Apple news is not somebody else's problem. Worth repeating that the standard product still writes React NativeSIMULATOR — Rork Max compiles on cloud Macs and lets you check the result in a streaming iOS simulator inside the browser, with no Xcode and no Mac hardwareSEASON — A new OS is when automated build pipelines wobble most. An article selling convenience owes its readers a word about that wobbleEVENT — Apple holds its Surprise and Shine event today, September 9, starting at 10:00 Pacific. That lands in the small hours of September 10 in JapanEXPECT — Expected are the iPhone 18 Pro and Pro Max, a foldable, the 2nm A20 Pro chip, and release dates for iOS 27 and its sibling updatesWAIT — As this is written the event has not happened yet. Rumor-stage writing and post-announcement writing look identical once they are mixed togetherMAX — Since Rork Max generates native Swift, Apple news is not somebody else's problem. Worth repeating that the standard product still writes React NativeSIMULATOR — Rork Max compiles on cloud Macs and lets you check the result in a streaming iOS simulator inside the browser, with no Xcode and no Mac hardwareSEASON — A new OS is when automated build pipelines wobble most. An article selling convenience owes its readers a word about that wobble
Articles/Dev Tools
Dev Tools/2026-09-01Intermediate

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.

Expo203React Native236expo-file-systemImage Upload2Indie Development26

Premium Article

Let me paste a screenshot and send it. If your app has a chat screen, that request arrives sooner or later. For a long time React Native's TextInput accepted text and nothing else, so the answer was either to write native code yourself or to say no.

expo-paste-input, published at the end of August, opens a third door. When I wired it up, the pasting itself worked almost immediately. What cost me time came afterward. The image showed up fine right after pasting, but if the user waited a while before sending, it sometimes never arrived. The cause was that I had misread what the file:// URI the module hands back actually is.

This is the record of that implementation, including the part that closes the hole.

It starts with expo-, but it is not an Expo SDK module

The first thing worth knowing is where this module comes from.

expo-paste-input is an MIT-licensed community module published at arunabhverma/expo-paste-input. It is not part of the SDK that the Expo team ships. Because it is written with the Expo Modules API, npx expo install expo-paste-input works, and the name begins with expo-. Those two facts together make it very easy to assume it is first-party.

This is not a comment on quality. It is a question of who maintains it. When the SDK version moves, the person who keeps up is an individual maintainer, not the Expo team. As an indie developer deciding whether a module like this belongs in production, my test is whether I could fix it myself if it broke. The native implementations here are a few hundred lines per platform, and the module has exactly one responsibility: intercept the paste event and write the result to a temporary file. That is a readable amount of code. So I adopted it.

The flip side is real. Install it without reading it, and every SDK bump becomes a build failure you cannot explain.

Installing it means stepping off the preview loop

The README contains one short but decisive line: the library ships native code, so you have to rebuild, and Expo Go will not work.

# Install
npx expo install expo-paste-input
 
# Native code is involved, so nothing runs until you get through here
npx expo run:ios
npx expo run:android

If you have been growing a Rork-generated app by checking it in preview, that line matters more than it looks. The moment you add paste support, your verification path changes from open the preview to build and install on a device. One check goes from seconds to minutes.

I prefer to make that switch by calendar rather than by feature. If a native module is anywhere on the plan, I move to a development build at the start of the week rather than the moment I need it. The period where you are drifting between both environments is where the mistakes happen. I covered getting onto real hardware in testing on a real iPhone with Rork Companion; this is the decision that comes right after it.

Here is how I weigh it.

SituationRecommendationReasoning
Still iterating on screen structureDefer paste supportDo not spend iteration speed before the shape is settled
Chat is the core feature and users are askingMove to a development build nowA missing core feature outweighs iteration speed
This would be your only native moduleSafe to moveFewer native dependencies means more stable rebuilds
You are submitting for review this weekStart after submissionDo not touch the native layer right before a submission

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'll be able to decide, for your own situation, whether to leave preview-based iteration for a development build before you add paste support
You'll be able to write the relocation step that moves temporary paste files somewhere the system cannot reclaim them, heading off the kind of vanished-image report that is nearly impossible to reproduce later
You'll be able to hold the iOS sticker path and the Android clipboard path as a fixed order of checks on real hardware instead of a vague intention to test both
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 $15 for lifetime access
View Membership →

Related Articles

Dev Tools2026-04-08
Rork × Turborepo Monorepo Architecture: Managing Shared Code and Type-Safe Libraries Across Multiple Apps
Learn how to manage multiple Rork/Expo apps with Turborepo in a single monorepo. This guide covers shared component libraries, common type definitions, custom hooks, and utility functions — helping you move faster with higher code quality across all your apps.
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-08-31
Three Minutes After the Screen Locked, My expo-audio Ambient Sound Went Silent
Why expo-audio stops playing when the screen locks, diagnosed as three separate layers: build config, audio session, and lock screen integration. The three-minute stop on Android is documented behavior.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links