Ladybird is designed with portability in mind, but porting it to a new operating system or user-interface framework is a significant engineering undertaking. This document explains the two kinds of ports — UI ports and platform ports — describes what is currently supported and community-maintained, and outlines the concrete steps required to create each type.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ladybirdBrowser/ladybird/llms.txt
Use this file to discover all available pages before exploring further.
Types of Ports
There are two independent dimensions of porting:| Port type | What it covers |
|---|---|
| UI port | The browser frontend: window chrome, tabs, address bar, and all user-visible UI |
| Platform port | OS-level abstractions: file I/O, networking, process management, and IPC plumbing |
Current Support Status
- UI Ports
- Platform Ports
There are currently two supported UI ports:
- Qt6 — The generic, cross-platform UI port built on Qt 6.
- AppKit/Cocoa — The macOS-native port, built on Apple’s AppKit framework.
Porting Steps
- UI Port
- Platform Port
UI ports concern themselves with the main Ladybird browser process and everything the user sees. The core interface
is the WebView layer in 1. Implement
2. Subclass
Each UI port must also subclass
LibWebView.1. Implement WebView::ViewImplementation
ViewImplementation is the primary bridge between the UI process and the WebContent processes. Each browser tab
is expected to have its own WebContent process; the WebView layer manages this multiplexing. Your new UI port must
provide a subclass of WebView::ViewImplementation that handles all communication between the UI layer and the
WebContent processes.2. Subclass WebView::Application
Each UI port must also subclass WebView::Application to register any UI-specific command-line flags and perform
any UI-level initialisation.Summary
The minimum surface area for a new UI port is:- A
WebView::ViewImplementationsubclass (one instance per tab) - A
WebView::Applicationsubclass (one instance per browser process)
