AngelOS
A child-safe operating system — from vision to architecture.
Version 1.0 · March 2026 · ITARR
1. Introduction
AngelOS is a complete operating system designed for children aged 6-12. It combines a safe, enclosed environment with a modern, intuitive design that appeals to children — without compromising on privacy or security.
The design philosophy rests on three pillars:
- Protection without imprisonment — Angel explains why something isn't allowed, instead of just blocking it
- Privacy as foundation — all data stays local, no telemetry, no analytics
- Accessibility — runs on hardware costing as little as €50, no powerful computer needed
The system is built as a web application running in a kiosk browser on a stripped-down Linux system. This provides the flexibility of web technology with the control of a native OS.
2. Architecture Overview
AngelOS consists of five layers, from hardware to user interface:
The frontend (Shell) communicates with the Python backend through an abstract Bridge layer that automatically selects the appropriate transport based on the runtime environment.
3. The Shell
The shell is a complete desktop environment built with web technology. It provides a macOS-like experience with a dock, window manager, status bar and launcher.
Tech Stack
- Preact 10 — React-compatible framework, 3KB gzipped
- Vite 6 — Bundler with HMR and code splitting
- Tailwind CSS 4 — Utility-first CSS with custom design tokens
- Tiptap — Rich text editor (writing app)
- Canvas API — Drawing app and Snake game
- Web Audio API — Music player with visualizer
Window Manager
The window manager supports drag, resize, minimize, maximize and z-index stacking. Windows are animated with cubic-bezier easing for a native feel. State is managed via Preact hooks — no external state library needed.
Design System
@theme {
--color-angel-purple: #a78bfa;
--color-angel-pink: #f472b6;
--color-angel-blue: #60a5fa;
--color-angel-green: #4ade80;
--color-angel-gold: #fbbf24;
--color-angel-surface: rgba(255, 255, 255, 0.72);
} 4. App Ecosystem
Apps are manifest-driven and lazy-loaded. Each app defines its metadata, permissions and default window size:
{
"id": "writing",
"version": "1.0.0",
"permissions": ["files:read", "files:write"],
"category": "productivity",
"size": { "w": 680, "h": 520 }
} | App | Category | Technology |
|---|---|---|
| Writing | Creativity | Tiptap editor, 6 templates, auto-save |
| Drawing | Creativity | Canvas API, tools, shapes, flood fill |
| Presenting | Creativity | Slides with transitions, drag-reorder |
| Calculator | Learning | Windows Calculator clone, keyboard input |
| Spreadsheet | Learning | Grid with formulas (SUM, cell refs), CSV export |
| Music | Relaxation | Web Audio API, visualizer, playlists |
| Videos | Relaxation | HTML5 player, grid with categories |
| Snake | Relaxation | Canvas game, highscores, wrap-around |
| Internet | Discovery | Iframe sandbox, URL check via Angel |
| My Stuff | Discovery | File manager with search and categories |
5. The Bridge
The Bridge is the communication layer between the JavaScript shell and the Python backend. It abstracts four transport modes behind a single uniform API:
Native (WebKitGTK)
Direct via window.webkit.messageHandlers — lowest latency
WebSocket
ws://localhost:9876 — real-time, auto-reconnect
HTTP Fetch
POST /api/bridge — stateless, session-based
Dev Fallback
localStorage mock — offline development
bridge.chat(message) // Angel AI chat
bridge.checkUrl(url) // Content filtering
bridge.screenTime() // Query screen time
bridge.fileList(category) // List files
bridge.fileWrite(cat, name, content)
bridge.askPapa(message) // Telegram to parent 6. Angel AI
Angel is the AI guardian of AngelOS, powered by Claude Haiku. Angel fulfills three roles:
Chat Companion
Angel answers questions in a child-friendly manner. The system prompt limits answers to 150 words and prevents sharing of personal information. Maximum 50 messages per day.
Content Filtering Pipeline
- DNS-level blocklists (StevenBlack hosts + CleanBrowsing Family)
- Local whitelist/blacklist check
- AI-based content check (with 24-hour cache)
- Result:
allow,block, orask_parent
Telegram Bridge
Angel sends real-time notifications to the parent via Telegram: blocked websites, screen time exceeded, "Ask parent" requests, and a daily report at 20:00.
7. Security Model
Sandbox Architecture
Apps run in sandboxed iframes without direct internet access. The browser app is the only app that can generate external traffic, but exclusively through the Angel content filtering pipeline.
System Lockdown
- Ctrl+Alt+Delete disabled
- Magic SysRq disabled
- USB storage blocked via modprobe blacklist
- GRUB password for recovery mode
- Chromium managed policy blocks chrome://, about:*, file://
- DevTools, downloads and extensions disabled
- F5, F11, F12, Ctrl+L, Ctrl+T, Ctrl+W blocked in shell JavaScript
8. Privacy by Design
- All data local — files, chat history, browsing history and screen time stored in local SQLite database
- No telemetry — no usage data collected or transmitted
- No analytics — no tracking pixels, no third-party cookies
- No cloud sync — data doesn't leave the device unless parent explicitly configures it
- Encrypted storage — persistence partition can be optionally encrypted
- Retention — logs automatically deleted after 90 days
The only external communication is to the Claude API (for Angel chat and content filtering) and optionally to the Telegram API (for parental notifications). Both are optional and can be disabled for fully offline use.
9. Deployment
USB Kiosk Build
USB Stick (16GB)
├── EFI Partition (200MB) — GRUB2 bootloader
├── System Partition (3-5GB) — squashfs root filesystem
└── Persistence (8-12GB) — overlayfs upper layer
├── /home/maya/ — user files
├── /var/lib/angel/ — database + config
└── /etc/NetworkManager/ — WiFi credentials Boot Sequence (~15s USB, ~8s disk)
- UEFI/BIOS → GRUB2 (timeout=0, quiet boot)
- Linux kernel + initramfs (zstd compressed)
- overlayfs mount: squashfs (read-only) + persistence (writable)
- systemd parallel init: NetworkManager, PipeWire, angel-server
- getty autologin → startx → Openbox + Chromium kiosk
Remote Updates
Shell updates (frequent): aiohttp server checks manifest → download → verify → apply → restart. System updates (rare): A/B partition scheme with GRUB pointer switching.
10. Performance
| Metric | Value |
|---|---|
| Boot time (USB) | ~15 seconds |
| Boot time (disk) | ~8 seconds |
| RAM usage | 500MB - 1GB |
| Frontend framework | Preact — 3KB gzipped |
| Vite bundle | ~983KB (code splitting active) |
| Min. hardware | x86_64, 4GB RAM, 32GB storage |
| Tested hardware | Mid-2009 MacBook (17 years old) |
11. Roadmap
Classic games
Minesweeper and Solitaire
Screensavers
Starfield, Bubbles, Matrix, Bouncing logo
More learning content
Educational games, quizzes and interactive learning materials
Mobile & tablet
Responsive version for tablets and potentially smartphones
Bundle optimization
Refine code splitting, remove unused dependencies
A/B system updates
Automatic system updates with rollback capability