flutter_quic library

A Flutter plugin for QUIC protocol support using Quinn Rust library.

This library provides a complete wrapper around the Quinn QUIC implementation, exposing both Core API (direct 1:1 Quinn mapping) and Convenience API (simplified wrappers for common use cases).

Core API

Direct mapping to Quinn's API surface:

  • QuicEndpoint: QUIC endpoint management
  • QuicConnection: Connection handling
  • QuicSendStream/QuicRecvStream: Stream operations

Convenience API

Simplified wrappers built on Core API:

  • QuicClient: High-level client operations
  • Connection pooling and automatic retry logic

Classes

QuicClient
QuicClientConfig
Configuration for QuicClient
QuicConnection
QuicConnectionStats
Connection statistics from Quinn
QuicEndpoint
QuicFrameStats
Frame transmission/reception statistics
QuicPathStats
Path-specific statistics
QuicRecvStream
QuicSendStream
QuicUdpStats
UDP-level statistics
RustLib
Main entrypoint of the Rust API

Extensions

QuicDatagramExceptionPatterns on QuicDatagramException
Adds pattern-matching-related methods to QuicDatagramException.
QuicErrorPatterns on QuicError
Adds pattern-matching-related methods to QuicError.
QuicReadExceptionPatterns on QuicReadException
Adds pattern-matching-related methods to QuicReadException.
QuicReadToEndExceptionPatterns on QuicReadToEndException
Adds pattern-matching-related methods to QuicReadToEndException.
QuicWriteExceptionPatterns on QuicWriteException
Adds pattern-matching-related methods to QuicWriteException.

Functions

connectionCloseReason({required QuicConnection connection}) Future<(QuicConnection, String?)>
Get the close reason of a QUIC connection This exposes the QuicConnection.close_reason() method to flutter_rust_bridge
connectionDatagramSendBufferSpace({required QuicConnection connection}) Future<(QuicConnection, BigInt)>
Get datagram send buffer space This exposes the QuicConnection.datagram_send_buffer_space() method to flutter_rust_bridge
connectionLocalIp({required QuicConnection connection}) Future<(QuicConnection, String?)>
Get the local IP address of a QUIC connection This exposes the QuicConnection.local_ip() method to flutter_rust_bridge
connectionMaxDatagramSize({required QuicConnection connection}) Future<(QuicConnection, BigInt?)>
Get maximum datagram size This exposes the QuicConnection.max_datagram_size() method to flutter_rust_bridge
connectionOpenBi({required QuicConnection connection}) Future<(QuicConnection, QuicSendStream, QuicRecvStream)>
Open a bidirectional stream on a QUIC connection This exposes the QuicConnection.open_bi() method to flutter_rust_bridge
connectionOpenUni({required QuicConnection connection}) Future<(QuicConnection, QuicSendStream)>
Open a unidirectional stream on a QUIC connection This exposes the QuicConnection.open_uni() method to flutter_rust_bridge
connectionReadDatagram({required QuicConnection connection}) Future<(QuicConnection, Uint8List?)>
Read a datagram from a QUIC connection This exposes the QuicConnection.read_datagram() method to flutter_rust_bridge
connectionRemoteAddress({required QuicConnection connection}) Future<(QuicConnection, SocketAddress)>
Get the remote address of a QUIC connection This exposes the QuicConnection.remote_address() method to flutter_rust_bridge
connectionRttMillis({required QuicConnection connection}) Future<(QuicConnection, BigInt)>
Get the RTT of a QUIC connection in milliseconds This exposes the QuicConnection.rtt() method to flutter_rust_bridge
connectionSendDatagram({required QuicConnection connection, required List<int> data}) Future<QuicConnection>
Send a datagram on a QUIC connection This exposes the QuicConnection.send_datagram() method to flutter_rust_bridge
connectionSendDatagramWait({required QuicConnection connection, required List<int> data}) Future<QuicConnection>
Send a datagram with backpressure on a QUIC connection This exposes the QuicConnection.send_datagram_wait() method to flutter_rust_bridge
connectionStableId({required QuicConnection connection}) Future<(QuicConnection, BigInt)>
Get the stable ID of a QUIC connection This exposes the QuicConnection.stable_id() method to flutter_rust_bridge
connectionStats({required QuicConnection connection}) Future<(QuicConnection, QuicConnectionStats)>
Get the statistics of a QUIC connection This exposes the QuicConnection.stats() method to flutter_rust_bridge
createClientEndpoint() Future<QuicEndpoint>
Create a new QUIC client endpoint
createServerEndpoint({required QuicServerConfig config, required String addr}) Future<QuicEndpoint>
Create a new QUIC server endpoint
endpointConfigNew() Future<QuicEndpointConfig>
Create a new endpoint config
endpointConnect({required QuicEndpoint endpoint, required String addr, required String serverName}) Future<(QuicEndpoint, QuicConnection)>
Connect to a server using a QUIC endpoint This exposes the QuicEndpoint.connect() method to flutter_rust_bridge
exposeConnectionType({required QuicConnection connection}) Future<QuicConnection>
exposeQuicClientConfigType({required QuicClientConfig config}) Future<QuicClientConfig>
exposeQuicClientType({required QuicClient client}) Future<QuicClient>
Expose QuicClient and QuicClientConfig types for flutter_rust_bridge
exposeRecvStreamType({required QuicRecvStream stream}) Future<QuicRecvStream>
exposeSendStreamType({required QuicSendStream stream}) Future<QuicSendStream>
exposeTypesForFrbGeneration() Future<void>
quicClientClearPool({required QuicClient client}) Future<QuicClient>
Clear QuicClient connection pool
quicClientConfig({required QuicClient client}) Future<(QuicClient, QuicClientConfig)>
Get QuicClient configuration
quicClientConfigNew() Future<QuicClientConfig>
Create a new QuicClientConfig with default values
quicClientCreate() Future<QuicClient>
Create a new QuicClient with default configuration
quicClientCreateWithConfig({required QuicClientConfig config}) Future<QuicClient>
Create a new QuicClient with custom configuration
quicClientGet({required QuicClient client, required String url}) Future<(QuicClient, String)>
Send a GET request using QuicClient
quicClientGetWithTimeout({required QuicClient client, required String url}) Future<(QuicClient, String)>
Send a GET request with timeout using QuicClient
quicClientPost({required QuicClient client, required String url, required String data}) Future<(QuicClient, String)>
Send a POST request using QuicClient
quicClientPostWithTimeout({required QuicClient client, required String url, required String data}) Future<(QuicClient, String)>
Send a POST request with timeout using QuicClient
quicClientSend({required QuicClient client, required String url, required String data}) Future<(QuicClient, String)>
Send data using QuicClient and return response
quicClientSendWithTimeout({required QuicClient client, required String url, required String data}) Future<(QuicClient, String)>
Send data with timeout using QuicClient
recvStreamRead({required QuicRecvStream stream, required BigInt maxLength}) Future<(QuicRecvStream, Uint8List?)>
Read data from a QUIC recv stream This exposes the QuicRecvStream.read() method to flutter_rust_bridge
recvStreamReadToEnd({required QuicRecvStream stream, required BigInt maxLength}) Future<(QuicRecvStream, Uint8List)>
Read all remaining data from a QUIC recv stream This exposes the QuicRecvStream.read_to_end() method to flutter_rust_bridge
sendStreamFinish({required QuicSendStream stream}) Future<QuicSendStream>
Finish a QUIC send stream This exposes the QuicSendStream.finish() method to flutter_rust_bridge
sendStreamWrite({required QuicSendStream stream, required List<int> data}) Future<(QuicSendStream, BigInt)>
Write data to a QUIC send stream This exposes the QuicSendStream.write() method to flutter_rust_bridge
sendStreamWriteAll({required QuicSendStream stream, required List<int> data}) Future<QuicSendStream>
Write all data to a QUIC send stream This exposes the QuicSendStream.write_all() method to flutter_rust_bridge
serverConfigWithSingleCert({required List<Uint8List> certChain, required List<int> key}) Future<QuicServerConfig>
Create a new server config with single certificate
transportConfigNew() Future<QuicTransportConfig>
Create a new transport config