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

react-native-jupiter-image-picker

v1.1.0

Published

A modern React Native media library and camera SDK for accessing albums, browsing photos, and capturing images with native performance.

Readme

react-native-jupiter-image-picker

A React Native Turbo Module for accessing the photo library, browsing albums and assets, and capturing photos with the native camera.

Features

  • Request and query photo library + camera permissions
  • List albums (user albums and iOS smart albums)
  • Paginated asset loading with optional album and media type filters
  • Thumbnail URIs suitable for <Image /> grids
  • Open the system camera and receive a captured photo URI

Requirements

  • React Native 0.76+ (New Architecture / Turbo Modules)
  • iOS 15.1+
  • Android API 24+

Installation

npm install react-native-jupiter-image-picker
# or
yarn add react-native-jupiter-image-picker

iOS

Add usage descriptions to your app's Info.plist:

<key>NSPhotoLibraryUsageDescription</key>
<string>This app needs access to your photo library.</string>
<key>NSCameraUsageDescription</key>
<string>This app needs access to your camera.</string>

Then install pods:

cd ios && pod install

Android

Photo and camera permissions are declared by the library and merged into your app automatically. No extra setup is required beyond requesting runtime permissions from JS.

Usage

import {
  getAlbums,
  getAssets,
  getPermissionStatus,
  openCamera,
  requestPermissions,
} from 'react-native-jupiter-image-picker';

// Permissions
const status = await requestPermissions();
// { photos: 'granted' | 'limited' | 'denied' | 'notDetermined', camera: 'granted' | ... }

// Albums
const albums = await getAlbums();

// Assets (paginated)
const page = await getAssets({
  albumId: albums[0]?.id,
  mediaType: 'photo', // 'photo' | 'video' | 'all'
  page: 0,
  pageSize: 30,
});
// { assets, hasNextPage, totalCount? }

// Display thumbnails in a grid
<Image source={{ uri: asset.thumbnailUri ?? asset.uri }} />

// Native camera
const photo = await openCamera();
// { uri, width, height, filename? }
<Image source={{ uri: photo.uri }} />

API

requestPermissions(): Promise<PermissionStatus>

Requests photo library and camera permissions, then returns the current status.

getPermissionStatus(): Promise<PermissionStatus>

Returns the current permission status without prompting.

getAlbums(): Promise<Album[]>

Returns available albums sorted by title.

| Field | Type | Description | | --- | --- | --- | | id | string | Album identifier | | title | string | Display name | | assetCount | number | Number of assets | | coverAssetId | string? | Cover asset id | | type | 'smart' \| 'user' | Album type |

getAssets(options): Promise<AssetPage>

| Option | Type | Default | Description | | --- | --- | --- | --- | | albumId | string? | — | Filter by album; omit for all photos | | mediaType | 'photo' \| 'video' \| 'all' | 'photo' | Media filter | | page | number | — | Zero-based page index | | pageSize | number | 50 | Items per page (max 200) |

Each Asset includes:

| Field | Type | Description | | --- | --- | --- | | id | string | Asset identifier | | uri | string | Canonical asset URI | | thumbnailUri | string? | Displayable URI for <Image /> | | filename | string? | File name (Android) | | width / height | number | Dimensions in pixels | | mediaType | 'photo' \| 'video' | Media type | | creationTime | number | Creation time (Unix ms) | | albumId | string? | Parent album id |

openCamera(): Promise<CameraResult>

Presents the native camera UI. Resolves with { uri, width, height, filename? } on success.

Common rejection codes:

| Code | Description | | --- | --- | | PERMISSION_DENIED | Camera permission not granted | | CANCELLED | User closed the camera | | NO_CAMERA | No camera available (e.g. iOS Simulator) | | NO_ACTIVITY | No Android activity to launch the camera |

Platform notes

URIs

  • Androiduri and thumbnailUri are content:// URIs. Both work with React Native <Image /> when photo permissions are granted. Use uri for full-resolution previews.
  • iOSuri uses the ph:// scheme (asset identifier). React Native <Image /> cannot load it directly. Use thumbnailUri (a cached file:// JPEG) for display. Full-resolution iOS loading may require a future dedicated API.

Permissions

  • iOS supports limited photo library access (photos: 'limited'). Treat it the same as granted when browsing.
  • The iOS Simulator has no camera. Use a physical device to test openCamera().

Example app

# Terminal 1
cd example && npm start

# Terminal 2
cd example && npm run ios
# or
adb reverse tcp:8081 tcp:8081
cd example && npm run android

The example demonstrates permissions, album browsing, a photo grid with tap-to-preview, and native camera capture.

Contributing

See the contributing guide.

License

MIT