A dead simple chat
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



A dead simple chat server and client without any external dependencies.

The UI is inspired by material design, but comes without framework bloat. The entire page is about 19kb in size, without any minification.

The server is written in Go and pretty fast. Also, it's dead-simple.

There are probably bugs.


Channels are weird. Anyone can send messages to any channel. A channel exists as long as there is someone in that channel. If there isn't, the channel will be closed. What "being in a channel" means is basically that you subscribe to it, i.e. you will receive messages posted in that channel. It doesn't affect the way you post there, though. Channels are conversations. You can scream something at a group of people, or choose to join that group and interact with them.


Nothing is stored in a database. Everything is kept in memory, there is no history. That means that all knowledge and all communication is ephemeral, like at a party where you join and leave conversations as you please. Please use HTTPS when deploying this chat, preferably through nginx or any other web server.


This is where it gets tricky. If you know how to (cross-)compile Go programs and put them on your server and run it, deploying hi is as simple as compiling, e.g. with GOOS=<os, probably linux> go build, and copying the resulting binary and the public directory to a server, then letting it run. Letting it run could be more or less involved, depending on your hosting provider. I'll be glad to help.


The compiled program can be run without arguments (runs on port 8080) or with the port set (using the -p option). It assumes that the public directory is in the directory where the program is started.


There are a few special commands that you can issue to interact with the server, IRC-style. All of these commands need to be sent to a channel that the user subscribes to.

/join <channelname>  # join a channel
/leave <channelname> # leave a channel (will send back an error if user is not subscribed to the channel)
/list                # list all users in the current channel
/channels            # list all channels

Have fun!