Skip to content

Commit 50c5f5f

Browse files
docs: update README
1 parent e3e7840 commit 50c5f5f

File tree

8 files changed

+222
-55
lines changed

8 files changed

+222
-55
lines changed

Readme.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
<img src="./logo.png" alt="Logo" width="300" />
33
</p>
44

5-
[![@cloud-push/cloud](https://img.shields.io/badge/@cloud--push/cloud-v1.1.1-blue)](https://www.npmjs.com/package/@cloud-push/cloud)
6-
[![@cloud-push/expo](https://img.shields.io/badge/@cloud--push/expo-v1.1.1-blue)](https://www.npmjs.com/package/@cloud-push/expo)
7-
[![@cloud-push/next](https://img.shields.io/badge/@cloud--push/next-v1.1.1-blue)](https://www.npmjs.com/package/@cloud-push/next)
8-
[![@cloud-push/cli](https://img.shields.io/badge/@cloud--push/cli-v1.1.1-blue)](https://www.npmjs.com/package/@cloud-push/expo)
9-
[![@cloud-push/utils](https://img.shields.io/badge/@cloud--push/utils-v1.1.1-blue)](https://www.npmjs.com/package/@cloud-push/next)
5+
[![@cloud-push/cloud](https://img.shields.io/badge/@cloud--push/cloud-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/cloud)
6+
[![@cloud-push/expo](https://img.shields.io/badge/@cloud--push/expo-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/expo)
7+
[![@cloud-push/next](https://img.shields.io/badge/@cloud--push/next-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/next)
8+
[![@cloud-push/cli](https://img.shields.io/badge/@cloud--push/cli-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/expo)
9+
[![@cloud-push/utils](https://img.shields.io/badge/@cloud--push/utils-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/next)
1010

1111
## **Typescript Only, Zero kotlin, Zero Swift, Zero java, Zero Object-C**
1212

package.json

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,46 @@
11
{
2-
"private": true,
3-
"name": "cloud-push",
4-
"version": "1.0.0",
5-
"description": "",
6-
"main": "index.js",
7-
"scripts": {
8-
"build-utils": "pnpm --filter @cloud-push/utils run build",
9-
"build-cloud": "pnpm --filter @cloud-push/cloud run build",
10-
"build-expo": "pnpm --filter @cloud-push/expo run build",
11-
"build-next": "pnpm --filter @cloud-push/next run build",
12-
"build-cli": "pnpm --filter @cloud-push/cli run build",
13-
"build-all": "pnpm run build-utils && pnpm run build-cloud && pnpm run build-expo && pnpm run build-next && pnpm run build-cli",
14-
"publish-utils": "pnpm --filter @cloud-push/utils exec npm publish --access public",
15-
"publish-cloud": "pnpm --filter @cloud-push/cloud exec npm publish --access public",
16-
"publish-expo": "pnpm --filter @cloud-push/expo exec npm publish --access public",
17-
"publish-next": "pnpm --filter @cloud-push/next exec npm publish --access public",
18-
"publish-cli": "pnpm --filter @cloud-push/cli exec npm publish --access public",
19-
"publish-all": "pnpm run publish-utils && pnpm run publish-cloud && pnpm run publish-expo && pnpm run publish-next && pnpm run publish-cli",
20-
"deploy": "pnpm run build-all && pnpm run publish-all",
21-
"android": "expo run:android",
22-
"ios": "expo run:ios"
23-
},
24-
"keywords": [],
25-
"author": "",
26-
"license": "ISC",
27-
"packageManager": "[email protected]",
28-
"pnpm": {
29-
"overrides": {
30-
"@cloud-push/expo": "workspace:*",
31-
"@cloud-push/cloud": "workspace:*",
32-
"@cloud-push/next": "workspace:*",
33-
"@cloud-push/utils": "workspace:*",
34-
"@cloud-push/cli": "workspace:*"
35-
}
36-
},
37-
"devDependencies": {
38-
"@biomejs/biome": "^1.9.4",
39-
"@react-native-community/cli-server-api": "^18.0.0"
40-
},
41-
"dependencies": {
42-
"expo": "~52.0.46",
43-
"react": "18.3.1",
44-
"react-native": "0.76.9"
45-
}
2+
"private": true,
3+
"name": "cloud-push",
4+
"version": "1.0.0",
5+
"description": "",
6+
"main": "index.js",
7+
"scripts": {
8+
"build-utils": "pnpm --filter @cloud-push/utils run build",
9+
"build-cloud": "pnpm --filter @cloud-push/cloud run build",
10+
"build-expo": "pnpm --filter @cloud-push/expo run build",
11+
"build-next": "pnpm --filter @cloud-push/next run build",
12+
"build-cli": "pnpm --filter @cloud-push/cli run build",
13+
"build-all": "pnpm run build-utils && pnpm run build-cloud && pnpm run build-expo && pnpm run build-next && pnpm run build-cli",
14+
"publish-utils": "pnpm --filter @cloud-push/utils exec npm publish --access public",
15+
"publish-cloud": "pnpm --filter @cloud-push/cloud exec npm publish --access public",
16+
"publish-expo": "pnpm --filter @cloud-push/expo exec npm publish --access public",
17+
"publish-next": "pnpm --filter @cloud-push/next exec npm publish --access public",
18+
"publish-cli": "pnpm --filter @cloud-push/cli exec npm publish --access public",
19+
"publish-all": "pnpm run publish-utils && pnpm run publish-cloud && pnpm run publish-next && pnpm run publish-cli",
20+
"deploy": "pnpm run build-all && pnpm run publish-all",
21+
"android": "expo run:android",
22+
"ios": "expo run:ios"
23+
},
24+
"keywords": [],
25+
"author": "",
26+
"license": "ISC",
27+
"packageManager": "[email protected]",
28+
"pnpm": {
29+
"overrides": {
30+
"@cloud-push/expo": "workspace:*",
31+
"@cloud-push/cloud": "workspace:*",
32+
"@cloud-push/next": "workspace:*",
33+
"@cloud-push/utils": "workspace:*",
34+
"@cloud-push/cli": "workspace:*"
35+
}
36+
},
37+
"devDependencies": {
38+
"@biomejs/biome": "^1.9.4",
39+
"@react-native-community/cli-server-api": "^18.0.0"
40+
},
41+
"dependencies": {
42+
"expo": "~52.0.46",
43+
"react": "18.3.1",
44+
"react-native": "0.76.9"
45+
}
4646
}

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"type": "module",
33
"name": "@cloud-push/cli",
4-
"version": "1.1.1",
4+
"version": "1.1.3",
55
"main": "./dist/config.cjs",
66
"module": "./dist/config.js",
77
"types": "./dist/expo/config.d.ts",

packages/cloud/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"type": "module",
33
"name": "@cloud-push/cloud",
4-
"version": "1.1.1",
4+
"version": "1.1.3",
55
"description": "",
66
"scripts": {
77
"dev": "rslib build --watch",

packages/expo/README.md

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
[![@cloud-push/cloud](https://img.shields.io/badge/@cloud--push/cloud-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/cloud)
2+
[![@cloud-push/expo](https://img.shields.io/badge/@cloud--push/expo-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/expo)
3+
[![@cloud-push/next](https://img.shields.io/badge/@cloud--push/next-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/next)
4+
[![@cloud-push/cli](https://img.shields.io/badge/@cloud--push/cli-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/expo)
5+
[![@cloud-push/utils](https://img.shields.io/badge/@cloud--push/utils-v1.1.3-blue)](https://www.npmjs.com/package/@cloud-push/next)
6+
7+
## **Typescript Only, Zero kotlin, Zero Swift, Zero java, Zero Object-C**
8+
9+
**OTA Update solution compatible with Expo Updates**
10+
→ Self-hosted update distribution system
11+
12+
## 📚 Documentation
13+
14+
You can find the full usage guide and API reference in the
15+
👉 [**Cloud Push Docs**](https://doyoonkim12345.github.io/cloud-push/)
16+
17+
## 🚀 Motivation
18+
19+
Expo projects are highly customized React Native projects. Because of this, available CodePush solutions are limited.
20+
This project, inspired by [`hot-updater`](https://github.com/gronxb/hot-updater), offers an alternative way to manage bundles using storage services like S3, Firebase, Supabase, etc.
21+
It follows [Expo Updates technical specs](https://docs.expo.dev/technical-specs/expo-updates-1/) and maintains compatibility with Expo Updates.
22+
23+
24+
## 🧪 Compatibility
25+
26+
- ✅ Works with `expo run:android --variant release`
27+
- ✅ Works with `expo run:ios --configuration Release`
28+
- ✅ Compatible with **Expo Managed Workflow**
29+
## ✨ Key Features
30+
31+
- 📡 Self-hosted deployment supported
32+
- 📦 Flexible storage & DB (S3, Supabase, Firebase, etc.)
33+
- 🔄 Compatible with Expo Updates APIs
34+
- 💾 Web-based bundle version dashboard
35+
- 🌐 Supports expo.dev environment variables (via EAS Secrets)
36+
- 🪟 Works on Windows
37+
- 🧪 EAS build supported
38+
39+
40+
## 🛠 Configuration Examples
41+
42+
### Supabase
43+
44+
```ts
45+
import { defineConfig } from "@cloud-push/cli";
46+
import { SupabaseStorageClient, SupabaseDbClient } from "@cloud-push/cloud";
47+
48+
export default defineConfig(() => ({
49+
loadClients: () => {
50+
51+
const storageClient = new SupabaseStorageClient({
52+
bucketName: process.env.SUPABASE_BUCKET_NAME!,
53+
supabaseUrl: process.env.SUPABASE_URL!,
54+
supabaseKey: process.env.SUPABASE_KEY!,
55+
});
56+
57+
const dbClient = new SupabaseDbClient({
58+
tableName: process.env.SUPABASE_TABLE_NAME!,
59+
supabaseUrl: process.env.SUPABASE_URL!,
60+
supabaseKey: process.env.SUPABASE_KEY!,
61+
});
62+
63+
return {
64+
storage: storageClient,
65+
db: dbClient,
66+
};
67+
},
68+
}));
69+
```
70+
71+
### AWS S3 + lowdb
72+
73+
```ts
74+
import { defineConfig } from "@cloud-push/cli";
75+
import { AWSS3StorageClient, LowDbClient } from "@cloud-push/cloud";
76+
77+
export default defineConfig(() => ({
78+
loadClients: () => {
79+
80+
const storageClient = new AWSS3StorageClient({
81+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
82+
bucketName: process.env.AWS_BUCKET_NAME!,
83+
region: process.env.AWS_REGION!,
84+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
85+
});
86+
87+
const dbClient = new LowDbClient({
88+
downloadJSONFile: () => storageClient.getFile({ key: "cursor.json" }),
89+
uploadJSONFile: (file: Uint8Array) =>
90+
storageClient.uploadFile({ key: "cursor.json", file }),
91+
});
92+
93+
return {
94+
storage: storageClient,
95+
db: dbClient,
96+
};
97+
},
98+
}));
99+
```
100+
101+
### Firebase
102+
103+
```ts
104+
import { defineConfig } from "@cloud-push/cli";
105+
import { FirebaseStorageClient, FirebaseDbClient } from "@cloud-push/cloud";
106+
107+
export default defineConfig(() => ({
108+
loadClients: () => {
109+
const storageClient = new FirebaseStorageClient({
110+
credential: process.env.FIREBASE_CREDENTIAL!,
111+
bucketName: process.env.BUCKET_NAME!,
112+
});
113+
114+
const dbClient = new FirebaseDbClient({
115+
credential: process.env.FIREBASE_CREDENTIAL!,
116+
databaseId: process.env.FIREBASE_DATABASE_ID!,
117+
});
118+
119+
return {
120+
storage: storageClient,
121+
db: dbClient,
122+
};
123+
},
124+
}));
125+
```
126+
127+
## 📘 Expo Updates SDK Compatibility
128+
129+
### 🧱 Constants
130+
131+
| Constant | Supported |
132+
|------------------------------|-----------|
133+
| `Updates.channel` ||
134+
| `Updates.checkAutomatically` ||
135+
| `Updates.createdAt` ||
136+
| `Updates.emergencyLaunchReason` ||
137+
| `Updates.isEmbeddedLaunch` ||
138+
| `Updates.isEmergencyLaunch` ||
139+
| `Updates.isEnabled` ||
140+
| `Updates.latestContext` ||
141+
| `Updates.launchDuration` ||
142+
| `Updates.manifest` ||
143+
| `Updates.runtimeVersion` ||
144+
| `Updates.updateId` ||
145+
146+
### 🧩 Hooks
147+
148+
| Hook | Supported |
149+
|----------------|-----------|
150+
| `useUpdates()` ||
151+
152+
### 🛠 Methods
153+
154+
| Method | Supported |
155+
|-------------------------|-----------|
156+
| `checkForUpdateAsync()` ||
157+
| `clearLogEntriesAsync()`||
158+
| `fetchUpdateAsync()` ||
159+
| `getExtraParamsAsync()` ||
160+
| `readLogEntriesAsync()` ||
161+
| `reloadAsync()` ||
162+
| `setExtraParamAsync()` ||
163+
164+
---

packages/expo/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"type": "module",
33
"name": "@cloud-push/expo",
4-
"version": "1.1.1",
4+
"version": "1.1.3",
55
"description": "",
66
"main": "./dist/index.cjs",
77
"module": "./dist/index.js",
@@ -12,7 +12,10 @@
1212
"build": "rslib build",
1313
"lint": "tsc"
1414
},
15-
"files": ["dist"],
15+
"files": [
16+
"dist",
17+
"README.md"
18+
],
1619
"keywords": [
1720
"expo",
1821
"expo-updates",

packages/next/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cloud-push/next",
3-
"version": "1.1.1",
3+
"version": "1.1.3",
44
"type": "module",
55
"main": "./dist/index.cjs",
66
"module": "./dist/index.js",

packages/utils/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"type": "module",
33
"name": "@cloud-push/utils",
4-
"version": "1.1.1",
4+
"version": "1.1.3",
55
"main": "./dist/index.cjs",
66
"module": "./dist/index.js",
77
"types": "./dist/index.d.ts",

0 commit comments

Comments
 (0)