Hi everyone! I'm working on BibaVPN, an MIT-licensed proxy/tunnel written in Rust, and I've released v1.5.0.
The core uses Tokio. It accepts local SOCKS5 traffic (TCP and UDP) and HTTP CONNECT, then carries it over TLS + WebSocket to a server you run yourself. There are desktop clients built with Tauri and an Android app.
This release focuses on what happens after a connection has been running for hours: backpressure, memory accounting, half-closes, and cleanup during shutdown or reconnect.
A few details that might interest people here:
- TCP streams share a WebSocket connection, with per-stream byte credits and bounded receive/output budgets. A slow destination must not let its sender queue data indefinitely.
- A small
Bytesslice can keep a much larger allocation alive. The buffer accounting now considers retained backing storage, and disproportionately small slices are copied. Receive credits are returned after the socket write completes, rather than when data leaves the queue. - Stream cleanup tracks generations so an old task cannot tear down a newly reused stream ID. TCP half-closes are handled independently in each direction.
Multiplexing still inherits TCP head-of-line blocking; the flow control doesn't remove that limitation.
The project currently helps around 100 people in Russia, and feedback from users is driving a lot of these fixes. I'd also appreciate feedback from anyone working on Tokio networking, particularly on flow control and task lifetimes.