AbsoluteJS

Sync Expo

@absolutejs/sync-expov0.0.4betaNative Apps

Expo SQLite, lifecycle, protection, and background-task adapter for @absolutejs/sync

#Installation

BASH
bun add @absolutejs/sync-expo

#Capabilities

Overview

Expo-native persistence and lifecycle integration for @absolutejs/sync.

Expo SQLite durable cache, outbox, receipts, cursors, and dead letters.

Principal-partitioned storage with the same migrations and policy contract as

Show 7 more

web and Capacitor.

AES-256-GCM record protection with a device-only key held by Expo SecureStore.

AppState and Expo Network wake-up handling.

Bounded Expo Background Task integration.

AbsoluteJS provisions this package automatically for Expo applications that use @absolutejs/sync. Direct package consumers can use the exported adapter functions without AbsoluteJS.

The @absolutejs/sync-expo/client and @absolutejs/sync-expo/bridge subpaths remain free of Expo and React Native runtime imports for WebViews and bridge contract tests. Native bridge hosts inject expoSyncRandomId; WebView socket identities use the browser Crypto API.

Background execution is an acceleration only. Foreground startup, resume, and connectivity recovery remain authoritative because Android and iOS decide when deferrable work is allowed to run.

Outcomes

What you can build

Overview

Expo-native persistence and lifecycle integration for @absolutejs/sync.

Hardening checklist

Production guidance

Make every external boundary explicitPin the deployed @absolutejs/sync-expo version, replace example or memory-backed dependencies with durable implementations, bound external calls, protect credentials, and emit enough evidence to retry or recover safely.

Follow in order

Troubleshooting path

1
Trace from the first failed boundary
Reproduce the smallest canonical @absolutejs/sync-expo example, confirm the supported entry point and version in the API explorer, then inspect the first boundary that did not produce its documented result.

#Public entry points

Supported entry points declared by this project’s package manifest. Internal dist paths are not part of the package contract.

Public package entry point declared in package.json.

@absolutejs/sync-expo@absolutejs/sync-expo/client@absolutejs/sync-expo/bridge

#Package commands

Scripts declared by this project’s package manifest.

bun run buildrm -rf dist && bun build src/index.ts src/client.ts src/bridge.ts --outdir dist --sourcemap --target=browser --external @absolutejs/sync --external @noble/ciphers --external expo-background-task --external expo-crypto --external expo-network --external expo-secure-store --external expo-sqlite --external expo-task-manager --external react-native && tsc --project tsconfig.build.json
bun run check:packageabsolute-changelog check
bun run formatprettier --write "./**/*.{ts,json,md}"
bun run testbun test
bun run typechecktsc --noEmit

#API reference

Search the declarations exported by the current package type files. Expand a symbol to inspect its source-backed signature.

22 symbols
ExpoSyncSqliteExecutortypePermalink
TS
type ExpoSyncSqliteExecutor = {
    execAsync(source: string): Promise<void>;
    getAllAsync<T>(source: string, params?: readonly (boolean | number | null | string | Uint8Array)[]): Promise<T[]>;
    getFirstAsync<T>(source: string, params?: readonly (boolean | number | null | string | Uint8Array)[]): Promise<T | null>;
    runAsync(source: string, params?: readonly (boolean | number | null | string | Uint8Array)[]): Promise<unknown>;
};
Exported from @absolutejs/sync-expo