1etu/nos4

A complete iOS 4 recreation on the Web

38

stars

20

commits

TypeScript

primary language

Sep 7, 2026

updated

nos4.fun
clone
experiment
fun
ios
ios4
ios-web
ios-web-recreation
recreation

README

nOS4

nOS4

Everything you remember. Right in your browser.

TypeScript SolidJS Vite Tailwind pnpm

nos4.fun

Introducing nOS4

nOS4 is a recreation of iOS 4, running in the browser.

Why

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.

What's inside

Home, multitasking, and folders

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:

Foundationthe notification bus and primitives
CoreGraphicsasset manifest
CoreAnimationtiming curves and transitions
GraphicsServicestouch delivery and the scroller state machine
UIKit / TextInputcontrols and the keyboard
SpringBoardlock screen, pages, dock, folders, multitasking
SpriteKit / GameKitthe game runtime and leaderboards
AVFoundation, CoreLocation, CoreTelephony, SceneKit, …the rest

Nothing imports upward. FoundationCoreGraphicsUIKitSpringBoard → apps.

The apps

Safari

Mail

Phone

Maps

iTunes

App Store

Game Center

Weather

Clock

Settings

Doom

2010s Rich

2010s Rich

Build

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
CommandWhat it does
pnpm -C apps/Phone devthe phone, on its own
pnpm devthe debug page: event monitor beside the phone
pnpm buildproduction bundle into apps/Phone/dist
pnpm typecheckthe whole workspace, strict
pnpm bannerregenerate 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.

Credits

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.

Contributors

1etu

20 commits

1etu/nos4

A complete iOS 4 recreation on the Web

38

stars

20

commits

TypeScript

primary language

Sep 7, 2026

updated

nos4.fun
clone
experiment
fun
ios
ios4
ios-web
ios-web-recreation
recreation

README

nOS4

nOS4

Everything you remember. Right in your browser.

TypeScript SolidJS Vite Tailwind pnpm

nos4.fun

Introducing nOS4

nOS4 is a recreation of iOS 4, running in the browser.

Why

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.

What's inside

Home, multitasking, and folders

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:

Foundationthe notification bus and primitives
CoreGraphicsasset manifest
CoreAnimationtiming curves and transitions
GraphicsServicestouch delivery and the scroller state machine
UIKit / TextInputcontrols and the keyboard
SpringBoardlock screen, pages, dock, folders, multitasking
SpriteKit / GameKitthe game runtime and leaderboards
AVFoundation, CoreLocation, CoreTelephony, SceneKit, …the rest

Nothing imports upward. FoundationCoreGraphicsUIKitSpringBoard → apps.

The apps

Safari

Mail

Phone

Maps

iTunes

App Store

Game Center

Weather

Clock

Settings

Doom

2010s Rich

2010s Rich

Build

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
CommandWhat it does
pnpm -C apps/Phone devthe phone, on its own
pnpm devthe debug page: event monitor beside the phone
pnpm buildproduction bundle into apps/Phone/dist
pnpm typecheckthe whole workspace, strict
pnpm bannerregenerate 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.

Credits

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.

Contributors

1etu

20 commits

Languages

TypeScript

99.0%