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?
- Home Users
- Developers
- Network Engineers
- Researchers
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
Check your device
Verify your router or embedded device is supported at firmware-selector.openwrt.org or the OpenWrt Hardware Database.
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.
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.Build
Run
make to build the cross-compilation toolchain, the Linux kernel, and all selected packages. The final firmware image lands in bin/targets/.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