需自备 Apple 开发者账号侧载,不上架 App Store;构建前需安装 Homebrew 的 llvm、lld、meson、ninja、libarchive、libimobiledevice;VS Code 为微软专有构建,首次使用时在 iPad 上下载,项目不随包分发。
LinPad
fspecii活跃维护在 iPad 上跑完整 Linux 桌面,用原生窗口管理、平铺和虚拟工作区运行 Firefox、VS Code 等真实 Linux 应用,靠 ARM64 JIT 和 Venus/Metal GPU 加速。
LinPad — Linux for iPad. A real Linux desktop on the iPad: native windowed desktop with tiling and workspaces, real Linux apps (Firefox, VS Code, Thunar, VLC) as native windows, ARM64 JIT, GPU via Venus/Metal, keyboard + trackpad + touch.
export PATH=/opt/homebrew/opt/lld/bin:/opt/homebrew/opt/llvm/bin:$PATH
gpu/build-third-party.sh
release/build-rootfs.sh需要 Apple Silicon iPad(M1 或更新),开发机为 iPad Air M3、iPadOS 27.2;构建需 Mac 与 Xcode。README 未提及显存要求。
在 iPad 上直接跑真实 Linux 桌面,无需越狱或虚拟机,一个 App 搞定
在 iPad 上跑完整 Linux 桌面,用原生窗口管理、平铺和虚拟工作区运行 Firefox、VS Code 等真实 Linux 应用,靠 ARM64 JIT 和 Venus/Metal GPU 加速。
核心能力
- 用 SwiftUI 原生窗口管理器统一管理 Linux 窗口
- 内置 Wayland 合成器,Linux GUI 应用以原生窗口显示
- 原生 ARM64 JIT,比线程解释引擎快约 4.8 倍
- 通过 Venus→virglrenderer→MoltenVK→Metal 启用 GPU 加速
- 支持平铺布局、工作区、概览与 Alt-Tab 切换器
容易踩的坑
- v1.5.0LinPad 1.5.0最新正式版2026-10-03 · 2026-10-03 18:14 UTC
LinPad 1.5.0
LinPad runs a real Alpine Linux desktop on Apple Silicon iPads: Linux apps open as native windows, and there is no VM and no jailbreak. This is an early, pre-1.0-quality release. Expect rough edges, and back up anything important first.
Install or update
- SideStore / AltStore: add the source
https://raw.githubusercontent.com/fspecii/LinPad/main/release/source.json. LinPad updates from there afterwards. - iloader, Sideloadly or Xcode: download
LinPad-1.5.0.ipabelow. Install it with the same Apple ID as before; that keeps your Linux system and files. - Linux system only: Settings › Updates downloads
linpad-rootfs-1.5.0.tar.gzand installs it at the next launch./root,/homeand the packages you added are kept. The previous system stays available for rollback.
Visual Studio Code, Claude Code and the other optional apps are not in the download. Install them on the iPad from Settings › Apps or the LinPad Store.
New in 1.5.0
- LinPad Store. Browse about 800 Alpine desktop apps with collections, search, real install progress and updates.
- Keyboard layouts. Linux apps follow the iPad's keyboard layout, including dead keys, Option as AltGr and the on-screen keyboard's text.
- Looks and themes. Paired light/dark themes, era looks (Aero, Aqua, Luna, Platinum, Classic, Berry and more), wallpaper matching, and icon packs applied everywhere.
- Firefox. Fullscreen works and renders at scale 1, which halves the CPU used by fullscreen video. Video and audio are steadier, and memory use is lower.
- Staying alive on iPadOS.
- LinPad survives locking the screen, switching apps and being terminated: sessions are restored and unsaved editor text is recovered.
- A low-memory policy closes the right Linux process before iOS would kill the whole app.
- The "0xDEAD10CC" kills at suspension are fixed.
- System tools. Screensaver and idle lock, clipboard history, a sectioned command menu,
backup/restore, diagnostics, Repair System, and
linpad update/linpad versionin a terminal. - Hardware bridges. The camera and microphone are available to Linux apps, and Now Playing media controls work through playerctl.
- Emulator.
- System V IPC (shared memory, semaphores, message queues) and membarrier.
- Correct file locking on arm64 and fixed socket edge cases.
- The CPU interpreter matches real ARM64 on the conformance suite.
- Linux system. Alpine 3.21 base with Mesa 26.2.4 from edge for the GPU path, CJK and emoji fonts, and FFmpeg decoders for Firefox.
Experimental
- Native JIT ("fast mode"). It needs StikDebug, and it has not been verified on every TXM device. Without it LinPad runs in compatibility mode, which is slower.
- GPU acceleration (Venus/zink on MoltenVK): GL 2.1 / GLES 2.0 only. Firefox stays on software rendering.
- Optional packs: Wine, Wine x86 (Box64), LibreOffice, the extra browsers and developer extras.
- VS Code: heavy on memory. Large projects may be closed by iPadOS on 8 GB iPads.
Known issues
- Page loads and app launches are much slower than on a real Linux machine, especially without the JIT.
- After a style switch, Linux apps keep their old theme until they are restarted.
- A drag of several files to another iPad app carries only the first file.
Source code (GPL)
LinPad is GPLv3.
linpad-source-1.5.0.tar.gzis the source of this release (also at tagv1.5.0).SOURCES.mdandsources-manifest.jsonlist every package in the Linux system with the exact source it was built from, and carry the written offer of source.Checksums (SHA-256)
9e79e12a109a52131177c20caa69180d5b23c989690b80b0670d33125402e3b2 LinPad-1.5.0.ipa b5e852cfe2d9763863323895a6f94194ac980b226926a6f6aba27c5f5e41ea9b linpad-rootfs-1.5.0.tar.gzLinux system version:
202610031701 - SideStore / AltStore: add the source
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
📸 Screenshots
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 (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 (iPadOS 17.4+) or, for a copy installed with 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.
flowchart TB
subgraph app["LinPad app (one iOS process)"]
desk["DesktopKit — SwiftUI desktop shell<br/>windows · tiling · workspaces · styles · apps"]
bridge["Linux window bridge<br/>frames · input · clipboard · DnD · text input"]
audio["Audio bridge → AVAudioEngine"]
gpu["virglrenderer + MoltenVK → Metal"]
emu["iSH-ARM64 emulator<br/>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 / 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 + LocalDevVPN for fast mode, or TrollStore 2.0.12+ with its URL scheme turned on |
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=<your 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
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 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 / AltStore | Add the source above, then install LinPad | Offered by the sideloader, or Settings › Updates › Update via SideStore |
| iloader, Sideloadly, Xcode | Download LinPad-<version>.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
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
- Native desktop with tiling, snapping, workspaces, five styles
- Real Firefox, VS Code, Thunar, VLC as native windows
- Native ARM64 JIT with one-tap fast mode
- GPU acceleration via Venus → Metal
- 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 · @AmbsdOP on X · 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 — the Linux shell for iOS that started it all
- iSH-ARM64 — the native ARM64 guest backend LinPad builds on
- Alpine Linux — the lightweight Linux underneath
- Mesa, virglrenderer, MoltenVK — the GPU path
- StikDebug — JIT on modern iPadOS
- Wallhaven — 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. The original iSH README is kept at docs/README-iSH.md.
Source code for releases. Each release attaches linpad-source-<version>.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.
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