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-vcard-importer

v0.1.1

Published

vCard Importer

Readme

Expo VCard Importer

An Expo module for opening vCard (.vcf) files in your React Native app across iOS, Android, and Web.

  • 📱 On iOS, it uses CNContactViewController to present a native contact sheet with built-in Cancel and Share buttons.
  • 🤖 On Android, it opens the vCard file using an Intent (handled by the system’s Contacts app).
  • 🌐 On Web, it triggers a .vcf file download.

✨ Features

  • 📂 Open and display .vcf files cross-platform.
  • 👤 Native iOS contact view with Cancel and Share actions.
  • 📲 Android integration via system Intent.
  • 🌍 Web support via file download.
  • 🔔 "onShare" event emitter (iOS only).

📦 Installation

npx expo install expo-vcard-importer

Since this package includes native code, make sure to run prebuild:

npx expo prebuild

🚀 Usage

import { useEvent } from "expo";
import VCardImporter, { openVCard } from "expo-vcard-importer";
import { Button } from "react-native";

export default function App() {
  // iOS only: listen for "Share" button event
  useEffect(() => {
    VCardImporter.addListener("onShare", () => {
      console.log("onShare event triggered");
    });
  }, []);

  const handleOpen = async () => {
    try {
      await openVCard(
        "file://path/to/Rumen_Rusanov.vcf", // absolute file path or file:// URI
        "Rumen Rusanov" // optional name (only used on Web)
      );
    } catch (e) {
      console.error("Failed to open vCard", e);
    }
  };

  return <Button title="Open vCard" onPress={handleOpen} />;
}

📚 API

openVCard(path: string, name?: string): Promise<void> Opens a .vcf file:

  • iOS → Presents a native contact view (CNContactViewController).
  • Android → Launches an Intent to view the vCard (handled by Contacts).
  • Web → Triggers a .vcf file download.

Parameters:

  • path → The absolute file path (or file:// URI).
  • name? → Optional filename for Web downloads.

Listening to "onShare" (iOS only)

Using addListener:

import VCardImporter from "expo-vcard-importer";

const subscription = VCardImporter.addListener("onShare", () => {
  console.log("onShare event triggered");
});

// later
subscription.remove();

Using useEvent from Expo (recommended):

import { useEvent } from "expo";
import VCardImporter from "expo-vcard-importer";

function ContactScreen() {
  useEvent(VCardImporter, "onShare");

  return null;
}

⚠️ Platform Notes

  • iOS: Requires user permission to access Contacts if saving the contact.
  • Android: Relies on the system’s default contact handler. Ensure .vcf is readable and your FileProvider is configured.
  • Web: Only supports downloading the .vcf file, not previewing.

📄 License

MIT