Nexa Beep icon

Nexa Beep User Guide

Based on v0.5.0 Last updated 2026-10-12

Overview

Nexa Beep is a local network (LAN) messenger that needs no server address, no account sign-up, and no contact registration. When you launch the app, people running Nexa Beep on the same network appear in the list automatically; pick one and an encrypted conversation starts right away. It works with the same interface on Windows, macOS, and Linux, and is made by SosomLab.

This guide is based on v0.5.0 (released 2026-10-10). For an introduction to the app, see the product page.

Key features:

  • Launch = join — People on the same LAN show up in the list automatically. There is nothing to enter before your first conversation.
  • End-to-end encryption — All chats and files are encrypted between the two devices with Noise_XX (X25519 · ChaCha20-Poly1305 · BLAKE2s). Even when traffic passes through a relay server, only the two devices can read the content.
  • Identity based on key fingerprints — Contacts are identified by their device key fingerprint, not their name. If needed, you can compare fingerprints over another channel and mark a contact as “Verified”.
  • Safe file receiving — Received files must go through quarantine → scanning → human approval before you can take them out, and the app never executes received files.
  • Large transfers and resume — Files of 10 GB and more are sent without loading them into memory, and if the connection drops, the transfer resumes from where it left off.
  • Group chat — Bring several contacts together to chat and send files in one room.
  • Linking your own devices (multi-device identity) — Your PCs that share the same handle and pairing secret recognize each other as “My device”, continue conversations across devices, and devices that were off catch up on missed conversations (v0.4.0–v0.5.0).
  • Connect with people on other networks — With the optional relay server (default beepd.sosomlab.com), you can chat with people on different networks, such as home ↔ office. The server cannot see content and stores nothing.
  • Tray residency · notifications · auto-start, a UI in 4 languages (한국어 · English · 中文 · 日本語), and a CLI terminal client.

List screen (light theme)

Note The screenshots in this guide were taken around v0.2.14. The basic layout is the same, but the settings screen was redesigned in v0.3.0, so settings are described in text only.

Note Non-commercial use is free and no features are locked. Commercial use requires a separate license (see License below · PolyForm Noncommercial 1.0.0).

System Requirements

ItemRequirement
WindowsWindows 10 / 11 — x64 · ARM64. No Visual C++ Redistributable or .NET required (since v0.2.16)
macOSmacOS 11 (Big Sur) or later — native assets for Apple Silicon (arm64) and Intel (x64)
Linuxx64 only. .deb (Ubuntu 22.04+ · Debian 12+) · .rpm (Fedora · RHEL family, since v0.3.0) · portable tar.gz
PermissionsNo administrator rights required (the Windows installer also installs per user)
NetworkNo internet connection is needed within the same LAN. Uses UDP 47100 for discovery and TCP 47200 (default) for chat sessions
Connecting across networksInternet connection needed only when the relay server is enabled (default server beepd.sosomlab.com:47300, TCP+UDP)
MemoryTargeted at about 25 MB or less while idle in the background (per the repository’s performance docs)

Note The app is not yet code-signed or notarized. On Windows you may see a SmartScreen warning (“Unknown publisher”), and on macOS Gatekeeper may block it. Follow the guidance in the installation steps below.

Installation and Removal

All installation channels come from tagged releases on GitHub. There are two distribution formats: installer and portable.

  • Installer — Windows NSIS installer, macOS .dmg, Linux .deb/.rpm.
  • Portable — Extract and run. Settings, identity, and history are created in a data/ folder next to the executable, so you can move the whole folder around.

Releases page: github.com/SosomLab/nexa-beep/releases

Distribution Channel Status

The latest release is v0.5.0 (2026-10-10). Each package manager publishes at a different time (per the repository docs, 2026-10-10).

ChannelOSPublished versionStatus
GitHub ReleasesAll0.5.0Latest
Homebrew (kiros33/tap)macOS0.5.0Updated automatically with each release
APT / DNF (pkg.sosomlab.com)Linux0.5.0Updated automatically right after each release
ChocolateyWindows0.3.00.3.0 approved (2026-10-10). 0.5.0 to be reviewed after submission
wingetWindowsPortable 0.2.17Installer package awaiting review

Note If you need the latest version on Windows, download the files directly from GitHub Releases. Once review is complete, winget and Chocolatey will install the new version with the same commands.

  1. Download nexa-beep-<version>-windows-x64-setup.exe from the releases page. For ARM64 PCs, download the windows-arm64 file.
  2. Run it to install per user. It does not ask for administrator rights (UAC), and the install location is %LOCALAPPDATA%\Programs\NexaBeep.
  3. Launch it from the finish screen, or open Nexa Beep from the Start menu.

For a silent install, use the /S option.

.\nexa-beep-0.5.0-windows-x64-setup.exe /S

Windows — Portable

  1. Download nexa-beep-<version>-windows-x64-portable.zip and extract it to a folder of your choice.
  2. Double-click nexa-beep.exe.

Caution Do not delete nbeep-imgdec.exe in the same folder. It is a helper program that decodes images in a separate isolated process. Without it, initial avatars are shown instead of photos and image previews do not work.

Windows — Package Managers

# Chocolatey (published version: 0.3.0)
choco install nexa-beep              # installer
choco install nexa-beep-portable     # portable

# winget (published version: portable 0.2.17)
winget install SosomLab.NexaBeep.Portable

Windows — On First Launch

  • If Windows Firewall asks whether to allow network access, choose Allow. It is needed for discovery (UDP 47100) and chat (TCP 47200).
  • If SmartScreen shows the “Windows protected your PC” window, continue with More info → Run anyway (this warning appears because the app is not yet code-signed).
brew install --cask kiros33/tap/nexa-beep
  • When macOS attaches a quarantine flag to an app that is not signed or notarized, the app is forcibly terminated on launch. Homebrew Cask removes this flag during installation, so this is the recommended method on macOS.
  • Update: brew upgrade --cask nexa-beep

If you need the terminal-only (CLI) portable build, use the following.

brew install kiros33/tap/nexa-beep-portable

macOS — Manual Installation

  1. Download nexa-beep-<version>-macos-arm64.dmg (Apple Silicon) or macos-x64.dmg (Intel) from the releases page.
  2. Open the .dmg and drag Nexa Beep.app into the Applications folder.
  3. If Gatekeeper blocks it the first time you open it, remove the quarantine flag in Terminal.
xattr -dr com.apple.quarantine "/Applications/Nexa Beep.app"

Note On first launch, macOS may ask for permission to access the local network and to show notifications. Allow both so that contact discovery and desktop notifications work.

Linux — APT Repository (Ubuntu · Debian)

Register the pkg.sosomlab.com repository once and you can receive updates with apt upgrade.

sudo curl -fsSLo /usr/share/keyrings/sosomlab-archive-keyring.gpg https://pkg.sosomlab.com/sosomlab-archive-keyring.gpg
sudo curl -fsSLo /etc/apt/sources.list.d/sosomlab.sources https://pkg.sosomlab.com/apt/sosomlab.sources
sudo apt update && sudo apt install nexa-beep

Linux — DNF Repository (Fedora · RHEL Family)

sudo curl -fsSLo /etc/yum.repos.d/sosomlab.repo https://pkg.sosomlab.com/rpm/sosomlab.repo
sudo dnf install nexa-beep

Linux — Installing Package Files Directly · Portable

# deb (Ubuntu 22.04+ · Debian 12+)
sudo dpkg -i nexa-beep-0.5.0-linux-x64.deb

# rpm (Fedora · RHEL family)
sudo dnf install ./nexa-beep-0.5.0-linux-x64.rpm

# portable
tar xzf nexa-beep-0.5.0-linux-x64-portable.tar.gz && ./nexa-beep

Caution .deb packages of v0.2.17 and earlier had a problem where they would not run on Ubuntu 22.04 · Debian 12 (an error in the required glibc version declaration). Use v0.3.0 or later.

Note To use the tray icon on the GNOME desktop, the AppIndicator extension is required.

Verifying Downloaded Files (Optional)

Each release includes a SHA256SUMS.txt. You can compare the hash of a downloaded file against this list.

# Windows
(Get-FileHash .\nexa-beep-0.5.0-windows-x64-portable.zip -Algorithm SHA256).Hash
# macOS · Linux
shasum -a 256 nexa-beep-0.5.0-linux-x64-portable.tar.gz

Updating

  • Homebrew · APT · DNF · Chocolatey · winget: Use each package manager’s upgrade command.
  • Installer: Simply run the new version’s installer to overwrite the existing one. Identity, settings, and history are preserved.
  • Portable: Replace the executable with the new version, but leave the data/ folder as is.

Note In locations where the whole folder is replaced on upgrade, such as a macOS .app or Homebrew, data is kept in the user folder (~/Library/Application Support/nexa-beep) rather than inside the app (since v0.2.9). So your identity is not lost when you upgrade.

Removal

Installation methodHow to remove
Windows installerRemove Nexa Beep under Settings › Apps › Installed apps (or run uninstall.exe in the install folder)
Chocolateychoco uninstall nexa-beep
wingetwinget uninstall SosomLab.NexaBeep.Portable
Homebrewbrew uninstall --cask nexa-beep (to remove data as well, brew uninstall --zap --cask nexa-beep)
APT / debsudo apt remove nexa-beep
DNF / rpmsudo dnf remove nexa-beep
PortableDelete the extracted folder (the data/ folder inside it is deleted too)

Caution The Windows uninstaller removes only the installed files and leaves user-created data (identity key, chat history, etc.) in place. To remove everything, delete the data folder described in Data and Privacy below yourself. If you plan to move to another device before deleting, back up your identity key first.

Note Launch at system startup is on by default. If you turn off Auto-start in settings before uninstalling, the operating system’s auto-start registration is cleaned up properly.

Getting Started

First Launch

  1. Open the installed app or double-click the portable nexa-beep.
  2. The list screen appears right away. You are not asked for a server address, an account, or contact registration.
  3. People running Nexa Beep on the same LAN appear in the list automatically.
  4. Double-click a contact, or select one and press Enter, to open a conversation. The first time, an encrypted session is established in under a second.

Your default display name is your computer name with anything that looks like a real name stripped out. If that is hard to determine, it takes the form beep-<8-character fingerprint>. You can change it in your profile by clicking My avatar at the far right of the toolbar.

If You Cannot See Other People

  • Check that you are on the same network (same router, same corporate network). Guest Wi-Fi or separate VLANs may block discovery signals.
  • Click the Rediscover button on the toolbar.
  • If they still do not appear, enter their IP directly with ⌘/Ctrl+K (see Connect Directly by Address).
  • For people on a different network, use the relay server connection.

Launching from a Terminal

Double-clicking is the default way to launch, but you can use the following options from a terminal.

CommandAction
nexa-beepWindow mode + real network discovery (same as double-clicking)
nexa-beep --port 47210Set the session listening port for this run only (falls back to a random port if in use)
nexa-beep --chat-live [name]Terminal-only CLI client (see CLI Terminal)
nexa-beep --whoamiPrint my fingerprint · name · executable path · data path
nexa-beep --license statusCheck license status (see License)
nexa-beep --versionPrint the version
nexa-beep --helpShow all options

Note The notation ⌘/Ctrl means ⌘ (Command) on macOS and Ctrl on Windows and Linux.

Screen Layout

List Screen

LocationContents
Toolbar, leftRediscover (refresh the list) · Add by address (⌘/Ctrl+K) · Quarantine (holds and approves received files) · Vault (files released from quarantine) · Conversations (saved conversation list · announcements)
Toolbar, rightServer connection indicator (when the relay is on) · My avatar (opens my profile)
Filter barVia (route: All · Local · Server · Internet · Group) · On (presence: All · Online · Offline) · Who (trust: All · Verified · Pinned · New). Multiple chips combine with AND, and your selection persists across restarts
List rowAvatar · name · status dot · trust badge · unread message count
Status barA one-line latest event and Listening :port (the session port actually being listened on in this run)
LightDark
List · lightList · dark

Reading Status Dots and Badges

IndicatorMeaning
Green dotOnline — can connect now
Gray dotOffline
Red dot (−)Connection just dropped
Check badgePinned (TOFU) — the key from the first meeting is remembered
Solid blue badgeVerified — a contact whose fingerprint was confirmed over another channel
Purple badgeMy device — another of my PCs linked with the same handle and pairing secret
⚠ markName conflict — the same name (or the same handle) is used by a different key
Number badgeUnread message count

Contacts with any chat history, a pin, or a manual address remain in the list even when offline. Offline rows for contacts who have not made their name public, or whose profile has not been received yet, appear as beep-<8-character fingerprint>.

Offline rows kept in the list

MenuItems
MenuSettings · Quarantine · Conversations · Send announcement… · Quit
HelpLicense… · About

List Row Context Menu

ItemAction
View profileOpen the contact’s profile card
Pin to top / UnpinKeep at the top regardless of sorting (persists across restarts)
Create group (N people)Create a group room with the selected contacts
Remove from listForget this contact — deletes the pin, history, and manual address, and discards the chat history’s data key so it cannot be recovered

List context menu

Quick Find in the List

On the list screen, just type the first letters of a name to jump to that contact. It also matches the profile display name (e.g. kiros33@mac).

  • Move with ↑ / ↓; it wraps around from the end to the beginning.
  • Korean names can be found too. On Linux, turn on Korean mode with the Han/Eng key and type the jamo (v0.3.1). Where the Han/Eng key does not work, switch with Right Alt alone or Shift+Space. The current input mode is shown in the status bar.
  • In Settings › Appearance › List, you can turn off quick find or change how long typed input is kept (0.2–60 seconds).

Chatting

Opening a Conversation and Window Modes

Double-click a contact in the list or press Enter. The chat window opens in one of two modes. Choose it in Settings › Chat › Chat window mode; it applies from the next conversation.

ModeBehavior
Single windowThe conversation opens in place of the list; press Esc to return to the list
Separate windowsA separate window opens for each contact so you can view several conversations at once
Separate windowsSingle window (dark)
Separate windowsSingle window

The top of the chat window (header) shows the contact’s avatar and name, along with a connection route badge.

Route badgeMeaning
(no badge, or Local)Direct connection on the same LAN
Via server (blue)Connection established through the relay server
Via internet (orange)Connection across the internet, registered directly by IP or domain

Sending Messages

  1. Type in the input box at the bottom.
  2. Press Enter to send. Press Shift+Enter for a new line.
  3. Click the priority button at the bottom right (Normal) to change this message’s priority to Normal / Notice / Urgent. How strongly the notification appears on the other side is determined by the recipient’s settings.

The dots next to your message bubbles show delivery status.

  • One dot = Delivered to the contact’s device
  • Two dots = Read by the contact

Note Each person decides in Settings › Chat whether to send delivery and read receipts. No dots does not mean the contact did not receive it (you cannot distinguish between the contact having turned off receipts, being offline, or failing the verification conditions).

When the Contact Is Offline — Offline Queue

You can send messages even when the contact is offline. Sent messages are held in the offline queue (up to 200 messages, persists across restarts) and delivered automatically when the contact reappears.

Caution The offline queue delivers only while your PC is on. The server does not store messages for you while both sides are off.

Chat Input Commands

In the input box, a line that starts with / is a command, not a message. Commands are processed only on your own device and are not sent to the contact.

CommandAliasesAction
/help/? · /명령Show the command list
/fingerprint/fp · /지문값Print my fingerprint and the contact’s fingerprint (for comparison)
/verify/sas · /지문 · /대조Mark this contact as Verified
/unverify/대조취소Cancel verification (revert to pinned)
/trust/신뢰Print the current trust status in one line
/notice—Send this message with Notice priority
/urgent—Send this message with Urgent priority
/close/quit · /q · /닫기Close the chat window (chat history is kept)

Whether a line is a command is determined by its first character.

  • If you add a leading space (e.g. /help), it is sent as a normal message.
  • To send a sentence starting with /, start it with // (//hello → the message /hello).
  • If you write a second line after the command line with Shift+Enter, the whole thing is sent as a message.
  • Mistyped commands (e.g. /verifed) are neither sent nor executed; only a hint is shown.

Sending Announcements

With Menu › Send announcement…, you can send an announcement to everyone currently discovered at once. Announcements are limited to one every 3 seconds. If you do not want to receive announcements, turn on Don’t receive announcements in Settings › Chat › Notifications.

Conversations — Managing Saved Conversations

Manage saved chat history from Conversations on the toolbar (or Menu › Conversations).

  • List · preview · filter · click to open
  • Delete a conversation (two-step confirmation) — deleting discards that conversation’s data key, so it cannot be recovered.
  • Back up and restore chat history (kept sealed as is) — see Choosing and Saving Files

Sending Files and Images

How to Send

All three methods go through the same safety procedure.

  1. Drag and drop a file onto the chat window
  2. Press ⌘/Ctrl+V in the chat window with an image on the clipboard — it is sent as a PNG file (take a screenshot and paste it right away). Since v0.2.14 this works on all three OSes without external tools.
  3. /send <files…> in the CLI terminal

You can send up to 5 files per request (adjustable from 1 to 5 in settings).

Sender’s View

The message bubble changes in the following order.

Awaiting approval → progress (⏸ pause · ▶ resume · ✕ cancel) → Done — average speed

  • Even 10 GB files are streamed without loading them into memory. The file integrity hash is computed during transfer and verified on completion.
  • If the connection drops, the received portion is kept sealed, and when you reconnect and send the same file, it resumes from where it left off.
  • A transfer left paused for a long time is canceled automatically (default 2 minutes, Settings › Files).
  • The recipient’s receive size limit is checked before sending, so you are told about files that are too large before the transfer starts.

Recipient’s View — Approval Window

When a file request arrives, an approval window appears. Check the sender · route badge · number of files · names · sizes, then click Approve or Cancel (shortcuts: approve ⌘/Ctrl+Y · reject ⌘/Ctrl+N).

File receive request window

IndicatorMeaning
Route badgeThe route the request came in on — Local (same network) / Via server / Internet
”No messages exchanged yet”Files from a contact you have never exchanged messages with switch to manual approval even if auto-approval is set. This rule prevents a stranger from sending files first
1 hour ▾ + Auto-approveAuto-approve this contact for the chosen period
Cancel (N s)Automatically canceled on timeout if there is no response (default 60 seconds)

For a request that sends several files at once, one approval = approve all, one rejection = reject all.

Taking Out Received Files — Quarantine and Vault

Even after approval, the file does not appear in your Downloads folder right away. Regardless of who sent it, it goes through these 4 steps.

  1. Negotiation — Agree on receive policy, size, and speed.
  2. Quarantine — The original is not unpacked; it is kept sealed as an encrypted .beepq in Quarantine (the shield icon on the toolbar).
  3. Scanning — The risk level is determined from the extension and file content (magic bytes). Zip files are not extracted; only their structure is inspected. On Windows, the file is also scanned via AMSI by the antivirus installed on your PC.
  4. Release after approval — You must approve once more in Quarantine before the file comes out to the Vault (Downloads folder). At this point the hash is checked again, execute permission is removed, and the OS quarantine mark (Windows MotW · macOS quarantine) is attached.
  • The recipient’s bubble shows the scan level, such as Done — quarantined · risk Data.
  • Images can be previewed even while quarantined (SVG is not supported).
  • The app does not execute received files, does not open links automatically, and does not extract archives automatically.

Caution “Scanned (nothing detected)” is only the verdict of your installed antivirus and does not guarantee safety. Whether to run a released file is up to you; from there, the operating system’s protections (SmartScreen · Gatekeeper) take over.

Exchanging Files with People on Other Networks

  • Sending files to contacts via server or via internet is off by default. You must turn on “Send files to via server contacts” and “Send files to via internet contacts” in Settings › Network › Server. For direct internet contacts, sending is also enabled once you complete fingerprint verification (/verify).
  • Receiving is not restricted regardless of route. Instead, the approval window shows a route badge, so check it before deciding.
  • These restrictions do not apply between your own devices (the same user).

Group Chat

Creating a Group

  1. Select multiple contacts in the list with ⌘/Ctrl+click (you can also toggle selection with ⌘/Ctrl+Space).
  2. Right-click → Create group (N people).
  3. The room is created and invitations go out to all members. A room appears on a recipient’s screen only after they accept the invitation.

Group chat

What You Can Do in a Group

  • Open the group row to chat in one room. Bubbles show the sender’s name.
  • Files are also sent per room. Each member approves individually, and the sender sees a combined banner and progress counter. Members you have not exchanged messages with yet get manual approval rather than auto-approval.
  • Group history is encrypted and saved just like 1:1 conversations, and restored after a restart.
  • From the group row’s context menu: Rename · Invite selected people · Remove selected people · Switch invite policy (owner only / members may invite) · Disband group (owner) · Leave group.

Note Group chat is also end-to-end encrypted. Rather than using a separate group key, messages are sent over each member’s 1:1 encrypted session, so traffic grows with the number of members.

Verifying Contacts — Identity and Fingerprint Verification

Identity Is a Key Fingerprint, Not a Name

In Nexa Beep, contacts are distinguished by their device key fingerprint. Names and IP addresses are not the basis.

  • On the first connection, the contact’s key is remembered (pinned, TOFU), and afterward only the same key is accepted as the same contact.
  • Even with the same name, a different key is treated as a different person, and a name conflict mark (⚠) is shown.
  • Pin information is stored encrypted, so it persists across restarts.

Getting to “Verified” by Comparing Fingerprints

When you first chat with someone, a gray notice “This contact’s fingerprint has not been verified yet” is shown. Conversations are always encrypted even without verification, but to be sure the contact really is who they claim to be, check as follows.

  1. Type /fingerprint in the chat window to see your fingerprint and the contact’s (or check it on the contact’s profile card).
  2. Compare fingerprints with the contact over another channel, such as by phone or in person.
  3. If they match, type /verify or click Matches — mark as Verified on the profile card.

The list badge changes to the solid blue badge. Notifications from verified contacts appear as regular notifications (unverified contacts are silent), and the restriction on sending files via internet is lifted.

Caution /verify does not do the comparison for you. If you ask “Did you check?” within the same conversation and then promote the contact, someone intercepting in the middle could answer for them. Always compare over another channel.

Profile Card

Open it with right-click on a list row → View profile.

Profile card

  • Email, phone, and similar items are shown only if the contact has made them public.
  • Fingerprint copy buttons at the top right: [64] = full fingerprint (the value used for ⌘/Ctrl+K direct connection and relay connection), [8] = short fingerprint.
  • For contacts using multi-device identity, a user line (handle) is shown.

My Profile

Click My avatar at the right of the toolbar to open your profile.

  • Edit your photo · display name · email · phone · bio. After choosing a photo, you must click [Apply] for it to take effect.
  • Turn on public visibility per item (all private by default). Only public items are delivered to connected contacts over the encrypted session. Names and contact details are not included in LAN discovery signals.
  • With contacts on the same LAN, profiles sync automatically as soon as they are discovered, so changes appear right away.

Linking Your Own Devices — Multi-Device Identity

This feature is for when you have two or more PCs (e.g. a work PC and a laptop). It is off by default.

How to Turn It On

  1. In Settings › General › User, turn on the Multi-device identity switch. A handle (a short public name) and a pairing secret are filled in with default values and authenticated right away.
  2. On your other PC, turn on the same switch and enter the same handle and the same pairing secret.
  3. The two PCs recognize each other as “My device”. A purple badge appears on the list row, and the profile card shows “My device — authenticated with the same user key”.
  • On the same LAN, this works right away without a server. On different networks, both sides meet with the relay server turned on (the server only acts as a meeting point and cannot see content or keys).
  • When they first meet, the user IDs of the two PCs are automatically merged into the one created first (in about 30 seconds).
  • The pairing secret is known only to your own devices. It is never sent to the server and is stored encrypted on each PC. The generate icon (🔄) turns red on the first click, and you must click it again within 5 seconds to switch to a new secret. The eye icon toggles hide/show.

What Changes Between Your Own Devices

FeatureDescriptionVersion
Skip approval and fingerprint verificationYour devices trust each other without approval windows or fingerprint verification. Files are also received without approval (the quarantine and scanning steps remain)v0.2.15
Sent copiesMessages sent from your other devices also appear in the same conversation on this devicev0.4.0
Collapsing contact devicesIf a contact uses several devices, they are collapsed into one row · one conversation, and your messages are delivered to all of the contact’s devices that are onv0.4.0
Catch-upWhen you turn on a device that was off, conversations exchanged on other devices in the meantime come in automatically from sibling devices (latest 200 lines per conversation · 1 MiB per connection). They are placed in chronological orderv0.5.0
Read syncA conversation read on one device also clears the unread badge on other devicesv0.5.0

Note Catch-up transfers text conversations only. File contents remain only on the device that received them.

My Devices List and Lost Devices

In Settings › User › My devices [Open…] (v0.3.1), you can view linked devices in a table — name · short fingerprint · status (this device / connected / offline) · last seen.

  • Remove just one device: Click [Revoke] on that row twice within 5 seconds. A new user key is issued, only the selected device is removed, and the remaining devices receive the new key automatically.
  • Rotate user key (clean up everything): The Rotate user key button in Settings › User (turns red → click again within 5 seconds). All devices except this PC are revoked. Then change the pairing secret and re-link each device you still have by entering the new secret. On your contacts’ side, the old ID automatically carries over to the new ID.

Note A handle is only a label, not an identity. If a different user key uses the same handle, a ⚠ mark appears in the list. Changing the handle or secret removes authentication, and the feature stops until you re-authenticate (changing the secret does not change your user ID).

Connect Directly by Address

Contacts that discovery signals cannot reach (a different subnet, a network that blocks multicast, etc.) can be registered directly by address.

  1. Click the Add by address button on the toolbar or press ⌘/Ctrl+K.
  2. Enter the contact’s address.
    • IPv4: 10.0.0.5 or 10.0.0.5:47200 (if the port is omitted, 47200)
    • IPv6: [fe80::1]:47200
    • Domain (DDNS, etc.)
    • If the relay server is on, the contact’s 64-character fingerprint
  3. Once connected, the contact is added to the list, stays in the list even after you close the chat window, and reconnects to the remembered address.
  • If the connection drops, automatic reconnection is attempted at intervals of 5 s → 15 s → 60 s → 5 min, and stops once the limit is reached (click the row to resume).
  • Connections that drop silently, such as from a power cut or network outage, are detected within about 22 seconds and shown with a red dot.

Connect with People on Other Networks via a Relay Server

Contacts that are not on the same LAN (home ↔ office, etc.) are reached through a relay server. This feature is optional; if you do not turn it on, the app sends nothing to the internet.

What the Server Does and Cannot Do

What it doesWhat it cannot do
Tell you whether a contact is connected (using identifiers that change daily)Read conversation content — all conversations are end-to-end encrypted between the two devices
Help two devices learn each other’s public addressesBuild a user directory — only people who already know a contact’s fingerprint can find them
Coordinate direct connections (UDP hole punching) — once successful, the server drops out of the pathStore messages or files — it stores nothing
Forward ciphertext when a direct connection is not possible (default 1 MiB/s per connection)Secretly change the server key — if the key changes, the app stops connecting and warns you

Note Even though the server does not know the content, it does learn metadata such as “which identifier connected with whom and when”, as well as public IP addresses.

How to Connect

  1. In Settings › Network › Server, change Server mode to Managed. The address and port already default to the official server (beepd.sosomlab.com, port 47300).
  2. Click [Test] once. Changing the mode or values alone does not connect; only a successful test opens the connection. On success, it is saved, and subsequent startups and reconnections are automatic.
  3. Check that the status message reads ”✓ Server verified — beepd.sosomlab.com:47300 (key 5c5ee932)” (green background). While connected, a server connection indicator appears on the toolbar (click it to open server settings).

The official server’s identity (pin) value is as follows. If the value shown on first connection is different, do not connect.

5c5ee9321439f0292f90f6d7b949e5be3e8dc94cfc6a142208e957bf83c0cb5e

Finding Contacts

  • Automatic list — Users who have turned on “Show me to server users” in settings (on by default in Managed mode) appear in each other’s lists as soon as they connect to the server. At that point, only the items set to public in their profiles (name · email · bio) are visible even before connecting. If you turn this setting off, you are not shown and you do not receive other people’s lists either.
  • Connect directly by fingerprint — Paste the contact’s 64-character fingerprint into the ⌘/Ctrl+K window. You can get your own fingerprint from the [64] copy button at the top right of your profile or the full = line of nexa-beep --whoami.

Once connected, the chat header shows a Via server (blue) badge. You can exchange messages right away; for sending files, see Exchanging Files with People on Other Networks.

Using the Relay from the CLI

# Wait for connections + print my fingerprint
nexa-beep --chat-live MyName --server beepd.sosomlab.com:47300

# Connect to a contact by fingerprint
nexa-beep --chat-connect-via <contact-64-char-fingerprint> --server beepd.sosomlab.com:47300

Running Your Own Server (nexa-beepd)

The official server is just a convenience and has no special privileges. Anyone can set up their own server with the same program, nexa-beepd. The server is distributed as separate beepd-v* releases from the client, and the current version is beepd-v0.2.6 (2026-09-17).

Installation

# macOS (Apple Silicon) · Linux — Homebrew
brew install kiros33/tap/nexa-beepd

# Windows — Chocolatey
choco install nexa-beepd
# Linux release asset directly (musl static binary — distribution-independent)
curl -fsSLO https://github.com/SosomLab/nexa-beep/releases/download/beepd-v0.2.6/nexa-beepd-0.2.6-linux-x64.tar.gz
tar -xzf nexa-beepd-0.2.6-linux-x64.tar.gz
sudo install -D -m 0755 nexa-beepd-0.2.6-linux-x64/nexa-beepd /opt/beepd/nexa-beepd
AssetTarget
nexa-beepd-*-linux-x64.tar.gzLinux x86_64 (static binary)
nexa-beepd-*-linux-arm64.tar.gzLinux aarch64 (static binary)
nexa-beepd-*-windows-x64.zipWindows x64 (console program)
nexa-beepd-*-macos-arm64.tar.gzmacOS Apple Silicon only (no Intel Mac asset)

Note The winget package (SosomLab.NexaBeepd) is awaiting review (per the repository docs, 2026-10-10). Chocolatey’s nexa-beepd is recorded as published at 0.2.6.

Running and Options

sudo /opt/beepd/nexa-beepd --port 47300 --key /opt/beepd/beepd.key

On first run, it creates a server key and prints the 64-character server identity (pin) value. Be sure to record this value and share it with your users.

OptionDefaultMeaning
--port <N>47300TCP (control · relay) and UDP (address observation) use the same number
--bind <IP>0.0.0.0Bind address
--key <path>beepd.key (working folder)Server identity key. Created if missing
--rate <value>1mPer-connection relay speed limit (B/s) — auto · 100k · 1m · 0 (unlimited), etc.
--verboseOffEnvelope-level logs (connection number · first 4 bytes of identifier · byte counts only — no names, content, or keys)

Running as a Linux Service (systemd Example)

[Unit]
Description=nexa-beepd relay server
After=network-online.target
Wants=network-online.target

[Service]
User=beepd
WorkingDirectory=/opt/beepd
ExecStart=/opt/beepd/nexa-beepd --port 47300 --key /opt/beepd/beepd.key
Restart=on-failure
MemoryMax=128M

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now beepd
sudo journalctl -u beepd -f      # logs (pin value in the first block)

Firewall — Both TCP and UDP, Both Layers

You must open both TCP and UDP on the same port number (default 47300). You must open them in both the cloud security rules and the OS firewall. If you miss UDP, direct connections (hole punching) silently fail and only the slow relay path is used.

# RHEL · Oracle Linux family (firewalld)
sudo firewall-cmd --permanent --add-port=47300/tcp --add-port=47300/udp
sudo firewall-cmd --reload

# Ubuntu (ufw)
sudo ufw allow 47300/tcp && sudo ufw allow 47300/udp
# Windows (administrator PowerShell)
New-NetFirewallRule -DisplayName "beepd 47300 TCP" -Direction Inbound -Protocol TCP -LocalPort 47300 -Action Allow
New-NetFirewallRule -DisplayName "beepd 47300 UDP" -Direction Inbound -Protocol UDP -LocalPort 47300 -Action Allow

Managing the Server Key

  • beepd.key is the server’s identity. User apps remember this key on first connection, and if the key differs afterward, they stop connecting and show a warning.
  • When moving or rebuilding the server, back up beepd.key first and restore it as is on the new server. If you lose the key, every user gets a pin mismatch warning.
  • There are two values to give your users: the address:port and the 64-character pin. Users enter the address in Settings › Server and click [Test].

Note Since the server stores nothing, a restart loses only in-progress connections, and clients reconnect automatically. According to the repository records, it runs with a resident memory of a few MB on a free cloud VM with 1 GB of memory.

Tray and Notifications

Staying in the Tray (Menu Bar)

The app stays in the tray on Windows and Linux, and in the menu bar on macOS, as your avatar icon.

Menu bar menu

  • Icon menu (Windows · Linux = right-click · macOS = click): Open · Settings… · Quit
  • Open (or clicking the icon on Windows · Linux) brings the window back.
  • Settings… (v0.3.0) opens the settings screen directly even while the window is minimized to the tray.
  • A dot on the icon’s corner shows connection status (v0.3.0): green = connected to server · blue = direct LAN connection · orange = transferring.
SettingBehavior
Close button = minimize to trayWhen on, clicking X minimizes to the tray instead of quitting (off by default). In that case, quit from the tray menu or Menu › Quit
Hide from taskbar/Dock while in trayWhen minimized to the tray, the app disappears from the taskbar and Dock (on by default). When off, it stays minimized
Launch at system startupLaunches when you log in (on by default). Registered at the user level without administrator rights. The installer and portable builds each register separately, so they do not interfere with each other

Notifications

  • When the app is in the background, new messages and file requests are shown as OS desktop notifications. Clicking a notification opens that conversation.
  • Notifications from contacts whose fingerprint has not been verified are shown silently.
  • Show message content in notifications is off by default (to prevent exposure during screen sharing or recording). You can turn it on in Settings › Chat › Notifications.
  • When there are unread messages, the main window title shows “N new messages”.

Settings

How to Open

  • Main window Menu › Settings
  • Shortcut ⌘/Ctrl+, (from any window)
  • Tray (menu bar) icon menu › Settings…

The avatar at the far right of the toolbar is My profile, not settings. Settings apply immediately when changed and are saved automatically shortly after.

Screen Layout (Redesigned in v0.3.0)

  • Group tree on the left — Six groups and the categories under them. Click a group to see the whole group, or a category to see only that category.
  • Search at the top — If you enter several words, only items containing all of them remain (AND). It searches titles, descriptions, key names, and group names. Korean is matched even while characters are still being composed (typing just “ㅌ” finds “테마” [theme]). Press Enter to record a search term and ↑/↓ to recall previous ones.
  • One card = one setting — Title and description, key name (with a copy button), the control and [Reset] (only when different from the default), and a “Default: …” label.
  • Dimmed cards — Items that are tied to another setting and cannot be used right now. The card says what you need to turn on first.
  • [Advanced settings] switch (at the bottom, off by default) — Rarely touched values such as input method fine-tuning and timing constants are shown only when this switch is on.
  • The settings window’s position and size are kept for the next time you open it.

Key Items by Group

Group › CategoryKey items
General › SystemLanguage (default = follow system language · 한국어/English/中文/日本語; other languages use English) · Theme (System/Light/Dark · default System) · Scale · Auto-start · 2 tray-related settings
General › ProfileDisplay name · photo · email · phone · bio · per-item visibility toggles · Identity key backup/restore
General › UserMulti-device identity (handle · pairing secret · rotate user key · my devices list)
Chat › ChatChat window mode (single/separate) · 24-hour time · date format · send delivery receipts · send read receipts
Chat › NotificationsDesktop notifications · show content in notifications · don’t receive announcements
Chat › GroupSettings related to inviting group members
Appearance › Appearance · Colors · Fonts · ListAccent color · bubble · background · text color for dark/light · font and size · list sorting · quick find · auto-hide scrollbars · tooltip delay
FilesApproval policy (manual/auto/block) · default auto-approval period · send/receive speed · send/receive size limits (receive default 512 MiB) · files per request (default 5) · response timeout (default 60 seconds) · auto-cancel when left paused (default 2 minutes)
Network › NetworkSession port (default 47200)
Network › ServerServer mode (Unmanaged = LAN only / Managed) · address · port · [Test] · show me to server users · send files to via server / via internet contacts
Advanced › AdvancedSettings backup/restore/reset · status log (off by default) · network diagnostics · license information
Advanced › IMEKorean input method fine-tuning (visible only when the Advanced settings switch is on)

Note The “System” item in the language and theme lists also shows the current OS value (e.g. “System (English)”, “System (Dark)”). If the theme is set to System, it follows the OS dark mode switch in real time.

Settings Backup · Restore · Reset

In Settings › Advanced, you can back up or restore all settings to a file (*.cfg). Reset returns filters and window sizes to their defaults as well, but preserves profile information.

Choosing and Saving Files

Since v0.3.0, every place where you choose a file or folder (identity key · settings · chat history backup/restore, profile photo, license file) uses the same dialog. It looks and behaves the same on all three OSes.

  • Places on the left — Home · Desktop · Documents · Downloads · Drives · Recent folders
  • Path bar at the top — ← → ↑ (parent) · Home · type a path directly (~ and environment variables allowed, Enter = go)
  • List in the middle — Click a column header = sort · double-click/Enter = open folder · confirm file · Backspace = parent folder · right-click = open · copy path · copy name · refresh
  • Bottom — File name · type filter · show hidden files · [New folder]
  • Esc · [Cancel] · closing the window = nothing changes. The next time you open it, it starts in the last folder.
TaskDialogFormatNotes
Back up identity keySave*.keyDefault name nexa-beep-identity-<fingerprint>.key. If a file with the same name exists, you must click again within 5 seconds to overwrite
Restore identity keyOpen*.key—
Back up / restore settingsSave / Open*.cfgBackup works the same way as identity key backup
Profile photoOpenpng · jpg · gif · bmp · webp · ico[Apply] after choosing
Back up chat historyChoose folder—Creates a nexa-beep-history-<fingerprint> folder inside the chosen folder
Restore chat historyOpen (multiple)*.segSelect all in the backup folder with ⌘/Ctrl+A to restore the whole folder
License fileOpen*.licenseSee License

License

Non-commercial use is free and requires no license file (status = “Free — non-commercial use”). For commercial use, obtain a license. Even without a license, no features are locked, and the app does not connect anywhere to check the license (it checks only the file and its signature).

Obtaining and Installing a License

  1. Open Help › License….
  2. Enter your name · email and click [Copy request code]. A one-line code is copied to the clipboard (this PC’s device code is included only as a hash).
  3. Send that code to the email address shown in the window.
  4. Save the nexa-beep.license file you receive, then choose it with [Open license file…].
  5. If it passes verification, it is installed and the status strip at the top changes to something like “Licensed — pro”.
  • Files for another PC, for another product, or that are damaged are not installed, and the reason is shown (the app keeps working for free).
  • [Remove] = delete this user’s license file.
  • In Settings › Advanced › License, you can see the status · license ID · file location · device code.

Terminal Commands

nexa-beep --license status                  # status
nexa-beep --license request Name email@address    # print request code
nexa-beep --license install nexa-beep.license
nexa-beep --license remove
nexa-beep --license path                    # file location

Exit codes: 0 = success · 1 = rejected/failed · 2 = usage error.

The license file is located in license/ in the data folder (portable = data/license/ next to the executable); if not found there, the device-wide location is checked — Windows %ProgramData%\nexa\nexa-beep · macOS /Library/Application Support/nexa/nexa-beep · Linux /etc/nexa/nexa-beep.

CLI Terminal

You can participate with just a terminal, without a window. It receives messages from all contacts, but you chat with the one person you connected to directly.

nexa-beep --chat-live MyName

Commands While Waiting

CommandAction
/peers (/list)List discovered contacts (numbered)
/connect <number>Pick from the list and start a 1:1 conversation
/connect <host[:port]>Connect directly by IP (port omitted = 47200)
/quitQuit

Commands During a Conversation

InputAction
A line of textSend a message
/send <files…>Send files (several separated by spaces · up to 5 per request)
/accept · /rejectApprove/reject all of a received file request
/quitEnd only the conversation and return to the list

Connections initiated by the other side are accepted and kept, and their messages are shown in the form {fingerprint}(receive-only)>. To switch to a conversation, use /connect.

Note On Windows, if you run --chat-live from cmd or PowerShell, the app opens its own new console window. In Git Bash or a pipe, it runs in place.

Keyboard Shortcuts

The notation ⌘/Ctrl means ⌘ on macOS and Ctrl on Windows and Linux. Shortcuts are recognized by physical key position even with a Korean keyboard layout active.

Global

ShortcutAction
⌘/Ctrl+,Open settings
⌘/Ctrl+KConnect directly by address (or fingerprint)
⌘/Ctrl+YApprove a received file request (when a request is shown)
⌘/Ctrl+NReject a received file request (when a request is shown)

List Screen

ShortcutAction
Enter · double-clickOpen a conversation with the selected contact
↑ / ↓Move selection
Typing charactersQuick find (jump by name)
⌘/Ctrl+clickSelect multiple people
⌘/Ctrl+SpaceToggle selection
Han/Eng · Right Alt · Shift+Space(Linux) Switch quick find between Korean and English

Chat Window

ShortcutAction
EnterSend
Shift+EnterNew line
EscReturn to the list (single window mode)
⌘/Ctrl+VPaste — if the clipboard holds an image, it is sent as a PNG file

Text Editing (All Input Fields)

ShortcutAction
⌘/Ctrl+ASelect all
⌘/Ctrl+C · X · VCopy · cut · paste
⌘/Ctrl+BackspaceDelete to the beginning of the line
Home · EndBeginning · end of line
Ctrl+← / → (Windows · Linux) · Option+← / → (macOS)Move by word

Settings Screen and File Dialog

ShortcutAction
Enter (settings search box)Record search term
↑ / ↓ (settings search box)Recall previous search terms
Backspace (file dialog list)Parent folder
Enter · double-click (file dialog)Open folder · confirm file
⌘/Ctrl+A (history restore dialog)Select all files in the folder
EscCancel

Data and Privacy

Where Data Is Stored

Installation typeData folder
Portabledata/ next to the executable
Windows installerdata\ next to the install folder (%LOCALAPPDATA%\Programs\NexaBeep) — uses the folder next to the executable if it is writable
macOS (.app · Homebrew)~/Library/Application Support/nexa-beep
Linux (deb · rpm)~/.config/nexa-beep
When the above locations are not writable.nexa-beep in the home folder

Note The most accurate way to check the actual location is nexa-beep --whoami. It shows the fingerprint, name, executable path, and data path together.

Stored Data and How It Is Protected

ItemProtection
Settings (settings.cfg)Plain text (non-sensitive values only)
Identity key (identity.key)Plain text (it is the source material for encrypting other files, so it cannot wrap itself) · readable by owner only
User key · pairing secret (multi-device identity)Encrypted
Trust pinsEncrypted
Chat history (1:1 · group) · offline queueEncrypted · deleting a conversation = discarding its data key (unrecoverable)
Quarantined received files (.beepq)Encrypted
Profile contact details · profile image cacheEncrypted
Status log (optional · off by default)Plain text (only when turned on)
  • Since v0.2.15, secret files are created readable and writable by the owner only (Unix 0600).
  • The app has no analytics, telemetry, advertising, or tracking features, and no account sign-up.

What Goes Out over the Network

  • LAN discovery signals (not encrypted): device public key · display name · session port · profile visibility flag. Email, phone, real name, and messages are not included.
  • Chat sessions: All messages, files, profiles, and receipts travel only over Noise_XX encrypted sessions.
  • Relay server: Communicates only when you turn it on yourself. What information the server receives and how it is handled is described in the Privacy Policy.
  • When multi-device identity is on, your devices exchange the user key, device list, conversation copies, catch-up records, and read status with each other inside encrypted sessions (v0.4.0–v0.5.0).

Backing Up Your Identity Key — Before Changing Devices or Formatting

identity.key is your identity. If you lose this file, after reinstalling you will appear to contacts as a different person, and you will not be able to open existing pins or quarantined files.

  1. Click Settings › General › Profile › Identity key backup.
  2. Save it to a safe location in the save dialog.
  3. On the new device, load it with Identity key restore in the same place.

Caution Chat history does not follow the identity key. To move history, use history backup/restore in Conversations separately. With multi-device identity, a device that was off receives recent conversations (200 lines per conversation) from sibling devices, but this is not a way to migrate the full history.

Caution Placing the data folder inside a synced folder such as OneDrive can cause conflicts or deleted conversations reappearing. If the app detects this, it only shows a warning.

Deleting Data

  • One conversation: delete it in Conversations (discards the data key)
  • One contact: right-click in the list → Remove from list
  • Everything: quit the app and delete the data folder

Note Due to SSD characteristics or backup copies you made, deleted bytes may physically remain. Because the data key is discarded they become unreadable, but physical deletion is not guaranteed.

For details, see the Privacy Policy and Terms of Service.

Troubleshooting

SymptomWhat to check
A contact is not in the listWhether you are on the same LAN (guest Wi-Fi and VLANs block multicast) → Rediscover on the toolbar → whether the filter bar’s On is showing only “Online” → add the IP directly with ⌘/Ctrl+K (same network) or use the relay server (different network)
Others cannot see meWhether the firewall blocks UDP 47100 (discovery) · TCP 47200 (session) · check Listening :port in the status bar · whether two instances on one PC have overlapping ports (--port)
Discovery does not work on corporate Wi-FiOn networks with client isolation or IGMP snooping, automatic discovery may be blocked entirely. Use direct connection by address
A file is stuck at Awaiting approvalWaiting for the contact to respond in the approval window — automatically canceled after 60 seconds. Contacts you have not exchanged messages with get manual approval even with auto-approval (lifted after one message exchange)
Files do not go to via server / via internet contactsWhether “Send files to via server / via internet contacts” in Settings › Server is off (off by default)
Server [Test] failsInternet connection · check address/port · whether a corporate firewall blocks 47300 (TCP/UDP)
Server key mismatch warningAsk the server operator whether the key was changed. Compare the official server pin with the value in How to Connect above. If in doubt, do not connect
Images are not sent with ⌘/Ctrl+VCheck that the clipboard holds an image, not text (text is pasted as characters). On Linux Wayland, the window must have keyboard focus
After restarting, contacts do not recognize meidentity.key may have changed (deleted, or it was in a temporary folder). Check whether the fingerprint in --whoami is the same as before and restore from a backup
Only initials are shown instead of photosCheck that nbeep-imgdec is in the same folder as the executable
The purple “My device” badge disappearsv0.2.17 fixed a problem where the badge disappeared on reconnection after being on for a long time. Update to the latest version
Exits immediately on launch on Windows (0xC0000135)v0.2.14 and earlier required the VC++ runtime. Update to v0.2.16 or later
Does not run on Ubuntu 22.04 · Debian 12This is the glibc declaration problem of .deb packages v0.2.17 and earlier. Install v0.3.0 or later
On Linux, settings and chat windows hide behind the main windowv0.3.1 fixed the window focus problem on Wayland
On Linux, clicking “Open” in the tray does not show the windowGNOME requires the AppIndicator extension. On Wayland, depending on the desktop, the window may not be brought to the front and only the Dock may be highlighted
On macOS, the app closes immediatelyQuarantine flag problem — install with Homebrew Cask or run xattr -dr com.apple.quarantine "/Applications/Nexa Beep.app"
Security software shows a warningFalse positives can occur due to a combination of an unsigned executable, auto-start, listening on a fixed port, etc. Verify the file with the release’s SHA256SUMS.txt

Version History

Version Timeline Summary

PeriodVersionHighlights
2026-08-11 – 08-20v0.1.xFirst release · automatic LAN discovery and encrypted chat · safe file transfer · profiles · notifications · large transfers and resume
2026-08-20 – 08-30v0.2.0 – v0.2.14Auto-start · CLI terminal · offline queue · relay server (beepd) and cross-network connections · group files · filter bar · Linux real-device polish · in-house clipboard implementation
2026-09-07 – 09-26v0.2.15 – v0.2.17Multi-device identity (linking your own devices) · removed Windows runtime dependency · stabilized my-device connections
2026-10-09v0.3.0 · v0.3.1Complete settings screen redesign · license · new file dialog · Linux rpm · APT/DNF repositories · my devices list
2026-10-10v0.4.0Improved perceived chat window speed · continuing conversations across my devices (sent copies · collapsing contact devices)
2026-10-10v0.5.0Catch-up for devices that were off · read sync across devices

v0.5.0 — 2026-10-10

Added

  • Catch-up — While one of your devices linked with the same handle and secret is off, conversations exchanged on other devices come in automatically from sibling devices when you turn it on (latest 200 lines per conversation · 1 MiB per connection). Lines sent by contacts and lines you sent from other devices are placed in chronological order. File contents are not caught up.
  • Read sync — A conversation read on one device also clears the unread badge on other devices (including messages received while the chat window was open).

Improved

  • Sent message numbers now continue across restarts so the same line appears only once after a restart. The history file format has been extended (if you roll back to a previous version, only lines after the new format are hidden on screen; the history itself remains).
  • History with contacts you have never connected to directly (received from other devices) is also restored to the list and conversations after a restart.

Changed

  • Distribution channels: GitHub Releases · Homebrew · APT/DNF. Chocolatey and winget submissions for this version will follow. No change to the relay server (beepd-v0.2.6).

v0.4.0 — 2026-10-10

Improved

  • The chat window is lighter (macOS) — Fixed sluggish scrolling, context menus, and mouse movement over menus. Frame time dropped from about 29 ms to 8 ms, and idle memory is within budget (about 25 MB). Adjusted the scroll amount per mouse wheel notch for high-resolution displays.

Added

  • Continuing conversations across my devices — Messages sent from your other devices also appear in this device’s chat window (sent copies), and a contact’s multiple devices are collapsed into one row · one conversation. Messages are delivered to all of the contact’s devices that are on.
  • Development debug builds show (Debug) in the window title (installed builds are unchanged).

Fixed

  • Removed the “Via internet — files blocked until fingerprint verified” notice that appeared in conversations with my own devices, and the same notice that repeated on every reconnection now appears only once.
  • Internal identifiers such as PeerId(…) were shown above received chat lines (now shown as the device name).
  • The my devices list and license windows opened at half height on macOS Retina, causing buttons to overlap.

v0.3.1 — 2026-10-09

Added

  • My devices list — Settings › User › My devices [Open…]. View name · short fingerprint · status · last seen in a table, and remove a lost device by clicking [Revoke] twice within 5 seconds.
  • Korean search in quick find in the Linux list (switch with Han/Eng key · Right Alt · Shift+Space).
  • Linux package repository pkg.sosomlab.com — sudo apt install nexa-beep / sudo dnf install nexa-beep.

Fixed

  • On Linux Wayland, Tray › Settings… and chat windows were stuck behind the main window, appearing frozen.
  • The theme item in settings now also shows the current OS value, like “System (Light)”.
  • The example description in the connect-by-address window was cut off · toolbar tooltip descriptions did not change when the language was changed.

v0.3.0 — 2026-10-09

Added

  • Complete settings screen redesign — group tree · search (AND · search while composing Korean · search history) · per-item cards · [Advanced settings] switch · window position and size remembered.
  • New way to open settings: tray (menu bar) icon menu › Settings….
  • License — Help › License…, CLI --license. No feature restrictions · no network connection for checking.
  • New file dialog — The 9 places where you choose files use the same dialog (identical on all 3 OSes). Identity key and settings backups use the save dialog.
  • Connection status dot on the tray icon (connected to server · direct LAN connection · transferring).
  • Linux .rpm installer.

Improved

  • Language default = follow system language. The “System” item for language and theme shows the current OS value.
  • List quick find also matches display names, ↑ wraps around from the end, and it can be turned off and its hold time adjusted.
  • Korean characters being composed are visible in the settings search box · the notification position setting is now a dropdown with preview.

Fixed

  • Linux .deb did not run on Ubuntu 22.04 · Debian 12 (glibc minimum version declaration).

v0.2.17 — 2026-09-26

Fixed

  • After being on for a long time (resuming from sleep · brief network outage · server reconnection), the “My device” connection was lost and the purple badge disappeared. The my-device relationship is now re-established on reconnection via server as well, and the badge is kept even if the session drops briefly (trust decisions such as skipping approval apply only to live connections).
  • An asymmetry where only one side remained “My device” · when one of three devices missed the check, it was never looked up again.

v0.2.16 — 2026-09-17

Fixed

  • The Windows executable now runs without the Visual C++ Redistributable. Previous versions failed immediately with error 0xC0000135 on PCs without that runtime. The relay server was also redistributed with the same fix as beepd-v0.2.6. No functional changes.

v0.2.15 — 2026-09-07

Added

  • Multi-device identity — In Settings › User, your PCs with the same handle + pairing secret recognize each other as “My device” without approval or fingerprint verification (purple badge). Automatic user key replication · user key rotation for lost devices.

Fixed

  • Contacts with history disappeared from the list when they could not connect.
  • Symbols missing from the font (✓ ⚠ →) were shown as □ (now substituted with the OS symbol font).
  • Pairing registration did not work when two PCs met through the relay.

Security

  • Secret files such as the identity key, pins, history, profile, and server pin are now readable and writable by the owner only (0600).

v0.2.10 – v0.2.14 — 2026-08-29 – 08-30

  • v0.2.14 (08-30) — In-house clipboard implementation on all 3 OSes. ⌘/Ctrl+V image paste works without external tools (including Linux Wayland · X11).
  • v0.2.13 (08-29) — Fixed the installer and other builds removing each other’s auto-start registrations (registrations are now separated by executable location).
  • v0.2.12 (08-29) — On Linux GNOME, tray “Open” now actually brings the window to the front.
  • v0.2.11 (08-29) — Theme follows OS dark mode in real time (default = System) · Linux Dock icon · tray Wayland support · fixed slow quitting.
  • v0.2.10 (08-29) — Fixed Linux .deb launching in demo mode instead of the real network when started from the app menu (v0.2.2–v0.2.9).

v0.2.6 – v0.2.9 — 2026-08-23 – 08-24

  • v0.2.9 (08-24) — Fixed data possibly being lost when upgrading the macOS .app or Homebrew (data is kept in the user folder · existing data migrated once).
  • v0.2.8 (08-24) — If the auto-start registration is removed by the OS, the app no longer re-registers it but turns the setting off and notifies you.
  • v0.2.7 (08-24) — Unified file sending and receiving in group windows (send counter · combined receive banner · auto-cancel).
  • v0.2.6 (08-23) — List filter bar (Via · On · Who) · immediate display of public profiles of public server users · remote file policy overhaul (sending to via server / via internet contacts is allowed through settings; receiving is decided in the approval window) · server connection only on [Test] success · route badge in chat header · immediate LAN profile sync · minimum window size · fingerprint copy button.

v0.2.3 – v0.2.5 — 2026-08-22

  • v0.2.5 — Automatic server user list (“Show me to server users”) · profile fingerprint copy button. Server beepd-v0.2.5 released at the same time.
  • v0.2.4 — Built-in official default relay server (beepd.sosomlab.com) · server settings screen cleanup (address input · connection test button · verification status display).
  • v0.2.3 — Relay server connection launched (server key pin · automatic reconnection · connect by fingerprint · CLI --server). First server beepd-v0.2.3.

v0.2.0 – v0.2.2 — 2026-08-20 – 08-21

  • v0.2.2 (08-21) — Per-route remote policy (via internet blocks files until fingerprint verified) · expanded zip structure inspection (zip64 · content listing) · deleting a conversation = discarding its key · real AMSI scanning on Windows. First winget and Chocolatey submissions.
  • v0.2.1 (08-21) — 1:1 offline queue (persists across restarts · automatic delivery) · clipboard image sending · message priority and announcements · expanded CLI terminal (/peers · /connect · per-request approval · multiple /send).
  • v0.2.0 (08-20) — Launch at system startup (3 OSes · on by default) · fixed a black console window remaining on Windows · fixed CLI input getting mixed up in cmd/PowerShell.

v0.1.6 – v0.1.8 — 2026-08-13 – 08-20

  • v0.1.8 (08-20) — Large streaming transfers · send/receive size limits (receive default 512 MiB) · resume · in-bubble transfer controls (⏸▶✕) · per-request approval · Conversations · persistent group history · fingerprint-based verification (/fingerprint · /verify) · encryption of quarantined files, contacts, and profile cache.
  • v0.1.7 (08-15) — OS desktop notifications (click = open that conversation) · Windows tray residency · trust badge overhaul (dual indication by color + shape) · / commands in the chat window.
  • v0.1.6 (08-13) — Unread message badge · no longer steals the window when a contact connects · automatic reconnection · dropped connection detection (about 22 seconds) · manually registered contacts kept in the list · text editing basics · --port option.

v0.1.0 – v0.1.5 — 2026-08-11 – 08-13

  • v0.1.5 (08-13) — Default session port 47200 (port can be omitted when entering an address) · allowed previews of large phone photos.
  • v0.1.4 (08-12) — Persistent settings · persistent identity and trust pins with identity key backup/restore · real-name sanitization of display names · profiles (photo · name · email · phone · per-item visibility) · isolated image decoding.
  • v0.1.3 (08-11) — Fixed no response to double-click on Windows · file transfer completion confirmed by the recipient · direct connect-by-address window (⌘/Ctrl+K).
  • v0.1.2 (08-11) — Fixed no response to double-click on the macOS app · clipboard (macOS/Linux) · context menus.
  • v0.1.0 / v0.1.1 (08-11) — First release. Windows x64/ARM64 · macOS x64/ARM64 · Linux x64 · installer and portable · Homebrew tap.

Relay Server (nexa-beepd) Versions

VersionDateDescription
beepd-v0.2.62026-09-17Removed the VC++ runtime dependency from the Windows binary (static linking). Current official server version
beepd-v0.2.52026-08-22Automatic server user list (roster) support · first publication to package managers (brew · winget · Chocolatey)
beepd-v0.2.32026-08-22First server release — rendezvous · UDP hole punching · relay fallback · Linux static binary

All release assets and checksums are available on GitHub Releases.

Known Limitations

Identity · Trust

  • A man-in-the-middle attack at the moment of first contact cannot, in principle, be detected. If you need certainty, compare fingerprints over another channel (/fingerprint → compare → /verify).
  • Display names and profiles are the contact’s claims. A new key with the same name is treated as a new person and is revealed only by the name conflict mark.
  • Because the fixed public key is periodically included in discovery signals, an observer on the same LAN can identify a device over a long period.
  • Due to the nature of anonymous zero-configuration, blocking only raises the cost of circumvention and cannot prevent it completely.

History · Storage

  • Chat history exists only on each PC and does not automatically follow you when you change devices (use Conversations backup/restore or multi-device catch-up — catch-up is limited to the latest 200 lines per conversation · text only).
  • The storage encryption key is derived from identity.key. It offers no protection against someone logged in to the same OS account or against leakage of the key file.
  • Deletion does not guarantee physical erasure (it only makes data unreadable by discarding the data key).

Delivery · Network

  • The offline queue delivers only while your PC is on. The server does not hold messages for you.
  • Discovery may fail depending on the network environment (client isolation · IGMP snooping). Direct connection by address is an alternative, but some networks still cannot be reached.
  • Content is encrypted, but packet sizes and timing patterns can be observed.
  • When you use the relay, the server learns “who connected with whom and when” and your public IP.

Files

  • Antivirus scanning (AMSI) works only on Windows. On macOS and Linux, files are shown as “Not scanned”.
  • Archive inspection examines the structure of zip (including zip64) only. Encrypted zips, nested archives, and other formats are “Undetermined”.
  • Group files are sent separately to each member, so traffic grows with the number of members.

Platforms

  • Because the app is not yet code-signed or notarized, SmartScreen and Gatekeeper warnings appear. On macOS, installation with Homebrew Cask is recommended.
  • Some security software may raise false positives due to a combination of an unsigned executable, auto-start enabled by default, listening on a fixed port, etc.
  • Linux Wayland: There are restrictions on the app hiding its own window or bringing it to the front, so depending on the desktop, tray “Open” and notification clicks may only highlight the Dock. In some environments the clipboard is usable only when the window has keyboard focus (no pasting while in the tray).
  • The relay server for macOS (nexa-beepd) is Apple Silicon only.
  • Korean input has been refined based on real-world testing, but problems may occur with new OS and input method combinations.
  • The screenshots in this guide are based on v0.2.14, and screens that changed later (especially settings) are described in text only.

↑ Back to top