Community List: Useful Precompiled Tools for OpenWrt (Go/Rust/TUI)

As routers grow with more storage and memory, it opens up your router to use a wider selection of terminal packages, some of which are modernized/optimized for the terminal, and have more frequent releases.

More importantly, these standalone binaries do not conflict w/ the rest of your system, so unlike traditional installs, you are free to install/upgrade/delete the binaries w/o breaking things

Quick Need-to-Know

Summary

Storage Requirements
Go/Rust binaries are 2-10MB each (vs <100KB for typical OpenWrt apps).

  • Ideally your router has 128MB+ flash or an extroot setup
  • If you are unsure, check your available space: df -h

Get Your Architecture

  • cat /etc/os-release |grep -i arch

Determine What It Means
ARMv7: Cortex-A7, A9, A15 โ†’ Look for:

  1. armv7-*-musleabihf (most specific, e.g., Rust projects)
  2. armv7 or linux-armv7 (usually works, e.g., Go projects)
  3. armv7l (little-endian. Technically correct reference to the most common ARMv7 standard)
    Choose .tar.gz format for OpenWrt

ARM64/AArch64: Cortex-A53, A55, A72, A76 โ†’ Look for:

  1. aarch64-*-musl (most specific, e.g., Rust projects)
  2. aarch64, arm64, or linux-arm64 (usually works, e.g., Go projects)
    Choose .tar.gz format for OpenWrt
Alternative Confirmation method

Common Board targets
If you need additional confirmation, you can also run: cat /etc/os-release |grep -i board to check which Board you are running:

  • ipq40xx (Cortex-A7) โ†’ ARMv7
  • ipq807x/ipq60xx (A53) โ†’ ARM64
  • mt7621 (MIPS) โ†’ MIPS/MIPSel
  • x86_64 โ†’ x86_64

Installation

With the basic understanding out of the way, here's how to install the software:

  1. Go to the package repository on GitHub/Codeberg/etc
  2. Navigate to the 'Releases' page
  3. Find the package that corresponds to your architecture (read 'Need to Know' section if unsure). Right click it and select 'Copy URL'
  4. In your terminal, type mkdir -p /tmp/myInstall && cd /tmp/myInstall. This creates a temporary folder that will be deleted at reboot and places you inside of the folder
  5. Run wget paste-copied-URL-here to copy the file to your router.
  6. A zipped file is now saved in the folder. Run tar -xzf filename to unzip the file
  7. Look for the binary in the unzipped content. It is often a single word (snitch, zoxide, etc) and is the largest file. Since it is an executable, if you type ls in your terminal, it will often be a highlighted. Example
  8. Move the binary file with the rest of your binaries in the /bin folder: mv binaryName /bin/ folder. This is a part of $PATH, so you can use this package at any time by typing its name.
  9. Test that it works by running the binary with the --version flag (ie: zoxide --version)
  10. (OPTIONAL) If you plan on installing multiple binaries and are pressed for storage, delete the unzipped contents: cd ~ && rm -rf /tmp/myInstall
1 Like

Snitch - A prettier way to inspect network connections

1 Like

Zoxide - A smarter cd command

tutorial

1 Like

Nice, only problem is that Go and its packages are not small compared to C so you probably need a router with sufficient storage.

When you say ARMv7, does that mean it is compatible with e.g. ARMv8?

Most newer router e.g. with A53 core and higher are ARMv8 (aarch64)

Edit:
Never mind I found the reference to arm64 in the releases๐Ÿ‘

1 Like

Good points. Reformatted and updated the first post to be more structured and device agnostic.

1 Like

zoxide does not support busybox ash, thus just slugging FLash for no purpose.

I run bash personally so my experience is unaffected.

In the /etc/profile (or ~/.profile), you can add the following once bash is installed:

if [ -x /bin/bash ] && [ -z "$BASH_VERSION" ]; then
    exec /bin/bash
elif [ ! -x /bin/bash ]; then
    echo "Note: bash not found, using ash" >&2
fi

This might be useful for some, also written in Go, albeit needs to be cross-compiled to musl.

1 Like