A complete iOS 4 recreation on the Web
38
stars
20
commits
TypeScript
primary language
Sep 7, 2026
updated

nOS4 is a recreation of iOS 4, running in the browser.
Software used to have weight. Buttons felt like you actually press on them. Switches looked like you could flick them. A list sat on linen, a note sat on legal paper, and a reflection under the dock told you where the glass was. Every pixel was doing a job.
That craft is worth preserving, and the best way to understand something is to rebuild it. So that's how nos4 born.

Twenty-three apps — Safari, Mail, Messages, Phone, Maps, iPod, Photos, Camera, Notes, Weather, Stocks, Clock, Calculator, Compass, Voice Memos, Contacts, Settings, App Store, iTunes, Game Center and two games.
Underneath sit sixteen frameworks:
| Foundation | the notification bus and primitives |
| CoreGraphics | asset manifest |
| CoreAnimation | timing curves and transitions |
| GraphicsServices | touch delivery and the scroller state machine |
| UIKit / TextInput | controls and the keyboard |
| SpringBoard | lock screen, pages, dock, folders, multitasking |
| SpriteKit / GameKit | the game runtime and leaderboards |
| AVFoundation, CoreLocation, CoreTelephony, SceneKit, … | the rest |
Nothing imports upward. Foundation → CoreGraphics → UIKit → SpringBoard → apps.












You need Node 22.6+ and pnpm 10+.
git clone https://github.com/1etu/nos4.git
cd nos4
pnpm install
Then run the phone:
pnpm -C apps/Phone dev
| Command | What it does |
|---|---|
pnpm -C apps/Phone dev | the phone, on its own |
pnpm dev | the debug page: event monitor beside the phone |
pnpm build | production bundle into apps/Phone/dist |
pnpm typecheck | the whole workspace, strict |
pnpm banner | regenerate the marketing images above |
Game Center is the one part that needs a server. It is optional and everything else do work
without it. To run it, put a Postgres connection string in a root .env:
DATABASE_URL=postgresql://…
Apply services/GameCenterService/schema/*.sql in order, then pnpm service.
The OldOS Project by Zane (@zzanehip) — Its asset catalogue is where nOS4's artwork comes from, nOS4 shares no code with it and every screen here was rewritten from scratch. Without it there would be nothing to measure.
Maps are drawn with OpenStreetMap tiles, geocoded by Nominatim and routed by OSRM. Weather comes from Open-Meteo. The App Store and iTunes read Apple's public iTunes Search and RSS feeds. Type is set in Inter and Helvetica Neue.
iPhone, iOS and the app designs recreated here are trademarks of Apple Inc. This is an independent tribute, not affiliated with or endorsed by Apple.
20 commits
TypeScript
99.0%
A complete iOS 4 recreation on the Web
38
stars
20
commits
TypeScript
primary language
Sep 7, 2026
updated

nOS4 is a recreation of iOS 4, running in the browser.
Software used to have weight. Buttons felt like you actually press on them. Switches looked like you could flick them. A list sat on linen, a note sat on legal paper, and a reflection under the dock told you where the glass was. Every pixel was doing a job.
That craft is worth preserving, and the best way to understand something is to rebuild it. So that's how nos4 born.

Twenty-three apps — Safari, Mail, Messages, Phone, Maps, iPod, Photos, Camera, Notes, Weather, Stocks, Clock, Calculator, Compass, Voice Memos, Contacts, Settings, App Store, iTunes, Game Center and two games.
Underneath sit sixteen frameworks:
| Foundation | the notification bus and primitives |
| CoreGraphics | asset manifest |
| CoreAnimation | timing curves and transitions |
| GraphicsServices | touch delivery and the scroller state machine |
| UIKit / TextInput | controls and the keyboard |
| SpringBoard | lock screen, pages, dock, folders, multitasking |
| SpriteKit / GameKit | the game runtime and leaderboards |
| AVFoundation, CoreLocation, CoreTelephony, SceneKit, … | the rest |
Nothing imports upward. Foundation → CoreGraphics → UIKit → SpringBoard → apps.












You need Node 22.6+ and pnpm 10+.
git clone https://github.com/1etu/nos4.git
cd nos4
pnpm install
Then run the phone:
pnpm -C apps/Phone dev
| Command | What it does |
|---|---|
pnpm -C apps/Phone dev | the phone, on its own |
pnpm dev | the debug page: event monitor beside the phone |
pnpm build | production bundle into apps/Phone/dist |
pnpm typecheck | the whole workspace, strict |
pnpm banner | regenerate the marketing images above |
Game Center is the one part that needs a server. It is optional and everything else do work
without it. To run it, put a Postgres connection string in a root .env:
DATABASE_URL=postgresql://…
Apply services/GameCenterService/schema/*.sql in order, then pnpm service.
The OldOS Project by Zane (@zzanehip) — Its asset catalogue is where nOS4's artwork comes from, nOS4 shares no code with it and every screen here was rewritten from scratch. Without it there would be nothing to measure.
Maps are drawn with OpenStreetMap tiles, geocoded by Nominatim and routed by OSRM. Weather comes from Open-Meteo. The App Store and iTunes read Apple's public iTunes Search and RSS feeds. Type is set in Inter and Helvetica Neue.
iPhone, iOS and the app designs recreated here are trademarks of Apple Inc. This is an independent tribute, not affiliated with or endorsed by Apple.
20 commits
TypeScript
99.0%