Skip to content

Repository files navigation

QUIC Terminal Chat

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.

Features

  • 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

What I Learned

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

Tech Stack

  • Python
  • aioquic
  • asyncio

Running

Start Server

python main.py

Start Client

python client_interface.py

Enter a username and start sending messages to other connected users.

Why I Built This

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.

About

A terminal-based chat application built with Python and aioquic to learn QUIC internals. Implements stream-based messaging, connection lifecycle management, protocol validation, and event-driven communication without relying on WebSockets.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages