Skip to content

Conversation

@gkartalis
Copy link
Member

This PR resolves []

Description

wip

PR Checklist

  • I have tested my changes on the following platforms:
    • Android.
    • iOS.
  • I hid my changes behind a feature flag, or they don't need one.
  • I have included screenshots or videos at least on Android, or I have not changed the UI.
  • I have added tests, or my changes don't require any.
  • I added an app state migration, or my changes do not require one.
  • I have documented any follow-up work that this PR will require, or it does not require any.
  • I have added a changelog entry below, or my changes do not require one.

To the reviewers 👀

  • I would like at least one of the reviewers to run this PR on the simulator or device.
Changelog updates

Changelog updates

Cross-platform user-facing changes

iOS user-facing changes

Android user-facing changes

Dev changes

  • wip

Need help with something? Have a look at our docs, or get in touch with us.

@gkartalis gkartalis self-assigned this Feb 4, 2026
@artsy-peril
Copy link
Contributor

artsy-peril bot commented Feb 4, 2026

@eggl-js/expo-github-cache

Author: Unknown

Description: A Expo build cache using GitHub as a storage backend.

Homepage: https://github.com/robert27/expo-github-cache#readme

Created9 months ago
Last Updated4 months ago
LicenseMIT
Maintainers1
Releases7
Direct Dependencies@babel/code-frame, @expo/config, @expo/spawn-async, @octokit/rest, chalk, env-paths, figures, fs-extra, log-symbols, node-fetch, octokit, ora, tar, tslib and uuidv7
Keywordsexpo, cache, github, build and eas
README

Expo GitHub Cache

A remote build cache provider plugin for Expo that uses GitHub Releases to store and retrieve cached build artifacts, dramatically accelerating your local development workflow.

What is this?

This library implements Expo's remote build cache provider interface using GitHub Releases as the storage backend. Build caching is an Expo feature that speeds up npx expo run:ios and npx expo run:android commands by caching builds remotely based on your project's fingerprint.

How it works with Expo's caching system

When you run local development builds with npx expo run:[android|ios], this plugin:

  1. Checks for existing builds: Searches GitHub Releases for a cached build matching your project's current fingerprint
  2. Downloads if available: If a matching build exists, downloads and launches it instead of compiling from scratch
  3. Uploads new builds: If no cache exists, compiles normally and uploads the resulting binary to GitHub Releases for future use

This integration with Expo's build caching system can save significant time during development, especially for large projects or when switching between branches with similar dependencies. Instead of waiting for full compilation every time, you can reuse previously built binaries when your project's fingerprint hasn't changed.

Installation

To install the Expo GitHub Cache plugin, you can use a package manager like npm or bun. This plugin is available as an NPM package, making it easy to integrate into your Expo project.

npm install @eggl-js/expo-github-cache --save-dev

or

bun add @eggl-js/expo-github-cache -d

[!TIP]

If you prefer to use the GitHub NPM registry, you can install the package directly from there:

npm install @robert27/expo-github-cache --registry=https://npm.pkg.github.com

Configuration

1. Set up GitHub Token

Create a GitHub Personal Access Token with repo permissions and set it as an environment variable:

export GITHUB_TOKEN=your_github_token_here

2. Configure your Expo project

Add the build cache provider to your app.json or app.config.js:

{
  "expo": {
    "buildCacheProvider": {
        "plugin": "@eggl-js/expo-github-cache",
        "options": {
            "owner": "demo-org",
            "repo": "demo-repo",
        }
    }
  }
}

3. Usage

Now when you run your Expo commands, the cache will automatically be used:

npx expo run:ios
npx expo run:android

How it works

The plugin uses your project's fingerprint hash to create unique tags in GitHub Releases. Each build artifact is stored as a release asset with a tag like:

  • fingerprint.abc123def456.ios - iOS production build
  • fingerprint.abc123def456.dev-client.android - Android development client build

When you run a build command, the plugin:

  1. Calculates your project's current fingerprint
  2. Searches for a GitHub Release with the matching tag
  3. Downloads the cached build if found, or compiles and uploads if not

Requirements

  • Node.js 18 or higher
  • GitHub repository with release permissions
  • GitHub Personal Access Token with repo scope
  • Expo project with fingerprinting enabled

Environment Variables

Variable Required Description
GITHUB_TOKEN Yes GitHub Personal Access Token with repo permissions

Contributing

Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.

When to use this vs. the base example

This plugin extends the functionality of Expo's basic GitHub cache provider example. Here's when to use each:

Use the base example if:

  • You want a simple, minimal implementation to understand the concepts
  • You prefer to copy and customize the code directly in your project
  • You need a starting point for building your own custom cache provider

Use this plugin if:

  • You want a production-ready, installable package and want to keep your project clean
  • You prefer npm/bun package management over copying files
  • You want additional features like comprehensive error handling and logging
  • You need a maintained solution with tests and CI/CD

Both implement the same Expo remote build cache provider interface, so they're functionally equivalent at the core level.

License

MIT

New dependencies added: @eggl-js/expo-github-cache.

Generated by 🚫 dangerJS against 35fee37

@github-actions
Copy link

github-actions bot commented Feb 4, 2026

🔒 NPM Audit Results

Vulnerabilities detected at severity critical or higher:

  • @isaacs/brace-expansion <=5.0.0
    • Severity: critical
    • ID: 1112818
    • Title: @isaacs/brace-expansion has Uncontrolled Resource Consumption
    • URL: GHSA-7h2j-956f-4vf2

@artsyit
Copy link
Collaborator

artsyit commented Feb 4, 2026

New dependencies added: @eggl-js/expo-github-cache.

@eggl-js/expo-github-cache

Used in package.json
Author: Unknown Description: A Expo build cache using GitHub as a storage backend.
License: MIT Homepage: https://github.com/robert27/expo-github-cache#readme
Keywords: expo, cache, github, build and eas
Updated: 4 months ago Created: 9 months ago
Releases: 7 Maintainers: 1
Direct Dependencies: @babel/code-frame, @expo/config, @expo/spawn-async, @octokit/rest, chalk, env-paths, figures, fs-extra, log-symbols, node-fetch, octokit, ora, tar, tslib, uuidv7
README

Expo GitHub Cache

A remote build cache provider plugin for Expo that uses GitHub Releases to store and retrieve cached build artifacts, dramatically accelerating your local development workflow.

What is this?

This library implements Expo's remote build cache provider interface using GitHub Releases as the storage backend. Build caching is an Expo feature that speeds up npx expo run:ios and npx expo run:android commands by caching builds remotely based on your project's fingerprint.

How it works with Expo's caching system

When you run local development builds with npx expo run:[android|ios], this plugin:

  1. Checks for existing builds: Searches GitHub Releases for a cached build matching your project's current fingerprint
  2. Downloads if available: If a matching build exists, downloads and launches it instead of compiling from scratch
  3. Uploads new builds: If no cache exists, compiles normally and uploads the resulting binary to GitHub Releases for future use

This integration with Expo's build caching system can save significant time during development, especially for large projects or when switching between branches with similar dependencies. Instead of waiting for full compilation every time, you can reuse previously built binaries when your project's fingerprint hasn't changed.

Installation

To install the Expo GitHub Cache plugin, you can use a package manager like npm or bun. This plugin is available as an NPM package, making it easy to integrate into your Expo project.

npm install @eggl-js/expo-github-cache --save-dev

or

bun add @eggl-js/expo-github-cache -d

[!TIP]

If you prefer to use the GitHub NPM registry, you can install the package directly from there:

npm install @robert27/expo-github-cache --registry=https://npm.pkg.github.com

Configuration

1. Set up GitHub Token

Create a GitHub Personal Access Token with repo permissions and set it as an environment variable:

export GITHUB_TOKEN=your_github_token_here

2. Configure your Expo project

Add the build cache provider to your app.json or app.config.js:

{
  "expo": {
    "buildCacheProvider": {
        "plugin": "@eggl-js/expo-github-cache",
        "options": {
            "owner": "demo-org",
            "repo": "demo-repo",
        }
    }
  }
}

3. Usage

Now when you run your Expo commands, the cache will automatically be used:

npx expo run:ios
npx expo run:android

How it works

The plugin uses your project's fingerprint hash to create unique tags in GitHub Releases. Each build artifact is stored as a release asset with a tag like:

  • fingerprint.abc123def456.ios - iOS production build
  • fingerprint.abc123def456.dev-client.android - Android development client build

When you run a build command, the plugin:

  1. Calculates your project's current fingerprint
  2. Searches for a GitHub Release with the matching tag
  3. Downloads the cached build if found, or compiles and uploads if not

Requirements

  • Node.js 18 or higher
  • GitHub repository with release permissions
  • GitHub Personal Access Token with repo scope
  • Expo project with fingerprinting enabled

Environment Variables

Variable Required Description
GITHUB_TOKEN Yes GitHub Personal Access Token with repo permissions

Contributing

Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.

When to use this vs. the base example

This plugin extends the functionality of Expo's basic GitHub cache provider example. Here's when to use each:

Use the base example if:

  • You want a simple, minimal implementation to understand the concepts
  • You prefer to copy and customize the code directly in your project
  • You need a starting point for building your own custom cache provider

Use this plugin if:

  • You want a production-ready, installable package and want to keep your project clean
  • You prefer npm/bun package management over copying files
  • You want additional features like comprehensive error handling and logging
  • You need a maintained solution with tests and CI/CD

Both implement the same Expo remote build cache provider interface, so they're functionally equivalent at the core level.

License

MIT

Generated by 🚫 dangerJS against dc8534f

@artsy artsy deleted a comment from ArtsyOpenSource Feb 4, 2026
@github-actions
Copy link

github-actions bot commented Feb 4, 2026

🎉 Beta Versions Generated (commit: 30a8df1)

Android 🤖

  • 8.93.0 (2026020414) - Available on Expo CLI (Android)
  • 8.93.0 (2026020414) - Available on Expo CLI (Android)

@artsy artsy deleted a comment from ArtsyOpenSource Feb 4, 2026
@gkartalis gkartalis force-pushed the gkartalis/gh-build-cache branch from 173dcdc to 8bff6be Compare February 5, 2026 12:06
@artsy artsy deleted a comment from ArtsyOpenSource Feb 5, 2026
@artsy artsy deleted a comment from ArtsyOpenSource Feb 9, 2026
@artsy artsy deleted a comment from ArtsyOpenSource Feb 10, 2026
@gkartalis gkartalis force-pushed the gkartalis/gh-build-cache branch 3 times, most recently from a3d4b92 to de2c216 Compare February 10, 2026 15:01
@artsy artsy deleted a comment from ArtsyOpenSource Feb 10, 2026
@artsy artsy deleted a comment from ArtsyOpenSource Feb 10, 2026
@gkartalis gkartalis force-pushed the gkartalis/gh-build-cache branch from a1c49d9 to a665b4c Compare February 10, 2026 16:12
@artsy artsy deleted a comment from ArtsyOpenSource Feb 10, 2026
@ArtsyOpenSource
Copy link
Contributor

This PR contains the following changes:

  • Dev changes (wip - gkartalis)

Generated by 🚫 dangerJS against dc8534f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants