rastrillo / native Public

Clone
git clone https://amadan.net/rastrillo/native

Plain git — no account needed to clone.

Download

Download this file

1# Apple clients · 2026-09-12
2
3The `RastrilloApple` product adds browser approval, ephemeral same-origin HTTP,
4Keychain sessions and a SwiftUI sign-in view for macOS 14+ and iOS 17+.
5The platform-independent RastrilloNative product remains separate.
6Calendar and Memoria use these components in their first native clients.
7
8`server/` is a separate Go module, `amadan.net/rastrillo/native/server`.
9Applications supply their existing session and admission middleware. Browser
10approval binds a five-minute, single-use request to a 256-bit verifier hash.
11The app and browser display the same code. Exchange authenticates the approved
12browser cookie from a fresh context and rechecks admission before minting a
13separate ordinary session. Resource authorization stays in each application.
14There is no cross-origin cookie jar, HTTP cache or external redirect following.
15
16`tools/bundle-mac.py <native-directory> <Name>` builds a SwiftPM executable
17`<Name>Mac`, derives a padded rounded Mac icon from the iOS master, bundles the
18Lucide notice when the app has `LICENSE.lucide` (and refuses to bundle an app
19whose Swift sources or SVGs name Lucide without it), and signs the development
20app ad hoc. It does not notarize it.
21
22Run `make ci` for Swift unit tests, the existing Mac/iOS companion builds,
23and Go authentication tests with the race detector.
24
25Independent review: `/root/native_review`, dispatched by this Codex session,
26found an inherited-session-context vulnerability in exchange. Fixed using a
27fresh cancelable context. Its regression presents Bob's session while exchanging
28Alice's approval after Alice loses membership. Independently selected mutations
29removing proof checking, expiration, one-time consumption, approval admission,
30exchange admission and fresh-context handling all failed the regression suite
31on 2026-09-12; all mutations were reverted. Review did not approve a merge.
32