▥ Cloud WindowDashboard ↗

Cloud Window developer preview

One Omarchy computer in your AWS account, accessed from Mac, iPad, iPhone and Android through Tailscale and Moonlight. Your saved files and paired devices survive ordinary stops. Applications and RAM do not. The website manages the computer; it is not a browser streaming client.

Release status

A fresh VM in the existing AWS account has passed first-boot, hardware-encoding, desktop-service and current-kit installation checks. This is still an early setup kit, not a verified unattended clean-account installer. A compatible Omarchy AWS image is required. The project's current private image is encrypted using an AWS-managed key and cannot be shared directly across accounts. Do not paste its ID into another account and expect it to boot.

The first tester path needs an image prepared for their account: either build inside that account or explicitly share a sanitized image encrypted with a customer-managed key, then copy it into the tester's account with their own encryption key. Image and key permissions must both be configured. No shared image access is included in this download. Never use a snapshot of a personal working desktop as a distributable image.

The legacy ISO-builder scripts are historical engineering material, not the supported entry point. They still contain build-machine assumptions and require more work before clean-account rebuilds can be advertised as automatic.

Before you begin

The management stack creates a private S3 site behind CloudFront, Cognito, an authenticated Lambda API, DynamoDB state, VPC/subnet, an EC2 instance role and scheduled trial guard. Each installation is for one owner and one computer. Creating the management stack does not itself launch the desktop, but management resources can incur charges.

1. Check prerequisites without creating anything

From the extracted kit directory, replace these example values with your own:

python3 infra/aws/preflight.py --profile YOUR_PROFILE --account-id YOUR_12_DIGIT_ACCOUNT --zone us-west-2a --ami YOUR_ACCEPTED_AMI

Inside AWS CloudShell use --profile cloud-shell. The check verifies the account, image ownership and boot features, instance offering and GPU quota. It does not guarantee capacity or validate the image's actual desktop performance.

2. Deploy your private dashboard

python3 infra/aws/deploy.py --profile YOUR_PROFILE --account-id YOUR_12_DIGIT_ACCOUNT --owner-email YOUR_EMAIL --zone us-west-2a --ami YOUR_ACCEPTED_AMI --stack cloud-window

The command prints your website address and writes local deployment metadata. Keep that metadata private. Existing stack updates retain the configured image when --ami is omitted. The current Cognito domain pattern allows one installation per account/region; use a separate account for independent owners rather than deploying overlapping copies.

3. Create and connect

  1. Open the printed website, sign up using the exact owner email, and verify it.
  2. Review the displayed allowance and click Create computer. AWS starts billing the instance while it runs.
  3. When the cloud computer's Tailscale enrollment link appears, open it and enroll the VM into your own private network. It must be the same network your client devices use.
  4. Install Moonlight. On Android, use the APK in Assets on the official release page: https://github.com/moonlight-stream/moonlight-android/releases. On iPhone/iPad use the App Store link on the dashboard. On Mac install Moonlight; the optional companion is a separate developer download.
  5. In Moonlight add the private address shown in Cloud Window. Select it to obtain a PIN; enter that PIN and a device name in the website.
  6. Open Desktop. Adjust resolution and bitrate in mobile Moonlight. The Mac companion applies the dashboard stream settings.

The accepted image may use the historical Linux username akshay; that name does not grant the project owner access. Its first-boot helper generates new instance passwords, SSH host keys and Sunshine credentials. Retrieve the initial login password privately through your own AWS Systems Manager session from /var/lib/cloud-window/initial-login-password, then change it in Linux. Do not paste the password into issue reports or retain it in logs. A self-service password setup flow and neutral Linux username are still release work.

4. Install the current dashboard helper

Once the computer is running and registered with AWS Systems Manager, apply the helper shipped with this kit:

python3 infra/aws/finish-setup.py --profile YOUR_PROFILE --account-id YOUR_12_DIGIT_ACCOUNT --stack cloud-window

This verifies the AWS account and the dashboard's instance tag, backs up the existing helper, and atomically installs the narrow status/PIN/device-list helper. It does not change your Tailscale registration, credentials, stream settings or personal files. If SSM is not ready yet, wait and retry. For AWS CloudShell use --profile cloud-shell.

5. Validate before storing important work

Pair one device, create a test file, stop through the dashboard, start again, and check both the file and pairing. Verify real motion, text clarity, audio, lock/unlock and a second device. Do not call a requested 60 fps setting a measured 60 fps result. Create and test a current backup before relying on the desktop.

The updated paired-device UI needs the matching infra/aws/guest.py helper installed at /opt/cloud-window/guest.py in the image/guest (the existing launcher calls it). An older helper leaves the list unavailable without breaking start/stop or PIN pairing.

Costs and stopping

The current trial guard stops at 10 aggregate running hours or 70 GiB observed outgoing traffic; the guest also stops after one hour without a desktop stream. These are cumulative trial allowances, not a monthly subscription. SSH jobs do not override disconnect shutdown. Budget emails and delayed network measurements are not a hard dollar cap. Do not disable guards to work around an exhausted allowance without choosing a new spending policy.

Recorded Oregon estimates: $0.2425 per running hour including IPv4, $6.40/month for the retained 80 GiB disk, and $0.09/GiB outgoing traffic before shared free transfer. Rates are estimates, not invoices; check AWS prices. Snapshots, setup resources and the management stack are additional. Compare the estimate with posted AWS billing.

Backup, export and cleanup

Stop compute from the dashboard when finished. Saved files stay on EBS; stopped storage remains billable. Export files over your private network and take a current encrypted snapshot before destructive cleanup. Test restoration, not just snapshot creation.

To retire an installation, inventory its tagged instance and volumes, its image/snapshots, the CloudFormation stack, artifact/site buckets, and Tailscale entry. Confirm each resource belongs to this installation. After backing up, disable termination protection and terminate the instance; its retained root volume remains and needs a separate explicit deletion. Delete unneeded owned images/snapshots and empty the installation's buckets before deleting the stack. Remove the VM from your Tailscale admin console. Deleting only the management stack is not a complete teardown and can leave billable resources. This kit intentionally does not provide a blanket account cleanup command.

Known limits

Oregon only; one owner per deployment; no browser streaming; no RAM-preserving suspend; image distribution needs assistance; fresh-account end-to-end installation is unverified; rolling OS updates can affect driver/capture compatibility. The Mac companion is ad hoc signed, Apple silicon/macOS 14+, and not notarized.

Sources: AWS image sharing, Tailscale encryption, Moonlight, Sunshine.

Four-hour check-in

The current finishing step installs both the guest bridge and the shutdown guard and verifies Omarchy’s native notification actions. After 3 hours 45 minutes from boot, a critical notification inside Omarchy asks you to keep running. Click the notification to renew for four hours. Ignoring or dismissing it does not renew; at four hours the computer stops even if Moonlight is connected. The initial upgrade gives an already-running computer a fresh four-hour window.

The finishing step also applies a version-checked lock-screen rendering workaround: it disables heavy background blur while keeping password locking. Stop and start the desktop after installation so the shell reloads the change. An unfamiliar upstream lock-screen version stops the installer for review. See docs/validation-record.md for the current graphics-stability caveat.

This renewal does not reset the ten-hour aggregate trial allowance, traffic allowance, or one-hour no-stream timer. These can stop the computer earlier. Save work: shutdown ends open applications and background jobs. The dashboard shows the last observed four-hour deadline under Stream settings. The desktop guard checks every approximately 30 seconds; the cloud trial backstop remains independent. Notification delivery requires the graphical session; delivery failure does not suspend shutdown.

Optional disposable image check

The kit includes infra/aws/fresh-image-check.py for operators validating an accepted image in their own account. It creates a billable temporary g6f.xlarge and disk, runs first-boot and finishing checks, and removes only its uniquely tagged test resources. It never stops another desktop. You need a free four-vCPU GPU quota slot. If your quota is four, stop your existing desktop first and wait until AWS releases the slot. The test does not enroll Tailscale or prove image privacy. See docs/validation-record.md for the checks and their limits.

python3 infra/aws/fresh-image-check.py --profile YOUR_PROFILE --account-id YOUR_12_DIGIT_ACCOUNT --stack YOUR_STACK --ami YOUR_ACCEPTED_AMI --run

Use AWS CloudShell, or install the Python boto3 library in your own development environment for this optional test. It saves a receipt under .local/; verify cleanup before retrying after an interrupted run.