https://github.com/ryukinix/lisp-chat
An experimental minimal chat written in Common Lisp
https://github.com/ryukinix/lisp-chat
chat common-lisp experimental irc lisp minimalist quicklisp sbcl sockets
Last synced: 3 days ago
JSON representation
An experimental minimal chat written in Common Lisp
- Host: GitHub
- URL: https://github.com/ryukinix/lisp-chat
- Owner: ryukinix
- License: mit
- Created: 2017-03-08T19:21:38.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2026-02-02T13:44:02.000Z (about 1 month ago)
- Last Synced: 2026-02-02T23:51:32.318Z (about 1 month ago)
- Topics: chat, common-lisp, experimental, irc, lisp, minimalist, quicklisp, sbcl, sockets
- Language: Common Lisp
- Homepage: https://chat.manoel.dev
- Size: 742 KB
- Stars: 185
- Watchers: 11
- Forks: 15
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-cl-software - Lisp-chat - An experimental minimal chat. [MIT]. (Applications / Chat)
README
[](http://quickdocs.org/lisp-chat/)
# Lisp Chat
An experimental chat irc-like written in Lisp.

# Installation
Install [roswell][ros] and add `~/.roswell/bin/` to the `PATH` variable.
After that just type:
``` bash
ros install ryukinix/lisp-chat
```
Lisp-chat it's on Quicklisp as well, tested on the following
implementations:
* SBCL
* CCL
* ECL
# Usage
Load the server
```bash
$ lisp-chat-server localhost
```
Create a client
```bash
$ lisp-chat localhost
```
Online version with connection through web sockets instead raw tcp sockets:
```
$ lisp-chat wss://chat.manoel.dev/ws
```
# Web Interface
A web interface is now available! You can access the public instance at:
[https://chat.manoel.dev](https://chat.manoel.dev)
When running the server locally, the web interface is accessible at `http://localhost:5559`.

# Admin Tool
A command-line tool for managing the chat history and users is available. You can use it to delete channels, rename users, and see statistics. By default, it operates on `messages.sexp`, but you can specify a different file using the global `--file` (or `-f`) option.
```bash
$ ros roswell/lisp-chat-admin.ros --file custom-messages.sexp stats
$ ros roswell/lisp-chat-admin.ros history
$ ros roswell/lisp-chat-admin.ros --help
```
# Alternative clients
To test this with alternative clients, you can use these options:
* **Emacs client**: An ERC-like interface with colorized usernames, mentions, and WebSocket/TCP support. See [emacs/README.md](emacs/README.md) for details.
* Terminal readline-based [python client](./bin/client.py)
* Terminal ncurses [python client](./bin/client_curses.py)
* Netcat client (wtf?)
* [Lispinto Chat](https://github.com/mateusfccp/lispinto-chat): a Flutter client that runs on macOS, Android, iOS and [web](https://labs.mateusfccp.me/lispinto-chat).
On Python client, I wrote in a way only using ths stdlib avoiding pain
to handle the dependency hell, so you can just call that:
```bash
$ python client.py
```
So finally... netcat. Yes! You can even just use `netcat`! An user
called `Chris` in past days just logged in the server with the
following message:
```
|16:30:37| [Chris]: Used netcad
|16:30:41| [Chris]: netcat*
|16:30:50| [Chris]: bye
```
So you can type `netcat 5558` and go on! I tested on
my machine and works fine! The main reason is because the
communication between server and client just use raw data. For better
synchronization with text data from server while you typing, I suggest
you to use a readline wrapper like
[`rlwrap`](https://github.com/hanslub42/rlwrap) calling as `rlwrap
netcat 5558`.