npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

expo-paste-input

v0.1.8

Published

A wrapper around React Native TextInput to paste images and GIFs from the clipboard (iOS, Android, Web)

Downloads

2,827

Readme

expo-paste-input

expo-paste-input is a lightweight wrapper around React Native TextInput that lets users paste images and GIFs directly from the system clipboard on iOS and Android.

It works at the native level to intercept paste events before React Native handles them, giving you access to pasted media as local file URIs while keeping full control over your own TextInput component.

See the original demo on Twitter

| iOS | Android | | --- | --- | | | |


Features

  • Paste text, images, and multiple GIFs
  • Works on iOS and Android
  • True wrapper around TextInput (bring your own input)
  • No custom UI, no opinionated styles
  • Returns local file URIs for pasted media
  • Safe to import on Web (no crash, no-op)
  • Supports Expo SwiftUI TextField as well.

Installation

Quick install

npx expo install expo-paste-input

or

yarn add expo-paste-input

Rebuild the app (required)

This library uses native code, so you must rebuild.

npx expo run:ios
npx expo run:android

(Expo Go will not work)


Usage

Wrap your TextInput with TextInputWrapper:

import { TextInputWrapper } from "expo-paste-input";
import { TextInput } from "react-native";

export default function MyInput() {
  return (
    <TextInputWrapper
      onPaste={(payload) => {
        console.log(payload);
      }}
    >
      <TextInput placeholder="Paste here..." />
    </TextInputWrapper>
  );
}

Props

| Prop | Type | Description | | -------- | -------------------------------------- | ---------------------------------------------------------------------------------- | | children | React.ReactElement | The TextInput (or any custom input) you want to wrap. | | onPaste | (payload: PasteEventPayload) => void | Callback fired when a paste event is detected. Receives pasted text or image URIs. |


Types

type PasteEventPayload =
  | { type: "text"; value: string }
  | { type: "images"; uris: string[] }
  | { type: "unsupported" };
  • text → pasted text
  • images → local file URIs (file://...)
  • unsupported → anything else

Why a wrapper?

This library does not reimplement TextInput.

Instead:

<TextInputWrapper>
  <TextInput />
</TextInputWrapper>

This means:

  • you keep full control of your input
  • works with any custom TextInput
  • no prop mirroring
  • future-proof with RN updates

Platform behavior

iOS

  • Intercepts native paste(_:)
  • Extracts images from UIPasteboard
  • Saves to temp files
  • Preserves GIFs

Android

  • Uses OnReceiveContentListener + ActionMode
  • Prevents Android "Can't paste images" toast
  • Saves pasted media to cache

Notes

  • Image URIs are temporary files, move them if you need persistence.
  • Text paste events fire after the text is inserted.
  • Image paste events prevent default paste (since TextInput can't render images).
  • Web is currently a no-op implementation.

Inspiration

Inspired by work from:


License

MIT