LinPad

LinPad β€” Linux for iPad

A real Linux desktop on your iPad
Windows, tiling, workspaces and real Linux apps β€” Firefox, VS Code, Thunar, VLC, Node, git, Claude Code β€” running on the iPad itself. No VM. No jailbreak. One app.

Subscribe on YouTube Follow on X linpados.com valineagu.com

Screenshots β€’ Why LinPad β€’ Features β€’ How it works β€’ Quick start β€’ Install & updates β€’ Shortcuts β€’ Roadmap

iPadOS 16+ Apple Silicon Alpine Linux SwiftUI Wayland Vulkan GPLv3

--- ## πŸ“Έ Screenshots

LinPad OS Dot Matrix desktop with the file manager and foot terminal

LinPad OS with the monochrome Dot Matrix desktop. Development captures from the iPad simulator.

| | | |:---:|:---:| | ![Visual Studio Code](docs/screenshots/vscode-current.webp)
**Visual Studio Code** editing a React and TypeScript project | ![Firefox](docs/screenshots/firefox-current.webp)
**Firefox** browsing Wikipedia | | ![LinPad Store](docs/screenshots/store-current.webp)
**LinPad Store** with Linux apps and developer tools | ![Aqua desktop](docs/screenshots/desktop-aqua.webp)
**Aqua** desktop with files and terminal | | ![Classic 98 desktop](docs/screenshots/desktop-classic-98.webp)
**Classic 98** desktop | ![Platinum desktop](docs/screenshots/desktop-platinum.webp)
**Platinum** desktop | --- ## πŸš€ Why LinPad? **The iPad Air M3 is as fast as a MacBook Air.** Put a Logitech keyboard with a trackpad on it and it looks like a laptop β€” but it can't do laptop things. No real terminal. No VS Code. No Linux tools. A powerful machine that ends up as a Netflix screen. LinPad turns it into the computer the hardware already is. | | Stock iPadOS | LinPad | |---|---|---| | **Desktop** | Stage Manager | **Real windowed desktop** with tiling, snapping, workspaces | | **Terminal** | Toy shells | **Full Alpine Linux** β€” apk, bash, Node, Python, git | | **Code editor** | Web-based at best | **Visual Studio Code** (the real one) | | **Browser engine** | WebKit only | **Firefox** + Safari's engine side by side | | **Linux GUI apps** | ❌ | **Thunar, Mousepad, VLC, GTK & Qt apps** | | **AI coding** | ❌ | **Claude Code** in the terminal and VS Code | | **Keyboard + trackpad** | Partial | **Right-click, shortcuts, pointer everywhere** | | **Cost** | β€” | **Free & open source** | --- ## ✨ Features ### πŸ–₯️ Native Desktop | Feature | Description | |---------|-------------| | **Window manager** | Move, resize from any edge, snap to halves and quarters, maximize, minimize to the taskbar | | **Auto-tiling** | Master-stack, columns, grid and monocle layouts β€” on or off per workspace, float any window | | **Workspaces** | Switch with keys or three-finger swipes, drag windows between them in the overview | | **Overview & switcher** | ExposΓ©-style overview, βŒ₯Tab switcher with live thumbnails, taskbar hover previews | | **Notification center** | History, Do Not Disturb, swipe to dismiss | | **Quick settings** | Volume, brightness, appearance, style, tiling, battery, network, fast mode | | **Lock screen & session** | Lock, restart the desktop session, session restore on launch | ### 🎨 Styles & Themes | Feature | Description | |---------|-------------| | **Five desktop styles** | LinPad, Windows, macOS, Ubuntu, Kylin β€” each changes the *layout*, not just colours | | **Matching Linux themes** | GTK & Qt themes, cursors and fonts follow the style (Fluent, WhiteSur, Yaru, UKUI, Adwaita) | | **Icon packs** | Papirus, Fluent, WhiteSur, Yaru, UKUI and more β€” independent of the style | | **Light & dark** | Per style, or follow iPadOS | | **Wallpapers** | Photos, Files, `~/Pictures`, or browse [Wallhaven](https://wallhaven.cc) (SFW only) right from the desktop | ### 🐧 Real Linux | Feature | Description | |---------|-------------| | **Alpine Linux 3.21** | Unmodified aarch64 binaries, full `apk` package manager | | **Linux GUI apps as native windows** | Built-in Wayland compositor β€” every Linux window is a real iPad window | | **Firefox** | The real thing, tuned for LinPad | | **Visual Studio Code** | Microsoft's official build, installed on first use, with extensions & the integrated terminal | | **Developer tools** | Node 22, npm, git, Python, Vite with hot reload, TypeScript, Claude Code | | **Lean by design** | Optional apps β€” mail, PDF viewer, office, image editor, VLC β€” are *ticked* by you, never preinstalled | ### ⚑ Performance | Feature | Description | |---------|-------------| | **Native ARM64 JIT** | β‰ˆ4.8Γ— faster than the threaded-code engine β€” `tsc` 5.4Γ—, Node 12Γ—, `vite build` 3.5Γ— | | **Fast mode in one tap** | Hands off to [StikDebug](https://github.com/StikDebug/StikDebug) (iPadOS 17.4+) or, for a copy installed with [TrollStore](https://github.com/opa334/TrollStore) (iPadOS 14.0–16.6.1, 16.7 RC, 17.0), to TrollStore at launch and comes back with JIT enabled | | **GPU acceleration** | Linux Vulkan & OpenGL ES on the Apple GPU (Venus β†’ virglrenderer β†’ MoltenVK β†’ Metal) | | **Firefox** | Scrolling at 30–50 fps, URL bar in ~40 ms | ### ⌨️ Input & Integration | Feature | Description | |---------|-------------| | **Keyboard, trackpad, touch** | All first-class; touch-sized controls when no keyboard is attached | | **Right-click everywhere** | Desktop, Files, title bars, taskbar, and inside Linux apps | | **Text input for every language** | Accents, emoji, dictation, Japanese & Chinese composition β€” in Linux apps too | | **Clipboard & drag-and-drop** | Between Linux apps, native apps and iPadOS | | **Sound** | Linux audio plays through iOS | | **Files app** | Thunar-style manager with Trash, Open With, Properties, desktop as a real folder | --- ## 🧠 How it works LinPad does not run a virtual machine and needs no jailbreak β€” it is **one iPad app**. ```mermaid flowchart TB subgraph app["LinPad app (one iOS process)"] desk["DesktopKit β€” SwiftUI desktop shell
windows Β· tiling Β· workspaces Β· styles Β· apps"] bridge["Linux window bridge
frames Β· input Β· clipboard Β· DnD Β· text input"] audio["Audio bridge β†’ AVAudioEngine"] gpu["virglrenderer + MoltenVK β†’ Metal"] emu["iSH-ARM64 emulator
Linux syscall translation Β· ARM64 JIT"] end subgraph guest["Alpine Linux (aarch64)"] apps["Firefox Β· VS Code Β· Thunar Β· VLC Β· foot Β· node Β· git Β· claude"] ishwl["ishwl β€” Wayland compositor"] pulse["PulseAudio"] mesa["Mesa Venus / Zink"] end apps --> ishwl --> bridge --> desk apps --> pulse --> audio apps --> mesa --> gpu guest -. "runs on" .-> emu ``` | Layer | What it does | |-------|-------------| | **Emulator** | Fork of [iSH](https://github.com/ish-app/ish) / [iSH-ARM64](https://github.com/meikis/ish-arm64): translates Linux system calls to iOS; LinPad adds a native ARM64 JIT and dozens of kernel fixes (signals, sockets, memory, inotify, netlink, futexes, memfd, virtio-gpu) | | **ishwl** | A small Wayland compositor inside Linux; each window's pixels are shared through memory-mapped files, input goes back through FIFOs | | **DesktopKit** | The native SwiftUI desktop β€” one window manager for native apps and Linux windows | | **GPU** | A virtio-gpu device in the emulator feeds virglrenderer's Venus renderer, running on MoltenVK and Metal | --- ## ⚑ Quick start | Requirement | Specification | |-------------|---------------| | **iPad** | Apple Silicon (M1 or newer) β€” developed on an iPad Air M3, iPadOS 27.2 | | **Mac** | Xcode, Homebrew `llvm lld meson ninja libarchive`, `libimobiledevice` | | **Account** | An Apple developer account (LinPad is sideloaded, not on the App Store) | | **Optional** | [StikDebug](https://github.com/StikDebug/StikDebug) + LocalDevVPN for fast mode, or [TrollStore](https://github.com/opa334/TrollStore) 2.0.12+ with its URL scheme turned on | ```sh export PATH=/opt/homebrew/opt/lld/bin:/opt/homebrew/opt/llvm/bin:$PATH gpu/build-third-party.sh # virglrenderer + MoltenVK (once) release/build-rootfs.sh # the Alpine system image (~50 min) xcodebuild -skipMacroValidation -project iSH.xcodeproj -scheme iSH-ARM64 -configuration Release -destination generic/platform=iOS \ -allowProvisioningUpdates SYMROOT=$PWD/build-ios-release IPHONEOS_DEPLOYMENT_TARGET=16.0 \ DEVELOPMENT_TEAM= ISH_JIT_BUILD=enabled build release/embed-rootfs.sh --device "build-ios-release/Release-iphoneos/iSH ARM64.app" \ release/out/ish-linux-rootfs-arm64.tar.gz ideviceinstaller install "build-ios-release/Release-iphoneos/iSH ARM64.app" ``` Full guide: **[release/INSTALL-DEVICE.md](release/INSTALL-DEVICE.md)** > Visual Studio Code is Microsoft's proprietary build. It is downloaded on your iPad when you choose to install it and is never redistributed by this project. --- ## πŸ“² Install & updates LinPad is sideloaded with your own Apple ID. Each [release](https://github.com/fspecii/LinPad/releases) has an IPA, and SideStore and AltStore can follow the LinPad source: ``` https://raw.githubusercontent.com/fspecii/LinPad/main/release/source.json ``` | Sideloader | Install | Updates | |------------|---------|---------| | **[SideStore](https://sidestore.io)** / **[AltStore](https://altstore.io)** | Add the source above, then install LinPad | Offered by the sideloader, or **Settings β€Ί Updates β€Ί Update via SideStore** | | **[iloader](https://github.com/nab138/iloader)**, Sideloadly, Xcode | Download `LinPad-.ipa` from the release | Install the new IPA with the same Apple ID; your Linux system and files are kept | | Inside LinPad | What it does | |---------------|--------------| | **App updates** | Checks GitHub at launch and every 6 hours (never on Low Data Mode), shows the release notes and opens your sideloader | | **Linux system updates** | Downloads the new system in the background, verifies its SHA-256 and installs it at the next launch β€” `/root`, `/home` and your packages are kept | | **Linux packages** | `apk upgrade` with one tap, weekly check | Cutting a release: **[release/RELEASING.md](release/RELEASING.md)** > Releases contain only redistributable software. Visual Studio Code and Claude Code are installed on your iPad from **Settings β€Ί Apps** when you choose them. --- ## ⌨️ Keyboard & trackpad | Shortcut | Action | |----------|--------| | `βŒƒβŒ₯A` | Applications | | `βŒƒβŒ₯T` | New terminal | | `βŒƒβŒ₯W` | Close window | | `βŒƒβŒ₯M` | Minimize | | `βŒƒβŒ₯←` `βŒƒβŒ₯β†’` `βŒƒβŒ₯↑` | Snap left / right / maximize | | `βŒƒβŒ₯U` `I` `J` `K` | Snap to quarters | | `βŒƒβŒ₯⇧T` | Toggle auto-tiling | | `βŒƒβŒ₯O` | Overview | | `βŒ₯Tab` | Window switcher | | `βŒƒβŒ₯1…9` | Switch workspace | | `⌘ …` | Goes to the app (⌘S saves, ⌘W closes a tab, ⌘C/⌘V copy & paste) | | Two-finger click | Right-click | | Three-finger swipe | Overview / switch workspace | --- ## πŸ—ΊοΈ Roadmap - [x] Native desktop with tiling, snapping, workspaces, five styles - [x] Real Firefox, VS Code, Thunar, VLC as native windows - [x] Native ARM64 JIT with one-tap fast mode - [x] GPU acceleration via Venus β†’ Metal - [x] Wallhaven wallpapers, icon packs, notification center - [ ] Optional app catalog: mail client, PDF viewer, office, image editor (tick to install) - [ ] iPad Files & Photos access from Linux - [ ] Quick Look with Space, like macOS - [ ] Faster Firefox page loads, lower memory --- ## πŸ’» Tech stack | Layer | Technologies | |-------|-------------| | **Desktop** | Swift, SwiftUI, UIKit | | **Emulator** | C, ARM64 assembly, iSH, meson | | **Linux** | Alpine Linux 3.21, Mesa (Venus/Zink), PulseAudio, GTK, Qt | | **Graphics** | Wayland, virglrenderer, MoltenVK, Metal | --- ## πŸ‘€ About the Author LinPad is built and maintained by **Vali Neagu** ([valineagu.com](https://valineagu.com) Β· [@AmbsdOP](https://x.com/AmbsdOP) on X Β· [fspecii](https://github.com/fspecii) on GitHub). I bought an iPad Air M3, attached a Logitech keyboard with a trackpad, and realised I owned a laptop-class machine that couldn't run a terminal, an editor or a real browser. LinPad is the fix. --- ## πŸ™ Credits - **[iSH](https://github.com/ish-app/ish)** β€” the Linux shell for iOS that started it all - **[iSH-ARM64](https://github.com/meikis/ish-arm64)** β€” the native ARM64 guest backend LinPad builds on - **[Alpine Linux](https://alpinelinux.org)** β€” the lightweight Linux underneath - **[Mesa](https://mesa3d.org)**, **[virglrenderer](https://gitlab.freedesktop.org/virgl/virglrenderer)**, **[MoltenVK](https://github.com/KhronosGroup/MoltenVK)** β€” the GPU path - **[StikDebug](https://github.com/StikDebug/StikDebug)** β€” JIT on modern iPadOS - **[Wallhaven](https://wallhaven.cc)** β€” wallpapers - The open-source themes and icon packs in `themes/`, each under its own license --- ## πŸ“„ License LinPad is licensed under the **GPLv3**, like iSH β€” see [LICENSE.md](LICENSE.md). The original iSH README is kept at [docs/README-iSH.md](docs/README-iSH.md). **Source code for releases.** Each [release](https://github.com/fspecii/LinPad/releases) attaches `linpad-source-.tar.gz` (this repository at the release tag) and `SOURCES.md` / `sources-manifest.json`, which list every package in the bundled Linux system with the exact source it was built from: the Alpine aports commit of each package, the Debian and Ubuntu theme source packages, and the pinned theme and icon repositories. `SOURCES.md` also carries the written offer of source for the GPL and LGPL components. ---

⭐ If LinPad turned your iPad into a real computer, please star this repo! ⭐

Made with ❀️ for everyone whose iPad deserves more than Netflix

Stop using your iPad as a TV. Start using it as a computer.