## 1. Project Overview & Quickstart (RaspAP/LICENSE)
# LICENSE
Open-source repository RaspAP/LICENSE
### Repository Details
- **Repository:** [RaspAP/LICENSE](https://github.com/RaspAP/LICENSE)
- **Primary Language:** Code
*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*
## 2. Official Technical Reference & Guides (RaspAP/website)
## File: docs/blog/posts/debian-13-trixie.md
---
date:
created: 2025-09-27
title: Debian 13 "trixie" support is here
linkTitle: Debian 13 "trixie" support is here
authors:
- billz
---
Debian 13 "trixie" was released on August 9th of this year, marking the latest stable release of the universal operating system that forms the foundation for countless Linux distributions. This release brings [many significant updates](https://www.debian.org/releases/trixie/release-notes/whats-new.en.html), including the Linux 6.12 LTS kernel.
For Raspberry Pi users, Debian 13's release is particularly relevant as Raspberry Pi OS is built on Debian. Early adopters have already begun testing the next version of Raspberry Pi OS trixie. With RaspAP now supporting Debian 13, users can take advantage of the latest system improvements and security enhancements for their wireless routers.
If you'd like to join these early adopters, this post has step-by-step instructions for upgrading your OS.
## Upgrading from bookworm
You can upgrade an existing bookworm (Lite) image to trixie by following the steps provided below, which were adapted from OS architect Simon Long's [post](https://forums.raspberrypi.com/viewtopic.php?t=389477). Debian's [official guidance](https://www.debian.org/releases/trixie/release-notes/upgrading.en.html) on upgrading from bookworm is also worth a read before diving in.
!!! warning "Important"
The recommended and best approach will _always_ be to start with a clean trixie image and then install RaspAP, plus any other programs. You shouldn't attempt to upgrade any system that you rely on, and it's strongly advised to make a full backup before performing an upgrade. Bear in mind that, while this upgrade process has been tested repeatedly, it may still result in a broken image.
1. Start with a clean bookworm (Lite) image and update your system's package list, then upgrade the kernel, firmware and installed packages to their latest versions:
```
sudo apt update
sudo apt full-upgrade
```
2. Update the `apt` configuration for trixie by editing `/etc/apt/sources.list`. Change every reference to "bookworm" with "trixie". Do the same with `/etc/apt/sources.list.d/raspi.list`.
3. Run an `apt` update with the new package lists:
```
sudo apt update
```
4. Upgrade to trixie by executing the following:
```
sudo apt full-upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confnew" --purge --auto-remove
```
On a newer Pi model with a fast connection, the trixie upgrade takes about 10 minutes to complete. While it's running, you'll be asked to decide whether to restart services — answer "yes" to this prompt.
5. Finally, reboot your system:
```
sudo reboot
```
With the upgrade complete, reconnect to your device and confirm the new OS version by executing the following:
```
lsb_release -a
Distributor ID: Debian
Release: 13
Codename: trixie
```
You can now proceed with installing the latest release of RaspAP.
## Installing RaspAP
For Debian 13 early adopters, RaspAP is available to install via the [Quick installer](https://docs.raspap.com/quick). Simply invoke the installer as you would normally:
```
curl -sL https://install.raspap.com | bash
```
The [version 3.4.3 release](http://github.com/RaspAP/raspap-webgui/releases/tag/3.4.3) includes updates to the installer and RaspAP's core with support for trixie. These updates are backwards compatible with bookworm and bullseye, so you can continue using these distributions with RaspAP.
Custom OS images, Docker containers and torrent files will be available after the official release of Raspberry Pi OS 64- and 32-bit (Lite) trixie.
## What's changed?
The biggest change in RaspAP under trixie is the move from `php-cgi` to `php-fpm` as the default PHP handler.
In Debian 13 with PHP 8.4, the `php-cgi` runtime, when used with web servers like lighttpd, applies stricter permission limits by default, which affects certain applications. Notably, this prevents RaspAP from interacting with system tools such as `iw`, `ip`, or `wpa_cli` — all of which are needed to fetch details about the Linux networking environment. This results in errors like the following:
```
The "no new privileges" flag is set, which prevents sudo from running as root.
Cannot open netlink socket: Address family not supported by protocol.
```
Even if sudo allows a given command for a specific user (usually, `www-data` under lighttpd), the `php-cgi` process doesn’t have the capabilities to execute it.
For optimal compatibility and performance, RaspAP has moved to `php-fpm` (the FastCGI Process Manager) in place of `php-cgi`. Debian's own PHP packaging strongly emphasizes `php-fpm` as the preferred runtime for most use cases due to its superior performance, security, and configurability.
### Switching to php-fpm
RaspAP's installer handles this process for you automatically.
If you previously ran `php-cgi` under lighttpd, you can switch to `php-fpm` by following these manual steps:
```
sudo apt udpate
sudo apt install php8.4-fpm
```
Next, enable its systemd service and update the web server configuration to use the FPM module:
```
sudo systemctl enable --now php8.4-fpm
sudo lighty-enable-mod fastcgi-php-fpm
```
The latter instructs lighttpd to pass requests to the FPM socket (typically located at `/run/php/php8.4-fpm.sock`).
## Discussions
Questions or comments about Debian 13 and our move to PHP-FPM? Join the [discussion here](https://github.com/RaspAP/raspap-webgui/discussions/).
---
## File: docs/blog/posts/kali-linux-2025.md
---
date:
created: 2025-11-30
title: Say "hello" to Kali Linux 2025 support
linkTitle: Say "hello" to Kali Linux 2025 support
authors:
- billz
---
Kali Linux 2025.3, [released](https://www.kali.org/blog/kali-linux-2025-3-release/) in September, represents the latest iteration of Offensive Security's premier penetration testing platform. This release continues Kali's evolution as the go-to distribution for security professionals, bringing updated toolsets and kernel improvements built on Debian.
Kali Linux support has been a longstanding request from RaspAP users, so we're excited to announce that RaspAP now extends beta support to the latest Kali 2025.3 release. This integration opens up powerful possibilities for security researchers and penetration testers who want to combine RaspAP's wireless routing capabilities with Kali's extensive security toolkit.
## Why Kali with RaspAP?
Kali Linux is specifically designed for digital forensics and penetration testing, shipping with hundreds of security-focused tools out of the box. When paired with RaspAP on a Raspberry Pi, you get a portable, low-power platform that's ideal for wireless security assessments.
Common use cases include:
- **Wireless penetration testing**: Create controlled test environments for evaluating WPA/WPA2/WPA3 security implementations
- **Rogue access point detection**: Deploy monitoring stations to identify unauthorized wireless networks
- **Packet analysis**: Capture and analyze wireless traffic in controlled testing scenarios
- **Client isolation testing**: Verify wireless client security controls and network segmentation
- **Evil twin assessments**: Test organizational defenses against access point spoofing attacks
With RaspAP handling the wireless infrastructure, you can focus on running Kali's security tools like `aircrack-ng`, `wifite`, `bettercap`, and `reaver` without worrying about the underlying network configuration.
## Installing RaspAP on Kali
Getting started with RaspAP on Kali Linux 2025.3 is straightforward. The [Quick installer](https://docs.raspap.com/quick) works seamlessly with Kali's Debian-based architecture:
```
curl -sL https://install.raspap.com | bash
```
The installer automatically detects Kali Linux and configures all necessary dependencies, including PHP-FPM support for optimal performance.
!!! Tip "Testing environment"
RaspAP with Kali Linux should only be used in authorized testing environments. Always ensure you have proper permission before conducting any wireless security assessments, and limit testing to networks under your direct control.
## Getting started
If you're already running Kali Linux 2025.3 on your Raspberry Pi, simply invoke the Quick installer to add RaspAP. For those starting fresh, download the latest [Kali Linux ARM image](https://www.kali.org/get-kali/#kali-arm) for Raspberry Pi, flash it to your SD card, and then install RaspAP.
Custom Kali configurations and testing scenarios will vary depending on your specific use case, but RaspAP provides the flexible wireless foundation you need for professional security work.
## Discussions
Questions or comments about Kali Linux support? Join the [discussion here](https://github.com/RaspAP/raspap-webgui/discussions/).
---
## File: docs/blog/posts/led-traffic.md
---
date: 2025-04-20
title: Building a realtime network traffic LED indicator
linkTitle: Realtime Traffic Inidicator
authors:
- billz
---
_Photo by [Alex King](https://unsplash.com/@stagfoo?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) on [Unsplash](https://unsplash.com/photos/turn-on-traffic-light-lbwjS4QdpNU?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash)_
LED traffic indicators are common on most networking devices, from home routers, to commercial equipment and Ethernet-equipped Raspberry Pis.
The Ethernet standards (IEEE 802.3 and related) don’t define a standard for activity lights. Therefore, the blinking patterns observed on these devices are completely up to the manufacturer. Most hardware LEDs briefly flash each time a packet is sent or received, with a steady green (or amber, blue, etc.) light indicating that a connection is established with no active transfer happening at the moment.
As visual cues, they’re useful indicators of a network’s normal function without requiring software or other tools.
## Transforming static software LEDs
RaspAP uses software LEDs to indicate the operational status of many services, system resources and interfaces. Like hardware LEDs, they’re visual indicators designed to provide a quick, at-a-glance status of some part of the system.
These software LEDs, while functional, are mostly static. That is, they display a fixed green, amber or red color to indicate the status of some aspect of the system. What if, like the hardware LEDs, they could be transformed to indicate network traffic over a given interface?
## Design goals
Manufacturers implement hardware LEDs by connecting them to the router’s processor, which monitors network traffic and triggers the appropriate light patterns based on data flow through the device’s ports.
Network-like blinking needs responsiveness. Hardware routers often blink their LEDs at very high frequencies. This is possible due in large part to these devices being built with **application-specific integrated circuits (ASICs)** customized for tasks such as these, in addition to routing packets and performing all the other functions of a typical router.
By contrast, the Raspberry Pi family of devices use general-purpose ARM processors. This gives them much greater versatility, allowing the same hardware to serve many different purposes based solely on the software it runs. The tradeoff, of course, is performance when compared with an ASIC-based device.
A central goal for this implementation, therefore, is to strike a balance between real-time feedback and resource efficiency. The components that could be used to build a dynamic software LED should be as lightweight as possible, and not hinder the normal operation of RaspAP, the browser, or the host device itself.
## Putting it all together
With these goals in mind, I’ve settled on a technique for monitoring network traffic that’s equal parts lean and extremely fast. A tradeoff is made here between responsiveness and resource use. The software LED won’t update as quickly as its hardware counterpart, but it’s still fast enough to provide useful visual feedback to an end user.
By necessity, the monitor will run as a background process that’s daemonized to perform a task at a specific interval. It should also execute at system boot and be controllable via a systemd unit file. This will satisfy the backend or server portion.
On the front-end, the web application will be modified to poll values supplied by the daemon and update the LEDs in the UI accordingly. Heavy DOM manipulations are strictly avoided and a reasonable interval value will be used to transform the static LEDs into dynamic ones.
### Step 1: Monitor network activity
Linux gives us several ways to achieve this. Either `cat /proc/net/dev` or `ifconfig wlan0` could be used to get TX/RX byte counters for a given network interface. With the former, capturing byte counters for `wlan0` is done like so:
```bash
$ cat /proc/net/dev | grep wlan0
```
This returns output like the following:
```
wlan0: 86229952 404578 0 0 0 0 0 1524 893942159 826913 0 0 0 0 0 0
```
Reading from `/proc/net/dev` is extremely low-cost — it's just a file read. It can be safely polled **10–20 times per second** (every 50–100 ms) with **minimal system impact**, especially on a Raspberry Pi. This is comparable to how `top`, `htop`, or system monitors work.
### Step 2: Poll and calculate activity
A small program is required to read the current TX/RX bytes from `/proc/net/dev` at a fixed interval (let’s say every 100ms), read the next value and calculate the difference. This is a persistent process written in compiled C that runs in the background. In the next step, I’ll create a `systemd` unit file that uses this program as the basis for a service.
The contents of this [source file](https://github.com/RaspAP/raspap-webgui/blob/master/installers/raspap-network-monitor.c), which I’ve named `raspap-network-monitor.c`, is shown below:
```
/* Detailed source-code truncated for AI context efficiency. */
```
There are a couple of things worth noting here. First, the monitored interface is set by passing a value for the first argument (`*iface = argv[1]`). The interface value is then used in `read_interface_bytes()` to fetch the current TX/RX byte values. From there, it’s a simple matter of calculating the difference from the previous ones.
The second item of interest is the location this value is written to, and how it’s done. `/dev/shm/` is a **temporary file storage** (tmpfs) that resides in RAM. In this context, “shm” is a reference to shared memory. You can see it on your system with mount or df, like so:
```bash
$ df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
tmpfs 454M 16K 454M 1% /dev/shm
```
Originally designed for inter-process communication (IPC), `/dev/shm/` is often used for temporary **high-speed files** (e.g., logs, metrics), RAM-based caching and named memory blocks for C/C++ or other low-level programs. Read/write operations are extremely fast with almost no I/O latency, making it ideal for this application. The contents of tmpfs are lost on reboots, but this isn’t a concern.
Finally, in Bash one could simply use `echo "$total_diff" > "$TMPFILE"` to write out to tmpfs. However, due to timing issues, the file can be **read mid-write** (i.e., during echo in the shell script). On the front-end, this will often return an error such as `ERR_CONTENT_LENGTH_MISMATCH 200 (OK)`. Even if the response returns `200 OK`, the browser will throw an error because the response body didn’t match the declared length.
The solution is to instead write automically with a temp file and use `mv`. This is done in Bash like so:
```bash
tmpfile=$(mktemp /dev/shm/net_activity.XXXXXX)
echo "$total_diff" > "$tmpfile"
chmod 644 "$tmpfile"
mv "$tmpfile" "$TMPFILE"
```
Why does this work? The `mv` operation updates directory entries (inodes) which is a single, quick operation at the filesystem level. Atomicity refers to its **all-or-nothing execution**; there’s no intermediate state where the operation is partially complete. This ensures that the file is never in a partially written state.
### Step 3: Create a systemd service
In this step, a **systemd unit file** is created to autostart the script on boot. I’ve given it the descriptive name `raspap-network-activity.service`. The contents are below:
```bash
# Author: BillZ
[Unit]
Description=RaspAP Network Activity Monitor
After=network.target
[Service]
ExecStart=/bin/bash /etc/raspap/hostapd/network-activity.sh
Restart=always
RestartSec=2
User=root
[Install]
WantedBy=multi-user.target
```
The line `After=network.target` waits for networking to initialize. The script could reside in a location such as `/usr/local/bin/`, however by convention RaspAP consolidates other service files and scripts under `/etc/raspap/`.
With this done, the unit file is copied to its destination with `sudo cp raspap-network-activity.service /etc/systemd/system/`. Thereafter, enabling and starting the service is done with the following:
```bash
$ sudo systemctl daemon-reload # load new unit files
$ sudo systemctl enable raspap-network-activity.service
$ sudo systemctl start raspap-network-activity.service
```
A status check reveals that the daemon is operating as expected:
```bash
$ sudo systemctl status raspap-network-activity.service
● raspap-network-activity.service - RaspAP Network Activity Monitor
Loaded: loaded (/etc/systemd/system/raspap-network-activity.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-04-19 23:04:20 PDT; 2s ago
Main PID: 96370 (bash)
Tasks: 2 (limit: 768)
CPU: 583ms
CGroup: /system.slice/raspap-network-activity.service
├─96370 /bin/bash /etc/raspap/hostapd/network-activity.sh
└─96468 sleep 0.1
```
This completes the server-side portion of the network monitor.
### Step 4: Make it accessible to RaspAP
Web services like lighttpd and nginx cannot access files outside their web root due to the **security principle of least privilege**. That is, these services typically run as a non-privileged user (for example, ‘www-data’) with limited permissions. For security reasons, this user only has read access to the web root directory and its subdirectories.
This means that attempts to access files like `/dev/shm/net_activity` will result in a permissions error. There’s an easy fix for this, though. The file may be symlinked to a web-accessible path, like so:
```bash
$ sudo ln -sf /dev/shm/net_activity /var/www/html/app/net_activity
```
A potential downside here is this exposes an internal system path to the web. In this case, it’s a file under our direct control that only contains a single integer value. As a rule of thumb, this method should only be used if the symlinked file is read-only and doesn’t contain sensitive info.
With this done, JavaScript, PHP or indeed any language enabled by the web server can access this file from within the web root.
### Step 5: More polling (JavaScript)
Moving to the front-end, a JavaScript handler uses `fetch()` to get the latest value from the `/app/net_activity` file created in the previous step:
```javascript
function updateActivityLED() {
const threshold_bytes = 300;
fetch('/app/net_activity')
.then(res => res.text())
.then(data => {
const activity = parseInt(data.trim());
const leds = document.querySelectorAll('.hostapd-led');
if (!isNaN(activity)) {
leds.forEach(led => {
if (activity > threshold_bytes) {
led.classList.add('led-pulse');
setTimeout(() => {
led.classList.remove('led-pulse');
}, 50);
} else {
led.classList.remove('led-pulse');
}
});
}
})
.catch(() => { /* ignore fetch errors */ });
}
setInterval(updateActivityLED, 100);
```
This defines a constant `threshold_bytes set to 300`. What’s special about this value? The `network-activity.sh` script calculates a composite value based on the observed difference of TX and RX bytes on the interface being monitored.
Even on an idle network, small amounts of background multicast or broadcast traffic is often present. This can include things like ARP table maintenance or service advertisement (UPnP, Bonjour, mDNS, ZeroConf, and so on). Blinking an LED for *every* piece of observed network traffic is excessive and not particularly useful.
In testing, a value of 300 bytes seemed to strike a balance and filter low-level network traffic from, say, something a user of RaspAP might generate while connected to the interface.
When activity exceeds this threshold value, a class toggle is applied. The `setInterval(updateActivityLED, 100)` updates at 10 times per second. This isn’t excessive because, 1) the fetch is for a very small file in memory, and 2) the script does minimal parsing and DOM manipulation.
### Step 6: Add a dash of CSS
Next, we’ll need new `led-pulse` and `hostapd-led` classes to support the JavaScript handler:
```javascript
.led-pulse {
opacity: 0.3 !important;
}
.hostapd-led {
color: #28a745;
opacity: 1;
transition: opacity 0.05s;
}
```
This is fairly straightforward; a very short transition between the pulse and default LED state is applied. Keyframes or other CSS effects are avoided to keep things snappy.
### Step 7: Enable the LEDs in markup
The hostpad-led class is then simply added to the markup wherever a network activity LED is needed, like so:
```html
">
```
RaspAP has a total of three static network LEDs located in various parts of the application. These are used to indicate the status of the access point (AP), its associated interface and the operational state of the hostapd service.
## The results
With the implementation done, all that’s needed now is some network traffic. For testing, a client device is connected to the access point created by RaspAP. Thereafter, some moderate browsing is performed on the client and the results are observed in RaspAP’s web UI.
*A dynamic network traffic LED showing activity on wlan0.*
My overall impression of the new, dynamic network traffic LED is that it closely resembles its hardware counterpart. A 100ms interval (10 Hz) is actually on the low end of what’s considered “visibly responsive.” Despite this, I find it to be a surprisingly accurate and useful indicator.
**Update:** if you’d like to implement this in your own project, the source code is [available here](https://github.com/RaspAP/raspap-webgui/pull/1828).
## Discussions
Questions or comments about this implementation? How would you improve on it? Join the [discussion here](https://github.com/RaspAP/raspap-webgui/discussions/).
---
## File: docs/blog/posts/locales.md
---
date:
created: 2025-10-26
title: New multilingual support
linkTitle: New multilingual support
authors:
- billz
---
_Photo by [Jason Leung](https://unsplash.com/@ninjason?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/photos/white-neon-light-signage-on-wall-mZNRsYE9Qi4?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)_
We're glad to announce the release of [RaspAP 3.4.6](https://github.com/RaspAP/raspap-webgui/releases/tag/3.4.6) and Insiders 3.5.3, which bring comprehensive localization updates across five of our community's most popular languages. This release represents a significant milestone in making RaspAP accessible to users worldwide, with fully translated interfaces that now load automatically based on your browser's language preferences.
## New locale support
This latest release includes complete locale updates for the following:
- **Italian (it_IT)** - full Italian translation
- **Spanish (es_MX)** - full Spanish localization
- **German (de_DE)** - complete German translation
- **French (fr_FR)** - full French localization
- **Chinese (zh_CN)** - complete simplified Chinese translation
Each of these languages now features 100% coverage of RaspAP's interface, from basic settings to advanced configuration options. Every menu item, button label, help text, and system message has been carefully translated to provide a native experience for speakers of these languages.
## Locales baked in
RaspAP's [custom OS images](/quick-start), built using our specialized `pi-gen` [fork](https://github.com/RaspAP/pi-gen), now include the `locales-all` package by default. This package provides comprehensive locale data for all supported languages, ensuring that character encoding, date formats, number formatting, and other regional conventions work correctly across the entire system.
## What this means
In the past, users were required to manually generate a locale on their system to enable translations. Now, with locales baked in to our custom images, RaspAP will automatically display your preferred language without any special configuration.
This means that speakers of Spanish, French, German, Italian, Korean, and Chinese (simplified) will see RaspAP in their native language the moment they access the web interface. No trips to the system settings menu are required.
## How it works
RaspAP reads your browser's language preference settings in the `HTTP_ACCEPT_LANGUAGE` header. If your browser language matches one of our supported locales, the interface loads in that language immediately.
The system works out of the box on first boot. Behind the scenes, the application stores a "locale" cookie value to persist your preferred language across sessions.
You can still configure a different locale in the **System > Language** tab, as before.
## Getting involved
Our localization effort spans 24 languages and is managed centrally on [Crowdin](https://crowdin.com/project/raspap). Here you'll find our supported translations, recent activity, discussions and so on. You can get started by simply choosing the language you'd like to contribute to. Crowdin makes it easy to get involved as a translator, proofreader or QA specialist.
We've integrated [DeepL](https://www.deepl.com/en/translator) machine translations via their API, in addition to Crowdin's own predictive translations. This means you can get suggestions from one of the best available machine translators currently available.
For more info, see Crowdin's [walkthrough](https://support.crowdin.com/crowdin-intro/#translation-process) of the translation process.
## Discussions
Questions or comments about our multilingual support? Join the [discussion here](https://github.com/RaspAP/raspap-webgui/discussions/).
---
## File: docs/blog/posts/restapi.md
---
date: 2024-03-13
title: RESTful API challenge
linkTitle: RESTful API challenge
author: ([Bill Z](https://github.com/billz))
resources:
- src: "**.{png,jpg}"
title: "Image #:counter"
params:
byline: "Photo: Riona MacNamara / CC-BY-CA"
authors:
- billz
---
_Photo by [Clark Van Der Beken](https://unsplash.com/@snapsbyclark?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) on [Unsplash](https://unsplash.com/photos/white-and-black-heart-print-iphone-case-596baa0MpyM?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash)_
The developers at RaspAP have recently [rolled out](https://github.com/RaspAP/raspap-webgui/pull/1519) a new [RestAPI](https://docs.raspap.com/restapi/) based on the ultra-quick [FastAPI](https://fastapi.tiangolo.com/) framework. Support for an API has ranked high among requests from RaspAP’s users for quite some time. To mark this occasion (and also celebrate [Pi Day](https://en.wikipedia.org/wiki/Pi_Day)) we’re hosting a friendly challenge to see what kinds of creative applications developers can bake up with our brand-spanking-new RestAPI.
## Judging criteria
In terms of possible applications, anything goes. Points will be awarded by the judges for apps that are original, polished, visually appealing and have real-world utility. Integrations with other popular open source projects are a big plus.
## Prizes
Prizes, you ask? Why, yes of course. To make things interesting, we’ll be giving away **lifetime [Insiders](https://docs.raspap.com/insiders/)** access to the **top three entries**, plus **$50** to cover pi(e) and coffee expenses. See what we did there?
## Rules
The rules are straightforward:
1. All code must have an open source license and be publicly available.
2. One prize awarded per developer or team.
3. Multiple entries may be submitted. If selected, the best entry will be awarded (see #2).
4. Submit your entry by posting a link in the comments below.
## Getting started
Our [docs](https://docs.raspap.com/restapi/) have everything you need to get started. The RESTful API Challenge runs for 30 days, ending April 14th, 2024. Winners will be announced via this blog, [GitHub discussions](https://github.com/RaspAP/raspap-webgui/discussions), [Reddit](https://reddit.com/r/RaspAP), [Discord](https://discord.gg/KVAsaAR) and [X](https://x.com/rasp_ap).
## Discussions
Questions or comments the API challenge? Join the [discussion here](https://github.com/RaspAP/raspap-webgui/discussions/).
---
## File: docs/blog/posts/whats-new-2025.md
---
date:
created: 2025-09-22
title: What's new in 2025
linkTitle: What's new in 2025
authors:
- ruralmeltdown
---
_Photo by [Claudio Schwarz](https://unsplash.com/@purzlbaum?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash) on [Unsplash](https://unsplash.com/photos/white-and-red-train-in-tunnel-v2MJSgfBT70?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash)_
## Introduction
Welcome to the inaugural post for our new blog on our refreshed website! Have a read-through below to see what we've been up to this year. We look forward to hearing from you, whether it's a [feature request or bug report](https://github.com/raspap/raspap-webgui/issues), just to say "hi" in [Discord](https://discord.gg/KVAsaAR), or join our [Insiders](https://github.com/sponsors/RaspAP) for more features or to support our work.
## New website (now with a blog!)
If you've been to [raspap.com](https://raspap.com) before, you've probably noticed a brand-new look. The new site uses the [MkDocs framework](https://www.mkdocs.org) with the [SimpleAF](https://a3bagged.github.io/theme-test/) theme, which is based on Squidfunk's [Material for MkDocs](https://squidfunk.github.io/mkdocs-material). This new deployment aligns the website with our [documentation site](https://docs.raspap.com), which streamlines administration. It also easily enables us to have a [blog](/blog) now (which was previously hosted through Medium). We would love to hear from you if you have a blog post idea for how you're using RaspAP — just connect with us, or open a pull request in this site's [GitHub repository](https://github.com/RaspAP/raspap-website).
## Status page
We thought it would be useful to have a status page to communicate the availability of RaspAP's various services. We chose [Uptime Robot](https://stats.uptimerobot.com/TDu7wXbKue) for this as lets us monitor uptime, response time and log incidents if they occur. Please [add this site](https://stats.uptimerobot.com/TDu7wXbKue) to your bookmarks if you rely on RaspAP's resources.
[](/blog/assets/images/status-page.png)_(Click to view larger in new tab)_
## Tidying up documentation
If you haven't been to our [documentation site](https://docs.raspap.com) in a while, please check it out now. We've added things like:
- "Landing pages" to each of the major categories:
- [Get Started](https://docs.raspap.com/get-started)
- [Core Features](https://docs.raspap.com/features-core)
- [Experimental Features](https://docs.raspap.com/features-experimental)
- [Insiders](https://docs.raspap.com/features-insiders)
- Tabbed sections for pages that have "either/or" options; e.g.:
- [Docker setup](https://docs.raspap.com/get-started/docker)
- [SSL page](https://docs.raspap.com/features-core/ssl) (which also got quite an update to add detailed walkthroughs for various clients)
[](/blog/assets/images/ssl-tabs.png)_(Click to view larger in new tab)_
## New custom image downloads
We've made an effort to enable more people to download RaspAP's [pre-built OS images](/quick-start/#custom-os), particularly those with slow or unreliable internet connections. Starting with [v3.4.1](https://github.com/RaspAP/raspap-webgui/releases/tag/3.4.1), we've made available Torrent files for RaspAP's 64- and 32-bit image files. The downloads will still originate from GitHub, but are much easier to transfer, pause or resume using your preferred torrent client. Please connect with us if you still have issues downloading.
## Insider goals met
Earlier this year, **we met our [2nd Insiders Edition goal](https://docs.raspap.com/features-insiders/#1000-2nd-insiders-edition)** and **merged a big set of features into the main repository**! Thanks to this project's [sponsors](https://github.com/sponsors/RaspAP), we're able to allocate more time to develop and ship new features and bug fixes. This also means **we donated a record amount to the Raspberry Pi Foundation last quarter**. It was so significant that Open Collective, our fiscal sponsor, reached out to help us register the Foundation as a vendor. This will streamline our future giving and allow funds to be paid directly from our OC-managed balance.
## New features
Here's a rundown of the newest features you can start using straight away:
- [Firewall settings](https://docs.raspap.com/features-core/firewall/)
- [WPA3-Personal AP security](https://docs.raspap.com/features-core/ap-basics/#wpa3-personal)
- [802.11w Protected Management Frames](https://docs.raspap.com/features-core/ap-basics/#80211w)
- [Printable Wi-Fi signs](https://docs.raspap.com/features-core/ap-basics/#printable-signs)
- [Network diagnostics](https://docs.raspap.com/features-insiders/net-devices/#diagnostics)
- [Dynamic DNS](https://docs.raspap.com/features-core/dynamicdns/)
- [WireGuard kill switch](https://docs.raspap.com/features-core/wireguard/#kill-switch)
- [NTP Service](https://docs.raspap.com/features-core/ntp/)
## New contributors
Thank you and welcome to our newest contributors, we are grateful for their contributions over the last several releases:
- [@tulik](https://github.com/tulik): Fix: add validation for CSS color formats in `getColorOpt` function
- [@YichaoXu](https://github.com/YichaoXu): Fix: mitigate UUF vulnerability by escaping entity with `escapeshellarg`
- [@Dhanus3133](https://github.com/Dhanus3133):
- CI builds 32 bit and 64 bit images, and
- Add common script to configure public and Insiders builds
- [@francescoforcellini](https://github.com/francescoforcellini): Feature suggestion: Refactor `dhcpd.conf` handling with `updateDhcpdConfig()`
- [@no-sec-marko](https://github.com/no-sec-marko): Add interface validation and improve shell argument escaping
- [@danidemingo](https://github.com/danidemingo): Feature suggestion: User-configurable interface for WG PostUp/PostDown rules
- [@RuralMeltdown](https://github.com/rurarlmeltdown): helped with the new website, blog, and docs tidying; as well as some minor tweaks to the RaspAP base code
## Looking ahead
All currently planned milestones and goals can be found on our [GitHub project board](https://github.com/orgs/RaspAP/projects/2). If you would like to add, fix or change something, please feel free to create a GitHub issue (in the respective repository, of the relevant type), and we'll review it with you and get it slotted into the pipeline.
One item that's high on our list is [supporting Debian Trixie](https://github.com/RaspAP/raspap-webgui/issues/1930). Users are encouraged to connect with us if they'd like to help test RaspAP with the latest Debian distribution.
It is worth noting that (most) new features land in [Insiders](https://docs.raspap.com/features-insiders) first, which you are encouraged to join, for as little as $10 USD per month.
## Discussions
Questions or comments? Join the [discussion here](https://github.com/RaspAP/raspap-webgui/discussions/).
---
## File: docs/blog/index.md
---
hide:
- footer
---
# Blog
All posts are listed below in reverse chronological order.
---
## File: docs/awesome.md
The open source community is doing amazing things with RaspAP. Just when we think we've seen it all, something new and unexpected comes along. RaspAP-powered projects are popping up all over the globe.
Do you have an innovative project, experiment or tutorial you've developed with RaspAP? Showcase your resource here!
## Projects
- [A customizable digital holographic microscope](https://www.hardware-x.com/article/S2468-0672(24)00063-4/fulltext) - a compact, low-cost holographic microscope with RaspAP used for remote access
- [Arduino mobile development with Blynk](https://techexplorations.com/so/mobile-development-with-blynk/) - course using Blynk platform for building projects with Arduino Nano 33 IoT and ESP32
- [Autonomous Weather Station](https://www.sti5d.com/src/projects/lpo) - a weather station capable of measuring environmental data in real-time and uploading it to a server using an ESP8266 and a Raspberry Pi
- [Build a portable Jellyfin media server/router for offline movie streaming](https://18gi0n.org/webpages/travelrouter.html) - with traffic routed through a VPN via RaspAP
- [Build a Raspberry Pi APRS Tracker using Direwolf](https://brandonb.ca/raspberry-pi-aprs-tracker) - an amateur radio-based system for real time digital communications with RaspAP
- [Build a Raspberry Pi dual-WiFi VPN router with WireGuard](https://www.christopherlouvet.com/posts/raspberry-pi-dual-wifi-wireguard-vpn-apple-tv/) - for use with Apple TV
- [Butter Box](https://likebutter.app/docs/build-a-box) - an app store, encrypted chat & more, available over WiFi from an off-grid Raspberry Pi
- [Connecting a Pi, iPad, HoloLens, and Magic Leap ML1](https://www.mikebuss.com/posts/ipad-hololens-rpi-part-1) - communication between these devices in places with unreliable WiFi
- [Et si on Utilisait Minecraft au Collège ?](https://mathix.org/linux/archives/17928) - Using Minecraft + RaspAP in education
- [FreedomEV](https://github.com/jnuyens/freedomev/) - Unlocking the full potential of Linux on your EV ([RaspAP on a rooted Tesla](https://imgur.com/D8XlRkZ.jpg))
- [Hacking my Air Purifier](https://joshspicer.com/hack-air-purifier) - Monitoring network traffic using RaspAP with a "smart" air purifier
- [Ham Radio Winter Tent Camping | Winter Field Day](https://youtu.be/jCfdIonDL8I?t=534) - Preparedness & off-grid communications
- [iTex Gloves](https://www.mdpi.com/1424-8220/23/6/2877/htm) - an in-home evaluation of an e-textile glove system for tele-assessment of Parkinson’s Disease
- [Low-cost wireless endoscope camera](https://afju.springeropen.com/articles/10.1186/s12301-021-00127-z) - a preliminary report
- [OpenFJ is multi-functional appliance made for adventure travel](https://openvino.atlassian.net/wiki/spaces/OPENVINO/pages/310018055/OpenFJ+OpenSJ) - OpenFJ is intended for use in a Toyota FJ Cruiser, OpenSJ is the version for the ocean sailing vessel Sojourner
- [Pool pH Level and Temperature Wifi Monitor](https://deanfourie.me/pool-monitor/3/) ([Project photo](https://imgur.com/a/eGVyTUf))
- [Raspberry Pi Construction Cam](https://darkspirit510.de/2021/10/raspberry-pi-construction-cam/)
- [Routour](https://archfx.me/routour) - Building the ultimate travel router
- [Secure Scuttlebutt Weather Station](https://rickcarlino.com/2019/04/06/a-weather-station-with-raspberry-pi-and-secure-scuttlebutt-html.html) - Replicating, peer-to-peer database of weather log data
- [Smart Window Opener](https://www.hackster.io/Infineon_Team/smart-window-opener-dd5fba) - Upgrade your window from a lame one to an awesome smart one
- [Subsea resident autonomous underwater vehicle (AUV)](https://discuss.bluerobotics.com/t/subsea-resident-auv/9771) - RaspAP used for wireless communication with the AUV's dock
- [TravelPlex](https://medium.com/@laiello/creating-a-portable-plex-server-travelplex-2fea8c0e5d84) - a portable, offline 1TB Plex shared media server
- [V1 Engineering](https://www.v1engineering.com/dip-a-toe-in-the-pool-v1pi/) - RPi-powered OctoPrint, CNC.js, CNC control from your phone
- [WiPi – A RaspberryPi Hotspot To Go](https://lucasjhall.github.io/2020/08/09/wipi-a-raspberrypi-hotspot-to-go.html) - AP & portable local network with a
Sixfab cellular HAT, built for travel
## Tutorials
- [5 minutes pour créer son hotspot Wifi sur Raspberry Pi](https://bentek.fr/creer-hotspot-wifi-sur-raspberry-pi/)
- [Adafruit: RaspAP WiFi Configuration Portal](https://blog.adafruit.com/2016/06/24/raspap-wifi-configuration-portal-piday-raspberrypi-raspberry_pi/)
- [Build a Raspberry Pi dual-WiFi VPN router with WireGuard to use with Apple TV](https://www.christopherlouvet.com/posts/raspberry-pi-dual-wifi-wireguard-vpn-apple-tv/)
- [Build a Portable Offline Chat Server with a Raspberry Pi](https://dev.to/benji377/how-to-build-a-portable-offline-chat-server-with-a-raspberry-pi-156i)
- [Bitblokes.de: RaspAP – Raspberry Pi als Hotspot / Access Point (WLAN / Wi-Fi)](https://www.bitblokes.de/raspap-raspberry-pi-als-hotspot-access-point-wlan-wi-fi-benutzen/)
- [Bitblokes.de: VPN router with Raspberry Pi, RaspAP and NordVPN / OpenVPN (simple)](https://www.bitblokes.de/vpn-router-mit-raspberry-pi-raspap-und-nordvpn-openvpn-einfach/)
- [Building private WiFi hotspot with RaspberryPi, RaspAP, and VPN](https://ondrejsevcik.com/blog/private-wifi-with-raspberry-pi/)
- [Create a Wi-Fi hotspot in less than 10 minutes](https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/)
- [Create an AP to gain remote control of the Raspberry](https://michaelmuenzer.medium.com/create-an-ap-to-gain-remote-control-of-the-raspberry-7ff7a81ebbe0) - Realtek chipset wifi dongle with a RPi Zero W
- [Framboise314: Créez votre hotspot Wifi avec un Raspberry Pi de façon express](https://www.framboise314.fr/raspap-creez-votre-hotspot-wifi-avec-un-raspberry-pi-de-facon-express/)
- [Geekzone.fr: Transformez votre Raspberry Pi en point d’accès WiFi avec RaspAP](https://www.geekzone.fr/2018/11/05/transformez-votre-raspberry-pi-en-point-dacces-wifi-avec-raspap/)
- [How to build a Raspberry Pi APRS Tracker using Direwolf + RaspAP](https://brandonb.ca/raspberry-pi-aprs-tracker)
- [Instructables: Raspberry Pi As Completely Wireless Router](https://www.instructables.com/id/Raspberry-Pi-As-Completely-Wireless-Router/)
- [Lesfrerespoulain: Boitier WIFI VPN](https://lesfrerespoulain.fr/boitier-wifi-vpn/)
- [Monter sa borne wifi en 5mn avec un raspberry](https://tutox.fr/2019/11/19/monter-sa-borne-wifi-en-5mn-avec-un-raspberry/)
- [Raspberry Pi as 4G LTE Router](https://newjerseystyle.github.io/en/2020/Raspberry-Pi-as-4G-LTE-Router/)
- [Raspberry Pi as a Wifi Hotspot](https://raspberry-valley.azurewebsites.net/RaspAP-Wifi-Hotspot/)
- [Rock Pi S WiFi Access Point with Armbian](https://www.alexgoldcheidt.com/other-devices-rock-pi-s-wifi-access-point/)
- [Tea and Tech Time: Raspberry Pi WiFi Router](https://teaandtechtime.com/raspberry-pi-wifi-router/)
- [Turn Your Raspberry Pi into a Captive Portal Wi‐Fi Access Point](https://www.maketecheasier.com/turn-raspberry-pi-captive-portal-wi%E2%80%90fi-access-point/)
- [Turn your Raspberry Pi into a VPN with Tor as Access Point](https://medium.com/@mshlab/raspberrypi-vpn-with-tor-as-access-point-c03f5ef19ccd)
- [Using Sixfab Raspberry Pi Shield/HAT as a Wi-Fi Hotspot
](https://docs.sixfab.com/page/using-sixfab-raspberry-pi-shield-hat-as-a-wi-fi-hotspot)
## Articles
- [4 reasons I installed RaspAP on my Raspberry Pi](https://www.xda-developers.com/4-reasons-installed-raspap-raspberry-pi/?taid=684f6cb9d3dbfc0001f3bb08)
- [I built my own Wi-Fi router with a Raspberry Pi for Starlink and solar control - here's how](https://www.zdnet.com/home-and-office/networking/how-i-built-my-own-wifi-router-with-raspberry-pi/)
- [Low-cost Raspberry Pi Zero endoscope camera](https://www.raspberrypi.org/blog/low-cost-raspberry-pi-zero-endoscope-camera/)
- [Stop trusting hotel Wi-Fi: Build this Raspberry Pi travel router instead](https://www.howtogeek.com/stop-trust-hotel-wi-fi-build-raspberry-pi-travel-router/)
- [Raspberry Pi als WLAN-Router einsetzen – so geht’s](https://www.pcwelt.de/article/1789512/raspberry-pi-als-wlan-router.html)
## Other resources
- [Raspberry Pi Wireless Access Point](https://www.youtube.com/watch?v=RvOyafQeOoY) - YouTube instructional video
## Contributing
Contribution guidelines can be found [here](contributing.md).
## License
CC0 - "No Rights Reserved".
[](https://creativecommons.org/publicdomain/zero/1.0/)
---
## File: docs/contributing.md
# Contribution guide
> Note: The pull request should have a useful title. To get your PR approved quickly, avoid titles like `update awesome.md`.
## Before adding something to the list
1. Make sure you are editing `awesome.md` only.
2. Add your item to the category it belongs to. Try to avoid creating completely new categories.
3. Be sure to add your item in the correct alphabetical order for its section.
4. Don't submit dead links and try to always submit HTTPS links.
5. Linking to resources in languages other than English is welcome and encouraged.
6. Add something that is truly awesome and stands out.
## Adding an item to the list
1. Click the **Edit this page** :material-file-edit: in the upper right corner of [awesome page](awesome.md).
2. This link will open the page in GitHub for editing in a new window.
4. Add your edit to `awesome.md`.
5. At the bottom of the page, fill in a meaningful commit summary and click **Propose file change**.
6. You'll be taken to the PR screen, click the **Create Pull Request** button.
7. Make sure you check the boxes (and actually confirm they're correct) and click **Create Pull Request**.
Submitted PRs will be checked by a member of the RaspAP GitHub team. If something is incorrect it will be labeled `awaiting-user` with the problem stated in the PR comments.
If a PR becomes stale or no action is taken after some time with the PR being labeled `awaiting-user`, this PR will get the `reply-timeout` label and will be closed.
## Github links
Specifying a Github link lets developers contribute to an open source project based on RaspAP.
There are some interesting forks of RaspAP in the wild. Let's showcase them!
You may add your Github link if the following conditions are true:
- The documentation (`README.md`) contains a description of the project, illustration of the project with a demo or screenshots and a CONTRIBUTING section.
- The project is active and maintained.
- The project accepts contributions.
Example of addition:
```
[github project](https://github.com/user/raspap-webgui), [website](https://myproject.com) - Description
```
The link provided should be the link of the github repository, not the demo.