Skip to content

kingstinct/react-native-activity-kit

Repository files navigation

@kingstinct/react-native-activity-kit

Test Status Latest version on NPM Downloads on NPM Discord

A powerful React Native library for iOS Live Activities using ActivityKit, built with Nitro Modules for optimal performance.

📱 Features

  • iOS Live Activities: Create and manage live activities that appear on the lock screen and Dynamic Island
  • Real-time Updates: Update activity content in real-time with push notifications or local updates
  • TypeScript Support: Fully typed API for enhanced developer experience
  • Nitro Modules: Built on Nitro for high-performance native interactions
  • Expo Compatible: Easy integration with Expo projects via plugin

🚀 Installation

# npm
npm install @kingstinct/react-native-activity-kit

# yarn  
yarn add @kingstinct/react-native-activity-kit

# bun
bun install @kingstinct/react-native-activity-kit

⚙️ Configuration

Expo Setup

Add the plugin to your app.json or app.config.js:

{
  "expo": {
    "plugins": [
      "@kingstinct/react-native-activity-kit"
    ]
  }
}

The plugin automatically enables Live Activities support in your iOS Info.plist.

Manual Setup

For non-Expo projects, add this to your iOS Info.plist:

<key>NSSupportsLiveActivities</key>
<true/>

📖 Usage

import { ActivityKit } from '@kingstinct/react-native-activity-kit';

// Check if Live Activities are available
if (ActivityKit.isAvailable) {
  // Start a new activity
  const activity = ActivityKit.startActivity(
    // Attributes (static data)
    { 
      title: "Pizza Order",
      orderId: "12345"
    },
    // State (dynamic data)
    {
      status: "preparing",
      estimatedTime: 15
    },
    // Options
    {
      staleDate: new Date(Date.now() + 30 * 60 * 1000), // 30 minutes
      relevanceScore: 0.8
    }
  );

  // Update the activity
  activity.update({
    status: "ready",
    estimatedTime: 0
  });

  // End the activity
  activity.end({
    status: "completed"
  });
}

Listening to Updates

// Subscribe to activity updates
ActivityKit.subscribeToActivityUpdates((activity) => {
  console.log('Activity updated:', activity.id, activity.activityState);
});

// Subscribe to enablement changes
ActivityKit.subscribeToActivityEnablementUpdates((enabled) => {
  console.log('Live Activities enabled:', enabled);
});

🏗️ Development

This is a monorepo containing:

  • packages/react-native-activity-kit/: The main library
  • apps/activity-kit-example/: Example Expo app demonstrating usage

Setup

bun install

Development Commands

# Build the library
bun run codegen

# Lint code
bun run lint

# Type checking
bun run typecheck

# Clean build artifacts
bun run clean:node_modules

# Create a changeset for versioning
bun run create-changeset

🛠️ Architecture

Built on Nitro Modules for:

  • High Performance: Direct Swift/Kotlin bindings
  • Type Safety: Full TypeScript support
  • Modern Architecture: Uses the latest React Native architecture

📱 Platform Support

  • ✅ iOS 16.1+ (Live Activities requirement)
  • ❌ Android (Live Activities are iOS-only)

🤝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests and linting (bun run lint && bun run typecheck)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

📄 License

MIT License - see LICENSE for details.

🔗 Links

About

React Native Bindings for ActivityKit

Resources

Stars

Watchers

Forks

Sponsor this project

  •  
  •  

Packages

No packages published

Contributors 2

  •  
  •