Welcome to Freetz-EVO¶
_____ _ _______ _____
| ___| __ ___ ___| |_ ____ | ____\ \ / / _ \
| |_ | '__/ _ \/ _ \ __|_ /____| _| \ \ / / | | |
| _|| | | __/ __/ |_ / /_____| |___ \ V /| |_| |
|_| |_| \___|\___|\__/___| |_____| \_/ \___/
Freetz-EVO is a fork of Freetz-NG, which remains the technical foundation of this project.
Freetz-EVO builds on that foundation with additional packages, UX improvements, and workflow tooling. Freetz-EVO is easier, sleeker, with more features and less bugs.
Relevant new packages include GCC on-device, nginx, rtorrent, ruTorrent, PHP,
AI translation for non EN and DE languages, more explicit error/warning messages, an advanced GitHub Action for testing new developments, and many other new packages.
Freetz-EVO is continuously kept in sync with the upstream Freetz-NG
repository: upstream fixes, new firmware support, and toolchain updates are regularly merged so Freetz-EVO keeps evolving on top of the latest Freetz-NG base.
Getting Started¶
New to Freetz-EVO? The Getting Started guide walks you through the complete workflow: setting up a Linux build environment (including WSL on Windows), configuring the firmware, building it, and flashing your device.
Improvements over Freetz-NG¶
Note: all new packages are currently developed and tested on an AVM FRITZ!Box 7590 AX with firmware FRITZ!OS 8.20.
UX and Web Interface¶
The Freetz-EVO web interface features a completely redesigned, fully responsive skin ("EVO skin"). On mobile devices, the navigation adapts to a fixed bottom bar with a slide-up drawer for sub-menus and sub-pages; on desktop and tablet a horizontal top menu with hover dropdowns is used, with an optional hamburger mode that collapses the top bar into a right-side slide-in panel. Dark mode, page-width toggle, and per-device preferences are persisted in cookies for a consistent experience across page loads and devices.
The web interface can be added to the home screen on any smartphone (Android or iOS) for an app-like experience; on Android, Samsung Internet delivers a full PWA-quality install. With freetz_proxy and HTTPS the full PWA install prompt is available, and the same HTTPS URL works remotely via MyFRITZ! without port-forwarding. See docs/mobile.md for detailed setup instructions.
The authentication layer has been updated to support a form-based session login (in addition to the legacy HTTP Basic Auth mode). When the New login with session id option is enabled, the web interface presents a custom HTML login page instead of the native browser credential dialog; access is protected by a session cookie with a configurable inactivity timeout, persisted across browser restarts, so re-opening the browser within an active session no longer forces re-authentication. A bug in passwd_save.sh that caused the stored password hash to include the username prefix — making any password change break subsequent logins — has been fixed. The session cookie has been hardened: the session ID is now generated from /dev/urandom (128-bit CSPRNG) instead of a predictable MD5 of the login timestamp, and the cookie is issued with HttpOnly (blocks JavaScript access, preventing XSS-based session hijacking) and SameSite=Strict (blocks all cross-site request forgery, including top-level navigation from external links) flags.
Interactive UI Mockup — live preview of the Freetz-EVO web interface (no device needed)
New packages¶
| Package | Description | Status |
|---|---|---|
| aria2 / AriaNg | Multi-protocol download utility (HTTP, FTP, BitTorrent, Metalink) with a full web UI (AriaNg) and CGI integration. | EVO only |
| rTorrent 0.16.7 / ruTorrent 5.2.10 | Feature-rich BitTorrent client with a complete web interface, CGI backend, and config editor. | EVO only |
| aMUTorrent 3.5.0 | Static web frontend compatible with Transmission-style RPC backends. | EVO only |
| flood-for-transmission 1.0.1 | Static Transmission frontend integrated as selectable option in the Transmission package menu. | EVO only |
| transmission-web-control (commit snapshot) | Static Transmission Web frontend. | EVO only |
| Transmissionic web UI 1.8.0 | Static Transmission frontend integrated in the Transmission package menu. | EVO only |
| TrguiNG web 1.5.1 | Static Transmission frontend integrated in the Transmission package menu. | EVO only |
| freetz_proxy | Lightweight CGI HTTPS↔HTTP reverse proxy and index gateway, with HTML/CSS/JS URL rewriting and CDN proxying. Accessible via MyFRITZ! and from the internet without port-forwarding. When included, the Fritz logo and the AVM user menu gain direct links to the Freetz menus (through the proxy). | EVO only |
| Nginx 1.29 | High-performance HTTP/reverse-proxy server with MIPS/ARM cross-compilation fixes and optional externalization. | EVO only |
| PHP 8.4 / 8.5 | Modern PHP interpreter with multi-version selection (5.6 legacy, 8.4, 8.5), bzip2, libxml2, libatomic support. | upstream has PHP 5.6 only |
| QuickJS (2026-03-23 git snapshot) | Lightweight embeddable JavaScript engine, packaged with qjs and optional qjsc compiler support. |
EVO only |
| Python 3.14 | Python 3.14.3 with zip-importer fix, patchelf RPATH support, and build scripts for external deployment. | upstream has 3.14 too |
| python3-* (58 modules) | New Python 3 third-party packages: aiodns 4.0.0, aiohttp 3.13.3, aiohttp-asyncmdnsresolver 0.1.1, aiohttp-fast-zlib 0.3.0, aiohappyeyeballs 2.6.1, aiosignal 1.4.0, annotatedyaml 1.0.2, async-timeout 5.0.1, attrs 26.1.0, av 16.0.1, audioop-lts 0.2.1, bcrypt 3.2.2, brotli 1.2.0, cffi 1.17.1, charset-normalizer 3.4.6, ciso8601 2.3.3, dateutil 2.9.0.post0, dbus-fast 4.0.0, faust-cchardet 2.1.19, fnv-hash-fast 1.6.0, fnvhash 0.2.1, frozenlist 1.8.0, grpcio 1.78.0, grpcio-reflection 1.78.1, grpcio-status 1.78.1, h11 0.16.0, ha-ffmpeg 3.2.2, httpcore 1.0.9, httpx 0.28.1, idna 3.11, lru-dict 1.4.1, lxml 6.0.2, markupsafe 3.0.3, multidict 6.7.1, numpy 2.4.3, pandas 3.0.1, pillow 12.1.1, pip 26.0.1, propcache 0.4.1, psutil 7.2.2, pycares 5.0.1, pycparser 3.0, pycryptodome 3.23.0, pymicro-vad 2.0.1, pynacl 1.6.2, pyspeex-noise 2.0.0, pyturbojpeg 2.2.0, pyyaml 6.0.3, setuptools 82.0.1, six 1.17.0, voluptuous 0.16.0, webrtc-models 0.3.0, yarl 1.23.0, zeroconf 0.148.0, python3-certifi 2025.10.5, python3-ifaddr 0.2.0, python3-mashumaro 3.17, python3-orjson 3.10.7, typing_extensions 4.15.0. Of which, pure-Python runtime modules (no compiled extensions) are: aiohappyeyeballs, aiosignal, async-timeout, attrs, charset-normalizer, dateutil, fnvhash, h11, idna, pycparser, six, voluptuous, certifi, ifaddr, mashumaro, typing_extensions. Build-time tooling (not required at runtime): pip, setuptools. |
EVO only |
| ttyd 1.7.7 | Web-based terminal server: exposes any shell command over WebSocket; CGI page embeds a full xterm.js terminal with 7 themes, fullscreen, search, font-size controls, and canvas renderer. | EVO only |
GitHub CLI (gh) 2.83.2 |
GitHub CLI tool with Go host-tool integration, allowing GitHub API interaction from the FritzBox. | EVO only |
| util-linux | Dual-version support (2.27.1 / 2.41) with Disk Tools category and utilities like lsblk, fdisk, blkid. |
upstream has 2.27.1; EVO adds 2.41 |
| elFinder 2.1.66 | Full-featured web-based file manager for the FritzBox with enhancements: drag-and-drop UI, PHP connector (squashfs-safe), FTP remote volumes, video preview (with complete seek back and limited seek forward features), Movie plugin (scaping metadata from TMDb, OMDb, IMDb, Wikipedia; specific for Freetz-EVO), MediaInfo plugin (specific for Freetz-EVO), VLC plugin (specific for Freetz-EVO), unrar/7-Zip support, optional themes with theme selection plugin (specific for Freetz-EVO), multilingual (de/en/it/…), better status bar (specific for Freetz-EVO). | EVO only |
| MediaInfo / libmediainfo / libzen / libxmlrpc | Media file analysis tool with full library stack; reports codecs, bitrates, resolution, and metadata. | EVO only |
| proc-ps | Improved ps replacement backed by procps-ng with richer process information output. |
merged upstream |
| cpulimit 0.2 | Limits the CPU usage of a process to a given percentage; prevents runaway processes from overloading the device. | package improvement |
| microperl 5.38 | Minimal Perl 5.38.2 interpreter (alongside legacy 5.10.1) with full stub library set for embedded use. | upstream has 5.10.1; EVO adds 5.38.2 |
| zip 3.0 (infozip) | Standard zip archiver for creating ZIP archives directly on the device. |
merged upstream |
| gdb 17.1 | GNU Debugger version 17.1 for on-device debugging of binaries and crash analysis. | EVO only for 17.1 (upstream has 6.8/7.9.1) |
| patchelf (target) | ELF binary patcher for fixing RPATH and dynamic linker paths on cross-compiled binaries. | merged upstream |
binutils-tools (c++filt, elfedit, nm, objdump) |
Additional binutils utilities for binary inspection and symbol demangling on the device. | merged upstream |
| libnettle | Low-level cryptographic library (AES, SHA, RSA) used by GnuTLS and other packages. | upstream has nettle |
| libzen | Helper library required by MediaInfo for portable C++ utilities. | EVO only |
| libxmlrpc | XML-RPC library for rTorrent's SCGI/RPC interface; host tool gennmtab moved to make/host-tools. |
EVO only |
| libwebsockets 4.3.9 | Canonical C WebSocket library; optional SSL/TLS support via OpenSSL. | EVO only |
| json-c 0.17 | Lightweight JSON parser/serialiser library. | EVO only |
| libcares (c-ares) | Asynchronous DNS resolver library used by aria2 and curl. | EVO only |
| libjemalloc 5.3.0 | General-purpose allocator replacing uClibc malloc; required by aria2 to avoid SIGFPE on MIPS/uClibc-1.0.57. | EVO only |
| libtcmalloc_minimal (gperftools) | Thread-caching allocator from gperftools; low-overhead alternative to the system allocator. | EVO only |
| libprofiler (gperftools) | CPU profiler from gperftools; co-installed with libtcmalloc_minimal. | EVO only |
| libssl (OpenSSL) | OpenSSL SSL/TLS library; legacy provider module legacy.so added for OpenSSL 3.x compatibility (deprecated algorithms via provider API). |
EVO only |
| openlibm | Portable standalone C math library (libopenlibm.so) for consistent libm behavior across platforms and toolchains. |
EVO only |
| tflite-micro (TFLM) 20260318 | TensorFlow Lite for Microcontrollers: static library (libtflm.a) for on-device ML inference. Builds the full TFLM kernel set (conv2d, depthwise conv, LSTM, softmax, fully connected, etc.) from the official flat-source-tree generator. |
EVO only |
| llama.cpp b8575 | CPU-only LLM inference engine for running quantized GGUF language models on-device (no GPU). Includes llama-cli (interactive inference), llama-server (OpenAI-compatible REST API on port 8080), llama-quantize (model quantization), and optional tools (llama-bench, llama-perplexity, llama-tokenize, llama-imatrix, llama-gguf-split, llama-tts, llama-mtmd-cli). Models stored on USB/NAS storage. Shared libraries (libllama.so, libggml*.so). |
EVO only |
For a full description of freetz_proxy, see docs/make/freetz-proxy.md.
Python 2 third-party modules fix¶
Added python-pip for python2. All 13 python-* cross-compilation modules (python-bjoern, python-cffi, python-cheetah,
python-pycurl, python-pycryptodome, python-pyopenssl, etc.) were broken during cross-compilation
due to missing environment variables. Freetz-EVO fixes python-module-macros.mk.in by properly
setting CC, CXX, LDSHARED, CFLAGS, PYTHONPATH, and build_ext --library-dirs to point
to the target staging directory instead of the host.
Enhanced packages¶
| Package | Enhancement |
|---|---|
| curl | Added CA-bundle toggle option; rTorrent uses the curl CA bundle for HTTPS validation. |
| transmission | Added integrated static frontend selectors in the Transmission submenu (flood-for-transmission, TrguiNG web, Transmissionic web UI, transmission-web-control), with package-level installation under /usr/mww/*. |
busybox (httpd) |
Added support for HTTP Range header handling for CGI responses, enabling partial-content workflows with CGI-backed endpoints. |
| pcre | Fixed parallel install race condition; removed stray dev/test files; fixed double-indirection via $(PKG) causing stray root symlinks; JIT disabled for kernel 2.6.39.3. |
| pcre2 / libpcre2-posix | Added select FREETZ_LIB_libpcre2_posix to FREETZ_LIB_libpcre2 (posix wrapper is always built alongside pcre2-8); EXTERNAL_FREETZ_LIB_libpcre2_posix changed to default y so libpcre2-posix.so.3.0.7 is automatically externalized. |
| libyaml | Fixed broken find "$FILESYSTEM_MOD_DIR/..." pattern in external.files (replaced with ${FREETZ_LIBRARY_DIR}/libyaml-0.so.2.0.9, matching the working pcre2 approach); EXTERNAL_FREETZ_LIB_libyaml changed to default y so it is auto-enabled when libyaml is selected. |
| iptables | Fixed missing $ in external.files for VERSION_KERNEL4 conditions, preventing broken externalization. |
| ffmpeg | Fixed missing $ in external.files for VERSION_ABANDON condition, preventing broken externalization. |
| fwmod | Augmented Module.symvers with inter-module CRC symbols before the depmod check; pre-existing AVM inter-module symbol version disagreements are now ignored to avoid false build failures. |
| p7zip | Uses FREETZ_RPATH for correct library path at runtime (merged upstream as PR #1433). |
| socat | Fixed posix_memalign for old uClibc; added VSOCK compatibility for kernels < 4.8 (merged upstream). |
| bzip2 | Library porting for PHP dependency chain (merged upstream). |
| sqlite | Disabled math functions for uClibc 0.9.28/29 compatibility (merged upstream as PR #1346). |
| iconv / libiconv | Forced ABANDON version for uClibc 0.9.28 compatibility. |
| unrar | Variable naming fix and version bump (merged upstream as PR #1384). |
| patchelf | Synced host and target tools; used for RPATH fixing in Python and GCC toolchain. |
| binutils | Fixed RPATH; disabled for armeb; c++filt / elfedit added (merged upstream). |
| ldd | Bumped to version matching current uClibc toolchain (merged upstream). |
| RRDTool | aarch64 support; no border fix for v1.2; no v1.2 without libart_lgpl (merged upstream). |
| libatomic | Externalization with dynamic versioning for PHP dependency (merged upstream). |
| PSL (libpsl) | Uses crosscompiling Python tool instead of host Python. |
| glib2 | Meson cross-build fixes: normalized cross-file tool keys and forced host Python for Meson internal generators to avoid target python3 execution. |
| Disk tools | Updated dosfstools, e2fsprogs, gptfdisk, hdparm, util-linux, and parted (porting, packaging, and menu/externalization improvements). |
CI / tooling¶
| Feature | Description |
|---|---|
| make_package workflow | Advanced GitHub Actions workflow for per-package build testing with matrix parallelism and detailed failure diagnostics. |
| sync-upstream workflow | Automated workflow to merge upstream Freetz-NG changes into Freetz-EVO on a schedule. |
| AI translation | Automatic translation of web UI labels to foreign languages via LLM, with curated override cache. |
| ssh_firmware_update.py | Python tool to flash a Freetz firmware image to a FRITZ!Box over SSH/SCP, emulating the web update process with interactive/batch modes, progress bars, dry-run and debug options. Merged upstream. |
| make_progress_monitor.sh | Bash script to monitor Freetz cross-compilation build progress in real time (run alongside make in a second terminal). Merged upstream. |
| sync-upstream-manual.sh | Interactive script to merge upstream Freetz-NG changes into Freetz-EVO on demand, with --dry-run, --diff, and --log modes. See docs/SYNC_UPSTREAM.md. |
Basic infos:¶
- A web interface will be started on port :81, credentials:
admin/freetz - Default credentials for shell/ssh/telnet access are:
root/freetz - For more see: ircama.github.io/freetz-evo
Requirements:¶
- You need an up to date Linux System with some prerequisites.
- Or download a ready-to-use VM like Gismotro's Freetz-Linux (user & pass:
freetz). - There are also Docker images available like pfichtner-freetz (README).
Clone the main branch:¶
Or clone a single tag:¶
Install prerequisites:¶
Build firmware:¶
Flash firmware:¶
Update freetz firmware via SSH:¶
Show GIT states:¶
Delete local changes:¶
Update GIT:¶
Sync with upstream Freetz-NG:¶
tools/sync-upstream-manual.sh # interactive merge
tools/sync-upstream-manual.sh --log # show pending upstream commits
tools/sync-upstream-manual.sh --diff # show diff with upstream
tools/sync-upstream-manual.sh --dry-run # test merge without pushing
See docs/SYNC_UPSTREAM.md for full details.
Checkout old revision:¶
Checkout another branch:¶
Mirrors:¶
Documentation:¶
See https://ircama.github.io/freetz-evo/ (or docs/).
Testing Documentation changes¶
Language: This repository uses English as its primary language for code, documentation, commit messages, and issues.
License¶
This repository contains two distinct components under different licences:
-
Freetz-NG base (all content inherited from the upstream Freetz-NG project) is licensed under the GNU General Public License v2.0 (GPL-2.0). See COPYING for the full GPL-2.0 text.
-
Freetz-EVO extensions (all additions, modifications, and new packages introduced by this fork) are licensed under the European Union Public Licence v1.2 (EUPL-1.2). See LICENSE for the full EUPL-1.2 text.
-
Reuse of Freetz-EVO-original files: when files that are original to Freetz-EVO (e.g., package makefiles or other code not derived from upstream Freetz-NG) are reused in other projects, including upstream, their licence remains EUPL-1.2. Reusers should keep the original copyright/licence notices and clearly indicate that those specific files are under EUPL-1.2.
The EUPL-1.2 and GPL-2.0 are explicitly compatible: the EUPL-1.2 Appendix lists GPL v.2 as a Compatible Licence under Article 5. When distributing the combined work, it may be distributed under the terms of the GPL-2.0 via the EUPL-1.2 compatibility clause.