You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
root 7c917010f0 WTF? 10 months ago
docs embedd screenshots into readme 2 years ago
images add lede and openwrt example listings 3 years ago
.gitignore Add config.js 3 years ago
LICENSE initial commit 4 years ago
README.md update readme 2 years ago
app.css refactor branch to stable, unstable, testing categories 2 years ago
app.js app.js: determine locale by browser settings. 1 year ago
config.js.old WTF? 10 months ago
config_template.js config_template.js: add missing comma 1 year ago
devices.js add wrt32x 1 year ago
i18n.js i18n.js: remove duplicated 'tr-list-files' 1 year ago
index.html WTF? 10 months ago
router.png initial commit 4 years ago


OpenWrt Firmware Selector

The Firmware Selector is a web interface to let end users select the correct OpenWrt firmware for their wireless router.

A live demo can be found here.

Firmware selection: selection

Firmware table: table


  • scrapes HTML file listings or reads data from JSON API (array of relative image paths)
  • English, German and Polish translations are available
  • over 500 firmware file to model mappings
  • distinguishes between stable, unstable and testing branches
  • debugging options to identify files not matched and patterns that match no file

Similar projects:


  1. Download the source code
  2. Copy config_template.js to config.js
  3. Start a webserver in the project folder

Apache Webserver

Create a .htaccess file that enables directory listings:

Options +Indexes

Nginx Webserver

For nginx, auto-indexing has to be turned on:

location /path/to/builds/ {
    autoindex on;

Python Webserver

For testing purposes or to share files in a LAN, Python can be used. Run python3 -m http.server 8080 from within this directory (the directory where README.md can be found) and you are done.

Model Database

All available router models are specified in devices.js via that will match against the filenames. If no hardware revision is given or is it is empty, the revision is extracted from the file name.

  <vendor>: {
    <model>: <match>,
    <model>: {<match>: <revision>, ...}
  }, ...

If two matches overlap, the longest match will be assigned the matching files. If the revision string is empty, it will be taken from the file name.


  • add image search box