⚡ A fast, lightweight, and secure chat protocol, client and server, written in Go.

boltchat

A fast, lightweight, and secure chat protocol, client and server, written in Go.

GitHub Workflow Status GitHub Workflow Status CodeFactor Grade

About

IMPORTANT: This project is still a work-in-progress. I strongly discourage installing this on a public-facing server as it could potentially harm your security and privacy. See the roadmap for the progress of this project.

Bolt is intended as a modern replacement for IRC. I started this project because I feel like there aren't many open source chat protocols that follow modern standards.

Not only do I think it's a great fit for an IRC replacement; it might even be suitable for a replacement of present-day proprietary protocols and chat applications, such as Discord and Slack. Bolt comes with a nifty text-based user interface, but since it uses its own protocol, it's possible to build a GUI client in, say, Electron. (please don't, use Tauri)

Roadmap

The project boards for Bolt can be found here.

References

Author

Kees van Voorthuizen (@keesvv)

Branding

The branding for this project can be found in this repository.

License

This project is licensed under the Apache License 2.0.

Owner
Bolt
⚡ A fast, lightweight, and secure chat protocol, client and server, written in Go.
Bolt
Comments
  • Message timestamps should be generated by the server

    Message timestamps should be generated by the server

    At this moment, clients trust the evt.CreatedAt param, but the value of this param is generated on the client side, which is not trustworthy. evt.RecvAt will be the solution to this as it will be generated by the server.

  • Visual bug, backspace doesnt remove text in msg> box

    Visual bug, backspace doesnt remove text in msg> box

    When entering a message and pressing backspace the character doesnt get removed. Instead a space is entered. When sending the message the backspace is done and the message is send correctly. When using to many backspace you are able to remove the nickname and time image seen here in the last message

  • `build:serverContainer` target is confusing and should be renamed

    `build:serverContainer` target is confusing and should be renamed

    The build:serverContainer target as defined in magefile.go has a rather confusing name, because people might think this target creates a Docker image.

  • Client should close when the server closes

    Client should close when the server closes

    At this moment, the client (TUI) stays open after the server has been closed. All newly emitted events will, of course, be ignored, and the client does not know whether the connection is still alive or not.

  • Closed connections are not getting disposed correctly

    Closed connections are not getting disposed correctly

    This pretty much speaks for itself. Closed connections are not removed from the conns slice, which causes the server to still attempt to broadcast events to closed connections.

  • Feature: Identities

    Feature: Identities

    This feature adds the ability to store and specify a so-called 'Identity' when connecting to a bolt.chat instance.

    • fix(tui): prevent arrow keys being printed for the time being
    • refactor(config): move getConfigRoot to config/util.go
    • feat(identities): add Identities (experimental)
  • The client does not treat message delimiters properly

    The client does not treat message delimiters properly

    Solution: use delimiters to untangle events from each other. This can be achieved with the built-in json.Decoder by hooking it up to TCP connections.

    EDIT: this appears to be a client-side issue. The server correctly uses delimiters when sending data, but the client does not act on those delimiters and instead attempts to unmarshal every incoming chunk of data.

  • User slugs should be sent by the server

    User slugs should be sent by the server

    At the moment, clients are responsible for displaying user slugs (the part after the # in usernames) which can lead to confusion. Instead, the server should send these slugs to clients.

  • `errs.Emerg` does not cleanly exit the TUI

    `errs.Emerg` does not cleanly exit the TUI

    When the errs package wants to quit the program due to an error, the TUI does not exit cleanly, which causes a corruption in the shell and requires the user to restart their terminal window.

  • Buffer update glitch on overflowed events

    Buffer update glitch on overflowed events

    When the buffer reaches the last line before the prompt, the tcell.Screen instance does not update correctly without s.Sync() being explicitly called. This operation causes the terminal to occasionally tear up, which is not the intended behaviour.

    Instead of managing the buffer by myself, it might be a better idea to use tcell's built-in tcell/views package for managing virtual screens/buffers. This also allows for vertical (and possibly even horizontal) scrolling.

Ciak is a lightweight media server written in go
 Ciak is a lightweight media server written in go

Ciak allows you to show and stream your personal media tv series, movies, etc with a simple and clean web ui. The server also provide on the fly video encoding in order to stream non standard formats such as avi, mkv...

Jan 3, 2023
A proxy server than converts JSON request bodies to protocol buffers
A proxy server than converts JSON request bodies to protocol buffers

Welcome to Protoxy ?? What is Protoxy? Protoxy allows you to test your REST APIs that use Protocol Buffer serialization through Postman and other API

Nov 1, 2022
✨ A lightweight HTTP server based on GO, will try to detect your OS and architecture and return as SHELL script. ✨
✨ A lightweight HTTP server based on GO, will try to detect your OS and architecture and return as SHELL script. ✨

✨ A lightweight HTTP server based on GO, will try to detect your OS and architecture and return as SHELL script. ✨

Dec 14, 2022
The Zuri Core is an open-source API that serves as the backend and backbone of Zuri Chat
The Zuri Core is an open-source API that serves as the backend and backbone of Zuri Chat

The Zuri Core is an open-source API that serves as the backend and backbone of Zuri Chat

Dec 26, 2022
Lightweight go web server that provides a searchable directory index.

autoindex Lightweight go web server that provides a searchable directory index. Optimized for handling large numbers of files (100k+) and remote file

Jan 5, 2023
Fast, multi-platform web server with automatic HTTPS
Fast, multi-platform web server with automatic HTTPS

a project Every site on HTTPS Caddy is an extensible server platform that uses TLS by default. Releases · Documentation · Get Help Menu Features Insta

Jan 1, 2023
OpenAPI specs for your Go server, generated at server runtime. No CLI, no code generation, and no HTTP

Overview "oas" is short for "OpenAPI Spec". Go package for generating OpenAPI docs at runtime. Non-features: No code generation. No CLI. No magic comm

Dec 3, 2021
Go web server - A web server that can accept a GET request and serve a response.

go_web_server A web server that can accept a GET request and serve a response. Go is a great language for creating simple yet efficient web servers an

Jan 3, 2022
a simple http server as replacement of python -m http.server

ser a simple http server as replacement of python -m http.server

Dec 5, 2022
Formrecevr is a simple and lightweight from receiver backend primarily designed for (but not limited to) static websites.

Formrecevr Formrecevr (pronunced "Form receiver") is a simple and lightweight from receiver backend primarily designed for (but not limited to) static

Apr 17, 2022
High-performance PHP application server, load-balancer and process manager written in Golang
High-performance PHP application server, load-balancer and process manager written in Golang

[RR2-BETA] RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports runnin

Jan 4, 2023
An XMPP server written in Go (Golang).

jackal An XMPP server written in Go. About jackal is a free, open-source, high performance XMPP server which aims to be known for its stability, simpl

Dec 29, 2022
A push notification server written in Go (Golang).
A push notification server written in Go (Golang).

A push notification micro server using Gin framework written in Go (Golang)

Jan 9, 2023
Minimal HTTP File Server for pentesting written in Go
Minimal HTTP File Server for pentesting written in Go

Golang implementation of simple HTTP server with upload feature.

Aug 4, 2022
Simple HTTP server written in golang

Simple HTTP server written in golang Simple webserver in golang, to demonstrate basic functionalities like e.g. sending back some request header info,

Aug 31, 2022
A simple file server written in Go. Allows files to be uploaded, downloaded, or deleted.

Go File Server This is a simple file server written in Go. Have you ever wanted to transfer files between computers on the same LAN? Simply run this p

Jan 14, 2022
Go-simplehttp - Simple HTTP server written in golang

Simple HTTP server written in golang Simple webserver in golang, to demonstrate

Jan 1, 2022
ready-to-use RTSP / RTMP server and proxy that allows to read, publish and proxy video and audio streams
ready-to-use RTSP / RTMP server and proxy that allows to read, publish and proxy video and audio streams

rtsp-simple-server is a simple, ready-to-use and zero-dependency RTSP / RTMP server and proxy, a software that allows users to publish, read and proxy live video and audio streams. RTSP is a specification that describes how to perform these operations with the help of a server, that is contacted by both publishers and readers and relays the publisher's streams to the readers.

Dec 31, 2022