{"slug": "bringing-the-modern-web-to-the-original-ipad-mini", "title": "Bringing the modern web to the original iPad mini", "summary": "A developer jailbroke a first-generation iPad mini running iOS 6.1.3 and built a remote browser called Surf that streams H.264 video from a headful Chromium instance on a VPS, enabling the decade-old tablet to browse the modern web at 30fps.", "body_md": "I recently visited my parents and found the first generation iPad mini they bought me when I was ten years old. More than a decade later, it is still a beautiful piece of hardware. Small, light, sturdy, the kind of device Apple used to make before every screen became a laptop replacement.\n\nThen I turned it on and remembered why I stopped using it: It was running iOS 9.3.5, which is brutal on the A5 chip. Every tap had weight, animations stuttered, opening an app felt like an eternity. Apple really killed this device with iOS 9.\n\nStill, I felt like the hardware was too beautiful to leave in a drawer. I wanted to turn it into a smooth, distraction free reading device.\n\nThe problem was that reading is not really offline anymore. Even if the actual reading happens in iBooks, the surrounding workflow lives on the web: finding articles, checking references, downloading PDFs, opening links, asking an LLM a question when something does not make sense.\n\nGetting there was a nostalgic trip through the legacy jailbreak toolchain. I jailbroke it with [Carbon](http://carbon.sep.lol/), used [Legacy iOS Kit](https://github.com/LukeZGD/Legacy-iOS-Kit) to drop it into kDFU mode, downgraded to iOS 8.4.1, set up OpenSSH, and used CoolBooter to dual boot into iOS 6.1.3.\n\nThe result was great. iOS 6 on the A5 runs butter smooth. I transferred a few books over the air with iFile and suddenly had exactly what I wanted: a small tablet with a great form factor, a still good screen, and the lovely skeuomorphic iBooks app.\n\nEverything was perfect. Right up until the first time the reading workflow left the book.\n\n# the webkit wall\n\nI installed [modern root certificates](https://repo.invoxiplaygames.uk/certificates/), but that only gets you so far. Safari on iOS 6, or really WebKit, is missing too much: modern TLS support, CSS Grid, Flexbox, and large chunks of modern JavaScript.\n\nThe modern web is structurally incompatible with a browser engine from 2012. And because this is iOS, every third party browser is stuck with the same system WebKit.\n\nThe obvious solutions all have problems:\n\n**VNC / Remote Desktop:** Bad latency, bad battery life, and a UI built for a mouse instead of touch.**Off-the-shelf remote browsers:** Mostly defunct, or clunky in the same way. I wanted something that felt like Safari, not a remote desktop session.\n\nSo the shape of the problem changed: if the iPad could not render the web, something else can render it for the iPad.\n\nI needed a remote browser that felt native, ran at 30fps, respected a 512MB RAM limit, and had touch first controls. Since I was on vacation, it also felt like the perfect pet project to hand to an LLM and see how far it could get. Out of that experiment, Surf was born.\n\n# the architecture\n\nSurf has two halves: a backend running on a VPS, and a native iOS 6 app written in Objective-C.\n\nThe backend runs a headful Chromium instance in Docker through Xvfb. Running Chromium headful under a virtual display avoids the bot detection penalties that headless browsers tend to trip. A Go server talks to Chromium through the Chrome DevTools Protocol and handles input, tabs, and navigation.\n\nFor the visual feed, I first tried CDP’s `Page.screencastFrame`\n\n, but it was too slow for smooth scrolling. Instead, the backend uses `ffmpeg`\n\nto grab the X11 screen directly and encode it to H.264 on the fly.\n\nThe stream is sent over a WebSocket connection. I had plans to spend more time on the network layer, but the current implementation already hits the target frame rate, so I left that alone.\n\nThe native client is built with [Theos](https://theos.dev/). Every build gets pushed to the iPad over SSH and installed with `dpkg`\n\n.\n\n# wrapping up\n\nThe iPad is useful again. Surf has a unified omnibox, tabs, clipboard sharing with the host OS, downloads, uploads, and a bunch more little tweaks that make the experience *delightful*.\n\nIt is obviously ridiculous to browse the modern web this way. But it is also exactly the kind of ridiculous that makes old computers feel alive again.\n\nIf you’d like to tinker with it, the source code is available on GitHub: [https://github.com/seg6/rbrowser](https://github.com/seg6/rbrowser).", "url": "https://wpnews.pro/news/bringing-the-modern-web-to-the-original-ipad-mini", "canonical_source": "https://seg6.space/posts/resurrecting-ipad-mini/", "published_at": "2026-07-21 22:46:08+00:00", "updated_at": "2026-07-21 22:52:00.776570+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["iPad mini", "Apple", "iOS 6", "Chromium", "Surf", "Theos"], "alternates": {"html": "https://wpnews.pro/news/bringing-the-modern-web-to-the-original-ipad-mini", "markdown": "https://wpnews.pro/news/bringing-the-modern-web-to-the-original-ipad-mini.md", "text": "https://wpnews.pro/news/bringing-the-modern-web-to-the-original-ipad-mini.txt", "jsonld": "https://wpnews.pro/news/bringing-the-modern-web-to-the-original-ipad-mini.jsonld"}}