Skip to content

Remnawave Admin 5.0.0 ​

September 24, 2026 · GitHub release · discussion in Telegram

A big release with everything accumulated since 4.8.3: a Tickets section for supporting Bedolaga customers, a speed shaper on nodes, violation warnings to customers, backup uploads to S3, and automations that absorbed alerts. Time across the whole admin is now shown in the panel's time zone, and the audit log is complete and protected from edits.

Before upgrading

Read the Important section: it lists everything you have to do by hand, from a database backup to updating the agents on your nodes.

✨ New ​

Tickets ​

A support desk for Bedolaga tickets right inside the admin. Queues “To do”, “In progress”, “Overdue”, “Waiting for customer” and “On hold” with counters; the waiting time ticks live and turns red against the response deadline, and deadline tracking can be switched off entirely. Messages from the bot arrive right away on its events instead of once every few minutes. Search, filters by tag and operator, “take it”, priority, tags, snooze for an hour, three hours, until tomorrow or for a week, bulk “take” and “close”; you can see when a colleague is already looking at the same ticket. The section works on a phone too; access is granted by the bedolaga_support permission.

Conversation and customer. Attachments are shown right in the thread and can be browsed as a gallery; a file up to 20 MB goes to the customer from the reply box. Each ticket keeps its own draft. Reply templates open with “/”, fill in the name, ticket number, subscription end date, days left, balance and device limit, and can also change the status or add a tag. Hotkeys: J/K to move through the list, R to reply, A to take, C to close. Next to the conversation is the customer: subscription, balance, a shared note about them, their other tickets, the ticket history, and the “Extend 3 days” and “Reset devices” buttons. Above the queues are weekly metrics: how many came in, average first response time, share of overdue tickets.

Notifications and auto-reply. For a new ticket and a customer reply, Telegram gets a card: who wrote, contacts, subscription, balance, text and attachment, with buttons below it — open the ticket, customer profile, message them directly, take it, snooze for an hour, close. An overdue response gets a separate reminder. Tickets have their own topic; in the browser there are system notifications and a counter in the tab title and in the menu. During quiet hours a bot replies to the customer that the ticket was received and when it will be handled; the queue does not count that as an operator reply.

Node speed shaper ​

Requires agent 1.9.0. A speed cap for every client address plus a penalty for heavy downloaders: whoever pulls more than the threshold within the window gets a penalty speed for a while. It is configured per node in the “Client shaper” window from the node menu and is off by default; before enabling, the window shows what will change on the node. Built on eBPF, it does not touch other qdiscs or tc filters, and it was tested on kernels 5.15 and 6.6. Penalties arrive as a notification in Telegram and in the bell — no more than once per 6 hours per user — and are listed in the shaper window, while a badge on the node card shows whether the shaper is working. More in Node shaper.

Violation warnings to customers ​

An “⚠️ Warn” button in the notification and on the violation card, and optionally automatic sending together with a block or a speed limit. Texts live on the “Violations → Warnings” tab: a general template and one per violation type, each with a switch, a score threshold for automatic sending, email delivery and an email subject. The message goes through the Bedolaga bot to Telegram and email, and the channels report separately: a customer who blocked the bot still gets the email. By default the texts contain no countries, device counts or scores, so a warning does not turn into a bypass guide. Sending requires the violations:resolve permission. More in Client warnings.

Customer verdict in the external API ​

GET /api/v3/violations/summary answers with a level of clean, warned or limited, plus the violation count for the window, the maximum score, the last action and the last warning. Annulled violations are not counted, and the whitelist overrides everything. The violation list can be filtered by telegram_id and shows whether a warning was sent for a violation. Useful for any integration of your own — for example, to deny trials to limited customers; the Bedolaga bot and cabinet use it to show a banner to the customer and the history to the operator (setup is in Important).

Backups to S3 ​

A copy of the dump goes to any S3-compatible storage: Amazon S3, MinIO, Selectel, Timeweb Cloud, Backblaze B2. The “Storage” tab in backups covers the connection, a connectivity check and the list of files in the bucket; manual upload for every backup and automatic upload after a scheduled one, even with Telegram delivery turned off; old copies in the bucket are rotated. Access keys are stored encrypted and never returned. More in Uploading to S3.

Panel time zone ​

A “Time zone” setting (Europe/Moscow by default). The database and API keep time in UTC, while everything a human sees — web, Telegram, emails, CSV and reports — is shown in this zone with a label (“MSK”, “UTC+5”). Report days, weeks and months, analytics trends and cohorts, and the schedules of reports, backups and automation cron are all computed in it, and date and time fields — subscription end, promo code expiry — are read in it too.

Automations ​

Chains and conditions. After the main action a rule runs up to five additional ones (“notify + limit speed”); if the main action fails, the rest do not run. “All” or “any” conditions, “in list” and “not in list” operators, a “holds for at least N minutes” threshold, and a per-rule cooldown between runs. Notifications get quiet hours: non-urgent ones pile up and go out in the morning as a single digest.

Events and actions. New events “node back online”, “user created”, “subscription expired”; violation, torrent, node offline and traffic exceeded events carry data for conditions: countries, providers, addresses, devices, node, squads, tag, days until the subscription ends. New thresholds: online users and traffic on a single node, node CPU, RAM and disk from Fleet, violations per hour, new users and a user's traffic today. New actions: limit speed, warn the user with a template, block for a period (the user is re-enabled automatically), notify via the bell and email — including without Telegram, with severity and action buttons under the message. Node restarts can be capped per hour, and expired cleanup can be narrowed by squads and tag.

Managing rules. “Run now” for scheduled rules, a test run with variable hints, the run log right on the rule card with a jump to the user, and JSON export and import of rules. Imported rules and dangerous templates are created disabled.

Complete audit log ​

Every change goes into the log: finance, plugins, scripts, squads, notifications, backups and the rest. User, node and setting edits keep the old and the new value (“before → after”), and bulk operations keep the list of affected users. Export to CSV or JSON of everything matching the filters (up to 50,000 rows); filters by admin, IP (click the address) and any period; history on the user card and in the node panel. Records are append-only — they cannot be changed or deleted.

API key restrictions and rotation ​

A key can be restricted to addresses (IPs and subnets) and to users (squads, tag): through API v3 it neither sees nor touches other users or their violations. Rotation with overlap — the old key keeps working for another 1 to 72 hours while the integration switches over, or dies immediately if the key leaked. Every key has a request log: method, path, response code, IP and time. More in the API reference.

Webhooks: delivery replay and new events ​

The event body is stored in the delivery log, a delivery can be replayed, and the log can be filtered by event and result. New events: user.expired, user.traffic_exceeded, node.shaper_penalty, report.generated, backup.failed — their fields are described in the event catalog.

Bedolaga customer activity feed ​

On the customer card next to transactions: payments, subscription events, actions in the cabinet and the mini app, logins, with “All / Subscription / Actions / Logins” filters.

Do not disturb for admins ​

A window in panel time during which an admin's personal channels (Telegram, email, webhook) stay silent except for critical notifications; the bell keeps collecting as usual.

🔧 Improvements ​

  • Soft block through the shaper (agent 1.9.0) — limiting a user's speed now shapes both directions on any port, works for IPv6 and even where the general shaper is off. The lowest of the general, personal and penalty limits applies.
  • Alerts became automation rules — one engine instead of two: enabled threshold alerts move to automations on their own with the same threshold, cooldown, “holds for N minutes” window, channels, severity and topic, and the notification text is now human-readable, in the panel's language. “Node CPU / memory / disk” templates are in the automation gallery.
  • Servers page — Fleet and panel nodes on one page as tabs, together with scripts, history, schedules and bulk actions, with one menu item instead of two. The node menu opens the node in Fleet, a Fleet machine links to its panel node, and the old /nodes and /fleet addresses lead to the right tab.
  • Nodes — the card shows speed, CPU, RAM, uptime, Xray and node versions, the country flag, a note and traffic “for the period” with its reset day, with “online · …” or “offline · …” at the bottom. One action menu for the card, the compact view and the table; restart asks for confirmation and says how many users will lose their connections. Search by name, address and note, filters by status and agent, and the stat tiles filter on click. “As in the panel” order and a “Save order to the panel” button — this is the order of locations in the subscription. Editing a node changes its config profile and inbounds, and a panel error (port in use, foreign inbound) is shown as is. The “Users IPs” window shows names with links and when each address was last seen.
  • RW Resources — hosts and squads moved into “Resources” as tabs, permissions are split per tab (hosts:view, users:view, resources:view), and the old /hosts and /squads addresses lead to the tabs.
  • Settings — every setting has its own section: “General” is split into panel, sessions, logs, external services, DNS keys, IP reputation and provider login, and mail into SMTP, TLS, anti-spam and message storage. Sections are shown as colored badges with counters, and the category table of contents scrolls to the one you need.
  • Reports — the card shows the type and period in words, labeled counters, the top list with scores and links, the report text, and “Send to Telegram” and “Delete” buttons. A report for the same type and period is overwritten instead of duplicated.
  • ASN — sync lives in one place, “Settings → Sync”; the ASN directory is a tab in “Violations”, with provider types in the admin's language.
  • Analytics — trends are compared with the previous window, traffic comes from the panel's statistics (90 days, “all”, custom dates), geography and providers count unique users and addresses for the period, LTV is in rubles from Bedolaga top-ups per paid subscription, and retention is based on all-time traffic.
  • Bedolaga — “Add traffic” and “Add devices” buttons on the customer card; “discount” (percent and duration in hours) and “trial subscription” promo codes, with human-readable type names; a “tariff” bonus in campaigns; an editor for ticket reply templates.
  • API v3 — GET /users and /users/{uuid} return short_uuid and subscription_url; POST /users returns the uuid, short_uuid and subscription link and immediately writes the user into the admin database, so a GET by uuid works without waiting for sync.
  • Passwords — the strength bar and the requirements list are now in the admin creation form and in the forced password change too; a weak password is rejected with a clear error listing the requirements.
  • Automations — cron runs on panel time and catches up a missed minute, rules about users and exceeded traffic read our own database instead of the full list from the panel, and templates are added with a confirmation.
  • Mobile — automations on a phone: header buttons no longer run off the screen, constructor buttons stick to the bottom, condition rows and the action chain adapt to a narrow screen; the “Violations” tabs and the “Plugins” buttons wrap.
  • Documentation — a plugin development guide and instructions for connecting violations to the Bedolaga bot and cabinet.

🐛 Fixes ​

  • fixed a bug (the agent dropped access.log lines with a source like from tcp:IP:port — connections inside mux/XUDP, including to UDP targets) — thanks @chudo-arky (#280)
  • fixed a bug (speed limiting removed the root qdisc of the node's main interface together with other people's settings) — thanks @fesevu (#281)
  • fixed a bug (enabling and disabling a host on panel 3.x showed an error even though the host was switched)
  • fixed a bug (“last seen” on the node card was always empty, and sorting by it did not work)
  • fixed a bug (some labels in the node table view were not translated)
  • fixed a bug (an automation rule fired on the first violation or the first node going down, and the following ones were lost)
  • fixed a bug (node offline rules treated disabled nodes as down)
  • fixed a bug (a torrent triggered violation rules a second time, as a second event)
  • fixed a bug (the “Cleanup expired” action disabled nobody on panel 3.x)
  • fixed a bug (the “Sync nodes” action failed on panel 3.x)
  • fixed a bug (rule conditions were not checked for every trigger type)
  • fixed a bug (editing a rule skipped the checks done on creation)
  • fixed a bug (special characters in values broke automation notifications in Telegram)
  • fixed a bug (the “node offline” alert never fired for nodes without an agent, and the load alert fired on stale numbers of a node that was down)
  • fixed a bug (the torrent notification counted only the last batch and always said “Hard block” instead of the configured action)
  • fixed a bug (a report for a period could arrive twice or get lost after a restart)
  • fixed a bug (a report built from the web ignored the minimum score and top size from the settings)
  • fixed a bug (a report older than the latest two hundred could not be opened)
  • fixed a bug (report schedule time was saved on every change of the field, and a loading error was hidden behind default values)
  • fixed a bug (report and backup schedules and the Settings page corrupted each other's settings data)
  • fixed a bug (daily analytics charts were built by the hour)
  • fixed a bug (panel 3.x traffic statistics were not parsed)
  • fixed a bug (analytics trends ignored the “to” date, and the violations “to” filter excluded the last day)
  • fixed a bug (a failed analytics report looked like an empty list)
  • fixed a bug (date filters in the audit log and automation logs failed)
  • fixed a bug (some actions were written to the audit log twice)
  • fixed a bug (the audit log section filter was always empty, and the action filter caught similar actions)
  • fixed a bug (the % and _ characters in audit log search acted as wildcards)
  • fixed a bug (field labels and action descriptions in the audit log were not translated)
  • fixed a bug (a 401 response from Bedolaga logged the admin out)
  • fixed a bug (Bedolaga rejected every ad campaign creation)
  • fixed a bug (some promo code types could not be created — Bedolaga has no such types)
  • fixed a bug (the reason for a customer balance change did not reach Bedolaga)
  • fixed a bug (resetting a Bedolaga customer's devices did not work)
  • fixed a bug (partner search and sorting by earnings only saw the first 200 partners)
  • fixed a bug (a weak password when creating an admin produced an “Invalid password” error, and the browser filled the form with its own login and password)
  • fixed a bug (on existing panels, settings did not get their section, name and description updated, and some stayed without a section)
  • fixed a bug (some sections and settings were shown as raw keys, and in Russian in the English interface)
  • fixed a bug (an ASN sync started from the bot did not show up in “Settings → Sync”)
  • fixed a bug (text was escaped twice: Europe/Moscow instead of Europe/Moscow, A&B instead of A&B)
  • fixed a bug (a switched-off toggle blended into the card)
  • fixed a bug (API v3 always returned online: null)
  • fixed a bug (an API key description was not saved on creation, and a webhook secret could not be removed)
  • fixed a bug (a key could be created with an expiry in the past, and for a missing key or webhook the API answered “admin not found”)
  • fixed a bug (webhook address validation stalled processing on slow DNS)

🛡 Security ​

  • fixed a bug (when a secret setting was edited, its value was written to the audit log in plain text) — records made before the upgrade stay in the log: if you changed secrets through the web, rotate them
  • fixed a bug (an API key could be granted permissions its creator did not have)
  • fixed a bug (a key of a disabled or deleted admin kept working)
  • fixed a bug (a restricted admin saw other users and nodes in the IP export, analytics reports, the top of the violations report and the node's “Users IPs” window)
  • fixed a bug (notifications about a user went to admins who cannot see that user, general ones to admins without access to the section, and personal ones over WebSocket to all admins)
  • fixed a bug (live audit log events were delivered by the admins permission instead of the audit log one)
  • fixed a bug (the “webhook” action in automations could reach the internal network)

⚠️ Important ​

  • Take a database backup before upgrading. Migrations run on their own at the first start, and rolling back to 4.8.3 is only possible by restoring from that backup.
  • Update node agents to 1.9.0; the panel will offer the update. Without it there is no shaper, and speed limiting keeps working the old way, resetting the root tc qdisc (#281). The agent's compose file needs no changes.
  • Alerts moved to automations. The alert tabs in “Notifications” and their API (/api/v2/alert-rules, /alert-logs, /alert-templates) are removed. Enabled threshold alerts are moved into automation rules during the upgrade, disabled ones are not — their equivalents are among the templates. The alert log stays in the database as history and is cleaned up together with notifications.
  • Retention. Notifications and the alert log older than 90 days are now deleted once a day (“Settings → General → Logs → Notification retention”), and the automation run log is kept for 90 days as well. The audit log is append-only: records cannot be changed or deleted even with a database query, and it is cleaned only by the “Audit log retention” period — forever by default.
  • Time zone. Time is shown in the zone from “Settings → General → Panel → Time zone”, Europe/Moscow by default. Report and backup times and automation cron were converted from UTC to Moscow during the upgrade and fire at the same moment as before. If your panel lives in another zone, set it and check the schedules: they are set in panel time.
  • API keys. Keys of disabled and deleted admins stopped working — if an integration runs on such a key, reissue it from an active admin. A new key cannot get more permissions than its creator has, and user scopes can only be granted by an admin without visibility restrictions.
  • Default limiting speed. If “Settings → Violation Detection → Soft block → Default speed” is 0, it now means “no limit”: the bot button and automatic actions limit nothing. Previously 0 silently became 1024 kbit/s.
  • Bedolaga. The Tickets section works with the current bot — only a configured integration is needed (BEDOLAGA_API_URL, BEDOLAGA_API_TOKEN). Violation warnings, the customer banner and the operator's “Violations” tab need a bot and cabinet with the changes from #3270 and #613, and the customer activity feed — from #3266; until they are merged upstream, the “Warn” button returns a delivery error (the action itself still applies) and the feed is simply not shown. The “Violations: warn the customer on action” setting is on by default — turn it off if your bot is not updated. Setup follows the instructions: EXTERNAL_API_ENABLED=true in the admin, a key with only the violations:read scope, and for the bot — ABUSE_API_ENABLED, ABUSE_API_URL, ABUSE_API_KEY, ABUSE_API_TIMEOUT.
  • Link buttons under ticket notifications (open ticket, customer profile) appear only when “Public panel URL” (APP_PUBLIC_URL) is set to https. Without it the notification comes with action buttons but no links.

📦 Upgrade ​

bash
docker compose pull
docker compose up -d

Do the same in the agent directory on every node. Details are in Upgrade.

AGPL-3.0 with a plugin exception