Inspired by the Reddit terminal client and hearing about Rust's FEARLESS CONCURRENCY, we decided to set out to recreating the Discord client for the terminal completely in Rust.

What it does

It's a well-featured Discord client that exists entirely within your terminal app. View text messages from all your servers and channels and send them too.

How we built it

Completely in Rust, using a couple of libraries for Discord API calls, concurrency abstractions, and terminal UI.


Challenges we ran into

Rust is very strict about data ownership and concurrency and we often were left scratching our heads at what the latest compiler error message was. However, every time we were able to compile it usually meant that we had working code, because of all of the static guarantees that Rust provides.

Also, sometimes we ran into the occasional race condition or deadlock, which left us scratching our heads for longer before sorting that out.

Accomplishments that we're proud of

Building out all of these features with a complex data structure and working with a lot of concurrency in such a limited time frame.

What we learned

Rust is heaven when you can understand what the error messages mean, but it can be quite daunting when you don't. We also learned a whole ton about thread-based concurrency, data ownership and borrowing, and overall a completely different way to program.

What's next for Discord for the Terminal

Fancy stuff like role colours, message history, list of people online, maybe voice.

Built With

  • discord
  • rust
  • tui-rs
Share this project: