1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
-- news
2026-04-10 #0.3.0-0
patched a minor path traversal bug, unified lastlogin+ratelimit, prevented DoS on users
2026-04-09 #0.3.0
adds index fetching, room topics, polling mail, --blim
version header has changed
-- proto
v=3 (this is sent as ascii)
CONNECT
if lastlogin <5s, sleep(1)
< "laim{v}\n"
SYMBOLS DESCRIPTION
O success
? unknown command
I bad username / password
K mismatch
. body truncated at 65536
4-9 operational errors
! general failure
: prefix a room name with this to make it ephemeral
FIELD TYPES DESCRIPTION
str printable alphanum + [-_.$ :], newline-terminated, must not start with a dot
num printable u64, newline-terminated
body raw bytes, EOF-terminated, max 65536
csv comma-separated strings, newline-terminated (default max = 16)
PRE-AUTH COMMANDS ARGS DESCRIPTION
M returns the server motd.
L str:user str:password attempt a login (penalty for wrong password)
COMMANDS ARGS DESCRIPTION RETURN
G returns all mail (mail[]+O)|!
F csv:indexes return mails with given indexes (mail[]+O)|!
T num:timestamp returns mail after a timestamp (mail[]+O)|!
S csv:targets body sends mail 7|.|!|O
H csv:targets num:ttl body sends mail with an expiry date (targets, ttl, body) 7|.|!|O
W returns who you are (may get funky) str+\n
E count inbox size (including deleted mail) num+\n
Z print room topic (str+\n)|!
U list all users on this instance "name lastlogin\n"[]+O
R list all rooms on this instance "title onlinecount\n"[]+O
B [str]:roomname enter a room O
Q leave a room O
P poll and print mail as it arrives. exit with any input > entry, O exit
D num:index delete mail at index (ALWAYS delete highest first) 8|O
C str:new str:repeat change your password (new, repeat) 6|7|K|O
K disconnect nothing. it exits
DIR NAME PURPOSE
users user database.
| filename=user
| contents=password
mail mail database.
| folder=user
| ~folder=room
| x/.count=bin:index
| x/.login=bin:lastlogin
| x/num=mail
MAIL FORMAT
index\n timestamp\n expiry\n sender\n ...body...\n\neof\n
note: expiry is on-disk only
|