A desktop-class web browser engineered exclusively for iPadOS, built for large displays, hardware keyboards, and trackpads.
Modern iPad hardware features high-performance Apple Silicon, high-refresh-rate Liquid Retina displays, and dedicated keyboard-trackpad accessories. However, standard mobile browsers often constrain iPad browsing to magnified mobile viewports, cluttered horizontal tab bars, and incomplete shortcut mappings.
PadBrowser rethinks browsing on iPadOS from first principles. Built natively in Swift 6 and SwiftUI, it introduces true desktop-grade WebKit rendering, multi-space workspace isolation, vertical tab management, kernel-level content blocking, and complete hardware keyboard navigation.
- Uncompromised Desktop Viewports: Configured with
preferredContentMode = .desktopby default, rendering complex web applications (such as GitHub, Figma, Notion, and Bilibili) exactly as they appear on a desktop operating system. - Mac Safari User-Agent Contract: Emits a complete macOS Safari User-Agent string, preventing websites from erroneously serving degraded mobile layouts or displaying "unsupported browser" banners.
- Media Playback & Picture-in-Picture: Supports native HTML5 Picture-in-Picture (PiP), element fullscreen, and inline playback, with autoplay restrictions on audible media to prevent unintended background audio.
- Remote Web Inspector: Enables
isInspectable = truefor seamless debugging via Safari Web Inspector on a connected Mac.
- Contextual Spaces: Organize browsing into distinct workspaces (e.g., Engineering, Research, Personal). Each space maintains its own isolated tab hierarchies, nested folders, and pinned sites.
- Strict Incognito Isolation: Each incognito space provisions an independent, in-memory
WKWebsiteDataStore.nonPersistent()instance. Sessions and cookies are shared within the same private space but strictly isolated across spaces and destroyed on teardown. - Sunken Resizable Sidebar: Provides an ergonomic vertical tab tree with drag-and-drop tab organization and width adjustment (220 pt to 420 pt), reclaiming vertical display real estate for page content.
- Classic Tab Strip Mode: Allows users who prefer horizontal tabs to switch to an animated, drag-and-drop horizontal strip.
- Start Page: Features unified quick-search, pinned site grids, and recent bookmarks with layered continuous-corner card styling.
- Native WebKit Rule Compilation: Powered by
WKContentRuleList, tracker domains and high-frequency advertisements are intercepted at the WebKit network layer with complementary CSS cosmetic filtering—incurring zero third-party dependency overhead. - System Keychain Autofill: Integrates with iPadOS
AuthenticationServices(ASAuthorizationPasswordProvider) to summon iCloud Keychain with Touch ID / Face ID verification and safely inject credentials into web forms. - Userscript Pipeline: Includes an embedded userscript engine that evaluates Tampermonkey-compatible
@matchpatterns and schedules script injection atatDocumentStartandatDocumentEnd. - Netscape Bookmark Ingestion: Features a standalone HTML bookmark parser supporting recursive folder trees and standard entity normalization from Chrome, Safari, and Firefox exports.
- Desktop Keyboard Mapping: Supports full keyboard navigation with 15+ standard macOS key combinations, eliminating constant screen tapping.
- Command Palette (⌘ + ⇧ + P): Quick launcher inspired by desktop productivity tools for immediate URL dispatch and action filtering.
- Two-Finger Trackpad Gestures: Smooth edge swipe navigation for history traversal with fluid inertia and bounce curves.
- Continuous Curvature Canvas: The central browser canvas conforms to iPad display hardware corners using a 24 pt continuous rounded rectangle with subtle depth shadows and hairline borders.
- Liquid Glass Compatibility Layer: Features dynamic abstraction across OS generations, automatically binding to iPadOS 26+ native
glassEffectwhile offering a graceful fallback to.ultraThinMaterialon iPadOS 18. - Immersive Fullscreen Mode: Supports hiding the native status bar to maximize viewable canvas height during focused workflows.
PadBrowser is constructed using a unidirectional, Observation-driven architecture:
PadBrowser/
├── PadBrowserApp.swift # App entrypoint and Scene-level Store injection
├── Models/ # Domain entities
│ ├── BrowserTab.swift # Tab model (UUID, URL, scroll offset snapshots)
│ ├── BrowserSpace.swift # Spaces, folder hierarchy, and pinned sites
│ └── Bookmark.swift # Tree bookmark structure and Netscape parser
├── Stores/ # Reactive state roots (SwiftUI Observation)
│ ├── BrowserStore.swift # Central state root with granular TabRuntime isolation
│ ├── PersistenceStore.swift # Atomic JSON session persistence and cold-boot restore
│ ├── SettingsStore.swift # Preferences storage via UserDefaults
│ ├── BookmarkStore.swift # Bookmark collection management
│ └── CredentialStore.swift # Search engine definitions and HTTP auth cache
├── Web/ # WebKit orchestration layer
│ ├── BrowserWebView.swift # Subclassed WKWebView with desktop configuration
│ ├── WebContainer.swift # UIViewRepresentable bridge & Coordinator
│ ├── ContentBlockerManager.swift # Compiled WKContentRuleList blocker engine
│ ├── IncognitoDataStorePool.swift # Non-persistent storage allocation pool
│ ├── PasswordAutofillHelper.swift # Biometric Keychain form injection helper
│ ├── UserScriptBridge.swift # UserScript loading and injection bridge
│ └── UserScriptStore.swift # In-memory userscript metadata registry
├── Commands/ # Hardware input handling
│ └── BrowserCommands.swift # CommandMenu desktop keyboard binding system
└── Views/ # Presentation layer
├── RootView.swift # Root split layout and main card canvas
├── WebSurface.swift # Active tab pool dispatcher and crash recovery
├── StartPageView.swift # Modern start page with quick access
├── TabStripView.swift # Horizontal tab strip
├── Sidebar/ # Workspace switcher, divider, and vertical tabs
├── Toolbar/ # Address bar (Omnibox), navigation controls, command panel
├── Settings/ # Preferences interface
└── Compatibility/ # Liquid Glass system abstraction
- Granular Reactivity (Render Performance): High-frequency progress updates (up to 60 events/sec) are delegated to isolated
@Observable class TabRuntimeinstances rather than the globalBrowserStore, avoiding full view tree re-evaluations. - Defensive Lifecycle Management:
WebContainer.dismantleUIViewexplicitly nullifies delegates, terminates ongoing network tasks, and unregisters KVO / notification observers to eliminate WebKit memory leaks. - Jetsam Process Recovery: Automatically intercepts
webViewWebContentProcessDidTerminateand seamlessly restores tab viewports utilizing persistent scroll offsets. - Resident Active Tab Pool: Enforces an LRU tab pool (
maxResidentTabsconfigurable between 4 and 16) to balance instant switching responsiveness with iPadOS background memory limits.
| Shortcut | Description |
|---|---|
| ⌘ + T | Open a new tab |
| ⌘ + W | Close current tab |
| ⌘ + ⌥ + ⇧ + W | Close all other tabs |
| ⌘ + ⇧ + N | Create a new private space tab |
| ⌘ + L | Focus address bar (Omnibox) |
| ⌘ + R | Reload current page |
| ⌘ + [ / ] | History Back / Forward |
| ⌘ + 1 ~ 9 | Switch to tab index 1 through 9 |
| ⌘ + ⌃ + S | Toggle sidebar visibility |
| ⌘ + ⇧ + P | Open Command Palette |
| ⌘ + D | Bookmark current page |
| ⌘ + ⇧ + B | Toggle bookmarks bar |
| ⌘ + + / - / 0 | Zoom in / Zoom out / Reset zoom level (50% ~ 200%) |
- Xcode: 16.0 or higher
- Language: Swift 6.0
- Target OS: iPadOS 18.0+
- Architecture: arm64 (Device) / arm64 (Simulator)
git clone https://github.com/jinlun7/ipadbrowser.git
cd ipadbrowser
open PadBrowser.xcodeproj- Select the root
PadBrowserproject node in Xcode. - Navigate to Signing & Capabilities.
- Enable Automatically manage signing and select your Development Team (free personal Apple IDs are supported).
- Select a connected iPad device or an iPadOS 18+ simulator (e.g.,
iPad Pro 13-inch (M4)). - Press ⌘ + R to build and run.
xcodebuild -project PadBrowser.xcodeproj \
-scheme PadBrowser \
-destination 'platform=iOS Simulator,name=iPad Pro 13-inch (M4)' \
-configuration Debug \
buildContributions, feature discussions, and bug reports are welcome. When submitting changes:
- Ensure full compatibility with Swift 6 strict concurrency checks.
- Verify visual stability across different iPad screen sizes (11-inch, 13-inch, and Split View multitasking).
- Test interaction workflows on hardware devices or simulators prior to opening a Pull Request.
This project is licensed under the MIT License.