Skip to main content

OpenWrt

OpenWrt is a Linux-based embedded operating system targeting routers, access points, and embedded devices. Instead of a static vendor firmware, OpenWrt provides a fully writable filesystem with package management — giving you complete control over your device’s software.

Quickstart

Build your first custom firmware in minutes

Supported Devices

Find your hardware in the OpenWrt device database

Build System

Learn the OpenWrt build system architecture

Package Development

Create and publish packages for OpenWrt

What is OpenWrt?

OpenWrt replaces your router’s stock firmware with a full Linux distribution. Every component — from the kernel and libc to network daemons and web interface — is built from source using a reproducible cross-compilation toolchain. The result is a firmware image tailored exactly to your hardware and use case.

40+ Architectures

ARM, MIPS, x86, RISC-V, PowerPC, and more

opkg Package Manager

Install and remove packages at runtime

UCI Configuration

Unified interface for all system settings

Feed System

Modular package collections for any use case

Image Builder

Create custom images without a full rebuild

LuCI Web UI

Browser-based device management interface

Who uses OpenWrt?

Replace vendor firmware on your home router to unlock advanced networking features: VLANs, WireGuard VPN, ad-blocking via DNS, QoS traffic shaping, and more — all through the LuCI web interface or SSH.

Get started

1

Check your device

Verify your router or embedded device is supported at firmware-selector.openwrt.org or the OpenWrt Hardware Database.
2

Set up the build environment

Install the required build dependencies on a GNU/Linux or macOS host. See Build System Requirements for the full list.
3

Clone and configure

Clone the repository, run ./scripts/feeds update -a && ./scripts/feeds install -a, then use make menuconfig to select your target, architecture, and packages.
4

Build

Run make to build the cross-compilation toolchain, the Linux kernel, and all selected packages. The final firmware image lands in bin/targets/.
5

Flash your device

Follow the device-specific install instructions to flash the generated image. After rebooting, your device runs OpenWrt.

Core subsystems

UCI — Unified Configuration Interface

A single abstraction layer for all OpenWrt configuration. UCI files in /etc/config/ are read and written by the uci CLI, LuCI, and any daemon that integrates with the UCI API.

ubus — IPC Message Bus

A lightweight D-Bus-style message bus for inter-process communication. System daemons expose their APIs over ubus; clients call methods and subscribe to events using the ubus CLI.

procd — Process Manager

OpenWrt’s init system and process supervisor. Reads /etc/init.d/ service scripts, manages respawning, and integrates with ubus for runtime service control.

opkg — Package Manager

The on-device package manager for installing, upgrading, and removing packages from online repositories at runtime — without rebuilding firmware.

Community and support

Forum

Get help with device configuration, package development, and hardware advice

Bug Tracker

Report bugs and track issues in the OpenWrt project

Developer Mailing List

Submit patches and follow development discussions

GitHub Mirror

Browse source code and submit pull requests

Build docs developers (and LLMs) love