
The problem
Linux laptops can remain connected to a Wi-Fi network even after its signal has become weak or unstable, while another known Wi-Fi network is available with much better signal.
This is especially noticeable in large homes, offices, warehouses, schools, laboratories, hotels and other environments where several access points or several Wi-Fi networks are available.
The situation I wanted to address was very simple: suppose that a laptop has several Wi-Fi networks already saved, and that the user moves from one area to another. The laptop may continue using the first network even when a different saved network is now substantially better.
The idea
Roam is a small Linux application designed to monitor the current Wi-Fi connection and automatically switch to a clearly better network selected by the user, when the current connection becomes weak or unstable.
Roam uses NetworkManager and does not attempt to replace it. NetworkManager remains responsible for the actual Wi-Fi connection, while Roam provides an additional roaming policy.
The networks considered for roaming are explicitly selected by the user among the saved NetworkManager Wi-Fi profiles.
How it works
Roam continuously evaluates the current connection and the eligible alternatives. It does not simply choose the network with the highest instantaneous signal value, because that would easily cause repeated switching between two similar networks.
The decision therefore considers:
- the quality of the current connection;
- degradation and instability over time;
- the quality of eligible candidate networks;
- a margin that must separate the candidate from the current connection;
- candidate stability;
- a cooldown after a successful switch.
The result is intended to be a conservative automatic handoff rather than a continuous race between nearby access points.
Different Wi-Fi networks
Roam is intended not only for the case in which several access points use the same SSID. It also addresses the case in which the user has different saved Wi-Fi networks, for example:
Office-WiFi Laboratory-WiFi Warehouse-WiFi
The user can explicitly select which of these saved profiles are eligible for roaming. Unknown or unselected Wi-Fi networks are ignored.
Two simple settings
Mode
Roam has two modes:
- Automatic - switch when the roaming policy finds a stable, clearly better eligible network.
- Confirm - ask the user before performing the switch.
Responsiveness
The user can choose Low, Medium or High responsiveness. This affects how readily Roam decides that a change is worthwhile, without exposing technical thresholds to the user.
What Roam is not
Roam is not:
- a mesh networking system;
- a Wi-Fi access point;
- a VPN;
- a cloud monitoring service;
- a Wi-Fi password manager;
- a replacement for NetworkManager.
Privacy
Roam is designed to operate locally. There is no account, cloud service, telemetry, analytics, crash upload or remote monitoring.
Roam does not need to store Wi-Fi passwords. Its persistent configuration contains only the selected mode, responsiveness and the identifiers of the NetworkManager profiles chosen by the user.
Signal history used by the decision engine exists only in memory. The project is intended not to store Wi-Fi history, location, IP addresses, DNS data or other information that is not necessary for the roaming task.
Linux and NetworkManager
The current implementation is deliberately focused on Linux systems using NetworkManager. The background service communicates with NetworkManager over D-Bus, while the graphical interface is a separate GTK4/libadwaita client.
Closing the graphical window does not stop roaming: the background service continues to run in the user session.
Source code
The project is open source and its source code is available on GitHub:
https://github.com/ossacolsale/roam
Installation
The project is currently being prepared for convenient distribution through native Linux packages as well as source builds. The current installation instructions and available release artifacts are maintained on GitHub.
Who is Roam for?
Roam is intended for Linux users who move around buildings or other areas where several Wi-Fi networks are available and want the computer to stop remaining attached to a weak connection when a better saved alternative is nearby.
It is particularly suited to users looking for automatic Wi-Fi switching, Wi-Fi roaming between different SSIDs, or a local NetworkManager-based solution that does not require a mesh network.
Current status
Roam is an active open-source project. The current implementation is focused on making the Linux behaviour reliable, conservative and easy to install. Real-world testing remains important because wireless behaviour depends on the Wi-Fi adapter, driver, NetworkManager and surrounding radio conditions.