Infinite Mac runs entirely on Cloudflare’s edge infrastructure. The React frontend and server-side rendering logic are packaged as a Cloudflare Worker, while the chunked disk images are stored in Cloudflare R2 and served directly to the browser. Deploying a new version requires two coordinated steps: syncing the disk images to R2, then building and deploying the Worker that references them.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/mihaip/infinite-mac/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before deploying you will need:- A Cloudflare account with Workers and R2 enabled
wrangler— included as a devDependency inpackage.json; available afternpm installrclone— used bysync-disksto transfer disk image chunks to R2; install it with:- An rclone configuration file at
scripts/rclone.confauthorised to read and write theinfinite-mac-diskR2 bucket — copyscripts/rclone.conf.exampleas a starting point
A
scripts/rclone.conf.example template is included in the repository. Copy it to scripts/rclone.conf and fill in your Cloudflare account ID and R2 API credentials before running sync-disks.Deployment Steps
Rebuild disk images
Generate fresh disk image chunks and the disk manifest that the Worker will serve. For a full production build, run without any flags:This copies base OS images, imports the full
Library/ software collection into the “Infinite HD” disk image, chunks all images, and writes a manifest to src/Data/. For the minimal development subset see the Setup guide.Sync disk images to Cloudflare R2
Upload the chunked disk images from Internally this runs The
Images/build to the infinite-mac-disk R2 bucket using rclone:scripts/sync-disks.sh, which calls:--size-only flag skips re-uploading files whose byte count has not changed, making incremental syncs fast. The --transfers 32 and --checkers 32 flags parallelise the upload aggressively.Build and deploy the Cloudflare Worker
Compile and publish the Worker in one command:This runs
scripts/worker-deploy.sh, which performs the following in sequence:- TypeScript check —
tsc --noEmitfor the app, thentsc --noEmit --project worker/tsconfig.jsonfor the Worker; the deploy aborts if either fails - Vite build —
CLOUDFLARE_ENV=production vite buildcompiles the frontend and Worker intobuild/ - wrangler deploy —
wrangler deployuploads the Worker and its static assets to Cloudflare
Worker Configuration
The Worker is configured inwrangler.jsonc at the repository root. Key settings:
name—infinite-macmain—worker/index.tsassets.directory—./build(the Vite build output)assets.not_found_handling—single-page-application, so deep URLs fall back toindex.htmldurable_objects— anEthernetZoneDurable Object class (ETHERNET_ZONEbinding) manages per-session emulator-to-emulator networking zoneskv_namespaces— aVARZKV namespace for metricsr2_buckets(production env only) — theDISK_BUCKETbinding points to theinfinite-mac-diskbucketroutes(production env only) — the Worker is routed to all domains:infinitemac.org,system6.app,system7.app,macos8.app,macos9.app, andkanjitalk7.app(including*.subdomains of each)cache.enabled—falsein the default environment,truein theproductionenvironment
Local Worker Preview
To test the full Worker stack locally before deploying, use:worker-dev runs wrangler dev --port=3128 and serves the Worker with R2 and Durable Object bindings resolved against your Cloudflare account’s preview resources (as defined by preview_id in wrangler.jsonc). This lets you verify Worker-side SSR, routing, and disk-serving logic before pushing to production.