MOSIS local-first

/status

Every claim carries its evidence.

105 cells, each naming the strongest evidence that exists for it and footnoted with what was actually run. This page is generated from the README table and CI fails if the two disagree.


15 cells verified on hardware. 41 still waiting.

A cell turns dev when someone runs it on a real device and reports what happened — the script is DEVICE_CHECKLIST.md. One iPhone and one Mac account for every dev tag below; five columns have never run on a device at all.

  • macOS Device-verified: 7 cells
  • iPhone Device-verified: 6 cells
  • Browser Device-verified: watch page, real HTTP
  • iPad Never tried — should behave like iPhone I have one →
  • Android Has never completed a pairing I have one →
  • Linux Cross-compiles; never executed on Linux I have one →
  • tvOS Builds; never run on an Apple TV I have one →
  • Windows Deliberately on hold — plan 08

Colour here means evidence, not progress.

Hover or focus any tag for its definition; the numbers link to the footnote that says what was actually run. Untick a platform to narrow the table.

Capability by platform. Each cell holds an evidence tag: the strongest evidence that exists for that capability on that platform.
Capability macOS iOS/iPadOS tvOS Android Linux Windows 2 Browser
Discover + pair (code + word pair, TOFU) dev 15 dev 15 bld 1 smoke 3 E2E 4 E2E 4
File transfer (chunked, resumable, SHA-256) dev 15 dev 15 smoke 3 E2E 4 E2E 4
Clipboard (both directions, explicit) dev 15 dev 15 smoke 3 E2E 4 E2E 4
Input — send (drive a peer) E2E dev 15 bld E2E* 13
Input — receive (be driven) dev 15 wall bld 6 bld (uinput) bld (SendInput)
Screen — source (be watched) dev 15 dev (ReplayKit ext) 15 wall bld (MediaProjection) E2E* 13
Screen — view a peer dev 15 dev 15 bld 1 bld 8 E2E* 13 dev (push only) 14 15
Watch and drive, one surface (ADR 0015 absolute pointing) E2E* bld 1 bld E2E* 13
Push-share + cast to any browser (HLS + QR) dev (real HTTP) 9 15 (browser plays it) dev 14 15
Multi-viewer, per-peer view-only/control, live revoke E2E bld 1 bld 1
Notifications (source → display) E2E (display) bld 1 bld (listener svc) code 10 code 10
Phone as Bluetooth HID peripheral wall wall bld (needs 2 devices)
Wi-Fi Aware (link with no router) wall bld — flag ON, zero runtime 11 wall code 12
Contexts / Routines / on-device suggestions unit unit (triggers device-gated) 1
Extra monitor (virtual display) code (unsupported/, never compiled) (evdi, design note only) code (IddCx, no frame path)

How to read a cell.

The tag is the strongest evidence that exists — not the best intention. Counts are of the 105 cells above.

E2E
automated end-to-end over real TLS sockets, same host (loopback) 9 cells
E2E*
E2E with a fake at the hardware seam (fake injector / synthetic capturer) 5 cells
unit
unit-tested logic 2 cells
smoke
Kotlin/JVM in-process session smoke (real crypto, no Android) 3 cells
bld
compiles / APK assembles — no runtime evidence 16 cells
code
written but unreachable or uninstantiated — weaker than bld 6 cells
wall
the platform forbids it (documented, not a TODO) 6 cells
not implemented 42 cells
dev
device-verified on real hardware — see ¹⁵ for what was run 15 cells

What the green suite actually proves.

A green suite is not a working device. Every end-to-end test here runs over real TLS sockets on one host, and the two places a fake stands in for hardware are named.

Swift
126 tests — unit and end-to-end over real loopback TLS
Golden vectors
52, byte-identical across Swift, Go and Kotlin
Kotlin builders
18 more vectors pinning its output to Swift's bytes
Faked seams
two — the screen capturer and the input injector
Self-skipped
the 4-test broadcast suite, while the screen is locked

The full testing ledger →


Every footnote is the README's, word for word.

They are where a cell stops being a colour and starts being something you can go and check. 15 of them, unedited.

  1. Shared ConduitKit core: the logic runs in the loopback E2E suite on macOS; the iOS/tvOS app targets build unsigned (make apple-apps, four BUILD SUCCEEDED re-verified today). No session has run on a tvOS device, and any iOS cell not marked dev has not been exercised on hardware.
  2. Windows: daemon logic only; new Windows work is on hold per plan 08.
  3. JVM in-process smoke proves the session code with real Ed25519 + pairing math. No Android device has ever completed pairing — the gate everything Android waits behind. Per-capability detail: android/README.md.
  4. Go daemon logic proven over loopback on a macOS host (Go↔Go pair+transfer test, plus the live Swift↔Go interop suite). The Linux/Windows binaries cross-compile but have never been executed on those OSes.
  5. The real macOS CGEvent injector needs Accessibility and a non-sandboxed app (ADR 0005). It has now moved a real cursor — see ¹⁵.
  6. Android input receive is an AccessibilityService; keyboard support is a narrow, documented subset — unsupported keys are refused out loud (android/README.md).
  7. Real ScreenCaptureKit capture needs the Screen Recording grant. It has now run with that grant — see ¹⁵.
  8. Decoder + SurfaceView exist; no frame has ever been decoded on an Android device.
  9. Includes the browser watch page over real HTTP GETs. AirPlay endpoint is built-in; Google Cast / Matter Casting are real code behind their SDKs (SDK-gated, unvalidated — ADR 0011). HLS runs seconds behind: for watching, not controlling.
  10. The Go→Swift notification path is E2E-tested on host; the OS hooks (Linux D-Bus / Windows WinRT sources) are stubs.
  11. Implemented today (2026-07-26): entitlement granted, _mosis-aware._tcp published/subscribed over the iOS 26 Network API, same pinned mutual TLS, OS-level WAPairedDevice pairing UI in the app, flag ON for iOS with runtime self-gating. Compile-verified only — not one Aware byte has ever flowed; needs two Aware-capable iPhones/iPads. Aware-only sessions would carry video on the control-lane fallback (~2.5 Mbps) until plan 08 lands QUIC.
  12. Android's WifiAwareBackend was rewritten to be capable of working (2026-07-26) but nothing instantiates it (docs/interop-status.md).
  13. Linux via the Go core (core/screencast/ + conduitview, landed 2026-07-26): Go↔Go loopback E2E on a macOS host — real TLS, real ffmpeg at the codec seam, synthetic frames at the capture seam; lane promotion and control-lane fallback asserted on both ends. All X11 code (capture, window/blit/events), uinput, and real-network reverse dial cross-compile but have never executed on a Linux box — per-row ledger in plan 09, runbook in docs/linux.md.
  14. Browser is not a platform port — there is no browser client. It is what a plain web browser can do with no MOSIS app installed: watch a screen a Mac pushes to it (HLS over real HTTP, URL + QR), and nothing else. It cannot pair, cannot initiate a pull, and cannot send anything back.
  15. Device-verified 2026-08-11, hands-on by the author on one real iPhone and one real Mac: pairing, file transfer, clipboard, the iPhone driving the Mac's pointer and keyboard as a trackpad, and screen sharing both directions — so the real CGEvent injector moved a real cursor and real ScreenCaptureKit capture ran, neither of which had happened before. The browser watch page was used over real HTTP from another device. This was hands-on use, not a full DEVICE_CHECKLIST.md walk. iPad has not been tried (iPhone only), and nothing here touches Android, Linux, tvOS or Windows.