A terminal-based chat application built with Python and aioquic as a learning project to understand how QUIC works under the hood.
Instead of using WebSockets, this project communicates directly over QUIC streams and handles connection events manually, providing hands-on experience with concepts that power technologies such as HTTP/3 and WebTransport.
- QUIC-based client/server communication
- Stream-per-message architecture
- Username registration system
- Direct messaging between connected users
- Protocol violation detection
- Connection timeout handling
- Event-driven networking using aioquic
- Custom connection state management
Through this project I explored:
- QUIC handshakes and connection lifecycle
- Bidirectional stream communication
- Event-driven protocol design
- Managing connection states
- Handling protocol violations
- Connection cleanup and timeouts
- Building application-layer protocols on top of QUIC
- Python
- aioquic
- asyncio
python main.pypython client_interface.pyEnter a username and start sending messages to other connected users.
My goal wasn't to build another chat application. I wanted to understand how QUIC works beyond the abstractions provided by WebSockets and higher-level frameworks.
This project helped me gain practical experience with streams, connection events, protocol design, and the fundamentals that will be useful as I continue learning WebTransport and modern transport protocols.