Skip to content
GitHubSupport

Changelog

The same list the panel shows in Settings → General → Updates. Images and the installer of every version are in the GitHub releases.

  • With a domain, Hysteria2, TUIC, AnyTLS and TrustTunnel on the panel’s own node failed their handshakes after the update to 0.5.0.3: the links no longer pinned a certificate, while the node could keep serving the self-signed one. The node now starts with the panel’s public certificate and gets a new one as soon as it is issued, renewed or uploaded.
  • Lighter on the server: PostgreSQL is asked far less often while nobody touches the panel. Traffic is stored every 10 seconds instead of every 2 (nothing is lost: the node holds what is not stored yet), “online” and the devices’ last seen every 2 minutes, and the torrent blocker no longer rereads every user and slot every 5 seconds. The infrastructure alerts and the settings reload read through a short cache.
  • Lighter in the browser: an open overview asks the server about twice as rarely, the menu no longer polls the overview’s figures on every page, the “Needs attention” card is one request instead of three, and the backdrop stops drifting when the window is not in focus or nobody has touched it for a minute.
  • Autotune has three more ports to move a blocked protocol to: 10443, 11443 and 12443. With almost every protocol on one node, the twelve before could all be taken, and a blocked protocol stayed where it was. mikan update opens the ports of the list in ufw on servers where ufw is on.
  • On Android (with reduced animations or the battery saver on) confirmation windows, such as “Update mikan”, slid off to the right edge of the screen; so did the bar of the actions on selected clients. Both now stay in the middle.
  • In the dark theme of the subscription page and the Mini App, a plan you touched turned white with unreadable text. It is now a darker shade, and the highlight under the finger no longer sticks on phones.
  • The node card’s CPU is the whole server’s (on the panel’s own server the panel and its database count too): it is now called “Server CPU”, with the node’s own share under it.
  • Routing for Clash apps (Settings → Routing): send services (YouTube, Telegram, Discord, AI, games and more) through the VPN, direct, blocked or through one chosen server; Russian banks, state services and marketplaces past the tunnel; your own DNS; a “blocked only” mode where only what is blocked goes through the VPN. Or write your own Clash profile in YAML: the panel fills in the servers. Profiles are YAML now.
  • Happ (Settings → Subscription → Happ): a routing profile Happ adds with the subscription, hidden server settings (with your happ-proxy.com Provider ID), and an encrypted link (happ://crypt5) for the Happ button and the user’s card, so the subscription address stays hidden.
  • Subscription page builder (Settings → Subscription page): the page in your brand: palette, light, dark or the visitor’s, your colour, background, font and corners; a logo or an emoji; the blocks in your order, turned on or off, with your headings, your text and your buttons; which apps to offer on each platform; your own CSS. With a live preview for phones and desktops, the browser and the Mini App.
  • Instructions on the subscription page and in the Mini App: pages you write in Markdown, like “How to connect an iPhone”.
  • Masking for XHTTP (Protocols → a protocol → Masking): padding and its obfuscation, the upload method and sizes, and how apps reuse connections, with ready sets. The strong options need recent apps.
  • Users: folders, the source of each user (created in the panel, bought in the bot, trial, import) and hidden users, all as filters on the Users page. Traffic per node on the node cards, in a chart and on the overview.
  • With a domain, the panel’s own node serves the public certificate on Hysteria2, TUIC, AnyTLS and TrustTunnel, without a pin. Apps that have not refreshed the subscription lose these protocols on that node until they refresh it (they do so every hour).
  • A new domain gets its certificate at once. A site of your own: files in /opt/mikan/data/panel/www are served on the paths the panel does not use.
  • Blocking detection needs devices from two networks before it moves a port.
  • With XHTTP chosen in a Clash app, UDP (calls, QUIC) no longer leaves past the tunnel. XHTTP padding and session settings now reach the apps; REALITY over WebSocket is refused.
  • sing-box apps (SFA, SFI, SFM, SFT) get a whole sing-box config with the panel’s routing and DNS. Happ and INCY can take a routing profile the panel builds from the Clash routing (“auto” in the Happ settings). Hiddify 4 gets AnyTLS.
  • The nodes run mihomo 1.19.32.
  • Project goals: the features money is being collected for, with their progress, on the updates card (Settings → System, can be hidden) and on the documentation site.
  • A tidier panel: Settings and Telegram in sections listed beside the content (a list on phones), cards packed two in a row on wide screens, the page header and the save bar stay in view, the most used things first (the link and QR on top of the client card, a node’s rare actions in “⋯”, a “Filters” menu for clients). Payments in tabs, with the sales switch in the header. Plainer texts: “Clients” and “Protocols” everywhere.
  • Routing on one page: rule lists of your own by link (privWL and other community lists), each sent through the VPN, direct, blocked or through a chosen server; how apps pick a server (the fastest or the first that works, how often to check, a group per country or none); fine tuning (block QUIC, read the site name from the connection, real addresses instead of fake-ip). Your Clash rules are on the same page. The menu on the left folds to its icons.
  • Addons in the menu, in place of Telegram: the Telegram bot and the torrent blocker as tools, with their state, beside the payment methods from the marketplace. The bot keeps working as it did; old links to its page lead to the new one.
  • Traffic filters (Addons → Traffic filters): the nodes refuse users’ traffic to chosen ports, networks and domains, with a preset that closes the mail ports (465, 587, 2525; 25 is closed already), and connections from chosen networks, or let in only those. Nodes older than the panel skip them.
  • VLESS TLS (Protocols → Add): two new protocols on plain TLS with the real certificate of the panel’s domain, like any website, next to REALITY. VLESS · TLS · XHTTP answers strangers as a web server and keeps few connections; VLESS · TLS · Vision works in almost every app, sing-box ones too. A node with a certificate of its own uses that one; other nodes get a self-signed one pinned in the links.
  • A neater panel: no holes on the overview (the server card is as tall as the chart column, its protocols scroll in it), addons in large cards with what each is set to, the left menu folds smoothly and fits short screens (its sections scroll, the server card no longer slides out of it), and the dark theme is mended: readable avatars, a calmer background, selected tabs and sections that stand out, grey disabled buttons.
  • Promo code dates: Chrome no longer turns the year and the hours typed in a row into the year 202600, and a date the panel cannot read is no longer saved silently as none. The same cap on a client’s exact end date.
  • Nodes update from the panel. The Nodes page shows each node’s version and marks the ones behind the panel, with Update and Update all. By default nodes follow the panel by themselves: after the panel updates, they are brought to its version one at a time, the next one starting when the previous one works. A node that fails goes back to its version, you get a notice, and the rollout stops. The switch is in Settings → General → Updates.
  • A node installs only signed releases and never goes back to an older one. Its nightly timer no longer moves it ahead of the panel.
  • Nodes on 0.5.0.1 and older need mikan update on their server once; the panel shows the command. After that they update from the panel.
  • With device binding, the places taken are the bound devices: a phone moving from Wi-Fi to mobile data no longer looks like two devices. Connection addresses are shown separately and take no places.
  • “What changed” in Settings → Updates shows bold text, code and links properly.
  • Torrent blocker (Settings → Clash rules): nodes recognise BitTorrent and drop it; a caught user can be banned on every node for a chosen time. The ban is per user, not per IP. A plain tracker request alone bans nobody: it takes three within ten minutes, since a web page can make a browser send one. Users can be exempted, and bans lifted in their card.
  • Speed test of a node (Nodes → a node): latency, loss, download and upload, with the history. One test uses up to 250 MB down and 100 MB up; a node can be tested once in 5 minutes.
  • Subscription name in apps (Settings → Subscription): the profile name Happ, v2RayTun and Hiddify show, with variables like {name}, {days} and {left}; the announcement takes them too.
  • Close a traffic pool on a plan: the plan’s users lose that pool at once, and its packages are not sold to them. Opening it again puts the plan’s limit back on them.
  • Remove a subscription from the bot: the subscription screen in the bot has “Remove from the bot”. Only the Telegram link goes: the subscription keeps working in the apps and comes back when its link is sent to the bot.
  • Server order (Nodes, arrows up and down): the order of the nodes is the order of the servers in subscriptions, in every app.
  • Promo codes: the bot’s Promo codes button opens the Mini App signed in, one Apply takes both bonus and discount codes (a discount applies at checkout), and discounts are shown in rubles. In the promo code form sums of a RUB code are entered in rubles; a minimum order or a maximum discount needs the code’s currency.
  • A Telegram Stars refund takes back what the payment gave: a new subscription is turned off, a renewal loses its term (and gets its previous plan back when nothing changed since), a traffic package is removed, and the promo code can be used again. Refunds Telegram makes itself do the same. The buyer gets a message in the bot.
  • The bot takes the old subscription links of users imported from Marzban, PasarGuard or Remnawave, and the user’s card shows the old link (Remnawave) or that it still works.
  • Cascade: the relay on the exit node no longer takes a port another program holds, and a relay whose port is taken moves to a free one by itself. The cascade window shows the relay’s state, and an alert comes when it is down. Works with nodes on 0.5.0.2.
  • WARP: the WARP window shows why the check fails (no UDP answer from the endpoint, DNS, TLS and so on), the node writes it to its log, and Check really checks again. The WARP alert in Telegram gives the reason too.
  • Behind a proxy (a protocol with its own listen address) the masking site no longer changes by itself, like the port: a proxy that routes by the site’s name would lose the clients. The update turns it off where it was on.
  • Clash apps (Koala Clash, Clash Verge, FlClash) name the profile with the subscription name from Settings → Subscription instead of the brand.
  • The installer no longer stops when nginx or Caddy holds ports 80 or 443. The protocols whose port is taken get other free ports. With a domain, it offers to add the Let’s Encrypt rule to nginx or Caddy: it backs up the config, checks it and rolls back on an error. Without your consent it only shows the lines to add.
  • A protocol whose port is held by another program moves to a free port by itself, on the panel’s server and on nodes. You get a notice in Telegram, and subscriptions get the new port.
  • Installer screen: long links wrap instead of being cut, and output from other programs no longer stays on the screen. After you finish, the full link and login are printed to copy. The password is shown on the last screen only; get a new one with mikan reset-password.
  • Updates no longer depend on GitHub’s “latest” release: servers read a signed list of releases. When a version cannot be reached directly, they go through the one in between by themselves. Settings → General has a switch for beta versions.
  • Several terms in one plan: a plan can be sold for 7, 30 or 90 days, each with its own price in Stars and rubles (Plans → a plan → More terms). The buyer picks the term in the bot and the Mini App; limits are not multiplied, traffic resets by the plan’s strategy. An invoice keeps the term and price it was made for.
  • Free trial in the bot: pick a plan in Payments → settings, and the bot’s welcome offers it once per Telegram account to people without a subscription or payments. It needs a plan with a term.
  • Confirmation dialogs are no longer cut off on phones.
  • The panel now uses PostgreSQL. The update moves all data over: subscription links, VPN keys, user IDs, counters, payments and settings stay the same. A backup is made first, and the old SQLite database stays on disk. New backups are PostgreSQL archives; old SQLite backups can still be restored.
  • How to get it: on 0.4.4 or older, update to 0.4.5 first with the Update button (or mikan update). After that 0.5.0.0 arrives the usual way, by the Update button or the nightly auto-update.
  • If the move to PostgreSQL fails, the panel stays stopped and keeps both databases; run the update again.
  • Versions now have four numbers: major.minor.patch.revision.
  • From 0.5 on, an update that does not come up goes back to the previous version by itself when it did not change the database schema; otherwise the panel stays stopped with its data for another try. Restoring a backup replaces the whole database.
  • Promo codes, a new page: bonus days, extra traffic into the main limit or a traffic pool, and percent or fixed discounts on plans and traffic packages. Limits by dates, total uses, uses per person, new users or first purchase only, and chosen plans. Buyers enter a code in the Mini App; every activation is kept in the history.
  • Import from another panel: Settings → Import moves users from Marzban, PasarGuard or Remnawave onto a chosen plan, with their traffic used, term, device limit and note. A check shows what will happen first; the import runs in the background. The old subscription links keep working once the old domain points to this panel.
  • Server alerts in Telegram (Telegram → Infrastructure): private notices to the admin about nodes, WARP, cascade exits, protocols, autotune, the TLS certificate and updates, and a public server status in a channel. A node’s public name is set in its settings; without one the node is not shown.
  • Daily database backups to the admin’s Telegram chat, encrypted with your password, at the hour you choose (Telegram → Infrastructure).
  • Five themes: Mikan, Midnight, Ocean, Sakura and Forest, in Settings → General. The choice is kept in the browser.
  • Subscription page and apps: a Linux tab (SlothClash, Clash Verge Rev, Hiddify), ClashFest and SlothClash among the apps, an announcement shown inside Happ, v2RayTun and ClashFest, and your brand in ClashFest and SlothClash (Settings → Subscription).
  • Prometheus metrics at /api/v1/metrics with a read key; the API page (Settings → Security) shows a ready scrape job.
  • A new logo: the painted mandarin in the panel, the browser tab and on the subscription page.
  • Prepares the move to 0.5: the panel and the mikan command understand versions with four numbers (0.5.0.0), and the command updates itself before the panel when a release needs a newer one. Nothing else changes; the database stays as it is.
  • After this update, 0.5.0.0 arrives the usual way: the Update button in Settings → Updates, or the nightly automatic update. It moves the panel to PostgreSQL with a backup first.
  • YooKassa and CryptoBot now come from the marketplace like every other payment method. On the update the panel moves their keys into the adapters, asks the server to install the adapter that took payments (Payments shows a notice until it runs), and keeps everything working: invoices opened before the update are paid through the adapter, the notification URLs set in the YooKassa and CryptoBot dashboards stay valid, and pay buttons in old bot messages still work. Payments → Accepting payments keeps Telegram Stars and the selling switches.
  • Server security: the mikan command no longer trusts any file the panel can write and never follows links in the panel’s folders, so a compromised panel container cannot reach root on the host. The panel and the node each see only their own data folder, /opt/mikan/data belongs to root, and the panel’s memory and both containers’ processes are capped. On the first run after the update the server rewrites compose.yaml (the old one is kept as compose.yaml.old) and restarts the containers once.
  • install.sh checks the signature of the release and the installer’s hash before it installs anything; releases are built only from main, and every CI action is pinned to a commit.
  • Updates and backups: one lock for every server operation, an update that fails rolls back the settings and, when the old version cannot start, the database too; backups are private (0700/0600), restore checks the archive and takes a snapshot first, automatic backups are rotated.
  • API keys: creating one or turning on 2FA asks for the password, changing the password revokes the admin’s keys (a checkbox), a full key can no longer change addresses, keys, payments or the bot, a read key does not see subscription links. Logins are counted atomically and per IPv6 /64.
  • A subscription linked in the bot moves to another Telegram account only when its owner agrees; the Mini App’s sign-in lasts an hour. HSTS is sent while the panel’s certificate is trusted. Names that lead to internal addresses are refused as REALITY targets and as the bot’s proxy.
  • Node sync: a node that is down is retried with a growing pause instead of every few seconds, one bad inbound no longer stops the whole state, counters a node cannot have carried are ignored, a node starts even with broken state files, and the panel stops its workers before closing the database.
  • Bot: notices and Stars payments survive a restart or a Telegram outage, the update position is kept, calls have timeouts, broadcasts are queued in batches.
  • Paid payments that could not be applied are retried until they apply instead of being dropped after a week; the payments history loads in one query.
  • Faster: lighter admin and subscription pages (the Mini App loads less than half the code), indexes for traffic, devices and the audit log, the subscription config is kept for a few seconds, policies go to nodes only when they change. Old traffic and audit rows are cleaned up; idle devices are forgotten after 90 days, users without a device limit get at most 50.
  • Interface: forms keep what you typed when data refreshes, a failed refresh keeps the data on screen with a notice, error and 404 pages, bulk actions touch only the visible rows, contrast up to AA. New GET /api/v1/audit.
  • Protocols behind a TCP proxy (#11): a protocol’s settings have “Behind a proxy (nginx, HAProxy)”. “Where the node listens” picks all addresses (as before), localhost only or an IP of your own, so nginx stream or HAProxy can hold port 443 and route by SNI to protocols on 127.0.0.1:444, :445… “Address for clients”, “Port for clients” and “SNI for clients” give subscriptions the proxy’s endpoint instead of the node’s (empty keeps them as now; with REALITY the camouflage site’s domain stays the SNI). Such a protocol’s port never moves on its own: automatic port moves are off and cannot be turned on, and the panel warns that an automatic camouflage site change may break SNI routing.
  • The installer replaces a Docker without compose v2 (the docker.io of Ubuntu 22.04 and Debian) with Docker from get.docker.com, after asking: the interactive installer has a page for it, a plain install needs –replace-docker. Images, volumes and containers stay.
  • A panel without a domain gets its Let’s Encrypt IP certificate again: the request no longer puts the IP into the Common Name, which Let’s Encrypt refused (badCSR).
  • Payment settings that cannot be read (a busy database) are no longer replaced by the defaults and saved over yours: selling pauses until they read again. Changes on the Telegram page are saved whole or not at all.
  • Traffic packages (#12): Plans → Traffic packages sells extra traffic for the main limit or a traffic pool (Stars, YooKassa, CryptoBot), valid until used up, until the period ends or for N days. The bot has “Buy more traffic” in the subscription screen, the Mini App shows packages for the subscription on screen, and a user’s card lists them with “Add traffic” for a bonus or a compensation. The plan’s traffic is spent first, then the packages, the one that expires sooner first; what is left carries over the traffic reset. A user or a pool that ran out works again right after a purchase, without a new link.
  • Payment methods from the marketplace: Payments → “Payment methods from the marketplace” → Add lists the signed catalog of getmikan/marketplace (YooKassa and CryptoBot to start with) and installs an adapter on the server as a container of its own; its settings form, the notification URL for the provider’s dashboard and the switch are on the same card. The bot and the Mini App get a pay button for it, for plans and traffic packages. The panel never trusts a provider’s notification alone: it asks the adapter for the invoice and compares the amount and the currency with the payment it made. On the server: mikan addon list, install, remove. The built-in YooKassa and CryptoBot keep working as before.
  • Easier to find things: Settings are split into General, Subscription, Clash rules and Security; the Telegram page into Connection, Menu and texts, Notifications and Broadcast (unsaved changes follow you between them); Plans into Plans, Traffic pools and Traffic packages. A plan’s card shows its pool limits, a pool shows its protocols and its limit in each plan. Selling can be switched on right from the Payments page.
  • A domain is taken only when it leads to this server: the panel’s domain in Settings and a node’s domain are checked with public DNS when they or the server’s address change, and saving says where the domain points instead. The installer now also stops on a domain with an extra A record or an AAAA record elsewhere.
  • Safer edits: a protocol’s change that is refused (a busy port, a bad config) no longer leaves part of it saved. “Port is taken” is one rule everywhere (the panel, mikan inbound, the automatic moves): it now sees Hysteria2 port ranges, a cascade’s relay, the panel’s port and a node’s command port. A node that a cascade or the bot’s route to Telegram goes through is no longer deleted silently: the panel lists what uses it. Every error the panel can show has a text, and server addresses are checked by one rule in the panel and the installer.
  • ARM servers (Raspberry Pi 4 and other arm64 machines) install again: the arm64 image carried x86-64 binaries and stopped with “exec format error”. The image build now fails if a binary does not match its architecture. A Raspberry Pi needs a 64-bit OS.
  • API moved from the sidebar to Settings → API (old /api-docs links lead there). The page has “Download OpenAPI”: openapi.json with this panel’s address already in it, ready for Postman, Insomnia, Swagger UI and client generators.
  • Payments warns when the bot has nothing to sell: no plan is on sale with a price for a method that takes payments, so people would only be told to message support. A button leads to Plans.
  • Selling subscriptions has its own switch in Settings. Off, the bot and the Mini App sell nothing, Payments leaves the menu and plans hide their prices; invoices opened before are still applied. New panels start with it off; panels that already set up payments keep selling.
  • The bot can reach Telegram through a node or a proxy, for a server where Telegram is blocked: Telegram → Way to Telegram picks Direct, Via a node (a remote node of the panel; it passes only requests to Telegram, nodes need 0.4.2) or Via a proxy (SOCKS5 or HTTP(S), the password is not shown again). The route is checked before it is saved. Connecting a bot from such a server now says Telegram is unreachable instead of “server error”.
  • Subscription port: Settings → Subscription port moves subscription links and the subscription page to a port of their own, such as 443 or 2053, at once and without a restart. The admin panel does not open there and its port stops showing in links; links on the panel’s port keep working, so clients change nothing. The ports opened at install are one click away, those taken by a protocol are marked, and a protocol of the panel’s own node can no longer take the subscription port (by hand or by the automatic port moves).
  • Hysteria2 with Gecko obfuscation: the new “Hysteria2 · Gecko” protocol, or Obfuscation → Gecko in a Hysteria2 protocol’s settings. Gecko cuts the QUIC handshake into padded pieces of random size, against DPI that tells QUIC by packet sizes. Only mihomo apps that name a core of 1.19.26 or later get it (an older core would fail the whole profile on it); the rest go on with plain Hysteria2, so keep one next to it. Port hopping works with it as with any Hysteria2: a port range such as 20000-30000.
  • Clash rules of your own: Settings → Clash rules takes one rule per line (DOMAIN-SUFFIX, GEOSITE, IP-CIDR, PROCESS-NAME and more, to DIRECT, REJECT, PROXY or a subscription group). They go before the routing mode in every Clash profile; the panel’s and the nodes’ addresses still go direct. Each line is checked on save and a mistake names its line, so a typo never breaks clients’ profiles; the rule types an older mihomo core lacks reach only apps that name a core with them. Example rules are one click away.
  • Own TLS certificates (#9): Settings → Panel certificate → Own certificate takes a chain and its key (files or pasted) instead of Let’s Encrypt, so port 80 is no longer needed: a DNS wildcard from certbot, a Cloudflare Origin certificate or your own CA’s. Nodes → Certificate does the same for a node’s Hysteria2, TUIC, AnyTLS and TrustTunnel; a publicly trusted one goes to clients without a pin, so renewing it breaks nothing. On the server, mikan cert set --cert fullchain.pem --key privkey.pem [--node N] fits a certbot or acme.sh renewal hook, and a renewed file is served without a restart (at once, or within half a minute). The key never comes back from the panel; an expired certificate falls back to the automatic one and says so.
  • Traffic pools (#6): chosen protocols can count to a pool with its own limit, apart from the main traffic — a WL node at 100 GB a month while Germany and Estonia stay unlimited, in one subscription. Make pools on the Plans page, put a protocol into one in its settings, give the pool a limit in the plan or per user. When a pool runs out only its protocols stop (and leave the subscription until the reset); everything else keeps working, and the other way round. Pools reset with the main traffic; the user card, the subscription page and the bot show each pool.
  • Server cascades: a protocol can send its traffic out through another node of the panel — client → node A → node B → internet, so sites see B’s address while clients connect to A. Pick “Way out: Via a node” in a protocol’s settings; the panel opens a hidden relay on the exit node by itself, with a key per source node. Chains of three or more servers work too (Nodes → Cascade sets where a node sends other nodes’ traffic next: direct, its WARP or one more node), loops are refused, and WARP is not needed. Traffic is counted once, on the first node; when the exit node is down the traffic does not fall back to the first node’s address. Nodes → Cascade shows the address sites see through each chain.
  • TLS fingerprints: besides the list, “Own…” takes any uTLS profile name (lowercase letters, digits, _), such as chrome120 or randomizednoalpn, in Settings and in a protocol’s settings.
  • The installer no longer stops at “Package manager: busy” on Debian 12: without the psmisc package it took the always-running unattended-upgrades helper for an apt run and gave up after 10 minutes. It now waits only while apt or dpkg really holds its locks, and names the process it waits for.
  • Pick the TLS fingerprint clients send: Settings → Subscription sets the default for all protocols, and a protocol’s settings can choose its own (Chrome, Firefox, Safari, iOS, Android, Edge, 360, QQ or a random one). Links (fp=) and Clash profiles (client-fingerprint) follow the choice; Hysteria2 and TUIC have no such fingerprint.
  • API keys and an API reference: the new API page makes keys for scripts and integrations (Authorization: Bearer, read-only or full access, an optional expiry, revocable) and lists every method with its parameters, responses, curl examples and a “Try it” button for GET requests.
  • Selling subscriptions: mark a plan “On sale” with a price in Telegram Stars and/or rubles, turn payment methods on in the new Payments section (Telegram Stars needs only the bot; YooKassa for cards and SBP; CryptoBot for crypto), and people buy or renew in the bot and the Mini App. The panel creates or renews the subscription as soon as the provider confirms the payment and the bot sends the link. A renewal adds the plan’s term after the current one and, unless switched off in Payments, starts a new traffic period. Payments has the history and Stars refunds.
  • Cloudflare WARP as a way out for chosen protocols (#4): Nodes → WARP registers a free account in one click (a WARP+ key is optional) or takes your own WireGuard config. A protocol’s settings pick “Way out: WARP”, and a list of domains and networks goes through WARP for every protocol of the node; the rest goes direct. When WARP is down its traffic does not fall back to the server’s own address. The node shows the address sites see through WARP.
  • The panel has a default language, picked at install: the admin panel and the subscription page open in it until a visitor picks their own, and default names (tariffs, the auto-select group, the bot’s menu) are in it. Settings → Default language changes it; “Browser language” keeps the old behaviour.
  • The server’s command line (mikan admin …) is in English.
  • A node joins with one command that installs everything from the latest release; the Nodes page shows it with the join key.
  • A new installer and server menu in the terminal. First the panel’s language, then checks of the server and of the domain’s DNS, REALITY sites next to the server, and the admin’s login with a QR code. Later runs of mikan open a menu: status, updates, logs, access, REALITY sites, nodes, backups.
  • Releases come from GitHub: the image from GitHub Packages, trusted through a signed manifest. Updates back up first and go back when the new version does not start.
  • The panel looks for a new release once a day and shows what changed. Settings → Updates installs it with a button or turns on automatic updates at night; a badge in the sidebar tells when one is out.
  • The Telegram tab of the admin panel animates like the others: cards rise in turn, the unsaved-changes bar slides in and out, menu buttons slide to their new place.
  • The Telegram bot sends through a queue within Telegram’s limits: replies first, then notices, then broadcasts; fast taps show the last screen; flood waits are waited out.
  • Notices at night (22:00–9:00 Moscow time) arrive silently; broadcasts show their progress.
  • New “dawn” background in the panel.
  • The Mini App button next to the chat’s input field is one word, so the field is not pushed out on phones.
  • A REALITY target given by IP shows and checks its site name (SNI).
  • Telegram bot for subscribers with a menu builder in the panel, notifications and broadcasts.
  • The subscription page opens as a Telegram Mini App.
  • New protocols: TrustTunnel, ShadowQUIC, Mieru; shared-key Shadowsocks-2022, Sudoku, Snell.
  • Subscriptions give every app only the protocols it can run.
  • Automatic moves judge a port by the devices that reached it before; no more false “devices cannot connect”.
  • Billing days and device binding against key sharing.
  • VLESS with post-quantum encryption (VLESS PQ).