v3.0.0-alpha.6 - 2026-11-13
🎉 New Features
- Add CreateRoute to the Go SDK for the route a REGISTER binds 638f4c2
- Take DNS names in trustedEdgePortAddresses 73da8fd
- Add Connect's cross-EdgePort alterations to both SDKs 5c1842c
- Run Routr 3's own migrations image at the chart's appVersion be90a55
- Make the RTPRelay's autoscaler opt-in with rtprelay.autoscaling.enabled 4be18e2
- Move a PSTN call to the Trunk's next URI on 503 or a transport error 7acd8b5
- Keep the dialog table in Redis so in-dialog requests outlive a restart (#688 by psanders) e373964
🐛 Bugfixes
- End the Go SDK server's connections after 5 minutes so clients find new replicas 36a260c
- Keep a Route on a transport the EdgePort doesn't listen on a0d50a0
- Refuse insecure with a cacert, throw on a missing cacert file 7915fba
- Complete a call on a fresh install with the chart's defaults 6469a82
- Warn instead of erroring while the database or Redis is not up yet 54cc1a3
- Never write a network-form localnet in the new Node alterations 7a617cc
- Leave edgeport.podCIDR off by default 3f94c50
- Log non-SIP UDP datagrams at Warn once per 1,000, without the payload 915e056
- Strip platform headers from in-dialog requests caaff03
- Forward in-dialog INFO, UPDATE and PRACK to the INVITE processor afdd62b
- Choose a Trunk's outbound URI by enabled, priority and weight 2b7cdf9
- Close idle stream connections and cap how many are accepted 2df35e5
- Keep accepting after an accept error that isn't a close deba35c
- Keep a silent WebSocket client from blocking the others 78b1b66
- A client transaction that fails at its first write no longer answers for the caller cc4493d
- Accept apiVersion v3 in every standalone component file (#677 by psanders) 9fb24b1
- Enforce Domain and Peer access control lists (#684 by psanders) dba1ad9
- Refuse disabled Agents and Agent calls across Domains (#679 by psanders) 542b72d
- Apply methods and unknownMethodAction to out-of-dialog requests (#681 by psanders) e2d5288
🏎️ Performance Improvements
- Soak at 70% of the measured limit 8b3296c
- Keep the answer of a non-INVITE over UDP, not its transaction, for Timer J (#689 by psanders) 6523a33
🏗️ Build System
- Bump golang.org/x/net to v0.62.0 in both Go modules efe99bb
- Anchor the Nx workspace root with nx.json so nested worktrees build their own dist a3265db
- Move to pgx 5.9.2 and Go 1.26.11, and gate CI on govulncheck 6074e70
- Print the Go module download and keep it in a BuildKit cache b275e4b
- Pin Go to 1.26.11 and ignore the .charts folder 57b6f66
- Format MDX on commit de421e5
- Publish the Go Echo as routr-echo:-go and benchmark with it (#690 by psanders) 4c84b99
🏗️ Build System
- Pin perfkit v0.2.0-rc.6 (VPC delete retry, settle and Theil-Sen memory rule) 69722f4
- Build the Go job's test database from ops/pgdata-migrations 3e02183
- Check MDX formatting 9236cf4
- Publish the migrations image with every Routr 3 alpha 1fb2198
🪚 Refactors
- Drop the read deadline the WebSocket gate set before the hand-over f3602a7
📚 Documentation Changes
- Use CreateRoute in the Go guide and say when replicas are found 1c70e34
- Stop saying the Node SDK throws where RemoveSelfRoutes keeps a Route 86d9caa
- Record that @routr/processor keeps the Route as Connect does c33da13
- Note Location's startup index retry under v3.0.0 d8cb659
- Point Routr 3 docs and AGENTS.md to its own migrations image 1bb733e
- Name trustedEdgePortAddresses in the EdgePort cooperation diagram 9d7e62d
- Match CORE.md and CONNECT.md to what v3 does adc9f9f
- Describe RoutrOne's in-process handoff as the code does it 2767625
🔍 Tests
- Fail when Connect's alterations and the Go SDK's copy drift apart 5df3778
- Pin recordRouteBetween and routeFromPB in the Connect/SDK parity test 68cc0e2
- Register sinon-chai in client.unit.test.ts so it runs alone 8270a4f
- Synchronize two flaky tests on the event, not on time 318ba1a
💅 Code Style Changes
- Format every MDX page with Prettier 1b7d582
BREAKING CHANGES
- due to 7915fb: refuse insecure with a cacert, throw on a missing cacert file
rctl commands and SDK clients given both --insecure / insecure: true
and --cacert / cacert stop connecting: rctl exits with an error and the SDK constructor
throws. Keep one: remove --insecure / insecure to verify the server with the CA certificate
over TLS, or remove --cacert / cacert to connect in plaintext.