JSPM

@cloud-push/expo

1.1.3
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 24
    • Score
      100M100P100Q47512F
    • License ISC

    Package Exports

    • @cloud-push/expo
    • @cloud-push/expo/dist/index.cjs
    • @cloud-push/expo/dist/index.js

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@cloud-push/expo) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    @cloud-push/cloud
    @cloud-push/expo
    @cloud-push/next
    @cloud-push/cli
    @cloud-push/utils

    Typescript Only, Zero kotlin, Zero Swift, Zero java, Zero Object-C

    OTA Update solution compatible with Expo Updates
    โ†’ Self-hosted update distribution system

    ๐Ÿ“š Documentation

    You can find the full usage guide and API reference in the
    ๐Ÿ‘‰ Cloud Push Docs

    ๐Ÿš€ Motivation

    Expo projects are highly customized React Native projects. Because of this, available CodePush solutions are limited.
    This project, inspired by hot-updater, offers an alternative way to manage bundles using storage services like S3, Firebase, Supabase, etc.
    It follows Expo Updates technical specs and maintains compatibility with Expo Updates.

    ๐Ÿงช Compatibility

    • โœ… Works with expo run:android --variant release
    • โœ… Works with expo run:ios --configuration Release
    • โœ… Compatible with Expo Managed Workflow

    โœจ Key Features

    • ๐Ÿ“ก Self-hosted deployment supported
    • ๐Ÿ“ฆ Flexible storage & DB (S3, Supabase, Firebase, etc.)
    • ๐Ÿ”„ Compatible with Expo Updates APIs
    • ๐Ÿ’พ Web-based bundle version dashboard
    • ๐ŸŒ Supports expo.dev environment variables (via EAS Secrets)
    • ๐ŸชŸ Works on Windows
    • ๐Ÿงช EAS build supported

    ๐Ÿ›  Configuration Examples

    Supabase

    import { defineConfig } from "@cloud-push/cli";
    import { SupabaseStorageClient, SupabaseDbClient } from "@cloud-push/cloud";
    
    export default defineConfig(() => ({
      loadClients: () => {
    
        const storageClient = new SupabaseStorageClient({
          bucketName: process.env.SUPABASE_BUCKET_NAME!,
          supabaseUrl: process.env.SUPABASE_URL!,
          supabaseKey: process.env.SUPABASE_KEY!,
        });
    
        const dbClient = new SupabaseDbClient({
          tableName: process.env.SUPABASE_TABLE_NAME!,
          supabaseUrl: process.env.SUPABASE_URL!,
          supabaseKey: process.env.SUPABASE_KEY!,
        });
        
            return {
                storage: storageClient,
                db: dbClient,
            };
        },
    }));

    AWS S3 + lowdb

    import { defineConfig } from "@cloud-push/cli";
    import { AWSS3StorageClient, LowDbClient } from "@cloud-push/cloud";
    
    export default defineConfig(() => ({
      loadClients: () => {
        
        const storageClient = new AWSS3StorageClient({
          accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
          bucketName: process.env.AWS_BUCKET_NAME!,
          region: process.env.AWS_REGION!,
          secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
        });
    
        const dbClient = new LowDbClient({
          downloadJSONFile: () => storageClient.getFile({ key: "cursor.json" }),
          uploadJSONFile: (file: Uint8Array) =>
            storageClient.uploadFile({ key: "cursor.json", file }),
        });
    
        return {
          storage: storageClient,
          db: dbClient,
        };
      },
    }));

    Firebase

    import { defineConfig } from "@cloud-push/cli";
    import { FirebaseStorageClient, FirebaseDbClient } from "@cloud-push/cloud";
    
    export default defineConfig(() => ({
          loadClients: () => {
            const storageClient = new FirebaseStorageClient({
                credential: process.env.FIREBASE_CREDENTIAL!,
                bucketName: process.env.BUCKET_NAME!,
            });
    
            const dbClient = new FirebaseDbClient({
                credential: process.env.FIREBASE_CREDENTIAL!,
                databaseId: process.env.FIREBASE_DATABASE_ID!,
            });
    
            return {
                storage: storageClient,
                db: dbClient,
            };
        },
    }));

    ๐Ÿ“˜ Expo Updates SDK Compatibility

    ๐Ÿงฑ Constants

    Constant Supported
    Updates.channel โœ…
    Updates.checkAutomatically โœ…
    Updates.createdAt โœ…
    Updates.emergencyLaunchReason โณ
    Updates.isEmbeddedLaunch โœ…
    Updates.isEmergencyLaunch โณ
    Updates.isEnabled โœ…
    Updates.latestContext โœ…
    Updates.launchDuration โœ…
    Updates.manifest โœ…
    Updates.runtimeVersion โœ…
    Updates.updateId โœ…

    ๐Ÿงฉ Hooks

    Hook Supported
    useUpdates() โœ…

    ๐Ÿ›  Methods

    Method Supported
    checkForUpdateAsync() โœ…
    clearLogEntriesAsync() โœ…
    fetchUpdateAsync() โœ…
    getExtraParamsAsync() โŒ
    readLogEntriesAsync() โœ…
    reloadAsync() โœ…
    setExtraParamAsync() โŒ