Skip to content

Preview: iPad companion over LAN and embedded Tailscale (#95) - #116

Draft
alexfoxtm wants to merge 1 commit into
hardbeat920:mainfrom
alexfoxtm:proposal/ipad-companion
Draft

Preview: iPad companion over LAN and embedded Tailscale (#95)#116
alexfoxtm wants to merge 1 commit into
hardbeat920:mainfrom
alexfoxtm:proposal/ipad-companion

Conversation

@alexfoxtm

Copy link
Copy Markdown

What changed

Preview of the working Mac + iPad companion MVP from #95. Not a request to merge as-is — opening this as a draft so the source is reviewable next to the issue.

Mac Settings → Companion can serve the desktop over LAN and/or an embedded Tailscale node. The iPad app is a thin client of that Mac: same sessions, files, and agents, paired with a QR or 6-digit code. No Tailscale iOS app, no Network Extension, no public port.

Why

#95 asks whether this direction makes sense before sending a sliced PR. This branch is the prototype that produced the screenshots there.

UI

Source files: alexfoxtm/monocode-companion-shots.

Mac Companion connected (1 device), LAN + Tailscale QRs

Mac Companion connected

iPad workspace after pair

iPad workspace after pairing

iPad Settings → Companion

iPad Companion settings

Mac Google sign-in

Mac Google sign-in

iPad pairing

iPad pairing

How to try it

This snapshot is based on 0.1.34 (cb6e2df2), so it is behind current main. It is the tree that actually ran on the Mac + iPad, not a rebase.

Mac host

npm install
npm run tauri dev

Then Settings → Companion. Turn on Local network, Tailscale, or both. Pairing code + QR show per live route.

iPad client (needs Xcode, an iPad/simulator, Go for the tsnet c-archive)

npm install
npx tauri ios init   # generates src-tauri/gen (gitignored)
npx tauri ios dev

Swap bundle.iOS.developmentTeam in src-tauri/tauri.conf.json to your Apple team. First-run pairing: scan the Mac QR, or type host + 6-digit code.

Shape (same as #95)

  • Desktop boot path stays LocalTransport. New code is additive.
  • Wire protocol is JSON over ws://<host>:17233/v1/connect?token=…
  • Native WebSocket on iOS (companion_ws) because WKWebView mixed content blocks a JS WebSocket to ws://LAN
  • Mac embed: tailscale crate 0.5, Google SSO, DERP-only, experimental
  • iPad embed: Go tsnet c-archive + Rust FFI, hostname monocode-ipad

Happy to shrink this into a first slice (LAN-only pairing, Mac settings + protocol, or iPad shell) if the direction is wanted.

Checklist

  • I ran npm run check
  • This PR is small and focused
  • I did not mix unrelated changes

npm run check was not re-run on this snapshot before opening the draft. Treat this as a prototype dump for review, not CI-green merge bait.

Working MVP snapshot for hardbeat920#95: Mac host + iPad thin
client. LAN-first pairing, native iPad WebSocket, and embedded Tailscale
on desktop and iOS. Generated Tauri output under src-tauri/gen is not
included.

This is a preview of the running prototype, based on 0.1.34, not a
request to merge as-is.
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant