https://github.com/openwrt/firmware-selector-openwrt-org
The OpenWrt Firmware Selector! Quickly find firmware for your device and build custom ones online!
https://github.com/openwrt/firmware-selector-openwrt-org
Last synced: 11 months ago
JSON representation
The OpenWrt Firmware Selector! Quickly find firmware for your device and build custom ones online!
- Host: GitHub
- URL: https://github.com/openwrt/firmware-selector-openwrt-org
- Owner: openwrt
- License: cc0-1.0
- Created: 2020-10-12T07:22:19.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2025-06-04T07:08:03.000Z (about 1 year ago)
- Last Synced: 2025-06-09T15:12:00.226Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 7.11 MB
- Stars: 85
- Watchers: 24
- Forks: 40
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# OpenWrt Firmware Selector
A simple OpenWrt firmware selector using autocompletion. Uses plain
HTML/CSS/JavaScript. Checkout the [Demo](https://firmware-selector.openwrt.org).

## Quick Run
* Download the sources and change the working directory
* Start webserver (e.g. `python3 -m http.server`)
* Go to [http://localhost:8000/www/](http://localhost:8000/www/) in your web browser
Configure with [config.js](www/config.js).
## Installation
Steps:
1. Place the `www/` folder somewhere web accessible.
2. Set `image_url` in `www/config.json` to where the images are located.
Example: https://downloads.openwrt.org
3. Organize the images like on [downloads.openwrt.org](https://downloads.openwrt.org).
Example: https://downloads.openwrt.org/releases/23.05.4/targets/ramips/mt7621/openwrt-23.05.4-ramips-mt7621-dlink_dir-1935-a1-squashfs-sysupgrade.bin
(path scheme is `/releases//targets///`)
4. Place a single `.versions.json` at `image_path`. This is optional.
Example: `https://downloads.openwrt.org/.versions.json`
```
{
"stable_version": "23.05.4",
"versions_list": ["23.05.4", "19.07.10"]
}
```
Note: These values can be overwritten with `versions` and `default_version` in the `config.js` file.
5. Place `.overview.json` files in each version folder.
Example: `https://downloads.openwrt.org/releases/23.05.4/.overview.json`
They can be generated by this shell command:
```
for VERSION_PATH in 19.07.10/ 23.05.4/; do
jq -s '{ release: .[0].version_number, profiles: [.[] | .target as $target | .profiles | keys[] as $k | { id: ($k), titles: (.[$k] | .titles), target: $target }] }' $(find "$VERSION_PATH" -iname 'profiles.json') > $VERSION_PATH/.overview.json
done
```
### Generate OpenWrt JSON
The `.overview.json` file for a version is created from all `profile.json` files that are generated by OpenWrt when images are created. To enable generation, go to the build settings (`make menuconfig`):
`Global build settings ---> [*] Create JSON info files per build image`.
If the option is not available (OpenWrt 18.06 or 19.07.3), apply commit [openwrt/openwrt@881ed09](https://github.com/openwrt/openwrt/commit/881ed09ee6e23f6c224184bb7493253c4624fb9f).
## Attended SysUpgrade (ASU)
[ASU](https://github.com/openwrt/asu) is a build server that builds OpenWrt images with a given list of packages on request. The firmware-selector can be used as an interface to send these requests and to download the images when finished.
### UCI-Defaults
The Firmware Selector allows to define a script to be placed in the `/etc/uci-defaults/` folder of the OpenWrt image. These scripts are executed once on the first reboot and then deleted. See the [OpenWrt documentation](https://openwrt.org/docs/guide-developer/uci-defaults) on this topic.
## Translations
Visit [weblate.org](https://hosted.weblate.org/projects/openwrt/firmware-wizard/) to contribute new translations or to improve them.
## Similar Projects
- [Gluon Firmware Selector](https://github.com/freifunk-darmstadt/gluon-firmware-selector): For [Gluon](https://github.com/freifunk-gluon/) images, now with pictures.
- [Freifunk Hennef Firmware Downloader](https://github.com/Freifunk-Hennef/ffhef-fw-dl): Similar to the project above, but PHP based.
- [LibreMesh Chef](https://github.com/libremesh/chef/): Allows to select configurations.
- [GSoC Firmware Selector](https://github.com/sudhanshu16/openwrt-firmware-selector/): Result of the GSoC
- [FFB Firmware Selector](https://github.com/freifunk-bielefeld/firmware-selector): Build for Freifunk Bielefeld