How Customizable and Extensible Is Luakit?
Updated
Luakit is a browser framework built on WebKit and GTK+ that is configured and extended entirely in Lua, giving you fine-grained control over both browser behavior and interface. It is aimed at power users and developers who want to shape their browser rather than accept fixed defaults. The trade-off is that you build and install it yourself on most systems, and you are responsible for keeping WebKitGTK+ current.
What "customizable" means in Luakit
Luakit is not a browser with a settings menu you click through. It is a framework: the browser logic, key bindings, modes, and interface are defined in Lua, and you edit that Lua to change how it behaves. The project describes itself as "highly configurable" and "extensible with Lua," targeted at anyone who wants fine-grained control over the browser's behavior and interface.
Two consequences follow from that design:
- Behavior is scriptable. Modes such as normal mode and follow mode are part of the framework, and you can add or change bindings rather than only remap a fixed set of shortcuts.
- Interface is scriptable. Theming and layout are not locked. The project's own screenshots show a different theme with vertical tabs enabled, which indicates the tab layout itself is configurable, not just colors.
Extensibility through Lua
The extension language is Lua (5.1 or LuaJIT), and Lua is also the configuration language — there is no separate plugin API to learn. The project lists Lua as a required dependency alongside GTK 3, WebKitGTK+ (webkit2gtk), lfs (Lua File System), and SQLite 3.
Practical implications:
- Small surface to read. Luakit contains only around 9000 lines of code, so the framework you are extending is small enough to read and modify directly.
- Fast to build. The same small codebase means building from source "is usually very fast."
- Extensions are code, not packages. Because Lua is the whole extension mechanism, what you can add is bounded by what the framework exposes to Lua rather than by a curated add-on store.
The screenshots also show an ad blocker settings page listing currently active filter lists, which is an example of a feature surfaced through the Lua-configured interface rather than a fixed built-in dialog.
What you can change, concretely
| Area | What the evidence shows |
|---|---|
| Key bindings and modes | Normal mode and follow mode (with visible link hints) are shown as distinct modes |
| Theme | A different theme is demonstrated in the screenshots |
| Tab layout | Vertical tabs can be enabled |
| Content filtering | An ad blocker settings page lists active filter lists |
| Browser behavior generally | Described as fine-grained control over behavior and interface |
The cost of that control
Customizability here is not free, and the project is explicit about the main risk. Luakit moved to the WebKit 2 API, which the project calls a vastly improved security situation — but it warns that not all Linux distributions package an up-to-date WebKitGTK+, and several ship very outdated versions with known vulnerabilities. As of September 2019, Arch, Debian, Fedora, Gentoo, and Ubuntu had the latest WebKitGTK+, while OpenSUSE shipped an outdated and vulnerable version in its stable channel. The project states plainly that if you browse with Luakit, ensuring your distribution packages an up-to-date WebKitGTK+ is your responsibility.
Installation reflects the same power-user posture:
- Arch Linux: install the
luakitcommunity package orluakit-gitfrom the AUR. - Other Linux: download and build from source; a Debian package is in the works.
- FreeBSD and OpenBSD: install the
luakitpackage. When building from source on OpenBSD, use clang instead of GCC, because OpenBSD's GCC is outdated and will cause compilation errors. - Windows 10: install WSL first, since WebKitGTK+ does not natively support Windows, then build and install from source.
- BSD, Solaris, HURD, Windows 10 (with WSL): listed as supported; Windows, Solaris, and HURD are not actively supported but known to work.
Who should choose it
Choose Luakit if you want to define your browser's behavior and interface in Lua, you are comfortable building from source or using a distribution package, and you will keep WebKitGTK+ updated yourself. Look elsewhere if you want a browser that works out of the box with a graphical settings panel, or if your distribution ships an outdated WebKitGTK+ and you cannot change that.