HagalazOS requires no server-side runtime. The entire system — boot menu, desktop, window manager, drag-and-drop loader, and all built-in apps — is implemented in static HTML, CSS, and JavaScript files. This means it can be deployed anywhere that serves static files, from a full CDN-backed hosting platform down to a single shareable URL that points to a file on jsDelivr.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/linuxfandudeguy/HagalazOS/llms.txt
Use this file to discover all available pages before exploring further.
Deployment options
Self-hosted static files
Copy the repository to any host that can serve static files over HTTP or HTTPS. No special server configuration is needed because all asset paths in HagalazOS are relative — there is no base URL to configure. Compatible platforms include (but are not limited to):GitHub Pages
Free static hosting directly from a GitHub repository. Serves
index.html automatically from the repo root.Netlify
Drag-and-drop or Git-connected deploys. The free tier is sufficient for HagalazOS.
Vercel
Zero-config static deployments from a Git repository. Works with the default project settings.
Cloudflare Pages
Global CDN with automatic HTTPS. Connect your repo and deploy with no build command.
AWS S3 + CloudFront
Upload the files to an S3 bucket configured for static website hosting and front it with CloudFront for HTTPS.
nginx / Apache
Copy the repo to the web root (
/var/www/html) and serve with any standard HTTP server config.index.html. It presents a keyboard-navigable menu that chainloads either os.html (GUI desktop) or terminal.html. You can link directly to os.html to skip the boot menu.
Deploy to GitHub Pages
Push the repository to GitHub
Create a new repository on GitHub (or use an existing fork) and push all files to the
main branch.Enable GitHub Pages
In your repository, go to Settings → Pages. Under Build and deployment, set the source to Deploy from a branch, choose the
main branch, and set the folder to / (root). Click Save.CDN single-file build
Two files in the repository are designed for CDN-based distribution without any sibling files:ossingle.html— the full GUI desktop, self-contained via a<base href>CDN tag.singlefile.html— a CDN-backed boot menu (identical in appearance toindex.html) that chainloadsossingle.htmlfor GUI mode orterminal.htmlfor terminal mode.
<base href> tag that points to a pinned jsDelivr CDN commit, so every relative asset path (./script.js, ./style.css, ./apps/calculator.html, etc.) resolves through that commit on the CDN:
<base href> to a specific CDN commit, you can host either file entirely on its own — no sibling files are needed. This makes both files suitable for:
- Sharing as a single URL.
- Embedding in a pastebin, gist, or static page host that accepts raw HTML.
- Pinning to an immutable CDN URL for permanent archival.
ossingle.html directly via jsDelivr using the pattern:
<commit> with any full or short Git commit hash from the repository.
Self-updating entry point
updating.html is a minimal one-liner that always loads the latest version of singlefile.html (the CDN boot menu) from the master branch:
updating.html, it fetches singlefile.html from the live master branch on GitHub and replaces the current document with it. From there the boot menu loads, and selecting GUI mode chainloads ossingle.html via the CDN. This means the OS boots at the latest available version without any caching layer — useful for development, but not recommended for stable deployments where reproducibility matters.
Local development
For iterating on app code locally, any static HTTP server will work. The simplest option is Python’s built-in server:http://localhost:8080 in your browser.
Do not open
os.html directly via the file:// protocol (by double-clicking the file). Browser security restrictions will block fetch() calls made from file:// origins, which means app HTML files and the updating.html self-loader will fail to load. Always use a local HTTP server when developing.Some browser APIs require a secure context — either
https:// or localhost. If you deploy to a non-HTTPS custom domain, the Camera app (getUserMedia) and certain Clipboard API methods will be unavailable. GitHub Pages, Netlify, Vercel, and Cloudflare Pages all provision HTTPS automatically. For self-hosted deployments on nginx or Apache, use Let’s Encrypt to obtain a free TLS certificate.