A bulletin board system in Go for telnet, SSH, TN3270 and modem callers.
One telnet port serves every kind of terminal: a TN3270 client (x3270, c3270, wc3270, Vista, PCOMM) gets full 3270 screens with PF keys, through go3270; any other client gets a text BBS with ANSI colour where the terminal has it. Modem callers come in through the D-Modem suite: app_dmodem straight from Asterisk, or modemmenu after its login.
D-Modem BBS
Node 2, modem at 26400 bit/s
Name (or NEW): alice
Password: **********
Welcome, alice.
Main menu
[M] Message areas [E] E-mail (1 new)
[W] Who's online [U] User list
[P] Your profile [I] System info
[C] Chat [S] Page the sysop
[G] Goodbye
- Message areas, private mail, chat, paging and doors (DOS doors in dosemu2, or Linux programs)
- File areas with X/Y/ZMODEM, Kermit, IND$FILE and FTP
- E-mail: IMAP, POP3 and SMTP, to and from the internet, directly or through a smarthost
- Networks: FidoNet and other FTNs, QWK, NNTP newsgroups, IRC (and linking into an IRC network as a TS6 or P10 hub server), AIM and ICQ, MSN Messenger, Yahoo! Messenger, and MRC
- Terminals: ANSI, VT, PETSCII, RIPscrip, sixel and 3270 graphics, and for telnet, SSH and web callers a modem's line speed (300 to 115200 bit/s) if they like
- On the web: a forum, image boards, a web terminal and an HTTP API
- Time: follows NTP, NTS and PTP servers, and serves all three
- Certificates: its own ACME client gets and renews them from Let's Encrypt, ZeroSSL and others, for every TLS server
- News, weather and quotes: news feeds as read-only areas, each caller's own weather (NWS, Open-Meteo, USGS earthquakes), stock quotes from IEX
- SQLite, PostgreSQL, MySQL or MariaDB
The full list is on the wiki's home page.
Go 1.26 or later:
make # or: go build ./cmd/bbs
bbs -config /etc/bbs/bbs.conf config # the configuration screens (begun from the sample)
bbs -config /etc/bbs/bbs.conf check # the configuration, its warnings
bbs -config /etc/bbs/bbs.conf init # the database, with two areas
bbs -config /etc/bbs/bbs.conf user add sysop -sysop
bbs -config /etc/bbs/bbs.conf serve
bbs.conf.sample has every option, and bbs.service.sample runs it under systemd.
The documentation is also a website, d-modem.github.io/bbs, with reference pages made from the code.
The documentation is in the wiki: start with Building,
Running and Configuration. Its pages are
kept in docs/wiki, where they are edited; the
Wiki workflow publishes them. Future work is
in TODO.md.
| Repository | What it is |
|---|---|
| D-Modem | The open V.92 softmodem: dmodemd, libdmodem and the Asterisk, FreeSWITCH and ARI modules |
| app | The D-Modem app for Android and iOS: a dial-up modem on a SIP call |
| hardware | pico-serial: RP2040 serial adapters and phone-line USB sticks |
| menu | modemmenu: the login and menu dial-up callers reach |
| bbs | A bulletin board for telnet, SSH, TN3270 and modem callers |
| go3270 | A Go library for 3270 terminal servers, used by bbs |
| brand | Logos, colours, type and the naming guide |
AGPL-3.0-only (LICENSE), or a commercial licence from the D-Modem Authors (COMMERCIAL-LICENSE.md). Contributions come with a contributor agreement (CONTRIBUTING.md).
