Changelog
Notable user-facing changes to noBGP, newest first.
Entries are named after the agent version, which nobgp version reports. Each entry covers one agent release on stable and the router work that shipped with it. Router and agent versions are independent, so the same number in both means nothing.
Entries below 0.4.116 are named after the component that changed.
When a router release adds a tool or a field, reconnect your MCP client to see it. A client keeps the tool list it read when it connected.
0.4.126 — September 2026
The Windows Firewall rule is named after the profile
- The agent's inbound rule is now
noBGP-<profile>, for examplenoBGP-default. Before, it was named after the tunnel adapter (noBGP-nobgp0), whose number can change. Details - At the next agent start, the old rule is renamed and keeps your edits. ⚠ A rule with duplicates left by a crash, or a rule whose rename fails, is replaced by a new rule without your edits. Check the rule after the upgrade if you edited it.
nobgp removenow removes the rule of the profile it removes.nobgp uninstallremoves every profile's rule and any device-named rule left by an earlier release.- If the agent cannot read the firewall rules,
allow-overlaynow leaves the rule as it is.
nobgp mcp install no longer overwrites another nobgp entry
- If a
nobgpentry in your Claude configuration is not a local node's, for example the public server,installnow stops and asks you to rename it, for example tonobgp-public.--yesdoes not skip this. Details uninstallleaves that entry in place, andnobgp mcp statusreports it as not registered.
A refusal that asks you to elevate now offers admin: "auto"
- Where
"auto"would elevate on that node, the refusal now names it and the account it would run as. One retry then covers a whole fleet. Details
The Windows install command no longer contains your key
register_nodenow returns a Windows command that asks for the key at a hidden prompt, and the key in a newregistration_keyfield. Give the person who installs both (router 0.4.151).- ⚠ The command waits at the prompt when nobody is at the console. For an unattended install, set
NOBGP_KEY_FILE. Details - If you pasted the old Windows command, the key can be in that machine's shell history, and in its Windows security log where process-creation auditing is on. Rotate the key if that matters to you.
Stopping a machine tells you whether its name starts it again
task_stopnow returnsrestartable_by_name(router 0.4.151).falsemeans that provisioning the name does not bring this node back, andnotes[]says why.
A command waiting on stdin is explained
- The
commandtool description now says that a command that reads stdin waits until the session ends, and how to redirect stdin on each platform. Details
0.4.125 — September 2026
A name in use no longer drops
- A name no longer drops while a connection uses it. The agent now renews the name in the background and keeps the address served. Details
- If noBGP no longer knows the name, a running connection keeps running. Only new lookups stop.
- If noBGP is slow or unreachable, nothing changes. The agent tries again later.
A LAN name nobody uses is forgotten in a day
- A name discovered on a member's LAN is now deleted about a day after the last confirmation (router 0.4.150). Before, it stayed for a week. A name in use is not affected.
- The member that holds the name is told that it is gone. The next lookup discovers it again if a member can still reach the device.
- ⚠ Upgrade every member that is below agent 0.4.125. On an older agent, a busy name can drop once a day.
0.4.124 — September 2026
You can keep the registration key off the command line
nobgp registercan now read the key from--key-file,NOBGP_KEY_FILEor--key -(standard input). The file holds the key on one line. Details- If you give two key sources, the command stops with an error. A UTF-16 key file is refused. Save it as ASCII or UTF-8.
- The install scripts now keep
NOBGP_KEYoff the command line too.--keystill works, but other accounts, the shell history and, on Linux and macOS, the system log can see the key.
A Windows machine can keep its own firewall policy
- Set
windows-firewall: respect-windows, or runsudo nobgp config --windows-firewall respect-windows. The agent then installs no inbound firewall rule and removes the old one. Details - The default is
allow-overlay, so an upgrade changes nothing. Thecommandtool, the file tools and published services work without the rule. Without it, another machine cannot connect directly to a port on this host over the overlay. - The rule is now created once and kept, so your edits to it stay.
nobgp uninstallremoves it. - You cannot set this with
node_config_set.
The install script completes registration on RHEL-family hosts
- The install script now completes registration on RHEL, Rocky Linux, AlmaLinux, Oracle Linux and CentOS Stream.
sudo nobgp …also works by name there now. - ⚠ If the script stopped part way on a machine, run
sudo /usr/local/bin/nobgp register. See the troubleshooting entry.
A provisioned machine says which image it started from
/etc/nobgp-imagenames the image and its version./usr/share/nobgp-image/packages.tsvlists its packages. The image version is not the agent version. Details- The image now includes common network tools:
ping,ip,dig,ps, an SSH client and more. network_directorynow reportstask_image_nameandtask_image_versionfor each running provisioned node (router 0.4.149).
You can now stop a machine and keep its node
task_stopstops a provisioned machine and keeps its node, name, labels, grants and node storage area (router 0.4.149). ⚠ The machine's local disk is destroyed. In the web app it is Stop. Details- Provision the same name again to start a new machine on that node. Stopping a stopped machine returns
already_stopped: true.
More included compute on every plan
- From 15 September 2026, included compute goes up: Free from $0.50 to $1 a month, Pro from $1 to $5, Business from $20 to $50. Plan prices and rates do not change. Details
- ⚠ The allowance is an amount of money, not hours. $5 is 250
smallhours or 83mediumhours. - The launch promotion compute goes from $5 to $10.
A node answers to its own hostname
- You can now reach a node by its hostname, for example
nas, even when its noBGP name is different (router 0.4.149). Details - A hostname that two of your nodes share answers for neither. A node stops answering its hostname about an hour after it goes offline.
Smaller things
provision_nodenow takesnetwork_idas well asnetwork_name. Send one, not both.- The
register_nodeone-liner no longer usessudo. Run it as given. ⚠ Before, thesudoform wrote the full registration key to the system log of each machine installed with it.
0.4.123 — September 2026
Traffic no longer goes to a LAN device that moved
- When a member refuses a LAN name it can no longer reach, it now stops delivery at once. Before, traffic could go on to the old address, which may belong to a different machine.
- The name keeps its overlay address. Delivery comes back at the next sync that resolves it. The member writes a log line, which you can read with
node_logs. - Known issue:
nobgp statusstill shows the old LAN address for such a name.
A command with lost output no longer reports success
- A command session that lost output no longer reports an exit code. The next poll returns
resource_exhausted. Sending input to it is refused the same way. - ⚠ How much output was lost is not known. Write the output to a file on the machine and read it with
fs_read, or usecommand_subscribe. Details
0.4.121 — September 2026
Large files are copied and read in full
fs_copyandfs_readno longer cut a file after the first 1 MiB and report success.- A copy that cannot complete now writes nothing. A read that overruns returns what it received and the offset to resume at. To resume, ask for base64.
- ⚠ Before, a truncated file looked complete and its digest matched. Copy again any file over 1 MiB that matters.
Transfers and long commands
- A slow reader now pauses the sender. The transfer no longer disconnects.
- Polling now keeps a command alive. A long, quiet command is no longer ended after one hour.
- A poll now returns in time, so you always get the
command_id.
GPU fields
- A Windows machine no longer reports
"kind": "none". It now sends nogpublock, because it does not check for a GPU yet. A Windows node below 0.4.121 showsnoneuntil it upgrades and reconnects. unifiedis now absent when the machine could not check.falsenow means the accelerator has its own memory.
Node identity and cleanup
- An unclean reset no longer empties the token file and de-registers the machine.
- Temp files left by a crash, including the private key and token, are now removed by
nobgp remove, by uninstall and at agent start. - A refused copy or a lost cancel no longer leaves temp files or open files on the destination.
Other fixes
- On macOS, bare LAN names resolve again while the agent runs.
- The local MCP event resource delivers events again.
eventsis now always a list. event_tailnow acceptswaitas well aswait_seconds.- A KVM now publishes the attached machine under the hostname from its DHCP request.
--nameis repeatable, and--no-lease-namepublishes only your names. - Write tools now state that a write to a router-served tree replaces the whole file. Send the file in one call.
redactnow covers every place the router could write command text.
0.4.120 — September 2026
You can now see how big each machine is in the network directory.
What a node reports
cpu_count(logical CPUs),total_memory(RAM in bytes) anddisk_free_bytes(free space where the agent runs). On a container, CPU and memory are the host's figures.- A
gpublock with the interface (cuda,rocm,metal,rknpuornone), the device count,memory_bytesandunified. - ⚠
nonemeans the machine found no accelerator. Nogpublock means the machine did not answer. Do not read a missing block as "no GPU". - When
unifiedis true, the capacity for a large job istotal_memory. Otherwisememory_bytesis the card's own memory.rocmandrknpunodes report no memory figure. An Intel Mac reportsnone. - A node reports a GPU device that it can see, even if the agent's account is not allowed to open it. Let the job prove access.
Provisioned machines keep to the size you bought
- A provisioned task now has a memory limit and a CPU share for its size.
- ⚠ A task that uses more memory than its size is now stopped. Choose the size you need.
Commands to many machines accept more
workdirand environment variable values now accept",%, carriage return and line feed. A variable name with=or a null byte is still refused, and so are the variables that load a library into another program.
Other fixes
- A normal terminal session end on Linux no longer logs an ERROR.
- A failed file-worker start no longer leaves a dead process.
- Send
expected_sha256only on a chunked upload, not on a single-call write.
0.4.118 — September 2026
You can reach a device that one Linux member sees on its LAN
- Traffic now reaches a device that a Linux member vouches for on its own LAN, such as a printer or NAS. You configure nothing on the member. Details
- Known issue: a member that runs macOS or Windows cannot carry this traffic yet.
A LAN name survives a reboot of its member
- A LAN name no longer stops working after the member that serves it restarts. The member resolves its names again when it starts.
- If a name no longer answers, the member keeps its address reserved and writes a log line. Read it with
nobgp service logsornode_logs. - A member that was up for more than a week no longer loses these names at restart.
Other fixes
- A LAN name that answers only over IPv6 is now refused, with the remedy: publish the device by IPv4 address, or give the name an A record.
- One bad packet no longer takes down a node's overlay. The agent drops it and logs it.
- A node now logs which directory entries it could not register.
0.4.117 — September 2026
An update no longer fails because /tmp is full
- If the temporary directory has no room, the agent now downloads the update to its configuration directory, when that directory has more room. Details
- ⚠ A node that is stuck now needs its
/tmpfreed once, or a reinstall from the install script. After that, it upgrades on its own.
Saving refill settings again waits before it charges again
- After a save tries a charge, the next save waits about five minutes before it tries again (router 0.4.140). Details
A name on your network now means one thing
- A device found on a member's LAN can no longer share a name with one of your nodes (router 0.4.141). The node's name wins. Details
- The week-long wait from 0.4.116 is over. When you rename or delete a node, its name can be discovered on a LAN again.
Tool descriptions
admingoes insidesessiononcommand, insidesourceanddestinationonfs_copyand onfilewithop: "copy", and at the top level everywhere else. Details- Set a command's
idle_timeoutto the total wait you accept, not to the gap between lines.
0.4.116 — September 2026
Usage past your plan is now paid from credit and never invoiced. noBGP's own traffic no longer counts as yours. A LAN name stays on the machine that found it.
A discovered LAN name reaches only the machine that found it
- A name that one node resolves on its own LAN is no longer pushed to every node in the network. Other machines resolve their own bare names again.
- On the machine that found the name, the name now resolves to the device, not to the machine itself.
- The name is not broadcast any more, but a machine that asks for it still gets it.
- Your agent now asks its own LAN first. If this machine can resolve a bare name itself, the overlay steps aside. See A name this machine reaches itself.
nobgp resolvestill prints the overlay address. - ⚠ Reaching the device through another member still times out in this release. Use the name on the machine whose own network sees the device. See A name one member reaches on its own LAN.
- A machine can keep a stale entry for about a week. A restart does not remove it. A fresh install removes it at once.
Platform traffic is not metered
- Keepalives, the metrics push, token refreshes and subscription pushes are no longer measured. An idle node can now show zero traffic, as the pricing page says.
- ⚠ The
control_receiveandcontrol_transmitfigures are removed from the usage breakdown. A client that reads the usage API by axis name no longer receives them. Older periods are not changed.
An old period's traffic reads its real bytes
- The bill, the usage bar, the ring and the chart now read the same record. A period older than about four months no longer shows
0 Band$0.00. The current period was never affected.
The card you last chose is charged
- A card that you change in the billing portal is now the card that is charged. A completed checkout also sets it. See Payment method.
A warning before your credit balance empties
- You now get the 80% and 100% allowance alerts before your credit balance empties and when it does. Each names the axis that runs out.
- If you hold credit, the alerts now measure your included amount plus what your balance buys. See the restriction basis.
- The 100% alert matches the condition that refuses creation. See When credit runs out.
- An account with no spend cap is no longer told that it reached one.
A failed automatic refill tells you
- A new mail tells the account owner when the card refuses an automatic refill. Only a real card refusal sends it.
- A declined refill now backs off. It no longer retries every fifteen minutes.
The smallest automatic refill is $5
- An automatic-refill rule below $5 is refused when you save it. A truncated refill does not buy less than $5.
- A one-off credit purchase keeps the 50¢ minimum. An existing rule below $5 keeps its amount.
- ⚠ An armed rule cannot buy when your maximum has less than $5 of room, and the default is $0. If you arm automatic refills, raise your maximum too.
Raising your spend cap buys the refill at once
- When you save a higher maximum or arm a rule, the refill is now tried at once. A slowdown now lifts in about eight minutes, not twenty-three.
New nodes are accepted at the start of the month
- At midnight UTC on the 1st, paid organizations are no longer refused with
credit_emptyfor up to five minutes.
Usage is paid from credit, not invoiced
- ⚠ noBGP no longer invoices usage. Usage past your included amounts is drawn from your credit balance at your plan's rate. Rates and included amounts do not change. Enterprise is still invoiced against its contract.
- Your spend cap now only limits automatic refills. An empty balance is what refuses, stops and slows.
- A draw from credit is exact. Traffic is no longer rounded up to the whole gigabyte.
set_spend_capandcreditdescribe this. Do not build oncredit_billed. It always readstrueand will be removed.
Sign-in links keep your tokens in the noBGP app
- A crafted sign-in link can no longer put your tokens in a published service's address. Other hosts get a cookie sign-in only.
A node logs its control-channel transport
- One
infoline now names the transport that carries the control channel and its address. The losing connection logs its close. See Log levels.
Smaller changes
- Checking out with a new card makes it your default.
- A mid-period plan change is invoiced at once.
- Switching from annual to monthly re-anchors your billing to the 1st.
- A cancellation now always writes its audit log entry. ⚠ Earlier cancellations have no entry. Ask support if you need one.
- Billing audit entries now include the amount.
billing.credit_buyincludes it on a refused charge too. Older entries are not backfilled. - The your subscription is active again mail now arrives after a recovered payment.
- If your included allowance rises mid-period, the credit it covers comes back and
spent_this_period_centsfalls. Expired credit stays spent.
Agent 0.4.114 — September 2026
At the default log level, a node now logs only about itself.
- An idle node no longer logs peer registrations, peer lifecycle, per-flow and per-ping lines, or the DNS re-arm probe at
info. These are nowdebug. A NAS can let its drives sleep again. See Log levels. - To see peer presence, use
network_directoryorpresence_subscribe. node_logsandnobgp service logscan show older lines on an idle node. The log is not broken.- On a busy directory-joined host, the unelevated account check no longer reports that the node has no usable account.
Agent 0.4.113 — September 2026
- You can now set the address family that a node's connections try first:
transport-family: auto | v4 | v6,--transport-familyorNOBGP_TRANSPORT_FAMILY. See Address family. autois the default and does not change behavior.v4andv6try one family, then fall back to the other. Use this on a machine whose uplink breaks on IPv6. See when a machine's uplink breaks on IPv6.- You can set it remotely with
node_config_set. - ⚠ The shared drive's transfers and the CLI's router calls do not follow it yet. On a host that must send no IPv6, also set
fs: offor block IPv6 on the interface. - When the preferred family is dark, each connect waits a few seconds before it falls back.
Router 0.4.129 — September 2026
You can change plan in the billing portal
- The billing portal now offers both Pro and Business, at both intervals. See Changing plan once you already have one.
- Checkout is still refused while a subscription is live. A cancelled subscription can use checkout again.
- Each plan card now shows its included traffic, rate, storage and compute hours from the plan catalogue.
- A plan switch now removes the old plan's metered lines. Organizations on noBGP's own routers were never affected.
- ⚠ A self-hosted deployment on its own Stripe account must configure its own portal.
Billing emails describe the spend cap correctly
- The cap mails now say that the spend cap only limits automatic refills. They offer two remedies: raise the maximum, or buy credit. See the emails.
- The your subscription is active again mail now says only what a lapse withdrew.
- Allowance mails now speak about their own axis only.
You can read usage per day
- Bandwidth and compute are now reported per UTC day, and the days add up to the period total. The usage screen draws the period from this. Old periods keep their chart.
- Storage and nodes stay period figures.
Router 0.4.128 — September 2026
macOS ._name sidecars are stored
- The share now stores a Mac's
._namefiles, so extended attributes, Finder tags and resource forks survive. See What travels with a file. cpfrom a Mac no longer prints could not copy extended attributes and exits 1.- ⚠ A folder that a Mac wrote to now lists about twice the entries.
.DS_Store,desktop.ini,Thumbs.dbandautorun.infare still discarded. - A sidecar follows the case rule.
An empty credit balance stops running machines
- On a paid plan, running provisioned machines stop within about ten minutes when included compute is used up and the credit balance is empty. They stop as at a deadline. See When the compute budget runs out.
- Buy credit, then provision the name again to bring the machine back. The node keeps its identity, name, labels, grants and storage area. The local disk is lost.
- The allowance mails now name the stop.
Router 0.4.127 — September 2026
Buying credit clears a creation refusal
- On a paid plan, creation is now refused only when an allowance is used up and the credit balance is empty. The error is
resource_exhaustedwithlimit_type: "credit_empty". See an empty balance is what refuses creation. - Under credit billing, the spend cap no longer refuses creation or stops running machines. A self-hosted deployment that invoices overage still refuses with
limit_type: "spend_cap". - Agent enrollment refusals now say what is exhausted and how to clear it.
Your card charges leave a record
credit op=purchaseslists this period's purchase attempts, failed ones included. Useperiod(YYYY-MM) for another month.- Stripe now emails a receipt for each credit purchase to the organization's first Owner. A missing receipt does not mean a failed purchase.
creditstatus showspending_purchase_centsandoldest_pending_purchase_at. Do not add the pending figure topurchased_this_period_cents. It is already included.
Cancelling clears auto-reload and the spend cap
- ⚠ Cancelling now clears the auto-reload rule and the spend cap. A new subscription does not re-arm them. Set them again if you subscribe again.
- The old values go to the audit log as
billing.credit_auto_reload_clearedandbilling.spend_cap_cleared.org_audit_listreturns them. - A lapsed payment keeps both settings.
Smaller changes
cancel_at_period_endon the billing summary now shows portal cancellations.org_createnow puts a new organization on Free, and the three-free-organizations limit counts it.
Router 0.4.125 — September 2026
You can extend a running machine with task_deadline_set
- You can now give a running provisioned machine more time, or less, with the
task_idfromprovision_node. - ⚠
max_hourscounts from now, not from when the machine started. Omit it to reset to your plan's default.0removes the deadline, except on Free. - A shorter deadline does not stop the machine now. Use
deprovision_nodefor that. - You can change only a running machine. Provisioning the name again while it runs takes the next free name and starts a second machine.
- The tool is not available when provisioning is revoked.
The directory shows each machine's deadline
network_directorynow showstask_deadline_atper node. Do not cache a remaining time. The deadline can change.
Enterprise machines have a deadline
- ⚠ An Enterprise machine now stops after 24 hours by default. Set
max_hours: 0for no deadline. Machines already running do not change. See Every machine has a deadline and How long it runs.
Router 0.4.124 — September 2026
- Allowance warning emails now have their own switch. Turning off billing no longer silences them.
Router 0.4.123 — September 2026
Credit purchases complete
credit op=buyand automatic refills now complete. Failed attempts charged nothing, and their reservations are released.
Usage is paid from credit on noBGP's own routers
credit_billednow readstrue. Usage past your allowance is drawn from your credit balance. Your invoice is the flat plan fee.- ⚠ An empty balance now slows traffic, not the spend cap. Buy credit to clear it.
- Free does not change. Its traffic stops past its allowance.
Router 0.4.122 — September 2026
The spend cap limits automatic refills only
- The maximum no longer refuses
credit op=buyby an Owner. The maximum only limits auto-reload. - An automatic refill that does not fit is now reduced to what is left.
auto_refilled_this_period_centsis new oncreditstatus. Headroom isspend_cap_centsminus this field.
An auto-reload trigger of zero is refused
- ⚠
credit op=auto_reloadnow refuses a trigger of0. To refill when the balance is empty, use 1 cent. reload_centsmust be at least 50 cents.
Agent 0.4.112 — September 2026
- A node that cannot pick an overlay address now starts without one.
command,file, the shared drive andnobgp statuskeep working, so you can repair the machine remotely. Before, agent 0.4.111 exited and restarted again and again. nobgp statusnow shows the reason undernetwork.overlay. Seenobgp status.- ⚠ To bring the node back onto the overlay, free space in
100.64.0.0/10or pinoverlay-cidrto a free/20, then restart the agent. What to check, and what to do. - If the agent cannot read the routing table, it no longer takes
100.64.0.0/20by default. It keeps a pinned or previously recorded/20with a warning, and reports the error undernetwork.overlay. - A pinned
overlay-cidrmust still be a/20inside100.64.0.0/10and must not overlap a carrier-grade NAT gateway's/20.
Agent 0.4.111 — September 2026
- On Linux the agent now reads every routing table when it picks its overlay
/20, not onlymain. A node no longer takes a range that another VPN, such as Tailscale, already routes, so it no longer registers and then reaches no peer. See Overlay addressing. - On every platform, a route that claims the whole
100.64.0.0/10is no longer ignored as the agent's own leftover route. - If another product claims only part of the range, the agent now picks a free
/20elsewhere. - If another product claims all of
100.64.0.0/10, the agent logsno free /20 slice available in 100.64.0.0/10 (host is fully claimed). Free space in the range to use the overlay. Pinningoverlay-cidrdoes not override this. What to check, and what to do. - Carrier-grade NAT uplinks, such as Starlink, work as before.
Known issue: on 0.4.111 a fully claimed host stops at startup and keeps restarting. 0.4.112 starts it without an overlay.
Router 0.4.120 — September 2026
You can now rename a node from your assistant
node_renamechanges a node's name and keeps itsnode_id, labels, grants, services, public URLs and storage. Give the new name innew_name. Owner or Admin only.- ⚠ Connected peers resolve the old name until they reconnect. See what is stale.
- After a rename, the old name provisions a new machine with
provision_node, and the new name brings this one back.
Deprovision, then provision the same name, works in one step
deprovision_nodenow waits up to 35 seconds for the node to go offline. A re-provision no longer gets a suffixed name and an empty storage area.- Read
node_offlineon the response. If it isfalse, pollnetwork_directoryuntil the node is gone before you provision. - ⚠ The call can now take up to 35 seconds. A client with a shorter timeout loses the answer, but the node is still deprovisioned.
- If the deprovision cannot record its result, the call now fails. Retry it.
Credit buys charge the method Stripe charges
credit op=buynow uses the subscription's payment method, then the customer default, then the only attached method. The billing summary shows the same method, with itstypeand, for Link or a bank, anaccount.- If several methods are attached and none is the default, the purchase is refused. Set a default in Account → Billing.
Router 0.4.118 — September 2026
creditstatus now hascredit_billed. It tells you if this deployment spends the credit balance on overage. On noBGP's own routers it isfalse: overage is invoiced, andop=buyreturnsfailed_precondition. See Usage credit.- The balance is spent only when both
credit_billedandcredit_enabledaretrue. - Every
creditcall now writes an audit entry that names the operation:billing.credit_status,billing.credit_buy,billing.credit_auto_reloadorbilling.credit_spending. A refused charge is also recorded.
Agent 0.4.110 — September 2026
- On macOS the agent no longer switches on the
pfpacket filter. Before, it could enablepfand leave it on. - ⚠ Upgrading does not turn
pfoff again. How to check, and how to turn it off. - An idle node no longer writes a metrics line every minute. ⚠ Log lines about peers still keep NAS drives awake; 0.4.114 stops those. Use
--log-level debugto see the line, or readnet_metrics. - You no longer need to lower
log-levelto stop these writes. See Log levels.
Router 0.4.117 — September 2026
- A provisioned machine now stops at a deadline.
provision_nodetakesmax_hoursand returnsdeadline_at. If you omitmax_hours, the machine stops after 24 hours on Free, Pro and Business. The maximum is8760(one year). See How long it runs. - On Pro and Business,
max_hours: 0runs one machine with no deadline. Free refuses it. Enterprise machines have no deadline. - At the deadline the machine becomes an offline node. It keeps its identity, labels, grants and storage, and loses its local disk. Provision the same name to start it again.
- ⚠ Machines provisioned before this release have no deadline. They run until you deprovision them.
- There is no idle timer. A machine runs until its deadline, also when it is idle.
Router 0.4.116 — September 2026
sudo nobgp registernow works on a node whose noBGP name differs from its hostname. noBGP matches the machine's key first, then its name. The node comes back as itself, with its labels, grants, services and storage. Seenobgp register.- You no longer need
--nameas a workaround. - A key conflict now names the node that holds the key, instead of
enrollment failed. Seeenrollment failed.
Router 0.4.115 — September 2026
- You can now set whether your organization spends its credit balance with
credit op=spending. It is Owner only, on the REST surface.enabledis required. Withenabled: false, noBGP keeps the balance and slows the organization at its allowance. creditstatus now returnscredit_enabled,spent_this_period_centsandperiod_end.- On noBGP's own routers, the balance is not spent today. Overage is invoiced. See The meters.
create_checkoutno longer says that Business is not on sale. You could buy Business before, and you still can. See Plans.
Agent 0.4.108 — September 2026
- On macOS, a node that an unexpected signal stops now restarts after about 8 seconds. See The node went offline and stayed offline.
- ⚠ On macOS,
sudo launchctl stop nobgp,launchctl killandpkillno longer stop the node. Usenobgp service stop. - Linux and Windows are unchanged.
- When DNS fails, the agent now alternates IPv4 and IPv6 addresses. A dead IPv6 address no longer blocks the working IPv4 addresses. See Node never reconnects after the site's IPv6 prefix changes.
Router 0.4.114 — September 2026
Published services no longer see noBGP session cookies
- A published service no longer receives the visitor's noBGP cookies. Its own cookies pass through.
- A service can no longer set a noBGP cookie. A
Domain=attribute is removed, so its cookies stay on its own hostname. This also stops400 Request Header Or Cookie Too Largeerrors from other services. - ⚠ Script on a service's page can still set domain-wide cookies. See Cookie isolation.
You can now read your plan, card and invoices in one call
billingis a new Owner-only read on the REST surface. Page invoices withinvoice_limitandinvoice_starting_after. See Your plan, your card and your invoices.- ⚠ Read
cancel_at_period_endwith the status. A cancelled subscription staysactiveuntil the period ends. create_billing_portaltakes an optionalflow:payment_method_update,subscription_updateorsubscription_cancel.- Allowance and spend-cap emails now give the reset date. They go to the organization's Owners. See The alert is emailed too.
Agent 0.4.107 — August 2026
- When no network interface is usable at startup, the agent now waits and retries instead of exiting. It starts when a link appears. See Waiting for an interface at startup.
- ⚠ While it waits,
nobgp statuslists the profile asunavailable. Aninterface:name that does not exist makes the agent wait indefinitely.
Agent 0.4.106 — August 2026
- A restart no longer unmounts the drive that the new agent has just mounted. This applies to
fuse,nfsandwebdavon Linux and macOS. See A teardown belongs to the process that made the mount. - On Windows,
SIGTERMorSIGKILLon a terminal session now stops the process and everything it started.
Router 0.4.113 — August 2026
A contested name costs the name, not the connection
- A second machine with the same name now connects under a suffixed name, such as
web-1, instead of being refused. A revoked node is still refused. See A contested name costs the name, not the connection. - ⚠ The machine does not learn its new name. Check the directory for unexpected suffixes, and give machines distinct names.
provision_nodealso suffixes a contested name. Readreadopted_node_idto see what was re-adopted.
Other changes
node_logsnow says how many lines your filters removed and which filters were active. See How much your filters removed.- A deleted peer now stops resolving on a node that was offline when it was deleted. See Peer targets.
- A mid-month subscription includes the whole month's allowance the first time only. A later subscription is prorated, but never lowers the allowance you hold. Free is never prorated. See One billing day.
- A node's traffic and storage now count for the organization that owns the node.
- A node that cannot report its boot time no longer shows 1970. Its health reading uses the connection-based rule.
Agent 0.4.105 — August 2026
node_logsno longer reports a complete, clean log whenjournalctlhides the agent's lines from an unelevated call. It now returnsfailed_preconditionnamingadmin: "true". Retry withadmin: "true".unreachablenow also reports when an earlier log source refused your identity. It rides every page.- On a machine whose
/var/logis in RAM,node_logsagain reads the journal orlogreadbefore the agent's own mirror. The first read after an upgrade no longer returns a near-empty page as the whole log. See The agent's log starts empty after every reboot. - A refusal for unelevated never means root no longer waits for a slow account lookup.
Router 0.4.112 — August 2026
A node now has three states: online, offline and deprovisioned.
A stopped machine is an ordinary offline node
- When the platform stops a provisioned machine, the node keeps its
node_id, name, labels, role grants and storage area. To start it again, provision the same name. suspended_atis removed fromnetwork_directory. Readonlineandoffline_atinstead.- An offline node is no longer deprovisioned after a timer. It stays until you remove it, within the plan's storage limit.
A gigabyte is 1,000,000,000 bytes
- All bandwidth and storage allowances and per-GB rates now use decimal units: 1 GB = 1,000,000,000 bytes, 1 TB = 1,000 GB. This matches the pricing page. Nothing was charged against the old figures.
- Machine memory stays in GiB. For a short time, the web app usage screen can read about 7% low. Details.
Provisioning a name a live node holds gets you a suffix
provision_nodeno longer refuses a name that is online or has an open provisioning task. It uses the next free name,<name>-1to<name>-8.- ⚠ Read
node_namein the response. It is the only place that shows the suffix. Details. - A revoked node's name is still refused.
Renaming a node needs Owner or Admin
- Only Owners and Admins can rename a node now. A refused rename returns 403. Registering, provisioning, deprovisioning, picking a release channel and removing a node stay at Member. Roles & Permissions.
A node's health reading survives a flapping link
info.healthand thehostblock ofnet_metricsno longer disappear when a node reconnects. Only a reboot hides the sample, for about 90 seconds.
Router 0.4.111 — August 2026
task_idinnetwork_directorynow stays on a provisioned node after you rename it. You can deprovision a renamed node.- Provisioning a name again is refused while a container still runs behind a renamed node.
- An old deprovision task no longer removes the node that a newer container runs as.
- ⚠ A node that you rename before its replacement connects shows its previous task id. Wait for
readybefore you rename, then read the directory again. Details.
Router 0.4.110 — August 2026
Every account can provision
- Provisioning is generally available on every plan, with no allowlist. If you were refused before, try again. Provisioning Nodes.
- Limits come only from included compute, the spend cap and a lapsed subscription. These return
resource_exhausted. forbiddennow means provisioning was revoked for your account. You can still usedeprovision_node.
net_metrics health belongs to the current session
- The
hostblock no longer shows a sample from an earlier connection. It is absent for about a minute after a reboot or reconnect.net_metrics.
node_logs says all three things unreachable can mean
unreachablenow names each cause: the log mechanism's reach, yoursincebound, or a log file that the running agent does not write. Details.- The one-line summary now says the answer is incomplete on every page that has the field.
A node's identity is its key, not its name
- A reconnecting agent is matched on its key. If you edit
node-nameon the machine, it no longer renames the node or creates a second node. Node Identity.
Router 0.4.109 — August 2026
Every subscription bills on the first of the month
- New subscriptions bill on the first. A mid-month start pays a prorated fee and gets a full month's allowance.
- The spend cap now bounds the invoice. On an annual plan, the cap is still per month. One billing day.
A billing alert stops naming a limit that has moved
- Allowance and spend-cap alerts clear when you upgrade or raise a limit. A later real crossing now alerts you again. Allowance alerts.
network_directory health belongs to the current session
- An online node no longer shows a
healthsample from an earlier connection. It is absent for up to about 60 seconds after a reboot or reconnect. An offline node keeps its last sample.network_directory.
Two things worth knowing before you trust a log
- Known issue: A log file can come from an earlier agent process. Check
sourceandpathfirst. Details. - Known issue: A
sincebound uses the node's clock. On a machine with no real-time clock, read a boot withsinceomitted. Details.
feedback_submit is not only for unattended sessions
- Use
feedback_submitalso when a human is in the session.
Router 0.4.108 — August 2026
network_directorynow reportsonline_at, the start of the node's current connection. A value later than your action means the node came back.- ⚠
online_atis not a liveness flag. An offline node keeps the start of its last session. Read it withonline. - To wait for a node you disrupt, subscribe to presence events first.
network_directory.
Router 0.4.106 — August 2026
No plan caps devices any more
- Free's 25-node cap is removed. Every plan has unlimited nodes.
limit_type: "nodes"no longer occurs. Plan limits.
On Free, passing the bandwidth allowance stops the traffic
- A Free organization over its 50 GB now has data traffic stopped until the period rolls over or it upgrades. On a paid plan nothing is stopped: a reached spend cap or a lapsed payment still throttles to 1 Mbit/s per node. Details.
- Nodes stay online. Listing,
stat,mkdir, delete, rename and lock still work. Transfers, service traffic, newcommandsessions and file reads and writes stop. - Drive URLs and mounts return
402 Payment Required. Tools returnresource_exhaustedwithlimit_type: "bandwidth".file op=fetch_urlstill works. - ⚠ After an upgrade or period roll, traffic comes back within a few minutes, not at once.
Router 0.4.103 — August 2026
Compute is metered, and every plan includes some
- Provisioned nodes bill by the minute. Included compute: 25 hours on Free, 50 on Pro, 1,000 on Business. A
mediumhour uses three hours, alargehour six. Provisioned compute. - New classes:
large(2 vCPU / 4 GiB) at $0.12/hour andxlarge(4 vCPU / 8 GiB) at $0.24/hour. - Known issue: a
largeorxlargerequest can be accepted and then fail to start. - Any member can read usage per class with
compute_usageon the REST surface.
Reaching a limit suspends a machine, it never destroys one
- A compute limit, the spend cap or a lapsed payment now stops the container. The node keeps its identity, labels, grants and storage. Provision the same name to resume. The container's writable layer is not kept.
- The suspended state was removed in 0.4.112. When noBGP stops a machine.
The spend cap starts at $0, and covers compute too
- An organization with no cap now has a $0 cap. The cap covers bandwidth and compute. Allowance alerts now include compute. The spend cap.
Control-channel traffic is no longer billed
- Keepalives, metrics pushes, token refreshes and subscription pushes are no longer billed as bandwidth. An idle node can now show zero traffic. The meters.
Plan changes
- Pro is $20/mo ($200/yr). Allowances do not change.
- Business is $200/mo ($2,000/yr): 1 TB bandwidth then $0.10/GB, 1 TB storage, 1,000 compute hours, unlimited nodes. Plans.
- An account can own at most three Free organizations. Details.
Router 0.4.102 — August 2026
- Networks and services are now unlimited on the Free plan, as on every plan. No action is necessary. Plan limits.
Router 0.4.101 — August 2026
One meter: bandwidth
- Nodes and storage are no longer billed. They are plan limits. Bandwidth over the allowance costs $0.12 / GB on Pro.
- Free: 50 GB bandwidth, 25 nodes, 10 GB storage. Pro $19/mo ($190/yr): 100 GB bandwidth, unlimited nodes, 100 GB storage. Plans.
- The $99 Business plan is retired. Existing organizations on it keep it.
- The storage cap now applies on paid plans too. Delete always works. At the storage cap.
provision_node is sized by class
- Use
class:small(0.25 vCPU / 0.5 GiB) at $0.02/hour ormedium(1 vCPU / 2 GiB) at $0.06/hour. The default issmall. Compute classes. - ⚠
cpuandmemorynow returninvalid_args. Sendclassinstead.provision_node.
Router 0.4.99 — August 2026
- The audit log records entries again. On router 0.4.98 it recorded nothing.
- ⚠ Entries for calls made on 0.4.98 cannot be recovered. No tool call failed because of this. Audit log.
Router 0.4.98 — August 2026
- The audit log now records calls that address a node:
command,fileandfs_*,node_logs,node_config_get/node_config_set,net_*and the subscribe tools. Failed and denied calls are recorded too. - The entry goes to the organization that owns the node. Arguments and command text are not recorded.
- ⚠ The log now grows with activity. Each
fs_readcall adds one entry. Audit log.
Agent 0.4.104 — August 2026
- An expired, idle leased overlay address is now reserved, not released. Quiet connections keep working, and packets no longer go to the wrong machine. Overlay Addressing.
- A jump in the machine's clock no longer makes addresses in use look idle.
Agent 0.4.103 — August 2026
- On firmware that keeps
/var/login RAM, the agent log now survives a reboot. The agent writes<config-dir>/nobgp.log, up to about 20 MiB. Linux only. Details. node_logsnow says when yoursincebound removed lines, and when the lines come from a file the running agent does not write.- A node with no usable non-root account now says so, instead of telling you to configure one. Details.
- Known issue: This release releases an expired, idle leased overlay address. Upgrade to 0.4.104. Overlay Addressing.
Agent 0.4.102 — August 2026
- After a router deployment, nodes now reconnect at spread times (±25%), not all at once. Backoff, exit codes and
router.control_reconnectsdo not change.
Agent 0.4.101 — August 2026
- On an overlay-root Buildroot appliance, the agent now starts at boot. The boot link goes to
/etc/kvmd/user/scripts/S99nobgp. - ⚠ If 0.4.100 is installed on such a machine, run
nobgp upgrade, thennobgp service restart. Details.
Agent 0.4.100 — August 2026
- On a packageless Linux with busybox init,
nobgp service installnow works and the agent starts at boot. - ⚠ If 0.4.99 left the service half-installed, run
nobgp service startornobgp service restart. Details.
Agent 0.4.99 — August 2026
Packageless Linux images install
- The one-line installer now installs on a Buildroot image with no package manager. The binary goes to
/usr/bin/nobgp, config to/etc/nobgp/.nobgp upgradeworks. - On a read-only rootfs, set
INSTALL_DIRto a writable path that survives a reboot. - No shared drive backend is installed.
A busybox-init box gets a service — but not in this release
- Known issue: The service install fails on busybox-init images. Use 0.4.100.
Windows: a webdav drive cannot read a file over ~47 MiB
- Known issue: Windows' WebDAV client refuses files over 50,000,000 bytes with
Permission denied. The write succeeds, but that machine cannot read the file. Usewinfsp, or raiseFileSizeLimitInBytesand restartWebClient. Details.
Agent 0.4.98 — August 2026
A node now remembers the key of each peer and warns you when that key changes.
- A node records the public key of a peer the first time the two nodes talk. It checks every later session against that key. The check is on by default.
- ⚠ The check finds a key that changes after the first contact. It does not find a key that was wrong from the first contact.
- To confirm a fingerprint, compare it with
registration.agent_key_idinnobgp statuson the console of the peer. - The new
nobgp peerscommand lists the pinned keys. Add--jsonfor scripts. It also works when the agent is not running. - The new
peer-key-pinningsetting takeswarn(the default: log atERRORand continue),enforce(refuse the session) oroff. A refusal stops one session. It never stops the control channel of the node. - ⚠ A rebuilt node gets a new key under the same node ID. With
enforce, its peers refuse it until you accept the new key on each peer. Useenforceonly on a fleet where you do not often rebuild nodes. - To accept a rebuilt peer, run
nobgp peers --forget <node-id-or-name>on each node that talked to it. You do not need to restart.--forget-allresets all peers. - With
warn, the node reports the mismatch on every session until you resolve it. - The pins are in a
<profile>-peerkeys.jsonfile beside the profile. If the agent cannot read the file, it keeps the pins that it has. If you delete the file, the pins are cleared. - ⚠ You cannot change
peer-key-pinningwithnode_config_set. Set it on the machine withnobgp config --peer-key-pinning.
Agent 0.4.97 — August 2026
This release completes the QUIC change and fixes Windows upgrades, mount status and a shared-drive setting.
A slow machine keeps its QUIC connection
- The QUIC idle timeout of a node is now 120 seconds, up from 60. A healthy connection no longer drops when a keepalive is a little late. Nodes on
wssdo not change. - On QUIC,
router.connectedinnobgp statuscan now take up to 120 seconds to show a silent outage. - On QUIC, the offline short-circuit of the shared drive now starts after about three minutes, not two.
Fixes
- ⚠ On Windows, an upgrade no longer makes
nobgpfail withAccess is deniedfor accounts that are not Administrator. The next upgrade repairs a machine that has this problem. See the troubleshooting entry. info.mount_readableinnetwork_directorynow changes when a mount fails. The node checks it on every cycle, also while it retries the mount.- ⚠
webdav-proxy-ownerscannot be enforced. A node with this key now refuses all callers to the shared-drive proxy and logs anERROR. If you set this key on a node, clear it. ⚠ Local processes on the node can still reach the proxy. - When the install script runs itself again under
sudo, it now writes to a temporary file and checks it first. Thecurl … | sudo shform is not affected.
Router 0.4.97 — August 2026
A node that is gone no longer shows as online, and QUIC connections get more margin.
A node that is gone no longer reads online
- A node that disconnected while its router restarted no longer shows
online: trueinnetwork_directory. A sweep closes these records every hour. - For a record that the sweep closes,
offline_atis the time of the sweep, not the time of the disconnect. presence_subscribesends noofflineevent for such a node. If you must not miss a departure, also check the directory.
A slow machine keeps its QUIC connection
- The QUIC idle timeout of the router is now 120 seconds, up from 60. It takes effect when the node runs agent 0.4.97. The router still finds a dead node within 90 seconds.
- The router no longer sends its own QUIC keepalives. The 25-second keepalive of the agent does not change, so nodes behind CGNAT are not affected.
Agent 0.4.96 — August 2026
Both known issues of the previous span are fixed.
nobgp status shows a lost router connection
router.connectedinnobgp statusnow changes tofalsewhen the node loses the router.- The new
router.sincefield shows when the current state started. The newrouter.offline_for_secsfield shows how long the link is down. Both fields are also in the local MCPstatustool. - A silent link failure shows within 68 seconds on
wss. On QUIC it shows within about 60 seconds, and within 120 seconds from agent 0.4.97. - While the link is down,
router.transportandrouter.remote_addrshow the last connection.
The shared drive fails fast when the node is offline
- After about two minutes offline, a shared-drive operation now fails at once. It no longer waits for a network timeout. The node retries the work when it reconnects. See a node that already knows it is offline.
Fixes
fs_grepnow reports the paths that it could not read. This is the agent half of router 0.4.96.
Router 0.4.96 — August 2026
Searches report what they did not search, and Windows copies over WebDAV work.
A search tells you which paths it did not search
- ⚠
fs_grepandfs_grep_subscribenow returnunreadable_pathsandunreadable[]. Each path has a reason:not_found,permission_denied(retry withadmin: "true") orunreadable. - Trust a zero result only when
skipped_filesandunreadable_pathsare both 0. A node below agent 0.4.96 always reports 0, so check itsinfo.agent_version. See A zero is only a zero.
Tool descriptions warn about Windows script encoding
fs_write,fs_editandfilewrite UTF-8 without a byte-order mark. Windows PowerShell andcmd.exedo not read such a script as UTF-8, so characters outside ASCII break.- ⚠ Keep a
.ps1,.bator.cmdscript to ASCII. Or send it throughcommand'sscriptfield withshell: "powershell".
Fixes
- A copy onto a Windows
webdavdrive no longer fails with0x80070021.Copy-Item,cmd.exe copyand an Explorer drag now work. A lock on a directory is still refused with423.
Agent 0.4.94 – 0.4.95 · Router 0.4.94 – 0.4.95 — August 2026
The shared drive and the log tools now report errors correctly. Router 0.4.94 fixes the known issues of the span below.
The shared drive reports what the server refuses
- ⚠ A rename that the server refuses now fails, and the file stays where it was. The same applies to a new folder whose parent is gone.
- A drive that cannot reach the server no longer shows folders as empty. A listing now waits for the connection.
- A rename made while the node is offline, or while the file uploads, is kept. The node sends it in order when the connection returns.
Known issue: while offline, a listing or rename on the shared drive can block for up to a minute, and nobgp status can show a lost connection as healthy. Agent 0.4.96 fixes both.
Log searches end with a clear answer
node_logswith apatternthat matches nothing now returns an empty result, not an error.- Each page now has a
scannedcount of the lines it examined. - When the log goes back no further, the search ends with success and an
unreachablenote. To read more, runnobgp service logson the node.
The known issues of the previous span are fixed
- A strict client can now use the flat node reference on all 16 tools.
node_config_setnow writes only operational keys. It refuses all other keys, includingrouter,insecure,quic-cert-pin,encryptandauto-upgrade.- Files in a renamed folder on a
fusemount can be read at once.node_logspaging always ends. A trailing slash in an NFS mount point no longer causes remounts.org_display_name()no longer answers a caller who is not a member.
Fixes
- An orderly restart no longer logs
reading from TUN: file already closedas an error.
Agent 0.4.84 – 0.4.93 · Router 0.4.82 – 0.4.93 — August 2026
The MCP tools get one result shape and six new tools, with many fixes for fleets, files and the shared drive.
Every tool result has one shape
- ⚠ Every result is now one envelope.
call_id,op,doneandduration_msare on the outside, and the payload is under a key with the tool name. This breaks a client that reads fields at the top level. See The result envelope. - An MCP failure now carries
code,message,call_id,retryableanddetails. An error names its node, for exampletarget_unreachablewithdetails.offline_at. adminon the tools that run something is now a string:"true","false"or"auto"."auto"runs at the identity that the node can offer. Every result reportsadmin_used.- You can name the node with
node_id, ornetwork_name+node_name, at the top level of the arguments. Do not also send the nested form, or you getinvalid_args.
New tools
node_logsreads the agent log of a node. It takeslines,since,min_level,patternandcursor.service_checktells you if a service backend is up:reachable,unreachableornot_applicable.fs_copycopies one file between two nodes in one call. Neither node needs a route to the other.node_config_getandnode_config_setread and write the settings of a node over its control channel. Each key returnslive,restart_requiredorrefused.feedback_submitsends free-text feedback to the noBGP team, up to 50 per organization per day.
Commands on a node and on a fleet
- You can read
commandoutput again. Sendnext_output_offsetback asoutput_offset. The newest 1 MiB is kept.idle_timeoutis limited to 100 s. command_subscribetakesscript,shell,workdirandenv, so one dispatch runs on Linux, macOS, Windows and OpenWrt.- A signal result now shows
signal_delivered,signal_mechanismandsignal_target.stderris now separate fromoutput. - Output from Windows with characters outside ASCII now comes back as UTF-8.
- ⚠ On macOS, an
admin: "true"call uses thePATHof root, which does not include/usr/local/bin. If you get exit 127, use the absolute path.
Files
- ⚠ The default
max_bytesoffs_readis now 32 KiB, down from 256 KiB. Usetruncatedandnext_offsetto read the rest. transfer: "url"gives a short-lived/xfer/URL that a browser, CI orop=fetch_urlcan fetch. It works from router 0.4.87.expected_sha256is now checked on the shared drive and on node storage areas. A mismatch returnsprecondition_mismatchand does not change the file.- A failed write now removes the parent directories that it created.
fs_grepreturns its matches again when you send aprogressToken.- A recursive delete inside
/tmp,/var/tmporC:\Windows\Tempno longer needsforce: true.
Watching a fleet
fs_subscribeandpresence_subscribetakekeep_seconds, up to 24 hours.presence_subscribeadds areadyevent when a session holds for 5 s. Wait forreadyafter a provision.- A noBGP write shows in
fs_subscribeascreate, notwrite. net_metricsnow reportshost.cpu_percent,mem_free_bytes,load1andat.load1is not available on Windows.network_directorynow showsinfo.fs_mountandinfo.mount_readable.
The shared drive
- When you rename a folder, its cached files move with it, and a queued save uses the new name.
nobgp statusshows anfs.unreadableline when the agent cannot read its drive, with the remedy. On macOS it names the Full Disk Access grant.- A Mac that cannot mount after a change to
fs:now repairs itself. - A refused write-back is kept and listed under
fs.conflictsinnobgp status. - File locks now survive a router deploy.
- A delete now answers at once. The names
.nobgp-trashand.nobgp-upload-*are reserved. - The Free storage allowance is enforced:
507 Insufficient Storageon the drive, andresource_exhaustedonfs_write,fs_mkdirandfs_copy. Deletes and moves are always allowed. This is off until enforcement is switched on.
Staying connected
- A sleeping laptop no longer counts as a flapping node, so its agent no longer restarts.
- A dropped control connection reconnects without a restart. In
nobgp status,router.quic_reconnectsis nowrouter.control_reconnects. - A node whose DNS fails stays reachable.
nobgp service restartnow schedules the restart and returns. Exit 0 means that the restart is scheduled.- A change to
fsin the config no longer reloads the agent. Restart the agent to apply it. - A deleted name leaves the directory of every node at once.
Billing and limits
- Per-call rate limits apply: 600 calls a minute with a burst of 120, per caller and per target node. A refusal is
rate_limitedwithdetails.retry_after_ms. - The spend cap now limits only overage. A cap of
0means no overage. - Allowance alerts at 80% and 100% now reach every plan, including Free.
- Bandwidth throttling starts only when enforcement is on.
- A personal organization shows the name or email of its owner instead of an ID.
- MCP calls now appear in the audit log of the organization. The router no longer sends command text, stdin, output or caller emails to product analytics.
Smaller changes
nobgp statusaddsfs.no_fallback,fs.locking,fs.conflictsandfs.unreadable.network_directoryaddsinfo.healthandinfo.writable_roots./mcpand/api/v1support gzip.- Provisioned node images run
tinias PID 1, so a package install no longer hangs. - The router and the agent use Go 1.26.7.
Known issue: a code review found defects in this span, for example the flat node reference on 12 tools and the keys that node_config_set could write. Agent 0.4.94 and router 0.4.94 – 0.4.95 fix all of them.
Agent 0.4.83 — August 2026
You can now restart a node remotely
- ⚠
nobgp service restartnow schedules the restart outside its own process tree and returns about two seconds before the restart. Exit 0 means "scheduled", not "back up". Confirm withnobgp service status. - A restart from a noBGP command session no longer leaves the node down until someone reaches its console.
- If the host cannot schedule the restart, the command tells you. In a noBGP command session it refuses and names a local console or a reboot. In a local shell it warns and restarts in place.
Nodes stay connected
- A node on WebSocket now reconnects inside the running process after a dropped control connection, as a QUIC node already did. It no longer exits and rebuilds its tunnel and shared drive.
nobgp statusrenamesquic_reconnectstorouter.control_reconnects. Read it besiderouter.transport.
The shared drive
nobgp statusshows a newfs.no_fallbackline on a host that can run only one filesystem backend. Where a fix exists, the line names it, for example installing WinFsp on a Windows node.- A busy answer that outlasts the retry budget now reports the status it saw, not
context deadline exceeded.
Diagnostics
net_interfacesnow returns anoverlayblock: the tunnel interface, its slice, and the address the node's own name resolves to. It needs this agent release and router 0.4.81.- A name the router withdraws, for example a deprovisioned peer, now stops resolving at once. Its address stays reserved.
Fixes
- Installing a database server, for example
mysql-server, on a provisioned node no longer hangs. A container provisioned before this keeps its old image. Provision the name again to move it to a current image. - An unelevated file operation no longer fails with
fs worker is gone.
Router 0.4.81 — August 2026
You can now send a whole script to a node
commandtakes ascript: a whole script body with real newlines and no escaping. Sendcommandorscript, never both. On Windows the body runs as a batch script, or as PowerShell withshell: "powershell", without the 8191-character line limit.scriptis refused on a node that never reported its OS. Sendcommand, or setshell: "powershell". A body over the platform limit (about 9 KiB batch, 12 KiB PowerShell, 117 KiB shell) is also refused. Write it withfs_writeand run its path.- A Windows call that exits 255 with no output and no
shellnow returns ahintwith the two ways through.
Diagnostics
- ⚠
net_interfacesnow returns anoverlayblock with the node's TUN interface, its/20slice, and the address its name resolves to on that node. The node must run agent 0.4.83. Do not use the interface'saddrsfor this. - The router now withdraws a deleted or deprovisioned node's name from the other nodes' directories. A node needs agent 0.4.83 to act on it.
Searching and moving files
fs_grep_subscribenow takesadmin, asfs_grepdoes. A node whose owner refuses elevation reports that as its own event, and the search continues.- A file transfer no longer breaks when a follow-up call reaches a different server. Listings, stats and other one-shot operations are not forwarded. If one names the owner, retry the call.
Agent 0.4.79 – 0.4.82 · Router 0.4.77 – 0.4.80 — August 2026
Windows nodes change how they mount the drive. Read the first section if you run one.
Windows nodes now mount the drive with WinFsp
- ⚠ From agent 0.4.82,
fs: autoselects WinFsp on Windows where the driver is present, instead of WebDAV. This happens without notice, also where rclone, sshfs-win, Cygwin or MSYS2 installed WinFsp. Setfs: webdavto keep WebDAV, orfs: offfor no drive. - Renaming a file is slower on WinFsp than on WebDAV. Agent 0.4.82 should reduce the gap; it has not been measured again.
- Renaming a file to a different capitalisation, for example
report.txttoReport.txt, now works.
File locks on the shared drive
- An interrupted copy no longer makes a file unwritable. Copying a file such as an
.msiin Explorer no longer fails with0x80070021. From router 0.4.80, every lock expires after at most ten minutes. - From router 0.4.80, a lock applies across the whole service and is released when the node that holds it disconnects.
- A drive
LOCKand afile op=locknow contend on the same file. Locks stay advisory. - ⚠ From router 0.4.80, a lock on a whole folder is refused with
423. Lock the files you write instead.
What the drive does not carry
- ⚠ The drive does not carry the extra streams Windows attaches to a file. A file copied through it loses its mark-of-the-web without a prompt, so Windows treats it as locally created.
Deleting and mount health
- From router 0.4.77, a delete answers at once, and every server sees it at once.
- From agent 0.4.82, an
nfsmount that disappeared no longer reports healthy. The node mounts it again. - From agent 0.4.82, a refused write can no longer overwrite the winner's bytes. The conditional write holds.
Nodes that go quiet stay reachable
- From agent 0.4.80, a node whose DNS lookups fail stays reachable. It uses the address its connection last reached.
- From router 0.4.79, a session that failed because the node could not reach the service is retried once.
- From agent 0.4.82, an upgrade download that ran out of disk can start again.
- From router 0.4.77, a write that was not delivered is no longer reported as delivered.
Writes are verified end to end
- A file written through the tools is now verified end to end, so a corrupted transfer fails. Send
expected_sha256tofs_writeto also check the leg between you and the service.
Accounts and sign-in
- From router 0.4.78, a name that Google or SSO provides after sign-up fills an empty profile name at your next sign-in. An existing name is not overwritten.
- After an email-code sign-in, the sign-in page prefills your address on your next visit.
- A name of only spaces is no longer stored. An invitation with a stray tab no longer creates two grants.
For MCP clients
- From router 0.4.77, clients can cache the tool list.
Agent 0.4.56 – 0.4.78 · Router 0.4.57 – 0.4.76 — August 2026
The shared drive now mounts in the way the machine supports. No action is needed beyond upgrading.
Your node picks how it mounts the drive
- The agent tests FUSE, NFSv4, WebDAV and WinFsp on the machine and uses one that works.
nobgp statusandnobgp showreport the result. - New
fsconfig key:auto | off | nfs | fuse | webdav | winfsp.autois the default. The agent uses an explicit choice or refuses it, and never replaces it. fs: offmounts nothing and logs why once.nobgp showreports thefsselection,fs-backendandfs-error.
The drive is faster
- Listings and file bytes are cached for every backend. Repeat reads of an unchanged file are served locally.
- ⚠ Set
fs-cache-ttl(flag,NOBGP_FS_CACHE_TTL, or profile) with a unit, for example30s. The default is 30s, the range 0–10 minutes. The agent ignores a value without a unit and keeps the default. - NFS writes on Linux now run at full speed.
Your data is safer
- Two nodes that create the same file at once no longer destroy one copy. The second writer fails, and its bytes stay on the node.
- From router 0.4.76, a conditional write is checked again when the upload completes. A losing write gets
412. - A queued save now survives an agent restart, including an automatic upgrade.
- An append now writes at the correct offset.
- Names are stored exactly as written and are unique without regard to case, so
case.txtandCASE.TXTcannot both exist. - Deleted or overwritten files are recoverable for 7 days. Contact support.
Errors on the drive are clearer
- From agent 0.4.77, a short busy answer (
429,502,503,504) is retried for up to 5 seconds and no longer shows asInput/output error. Details - From agent 0.4.78, a mount left by a killed agent is removed at startup, also on a node with
fs: off. Linux and macOS only. - From agent 0.4.78, the agent no longer restarts when it writes its own profile file.
- A busy mount point now names the process that holds it. The agent does not stop that process. A mount path that contains a space now works.
fs_lockinginnetwork_directoryshows what file locks a mount guarantees.- macOS now mounts over NFS, where a lock that cannot work fails instead of reporting success.
- ⚠ On macOS, the agent service cannot read the node's mount. Grant the
nobgpdaemon Full Disk Access on that Mac. Or address the storage through the router: a network's drive by network name, or the node's area withstorage: true. - WebDAV needs
davfs2, which some Linux distributions do not install and Synology does not offer. Without FUSE or NFS, such a node runs without the drive.
Windows
- WinFsp 1.10 or newer is available as an opt-in backend. Set
fs: winfspto use it. - Editing a file through the file tools now works on Windows.
- Explorer now shows the drive as noBGP.
macOS
- Correction: WebDAV on a Mac works. See the numbers.
nfsstays the default. - The macOS binaries are now signed with a Developer ID certificate, so a Full Disk Access grant survives an upgrade.
Storage and billing
- The usage screen now shows node storage per node, beside the per-network view.
- A network deleted mid-period that was billed now shows on the usage screen.
- A deprovisioned node's storage is released after 30 days.
network_directoryshows which backend each node mounted with.
See Plans and billing and What the mount contains.
Nodes
- A network rename now reaches mounted nodes at once.
- Provisioning a name that is in use now replaces the node that provisioning created. A node you registered by hand is still refused.
nobgp registernow re-registers a node whose token expired.
Reliability
- A restarted agent no longer stops its node accepting sessions with
destination recently closed. fs_readnow reads files larger than 1 MiB on the shared drive and a node's storage area. A partial page returnsdone: false. Continue fromoffset + size.
Agent 0.4.55 — August 2026
Files that went missing from the mounted drive on macOS and Windows are back.
- Listings under
node/andnetworks/<name>/no longer lose entries on macOS and Windows, at any depth. - A network name that contains a space now lists correctly.
Agent 0.4.54 — August 2026
The mounted drive holds two folders now: the machine's own storage, and one per network.