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.
Screenshots β’
Why LinPad β’
Features β’
How it works β’
Quick start β’
Install & updates β’
Shortcuts β’
Roadmap
---
## πΈ Screenshots
LinPad OS with the monochrome Dot Matrix desktop. Development captures from the iPad simulator.
| | |
|:---:|:---:|
| 
**Visual Studio Code** editing a React and TypeScript project | 
**Firefox** browsing Wikipedia |
| 
**LinPad Store** with Linux apps and developer tools | 
**Aqua** desktop with files and terminal |
| 
**Classic 98** desktop | 
**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.