The upcoming version is currently being tested by me, Darko (9A7AOF), Sakis (SV2AMK), and Panos (SV2YJ).
Version 3.8.0 introduces
JS8 support, improvements to all filtering functions, and completely
redesigned installers supporting all major Linux distributions.
The installer
demo installer (https://github.com/sv1btl/PhantomSDR-Plus/blob/main/demo_installer.sh) script does not install or modify anything on your system. It is only a demonstration of the new installation workflow, allowing you to preview how the PhantomSDR+ installers will operate from version 3.8.0 onward.
------
New in v.3.8.0- S8 decoding. JS8Call's mode, in the browser: all five speeds, with multi-frame messages reassembled into whole sentences instead of shown as fragments. Press **JS8** in the decoder row. Full guide: **[docs/DECODERS.md](docs/DECODERS.md)**, in all seven languages. JS8 spots reach PSK Reporter**, alongside FT8, FT4 and WSPR. Reported at Normal speed from heartbeats, compound frames and directed messages; group destinations such as `@ALLCALL` never are, because they are not stations. A **📡 JS8 map** button sits beside the FT8 and FT4 ones.
- The four noise controls work now. Auto Notch was a dead switch and is live (40 dB on a single carrier); the Noise Blanker is per-channel with look-ahead and cosine ramps rather than hard-zeroing. Every decoder is fed audio taken *before* these controls, so they can no longer stop one working.
- QRSS no longer loses traces between rows. Rows covering more than one bin take the strongest of them: a 200 Hz span at QRSS 6 lost 6% of trace positions entirely before, and none now.
- `fft_size` is 4194304. throughout the installation guide in all seven languages, and the RX-888 mk2 example is the complete `[input]` section that ships with the repository rather than a fragment to assemble.
- The NEW installers stop your running receiver before they touch anything. A new first step lists what is live — the admin panel, the reverse proxy, the statistics server and the receiver itself — and offers to stop it, defaulting to yes, then starts back exactly what it stopped once the install finishes. Installing over a live receiver is the most effective way to get a broken result that *looks* like a broken build: the compiler writes over a binary that is still running, and the watchdog restarts the half-written copy mid-compile. Answer `n` and the installer prints the commands and waits for you instead. Unattended runs are covered by `PHANTOM_STOP_SERVICES=y|n`. Every question now shows its default as a capital letter, coloured, and spells the answer out — `[Y/n] (ENTER = Yes)` — so pressing ENTER is never a guess. This covers `setup_admin installer` and `install-stats-server installer` too, including the prompts that ask before overwriting an existing installation. Each step is framed, with its number, a one-line description and a progress bar, and closes with its own verdict — OK, SKIPPED, PARTIAL or FAILED — so one step never runs into the next on screen. The per-step table that `install.txt` has always carried is now printed at the end of the run as well.
- 'demo installer (https://github.com/sv1btl/PhantomSDR-Plus/blob/main/demo_installer.sh) ` shows you the whole installation before you run it. It walks through all 18 steps with the real frames, questions and warnings, and installs nothing — no package, no service, no file, no compile; every command it would run is printed with a `(not run)` marker. Use `--fast` to skip the pacing and `--auto` to answer every question with its default.
demo installer (https://github.com/sv1btl/PhantomSDR-Plus/blob/main/demo_installer.sh) - download it and put it in the PhantomSDR-Plus folder, make it executable and run it (no fear, nothing is going to change in your current installation).
New function added and it is under test:
Decoder ID — it tells you which decoder to use. Found a digital signal you cannot place? Switch Decoder ID on, in the frame above the decoder buttons, and it names the mode and offers the matching decoder in one click. It measures occupied bandwidth, tone spacing, symbol rate and burst timing, shows you that evidence beside its verdict, and takes the frequency you are tuned to into account — which is also what lets it tell FT8 from JS8, two modes whose signals are identical. It recognizes FT8, FT4, JS8, WSPR, CW, NAVTEX/SITOR-B, RTTY, Weather RTTY, PSK31, Olivia, HF FAX, SSTV and DSC. It only ever suggests, never switching your decoder by itself, and below about 10 dB S/N it says so rather than guessing. Off by default, and about 0.5% of one core while running.
Hi Darko, Sakis, and Panos,
thank you for all the fantastic work you are putting into PhantomSDR Plus!
The upcoming v3.8.0 update looks amazing I also really appreciate the new,smarter installer workflow and the safety checks that gracefully handle active services. Having a demo_installer.sh to safely preview everything beforehand is a brilliant touch.
thans you for keeping this project growing
Best regards Dennis
QuoteHi Darko, Sakis, and Panos
Emmanuel does all the work, the three of us just check that it's working properly. ;)
Until now, this software has been nice and user-friendly, with this new installer and
administrative interface it should be user-friendly for administrators as well.
Darko, 9a7aof
Hello Emmanuel
Beware with hardware.
Recent releases of Phantom don't work on old computers like a Core I3
It's a trap !
The installation process work but the server don't start...
The news releases of openCL don't work with old GPU...
You can start the server without openCL but the CPU overflow immediatly..
73"s
QuoteRecent releases of Phantom don't work on old computers like a Core I3
It works fine on an ancient I3 without fast usb ports but only two megahertz width,
quite enough for 2m amateur band in Europe.
Without OpenCL, using only CPU power, it works fine.
./start-rtl.sh
PhantomSDR-Plus (RTL-SDR)
stopping any running instance...
starting watchdog — live log below (Ctrl-C is safe, it keeps running)
────────────────────────────────────────────────────────────
Mon, 24 Aug 2026 14:31:20 +0200
Starting the initialization script of the PhantomSDR Server (RTL-SDR)
CPU pin: none (unpinned)
websdr.org: disabled ([websdr.org] enabled=true in config-rtl.toml to enable)
SDR directory: disabled ([websdr] register_online=true to enable)
RADE: enabled — sidecar will start once the server is up
Starting RTL-SDR (rtl_sdr, attempt 1/3)...
rtl_sdr running (PID 17838)
Starting spectrumserver (config: config-rtl.toml)...
spectrumserver running (PID 17851) — full output: spectrumserver.log
────────────────────────────────────────────────────────────
✔ server is up (spectrumserver + rtl_sdr running)
I haven't tried rsp1a, I don't have time to experiment right now.
I might do a test this weekend.
Kind regards,
Darko, 9a7aof
Hello Darko
I agree, but for me VHF is out of interest
I live in the biggest forest of France and only 63m above sea level. So i can ear only one repeater.
For this use Openwebrx on a RPi4 make the job
No need of a masterpiece as Phantom ! ;D
73's
An idea for Emmanuel ;D ;D
Most of FlexRadio owners use now a multiplaform free software : AetherSDR
Combined with a Flex, this sotfware can add a second antenna virtual port to make diversity RX.
The virtual port is connected to a KiwiSDR.
Aether synchronise is own true antenna and the virtual antenna.
The process work fine.
Aether connect two websockets on the Kiwi for audio and spectrum.
Claude AI said it's possible to link Phantom and Eather if phantom send the protocol of a kiwi....
Brainstorm ! ;D ;D
A brilliant idea of George (https://hfsdr.gr/?frequency=7120000&modulation=LSB) this is the last addon of the newer version of PhantomSDR-Plus v. 3.8.0 (which is already in the GITHUB - https://github.com/sv1btl/PhantomSDR-Plus)
Updating an existing PhantomSDR-Plus instance
For a sysop who is running an older PhantomSDR-Plus and wants the current one.
You do not download the whole newer version and copy it over your tree. You fetch
one file — `update.sh` — and it does the rest: it compares your installation with the
published tree and updates only what needs updating, without touching the files that make
the machine *your* receiver.
---
Step 1 — get the tool (once, ever)
cd ~/PhantomSDR-Plus
curl -fLO https://raw.githubusercontent.com/sv1btl/PhantomSDR-Plus/main/update.sh
chmod +x update.sh
That is the only manual step. Everything else — sources, frontend, documentation,
installers — is brought in by the tool itself from then on.
If your PhantomSDR-Plus lives somewhere else, use that path instead. `update.sh` works on
the directory it is sitting in, so a second clone updates itself and not the one on air.
---
Step 2 — look before touching anything
./update.sh
This **writes nothing at all**. It downloads the published tree, compares it with yours,
and prints a report: how many files are new, how many would be updated, how many look like
your own edits and will be put to you, and how many site-local files it is leaving alone.
It is safe to run at any time, including on a receiver that is on the air.
Worth running once as well:
./update.sh --list-excludes
so you can see with your own eyes that your `.toml` configs, `markers.json`,
`admin_config.json`, `autorun.json`, the frequency list, the chat history, your chosen
S-meter variant, the logs and the build output are all on the never-touch list.
---
Step 3 — a backup, the first time only
The tool already protects these, but the first run is the one to be careful with:
cd ~
tar czf phantom-backup.tgz \
PhantomSDR-Plus/*.toml \
PhantomSDR-Plus/markers.json \
PhantomSDR-Plus/admin_config.json \
PhantomSDR-Plus/frontend/site_information.json
---
Step 4 — update
cd ~/PhantomSDR-Plus
./update.sh --apply
What you will see on a first run
There is no record yet of which version your files came from, so every file in the
"always asked" group is put to you: the launchers (`start-*.sh`), the `*.service` units,
the installers, `recompile.sh`, `setup_admin.sh`, and the admin and proxy scripts. Expect
roughly ten questions, each looking like this:
❓ start-rx888mk2.sh (K)eep mine / (u)pstream / (b)oth (ENTER = Keep mine)
How to answer:
| Your situation | Answer | What happens |
|---|---|---|
| You never edited that file | `u` | The new version is installed. This is the usual case. |
| You edited it — your own `RX888_ARGS`, CPU pinning, a tweaked unit | `b` | Yours is kept, and the new one lands beside it as `<file>.new` to merge later. |
| You are not sure | ENTER | Yours is kept. Nothing is lost, and you can compare afterwards. |
Your configuration is never part of this. The questions are only ever about scripts and
service units.
From the second update onward these questions mostly disappear. The tool records which
version of each file it installed, so next time it can tell a file *you* edited from a file
that is merely old, and it only stops to ask about the ones you actually changed.
It stops your receiver, the admin panel and the reverse proxy before writing anything, and
starts back exactly what it stopped when it has finished.
---
Step 5 — rebuild when it offers
Source and frontend files will have changed, so it will ask whether to run `recompile.sh`.
Say yes, and choose:
* **[3] Both backend and frontend**
* then **[1] build-all.sh** (desktop + `/mobile`)
The receiver comes back up on its own afterwards.
---
Step 6 — check, and undo if you need to
[/b][/u]
./update.sh
should now report everything current, apart from any files you chose to keep. If the site
misbehaves:
./update.sh --restore LAST
./recompile.sh
Every file that was overwritten is kept in `.update-backups/<timestamp>/`, each with its own
`restore.sh`, and the last three runs are retained.
---
One caveat for a *really* old instance
`update.sh` updates **files**, not system packages. If your tree is old enough that the
build now needs libraries you do not have, `recompile.sh` will fail with a compiler or meson
error. That is not a broken update — you simply need the dependencies:
./install.sh
which is itself brought up to date by the same run. Your configuration survives that too.
---
For a machine you do not sit at
./update.sh --apply --yes
Never asks anything, and **every file you have edited is kept**. Safe for cron.
A plain `./update.sh` exits `0` when you are up to date and `10` when an update is waiting,
so a cron job can tell you when there is something to do:
0 6 * * * cd ~/PhantomSDR-Plus && ./update.sh || \
mail -s "PhantomSDR-Plus update available" you@example.com
---
Quick reference
./update.sh what WOULD change; writes nothing
./update.sh --apply do it, asking about anything you edited
./update.sh --apply --yes unattended; your edits are all KEPT
./update.sh --restore LAST put back whatever the last run overwrote
./update.sh --list-excludes the never-touch rules as they resolve here
./update.sh --ref v3.8.0 a tag, branch or commit instead of main
./update.sh --verbose list every file, not only the first 40
Add your own never-touch rules with one glob per line in `update-exclude.txt` in the root
folder of the installation.
73 de SV1BTL
I tried running just ./update.sh, it listed which files were outdated and
which files I edited manually.
After that, I ran ./update.sh --apply on all three servers (one public and two test),
it has a nice interactive dialog,
the default value is the one I manually entered into the scripts, great.
During the update, admin, proxy and phantom itself are stopped, after the update,
these services are automatically started.
It is also possible to revert to the old values,
although I don't think anyone will need it.
Great thing for system administration!
Kind regards,
Darko, 9a7aof
Hello Guy's
3.8.0 install and run error free on a real Ubuntu 26.04 computer.
3.7.0 crashes at install on 26.4
73's
For ALL sysops with v.3.8.0
Please update only the file frontend/src/audio.js and recompile only frontend. A minor bug is corrected.
Hello Guy's
The link between Phantom 3.8.0 and AetherSDR for FlexRadio is in test at home ! ;D
A patch add a special websocket to Phantom to send pseudo Kiwi protocol.
I will push intensive tests before sending the kiwi_install.sh to Emmanuel
73's
Quote from: F1NSK on Aug 26, 2026, 07:46 PMHello Guy's
The link between Phantom 3.8.0 and AetherSDR for FlexRadio is in test at home ! ;D
A patch add a special websocket to Phantom to send pseudo Kiwi protocol.
I will push intensive tests before sending the kiwi_install.sh to Emmanuel
73's
What is the benefit for doing this link?
What have we to expect?
A message "API KEY REQUIRED" is shown in users.html and stats.html. The issue is fixed. Please download the fixed files from the repo, recompile frontend and hard refresh the browser.
Or.... run ./update.sh.
Quote from: Emmanuel SV1BTL on Aug 26, 2026, 09:43 PMQuote from: F1NSK on Aug 26, 2026, 07:46 PMHello Guy's
The link between Phantom 3.8.0 and AetherSDR for FlexRadio is in test at home ! ;D
A patch add a special websocket to Phantom to send pseudo Kiwi protocol.
I will push intensive tests before sending the kiwi_install.sh to Emmanuel
73's
What is the benefit for doing this link?
What have we to expect?
FlexRadio transceivers can listen on two antenna at the same time in diversity mode.
Very helpful to extract small stations from noise.
AetherSDR (a free alternative to manage a Flex) is a powerfull software.
Aether can use a KiwiSDR as a second antenna. The audio and waterfal are synchronised.
This amazing feature work only with a Kiwi.
My idea is to connect other types of SDR
A Phantom work better than a Kiwi and support more users.
No benefit for Phantom basic users but an opportunity for Flex users to link a high quality SDR.
At this time, the patch install, compile and run fine on Phantom 3.6.0, 3.7.0 and 3.8.0.
Sound and Waterfall are perfect, only miss the S meter...work in progress
More info on https://lu5dx.github.io/AetherSDRDocsEnglish/latest/
73's
OK Eric, understood. Very interesting indeed. I suppose that this will be a very useful option for owners of a Flex Radio. Let us see it in action.