pgx
PGX — Lightweight Postgres for AI agents. Written in Rust. Thousands of isolated databases in one runtime. 🐘
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Android and iOS sensor companion for opensensor.space, sharing Kotlin protocol and sensor rules; Android provides verified offline archives and sync, while iOS currently provides live readings.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗The phone app for opensensor.space, a home for open sensors of every kind. Air quality is the first device family. Weather, water, soil, noise and energy families plug in the same way, as data rather than new screens.
The app does three things.
PAR1 checks pass.Private by design. The archive lives on the phone and works without internet. LAN
connects only to devices found through _ossync._tcp mDNS, with a token obtained over bonded
BLE. The only other network use is anonymous, read-only downloads of the public map feed and
basemap, which a Settings switch turns off. Sharing a device's own data is off by default and
is turned on per device, in that device's settings, with confirmation. No accounts, no
analytics. Approximate foreground location is asked only on the Near me or Use phone
location tap. Device settings can save a privacy-limited H3 area to your sensor,
starting at resolution 8, with an optional declared country. Exact phone fixes
are never saved or sent. See device location. Public
data carries H3 cells, never coordinates.
One product on two phones. Rules that must give the same answer on Android and iOS live in shared Kotlin, and screens share one design system based on the opensensor.space website. See docs/cross-platform-guide.md.
| Platform | Current scope | Verification |
|---|---|---|
| Android | Multi-device BLE/LAN collection, verified local archive, offline history, and background sync | Host gate passes; phone qualification is tracked separately in docs/status.md and the CoreS3 and Waveshare records. |
| iOS | The same shared screens, BLE and LAN collection into a verified local archive, offline history and per-device Auto-sync | Host, simulator and native checks pass. iPhone runs are tracked in docs/status.md, see docs/ios.md |
Host tests, simulator builds, and phone observations are different evidence. The app ID
is space.opensensor.app on Android and iOS. Read the
full status record for dated results and remaining checks.
The docs are split by concern so you read only what you need. Start at
docs/README.md for the routing table; the rules are in AGENTS.md.
flowchart LR
P[protocol-quickref] --> T[transports] --> S[sync-engine] --> D[data-model] --> H[history-pipeline] --> U[screens]
S --> B[background-sync] --> U
Q[parquet] --> S
Q --> H
| Concern | File |
|---|---|
| Product direction, device families, public H3 discover map, sharing rules | docs/devices-and-discovery.md |
| Keeping Android and iOS the same, adding a sensor family or transport | docs/cross-platform-guide.md |
| Device identity, fixed names, reset and reflash recovery | docs/device-identity.md |
| What is verified, where, and what is next | docs/status.md |
| Modules, layers, "what a change touches" | docs/architecture.md |
| iOS app, shared Kotlin boundaries, build and qualification | docs/ios.md, ios/AGENTS.md |
| Screens, navigation, detail levels | docs/screens.md |
| Opcodes, frames, error codes, UUIDs, LAN framing (mirror of the firmware contract) | docs/protocol-quickref.md |
| BLE vs LAN, pairing, the LAN token, reconnect |
The iOS app uses Kotlin Multiplatform for shared protocol and sensor rules, with a Compose Multiplatform live-reading screen and native Core Bluetooth and Bonjour adapters. The Android app retains its native Compose UI and platform data stack. Both platforms can collect over Wi-Fi after each phone saves access through BLE pairing. The shared firmware allows three Wi-Fi clients per sensor alongside one BLE connection; both apps can sync two sensors concurrently per phone. History/export UI and background collection remain Android features while iOS migration continues. Build and qualification instructions are in docs/ios.md; local iOS coding instructions are in ios/AGENTS.md. On 2026-10-08, the owner confirmed live readings, Bonjour discovery, saved Wi-Fi access and collection starting on a connected iPhone. Pairing prompts, reading accuracy, stale/background behavior and completed-file phone verification still need qualification. The iPhone card now shows average KiB/s; dated transfer evidence separates measured CoreS3 host throughput from pending phone speed checks.
Android and host gate:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
tools/setup-hooks.sh # once per clone: git hooks (ktlint, gitleaks, hygiene; verify on push)
./gradlew --no-daemon clean verify # lint + assembleDebug + every module's unit tests
adb install app/build/outputs/apk/debug/app-debug.apk
The iOS build requires macOS and Xcode. Follow docs/ios.md
for simulator framework linking, the Xcode build, and real-iPhone qualification steps.
GitHub Actions validates shared Kotlin iOS tests and unsigned simulator Debug/device
Release builds on Apple Silicon with Xcode 27 and the iOS 27 SDK. Simulator apps and failure reports are retained
as workflow artifacts; iOS signing and TestFlight setup are documented in
docs/build-and-release.md.
Ready-made APKs: every push to main refreshes the rolling latest
pre-release; a v* tag publishes a permanent release. Details, signing and the debug fake device:
docs/build-and-release.md.
The release page distributes Android APKs and links to iOS simulator artifacts in
Actions. Signed iPhone/TestFlight distribution is not available yet.
core/protocol/ KMP common rules + JVM adapters · contract mirror: UUIDs, frames v1+v2, CONFIG, LAN framing, JSON, PAR1/CRC verify
core/parquet/ JVM-only · own Parquet reader + writer (GeoParquet 2.0, LZ4/Snappy/GZIP, codec SPI) · test fixtures
core/history/ KMP sensor-domain rules + JVM file adapters · Metrics registry (moving to core/model), Aggregator → tiers, TimeEstimate, Columns, AirMood, file index
app/ Android app · data/{ble,lan,sync,background,history,local,settings,export,fake} · ui/{scan,device,history,files,debug,settings}
ios/shared/ Kotlin Multiplatform presentation state and Compose Multiplatform live screen
ios/App/ Xcode app · Swift/Core Bluetooth/Bonjour platform adapters
tools/ fixture generators + PyArrow/DuckDB oracle (run in ../opensensor-space-firmware's pixi env), hooks, signing
docs/ one file per concern (see the map above)
Planned (see the production plan)
build-logic/ convention plugins for every module
core/model/ Device, DeviceFamily, Capability, ObservedProperty, Scale, family registry
core/sync/ one sync engine for both phones behind FrameLink and ArchiveStore ports
core/designsystem/ opensensor.space tokens, theme and shared components (Compose Multiplatform)
core/publicfeed/ public discover feed port, sample fixture, later Parquet over HTTP
feature/discover/ shared map, cell sheet and public device page
The Bluetooth protocol is owned by the firmware repo (../opensensor-space-firmware/docs/shared/ble-sync-protocol.md);
this app mirrors it and never changes a frame, opcode, UUID or JSON key first.
Walkthru.Earth original code in this repository (app/, core/, feature/, ui/, ios/, tools/, build-logic/, build files and documentation) is licensed under the Creative Commons Attribution 4.0 International Public License (CC-BY-4.0). See LICENSE and NOTICE. The CC-BY-4.0 license does not cover the third-party parts listed below, which keep their own licenses.
Attribution requirement. Any application, app store build, firmware image, hardware product, dataset, or documentation that uses or incorporates
opensensor-space-mobilemust include clear, visible attribution to Walkthru.Earth (https://walkthru.earth), for example"Sensor sync and air quality views powered by Walkthru.Earth (
walkthru-earth/opensensor-space-mobile), licensed under CC-BY-4.0."
| Component | Location | License | Copyright |
|---|---|---|---|
| Android Studio architecture template, the portions this project started from | spread through the Android project, per-file headers replaced by NOTICE | Apache-2.0, see apache.org/licenses/LICENSE-2.0 | Copyright (C) 2022 The Android Open Source Project |
Cairo font v3.130, from google/fonts ofl/cairo at commit a2c83daed9bc723922de8d0a9512990bd3d91df4 | ui/designsystem/src/commonMain/composeResources/ | SIL OFL 1.1, see Cairo-OFL.txt | Copyright 2009 The Cairo Project Authors |
Quicksand font, the variable TTF from google/fonts ofl/quicksand | ui/designsystem/src/commonMain/composeResources/ | SIL OFL 1.1, see Quicksand-OFL.txt | Copyright 2011 The Quicksand Project Authors |
Libraries pulled in by Gradle (for example AndroidX, Kotlin, Compose Multiplatform, OkHttp and zstd-jni) are not copied into this repository. Each keeps its own license, and app builds that ship them must carry their notices.
docs/transports.md |
Download, verification, lost windows, resume, archive paths, REBOOT audit | docs/sync-engine.md |
| Auto-sync, WorkManager, foreground notification, WifiLock, triggers (presence / advertising / Wi-Fi) | docs/background-sync.md |
| Room v1, DataStore, files on disk, backup | docs/data-model.md |
| Index → tiers → derived day → charts; metrics, moods, time estimate | docs/history-pipeline.md |
| Own Parquet reader/writer, GeoParquet 2.0, fixtures, oracles | docs/parquet.md |
| Stack, build, hooks, CI, signing, fake device | docs/build-and-release.md |
| Lessons learned, grouped by concern | docs/lessons-learned.md |