Skip to main content
OpenWrt is a Linux operating system targeting embedded devices. Instead of trying to create a single, static firmware, OpenWrt provides a fully writable filesystem with package management. This frees you from the application selection and configuration provided by the vendor and allows you to customize the device through the use of packages to suit any application. For developers, OpenWrt is the framework to build an application without having to build a complete firmware around it; for users this means the ability for full customization, to use the device in ways never envisioned.

Why OpenWrt instead of vendor firmware?

Most routers and embedded devices ship with read-only firmware that can only be upgraded as a whole. OpenWrt takes a different approach:
Vendor firmwareOpenWrt
FilesystemRead-only (squashfs or similar)Fully writable (overlay filesystem)
Package managementNone — fixed at factoryopkg package manager with thousands of packages
ConfigurationWeb UI provided by vendorUCI (Unified Configuration Interface) + optional LuCI web UI
CustomizationLimited to vendor optionsFull control — install, remove, or replace any component
UpdatesWhole-firmware onlyIndividual package updates

Key subsystems

The OpenWrt build system is a set of Makefiles and scripts that automate downloading, patching, and cross-compiling the Linux kernel and all user-space packages for a target architecture. Running make menuconfig lets you select the target platform, kernel options, and packages before the build.
UCI is OpenWrt’s centralized configuration system. All system configuration is stored in plain-text files under /etc/config/. The uci command-line tool and the UCI API allow scripts and programs to read and write configuration without parsing arbitrary config file formats.
ubus provides a lightweight inter-process communication (IPC) bus for OpenWrt daemons and scripts. It allows services to expose methods and events that other processes can call or subscribe to, similar in concept to D-Bus but optimized for embedded use.
procd is OpenWrt’s init system and process supervisor. It replaces traditional SysV init scripts with a structured JSON-based service definition format, handles hotplug events, and manages service dependencies and restart policies.
opkg is the lightweight package manager used on OpenWrt devices. It handles installing, upgrading, and removing packages from configured package feeds. All packages in the related repositories are installed via opkg.
LuCI is OpenWrt’s modular web administration interface. It is built on Lua and provides a browser-based GUI for configuring the system through UCI. LuCI is optional and can be installed or removed via opkg.
The main OpenWrt repository contains the build system and core packages. Additional packages are maintained in separate repositories and pulled in via the feeds system.

LuCI

Modern and modular web interface to control the device via a browser.

Packages

Community repository of ported packages available for installation via opkg.

Routing

Packages focused on mesh and dynamic routing protocols.

Video

Packages for display servers and clients (Xorg and Wayland).

Who is OpenWrt for?

OpenWrt replaces your router’s stock firmware with a system you can actually control. You can:
  • Install ad-blocking software (e.g., AdGuard Home or dnsmasq with blocklists)
  • Configure VPN clients or servers (WireGuard, OpenVPN)
  • Set up quality-of-service (QoS) rules to prioritize traffic
  • Monitor network usage with detailed statistics
  • Use your router as a lightweight NAS or print server
Start with the Firmware Selector to find a pre-built image for your device.

Next steps

Quickstart

Clone the source, update feeds, configure, and build your first firmware image.

Supported devices

Find your hardware platform and learn about supported architectures.