Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/agrimesh/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ function HomeLobby({ onStart }: { onStart: (setup: Setup) => void }) {
<Text className="font-serif text-4xl">AgriMesh</Text>
<Text className="text-muted-foreground mt-2 text-base leading-6">
{DEMO_FARM.name} — field readings hop across Bluetooth mesh to the farm office edge,
then sync once to a mock farm system (SDK 0.27).
then sync once to a mock farm system (SDK 0.28).
</Text>
<View className="my-6 items-center">
<AgriHero size={160} />
Expand Down
4 changes: 2 additions & 2 deletions apps/agrimesh/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2303,7 +2303,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 3a002838bb4972a0235545718ba18f497305aa5d
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/agrimesh/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"@react-native-async-storage/async-storage": "^2.2.0",
"lucide-react-native": "^1.48.0",
"nativewind": "^4.2.7",
Expand Down
4 changes: 2 additions & 2 deletions apps/cowrite/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Cowrite

A shared document for the people in the room. Several nearby phones edit one plain-text document together, everyone sees everyone's cursor, and it all runs over Bluetooth with no internet, accounts or server. React Native app for iOS and Android, built on `@offline-protocol/mesh-sdk` 0.27 through the shared `@offline-app-examples/mesh` and `@offline-app-examples/ui` packages.
A shared document for the people in the room. Several nearby phones edit one plain-text document together, everyone sees everyone's cursor, and it all runs over Bluetooth with no internet, accounts or server. React Native app for iOS and Android, built on `@offline-protocol/mesh-sdk` 0.28 through the shared `@offline-app-examples/mesh` and `@offline-app-examples/ui` packages.

## Run

Expand Down Expand Up @@ -46,7 +46,7 @@ The sibling apps [Stock Sync](../stocksync) and [Order Up](../orderup) sync by b
- **Offline merges.** Someone who walks away and keeps typing comes back with a pile of edits made against an old version. Replaying them as messages does not produce what either person meant.
- **Late joiners.** A newcomer needs the whole current document, not the stream of messages they missed, so a host has to build and send snapshots and reconcile them with edits in flight.

Solving all of that by hand is building a CRDT. The SDK already ships one, the replicated document layer (`DataStore`, see the SDK's [`docs/data.md`](https://github.com/Offline-Protocol/offline-protocol-sdk/blob/v0.27.0/docs/data.md)), so Cowrite uses it and only turns keystrokes into edits.
Solving all of that by hand is building a CRDT. The SDK already ships one, the replicated document layer (`DataStore`, see the SDK's [`docs/data.md`](https://github.com/Offline-Protocol/offline-protocol-sdk/blob/v0.28.0/docs/data.md)), so Cowrite uses it and only turns keystrokes into edits.

## How Cowrite uses DataStore

Expand Down
4 changes: 2 additions & 2 deletions apps/cowrite/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2278,7 +2278,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 25cc110921930e4293b718f2d5d325536b0ed52b
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/cowrite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"lucide-react-native": "^1.48.0",
"nativewind": "^4.2.7",
"react": "19.2.3",
Expand Down
2 changes: 1 addition & 1 deletion apps/eventfloor/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ function HomeLobby({
<Text className="font-serif text-4xl">Event Floor</Text>
<Text className="text-muted-foreground mt-2 text-base leading-6">
{DEMO_EVENT.name} — offline-capable staff dispatch and gate admission over Bluetooth mesh
(SDK 0.27).
(SDK 0.28).
</Text>
<View className="my-6 items-center">
<EventHero size={160} />
Expand Down
2 changes: 1 addition & 1 deletion apps/eventfloor/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Event Floor

Live-events demo app with **two flows** in one binary: **staff dispatch** when cell is saturated, and **gate admission sync** when scanners cannot reach the cloud. Everything runs over **Bluetooth mesh** (Mesh SDK 0.27) — no Wi‑Fi Direct payload, no accounts.
Live-events demo app with **two flows** in one binary: **staff dispatch** when cell is saturated, and **gate admission sync** when scanners cannot reach the cloud. Everything runs over **Bluetooth mesh** (Mesh SDK 0.28) — no Wi‑Fi Direct payload, no accounts.

Built on `@offline-app-examples/mesh` (rooms, MLS group mode, mesh relay) and `@offline-app-examples/ui`.

Expand Down
4 changes: 2 additions & 2 deletions apps/eventfloor/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2303,7 +2303,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 3a002838bb4972a0235545718ba18f497305aa5d
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/eventfloor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"@react-native-async-storage/async-storage": "^2.2.0",
"lucide-react-native": "^1.48.0",
"nativewind": "^4.2.7",
Expand Down
2 changes: 1 addition & 1 deletion apps/orderup/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ status change live.

It shows how to build a **host-authoritative** app on
[`@offline-protocol/mesh-sdk`](https://www.npmjs.com/package/@offline-protocol/mesh-sdk)
0.27 with plain JSON messages and a small pure reducer, with no CRDTs and no server. The
0.28 with plain JSON messages and a small pure reducer, with no CRDTs and no server. The
Bluetooth side (discovery, joining, encryption) lives in `packages/mesh`
(`useNearbyRoom`). UI components come from `packages/ui`.

Expand Down
4 changes: 2 additions & 2 deletions apps/orderup/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2278,7 +2278,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 3a002838bb4972a0235545718ba18f497305aa5d
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/orderup/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"lucide-react-native": "^1.48.0",
"nativewind": "^4.2.7",
"react": "19.2.3",
Expand Down
2 changes: 1 addition & 1 deletion apps/outagenet/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Field coordination when towers are down. One phone runs the **command post**; others join as **field units** over **Bluetooth mesh** (no internet, no accounts). Post status updates, **hand off responsibility** with explicit accept, and **sync to a mock HQ** with visible duplicate suppression.

Built on `@offline-app-examples/mesh` and `@offline-app-examples/ui`, Mesh SDK 0.27.
Built on `@offline-app-examples/mesh` and `@offline-app-examples/ui`, Mesh SDK 0.28.

## What it demonstrates

Expand Down
4 changes: 2 additions & 2 deletions apps/outagenet/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2303,7 +2303,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 3a002838bb4972a0235545718ba18f497305aa5d
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/outagenet/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"@react-native-async-storage/async-storage": "^2.2.0",
"lucide-react-native": "^1.48.0",
"nativewind": "^4.2.7",
Expand Down
2 changes: 1 addition & 1 deletion apps/stocksync/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ One phone opens a store and the others nearby join it over Bluetooth. Everyone s
same small supermarket inventory (milk, bread, apples, eggs, bananas, cheese, cereal,
tomatoes), and tapping − or + on any phone updates the count on every phone. No internet,
accounts or servers. Built on `@offline-app-examples/mesh` (a thin room layer over
`@offline-protocol/mesh-sdk` 0.27, see `packages/mesh/README.md`) and
`@offline-protocol/mesh-sdk` 0.28, see `packages/mesh/README.md`) and
`@offline-app-examples/ui`.

## What it demonstrates
Expand Down
4 changes: 2 additions & 2 deletions apps/stocksync/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2278,7 +2278,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 25cc110921930e4293b718f2d5d325536b0ed52b
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/stocksync/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"lucide-react-native": "^1.48.0",
"nativewind": "^4.2.7",
"react": "19.2.3",
Expand Down
2 changes: 1 addition & 1 deletion apps/tictactogether/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Tic Tac Together ✳

A small, colorful rivalry between two nearby phones. React Native app for iOS and Android, built on `@offline-app-examples/mesh` (a thin room layer over
`@offline-protocol/mesh-sdk` 0.27, see `packages/mesh/README.md`) and `@offline-app-examples/ui`.
`@offline-protocol/mesh-sdk` 0.28, see `packages/mesh/README.md`) and `@offline-app-examples/ui`.

## Run

Expand Down
4 changes: 2 additions & 2 deletions apps/tictactogether/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2303,7 +2303,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 25cc110921930e4293b718f2d5d325536b0ed52b
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/tictactogether/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"nativewind": "^4.2.7",
"react": "19.2.3",
"react-native": "0.85.2",
Expand Down
2 changes: 1 addition & 1 deletion apps/yardgate/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Logistics yard check-in when there is no cellular: a **driver** discovers a **gate check-in service** over **Bluetooth mesh**, submits a seeded load / trailer ID, and the **gate officer** approves or denies on their phone. An optional **yard relay** phone carries traffic when the driver is not in direct range of the gate.

Mesh SDK **0.27** — `MeshServices` discover + invoke only (no Proof of Location; invoke bodies are signed plaintext — no secrets). Service responses use SDK status strings **`ok`**, **`error`**, or **`not_found`** (not HTTP codes like `200`).
Mesh SDK **0.28** — `MeshServices` discover + invoke only (no Proof of Location; invoke bodies are signed plaintext — no secrets). Service responses use SDK status strings **`ok`**, **`error`**, or **`not_found`** (not HTTP codes like `200`).

## What it demonstrates

Expand Down
4 changes: 2 additions & 2 deletions apps/yardgate/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PODS:
- hermes-engine (250829098.0.10):
- hermes-engine/Pre-built (= 250829098.0.10)
- hermes-engine/Pre-built (250829098.0.10)
- MeshSdk (0.27.0):
- MeshSdk (0.28.0):
- React-Core
- RCTDeprecation (0.85.2)
- RCTRequired (0.85.2)
Expand Down Expand Up @@ -2278,7 +2278,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: 3a002838bb4972a0235545718ba18f497305aa5d
MeshSdk: dc48b6c67eb632530836c964c9f2c5b1513224dd
MeshSdk: d4a40ad67dd577e5b41da02576c04f9519545545
RCTDeprecation: c7a2768f905d76ca6d2cfefb26e4349eacbdfca3
RCTRequired: 5e502c3553cfbed090a991c444448da452fb752e
RCTSwiftUI: 5ce3ccbdc58b78cc4ebbaace01709ec22d58e131
Expand Down
2 changes: 1 addition & 1 deletion apps/yardgate/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"dependencies": {
"@offline-app-examples/mesh": "workspace:*",
"@offline-app-examples/ui": "workspace:*",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"lucide-react-native": "^1.48.0",
"nativewind": "^4.2.7",
"react": "19.2.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/mesh/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ await store.textInsert(room.groupId!, 'doc', 'body', 0, 'Hello');
- One message is at most 16 KiB of JSON; `send` throws
above it. Bluetooth moves roughly 180–500 bytes per fragment, so keep messages small.
- iOS keeps at most about 4 Bluetooth connections per device, so plan for small rooms.
- Wi-Fi Direct is off: in SDK 0.27 the phone Wi-Fi Direct transport carries no traffic.
- Wi-Fi Direct is off (`wifiDirect: { enabled: false }` in `src/runtime.ts`), so everything goes over Bluetooth LE.
- Discovery needs physical phones. Simulators run the UI but never find peers.

## Files
Expand Down
4 changes: 2 additions & 2 deletions packages/mesh/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
"test": "jest"
},
"peerDependencies": {
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"react": "*",
"react-native": "*"
},
"devDependencies": {
"@babel/core": "^7.25.2",
"@offline-protocol/mesh-sdk": "^0.27.0",
"@offline-protocol/mesh-sdk": "^0.28.0",
"@react-native/babel-preset": "0.85.2",
"@react-native/typescript-config": "0.85.2",
"@jest/globals": "^29.6.3",
Expand Down
Loading
Loading