You are browsing as a guest. Sign up (or log in) to start making projects!

Global Chat

  • 8 Devlogs
  • 10 Total hours

Global chat available to everyone. Chat with anyone on Earth and exchange messages using Terminal/CMD now!

Ship #1 Pending review

What is Global-Chat?
Global-Chat is a lightweight, asynchronous, terminal-based messaging application that allows anyone on Earth to connect and chat in real-time directly from their Command Prompt or Terminal. No heavy web browsers, no bloated Electron apps—just pure, retro-style networking.

Why this project?
I wanted to build a seamless communication tool that avoids the unnecessary complexity of modern chat apps while tackling the hard engineering challenges of backend networking. The goal was to create a rock-solid, secure server capable of handling multiple concurrent connections, preventing spam, and managing users efficiently, all while keeping a minimal, distraction-free aesthetic.

Key Features Inside:
- Global Connectivity – Chat instantly with other users across the globe through a clean CLI.
- Asynchronous UI – Powered by prompt_toolkit, ensuring incoming messages pop up instantly without interrupting what you are currently typing.
- Anti-Spam & Security – Built-in message cooldowns and automatic duplicate nickname validation.
- Robust Moderation – Full server-side control with admin commands to kick, ban users by IP, or send official system announcements via "say".
- Chat History – New users automatically receive the last 10 messages upon joining so they always have context.
- Dockerized Setup – The entire server infrastructure can be spun up locally or on a VPS with a single docker compose up command.

How to test it right now!
You don't need to install Python or mess around with dependencies to try it out.
- Go to the Releases tab on my GitHub Repository.
- Download the pre-built client.exe file.
- Open it, type your username, and start chatting instantly!

(Note: Since there is no login system yet, please verify your friends' identities via Slack/Discord if you suspect someone is impersonating them!)

  • 8 devlogs
  • 10h
Try project → See source code →
Open comments for this post

1h 25m 36s logged

Day 5

Today I finished preparing the project files, including the README.md and Dockerfile, and fixed all the bugs I was aware of.

I also updated the project page with a new description, a screenshot, and a demo URL.

The list I had in front of me is now completely finished, which means I can finally ship the project.

Of course, after shipping it, I’ll still continue updating the global chat, but before that I need to take a short break.

See you in my other projects — or in this one again sometime in the near future!!!

Day 5

Today I finished preparing the project files, including the README.md and Dockerfile, and fixed all the bugs I was aware of.

I also updated the project page with a new description, a screenshot, and a demo URL.

The list I had in front of me is now completely finished, which means I can finally ship the project.

Of course, after shipping it, I’ll still continue updating the global chat, but before that I need to take a short break.

See you in my other projects — or in this one again sometime in the near future!!!

Replying to @wuff

0
3
Open comments for this post

2h 4m logged

Day 4

Today I worked on adding chat history (when someone joins, the last 10 messages are displayed), as well as notifications for users joining/leaving the chat and error messages.

The biggest issue today was that exit messages were not being displayed. The fix turned out to be quite simple — I was using a double lock, which caused the code to freeze.

My plans for tomorrow are to check if everything works as intended, update the README file, update the Docker files, look into py2exe, and upload everything to GitHub and ship the project!!!

Yes, we are finally getting to my first ship, but don’t worry, updates will still continue after that.

See you tomorrow!!!

Day 4

Today I worked on adding chat history (when someone joins, the last 10 messages are displayed), as well as notifications for users joining/leaving the chat and error messages.

The biggest issue today was that exit messages were not being displayed. The fix turned out to be quite simple — I was using a double lock, which caused the code to freeze.

My plans for tomorrow are to check if everything works as intended, update the README file, update the Docker files, look into py2exe, and upload everything to GitHub and ship the project!!!

Yes, we are finally getting to my first ship, but don’t worry, updates will still continue after that.

See you tomorrow!!!

Replying to @wuff

0
2
Open comments for this post

2h 3m 34s logged

Day 3

Today I added the ability to execute commands directly from the server, such as ban and kick, giving the server moderation control over the chat.

I also fixed an issue where receiving a message while typing would interrupt the input. After searching the entire internet, I finally found the holy grail: prompt_toolkit. Because of that, I can put GUI development on hold for now.

The biggest challenge today was figuring out why I was getting a CMD-related error when starting the server with prompt_toolkit. It turns out that prompt_toolkit doesn’t work properly with PyCharm’s default console, so I had to enable the “Emulate terminal in output console” option.

My plans for tomorrow are:

Finish the command system (if I can think of any more useful commands).

Take a look at py2exe so I can generate an .exe file from the Python client.

Try to fix a bug where the client doesn’t properly stop after being banned, kicked, or disconnected.

See you tomorrow!!!

Day 3

Today I added the ability to execute commands directly from the server, such as ban and kick, giving the server moderation control over the chat.

I also fixed an issue where receiving a message while typing would interrupt the input. After searching the entire internet, I finally found the holy grail: prompt_toolkit. Because of that, I can put GUI development on hold for now.

The biggest challenge today was figuring out why I was getting a CMD-related error when starting the server with prompt_toolkit. It turns out that prompt_toolkit doesn’t work properly with PyCharm’s default console, so I had to enable the “Emulate terminal in output console” option.

My plans for tomorrow are:

Finish the command system (if I can think of any more useful commands).

Take a look at py2exe so I can generate an .exe file from the Python client.

Try to fix a bug where the client doesn’t properly stop after being banned, kicked, or disconnected.

See you tomorrow!!!

Replying to @wuff

0
3
Open comments for this post

1h 28m 2s logged

Day 2*

Today, I added nickname checking to the server to make sure that no two users can join the chat with the same nickname. I also implemented a message cooldown to help protect against spammers.

I also tried experimenting with the GUI a little, but it’s not the right time yet — the to-do list I have in front of me is still huge.

The problem of the day was that I hadn’t worked with Python dictionaries before, so I had to quickly learn how to use them xd.

My plans for tomorrow are to add a banning system as a command that can be executed directly from the server, along with other custom commands that the server will be able to perform.

I’m shutting down the VPS server until I ship the project.

See you tomorrow!!!

  • Technically it’s Day 3 because I didn’t work on it yesterday, but that’s a different story.

Day 2*

Today, I added nickname checking to the server to make sure that no two users can join the chat with the same nickname. I also implemented a message cooldown to help protect against spammers.

I also tried experimenting with the GUI a little, but it’s not the right time yet — the to-do list I have in front of me is still huge.

The problem of the day was that I hadn’t worked with Python dictionaries before, so I had to quickly learn how to use them xd.

My plans for tomorrow are to add a banning system as a command that can be executed directly from the server, along with other custom commands that the server will be able to perform.

I’m shutting down the VPS server until I ship the project.

See you tomorrow!!!

  • Technically it’s Day 3 because I didn’t work on it yesterday, but that’s a different story.

Replying to @wuff

0
9
Open comments for this post

20m 4s logged

Day 1 (Part 2)

Before going to sleep (it was already night in Poland), I improved the security a bit and added a system message in chat when someone joins.

I’ll try to dedicate a full day soon to security, so it’s not easy to create malicious clients.

See you tomorrow for real!!!

Day 1 (Part 2)

Before going to sleep (it was already night in Poland), I improved the security a bit and added a system message in chat when someone joins.

I’ll try to dedicate a full day soon to security, so it’s not easy to create malicious clients.

See you tomorrow for real!!!

Replying to @wuff

0
6
Open comments for this post

1h 30m 24s logged

Day 1

Today I rewrote the whole code to prepare it for a global chat system. I deployed everything on a VPS, so now by downloading client.py you can already chat with other people, but only through the terminal for now.

I also added client version checking, so if someone is using an outdated version, they won’t be able to connect to the server.

Usernames were also introduced, replacing IDs from the echo server, so now every user can set whatever nickname they want.

The main bug of the day was related to broadcasting messages to all users — sometimes messages were sent only to one person or not sent at all. I fixed it somehow… honestly not even sure how xd.

Tomorrow’s plan is to try implementing a graphical interface so it doesn’t rely on the terminal anymore.

At night (in Poland), I also updated part of the README file.

If you want to test the global chat yourself, you can download the client here:
https://github.com/wuffgame/Global-Chat/blob/main/global-chat/client.py

There are no bans for spam or offensive usernames yet, but I trust you won’t spam the server or use inappropriate nicknames.

See you tomorrow!!!

Day 1

Today I rewrote the whole code to prepare it for a global chat system. I deployed everything on a VPS, so now by downloading client.py you can already chat with other people, but only through the terminal for now.

I also added client version checking, so if someone is using an outdated version, they won’t be able to connect to the server.

Usernames were also introduced, replacing IDs from the echo server, so now every user can set whatever nickname they want.

The main bug of the day was related to broadcasting messages to all users — sometimes messages were sent only to one person or not sent at all. I fixed it somehow… honestly not even sure how xd.

Tomorrow’s plan is to try implementing a graphical interface so it doesn’t rely on the terminal anymore.

At night (in Poland), I also updated part of the README file.

If you want to test the global chat yourself, you can download the client here:
https://github.com/wuffgame/Global-Chat/blob/main/global-chat/client.py

There are no bans for spam or offensive usernames yet, but I trust you won’t spam the server or use inappropriate nicknames.

See you tomorrow!!!

Replying to @wuff

0
45
Open comments for this post

1h 6m 55s logged

Day 0 (Part 2)

Today I decided to finish the echo server so that it can support multiple clients (currently up to 5). Each client also gets its own ID to keep the server logs cleaner and easier to read.

I also added a Dockerfile and a docker-compose.yml, so the server can be launched on a VPS without any extra setup or hassle.

As always, a few issues appeared along the way. At first, I’m not even sure what I messed up, but when I deployed the server to my VPS, Docker didn’t expose the container ports correctly, so the client couldn’t connect. After some debugging, I managed to fix it.

Another challenge was handling a dynamic number of client IDs. However, since I’m planning to switch to nicknames instead of IDs later, I decided not to spend too much time on it for now.

Tomorrow’s plan is to finally start Day 1, refactor everything and prepare the project for turning it into a proper global chat system. I also want to start working on a terminal-based global chat version either tomorrow or the day after. I already know some things will be problematic there, but I’ll probably solve them in Day 3 or later when I start working on a full GUI.

For now, I also plan to write a README later today or tomorrow.

See you in the next devlog!!!

P.S. Devlogs might not appear daily until the summer holidays in Poland start.

Day 0 (Part 2)

Today I decided to finish the echo server so that it can support multiple clients (currently up to 5). Each client also gets its own ID to keep the server logs cleaner and easier to read.

I also added a Dockerfile and a docker-compose.yml, so the server can be launched on a VPS without any extra setup or hassle.

As always, a few issues appeared along the way. At first, I’m not even sure what I messed up, but when I deployed the server to my VPS, Docker didn’t expose the container ports correctly, so the client couldn’t connect. After some debugging, I managed to fix it.

Another challenge was handling a dynamic number of client IDs. However, since I’m planning to switch to nicknames instead of IDs later, I decided not to spend too much time on it for now.

Tomorrow’s plan is to finally start Day 1, refactor everything and prepare the project for turning it into a proper global chat system. I also want to start working on a terminal-based global chat version either tomorrow or the day after. I already know some things will be problematic there, but I’ll probably solve them in Day 3 or later when I start working on a full GUI.

For now, I also plan to write a README later today or tomorrow.

See you in the next devlog!!!

P.S. Devlogs might not appear daily until the summer holidays in Poland start.

Replying to @wuff

0
39
Open comments for this post

25m 15s logged

Day 0

Since yesterday, I decided to start working on a global chat application in Python. Everyone will be able to log in and chat, while I, as the amazing moderation team, will be able to ban people who break the rules.

Yesterday, I spent some time talking with AI and watching videos to understand how sockets and threading work in Python.

Today, since I got back late from a trip, I decided to practice what I learned yesterday instead of rushing into the full project. I built a local echo server that currently supports one client (but I’ll probably add multi-client support tomorrow).

I also added a primitive client verification system, so if a client is not compatible with the server, the connection gets rejected. Right now it works by sending a specific string.

The only issue I had was that after disconnecting the client, the server started infinitely sending “”. Luckily, I quickly realized I could stop it using if not.

See you tomorrow in the next devlog!

Day 0

Since yesterday, I decided to start working on a global chat application in Python. Everyone will be able to log in and chat, while I, as the amazing moderation team, will be able to ban people who break the rules.

Yesterday, I spent some time talking with AI and watching videos to understand how sockets and threading work in Python.

Today, since I got back late from a trip, I decided to practice what I learned yesterday instead of rushing into the full project. I built a local echo server that currently supports one client (but I’ll probably add multi-client support tomorrow).

I also added a primitive client verification system, so if a client is not compatible with the server, the connection gets rejected. Right now it works by sending a specific string.

The only issue I had was that after disconnecting the client, the server started infinitely sending “”. Luckily, I quickly realized I could stop it using if not.

See you tomorrow in the next devlog!

Replying to @wuff

0
5

Followers

Loading…