ViSiON/3 BBS Software

Overview
This project is a work-in-progress refactor and modernization of the classic ViSiON/2 BBS software. The goal is to recreate the core functionality of the classic BBS experience using modern technologies.
There's detailed SysOp documentation here.
Note: This is currently under active development and is not quite feature-complete.
Companion Projects
- ViSiON/3 QWK Mobile β a React Native offline mail client for ViSiON/3. It consumes the experimental QWK Packet API to download
.QWK packets, read and reply entirely offline, and upload .REP packets back to the board. The full offline loop (connect β sync β read β compose/reply β upload β import report) is implemented in-repo, but the app is not yet available for download β there's currently nothing end-users can connect to the QWK Packet API with, so sysops should leave it disabled for now.
Join us on Discord to get involved, follow development and to connect with other contributors and BBS enthusiasts:
π Join the ViSiON/3 Discord
STUFF WE NEED
π― Contributors - Yes, You
What This Is: A moderately amusing, functional anachronism.
Are you the kind of person who can wrangle a Go codebase while arguing about why HSLINK was underrated? Do you have strong opinions about ANSI art but also know when to use a mutex? We need someone to lead this glorious mess.
Technical Chops:
- Strong Go experience (not just "I vibe coded an app and apparently it works")
- Deep understanding of terminal emulation, ANSI/VT100, character encodings
- Bonus: Network programming experience (SSH, raw sockets)
- Comfortable with legacy protocol implementation (ZMODEM, etc.)
- Can read Pascal/C when needed to understand the original implementations
Cultural Fit:
- Either lived through the BBS era OR has become genuinely obsessed with it
- Gets why pipe codes matter and what makes a good door game
- Understands this isn't about making money or padding a resume
- Has opinions about which transfer protocol was best
- Won't try to "modernize" it into a web app
Working Team:
- Wrangling this wacko codebase into something proper
- Help building a community of contributors
- Make technical decisions when we need them
- Keep the codebase from turning into spaghetti
What we won't do:
- Rewrite this in another language
- Add a REST API and React frontend
- Turn it into a web app
- Modernize away what makes it a BBS (we want to keep the soul, not just the name)
If this sounds like your particular flavor of madness, email: spaceman@vision3bbs.com
π¨ Period-Correct ANSI Artists & Art
Are you an old school ANSi artist (are you younger and infatuated for some reason with that time-period and style)? Do you need one more goddamn thing to do? Consider spending valuable free-time, compensated by nothing more than unyielding appreciation and thanks from the people that enjoy this kind of thing. There's at least 12 of us!
What we need:
- Menu screens - Main, Message, File, Door menus with that classic warez BBS aesthetic
- Login/Logoff screens - Welcome screens, new user applications, goodbye screens
- Headers and prompts - Message headers, file listings, user stats displays
- Transition screens - Loading screens, pause prompts, error messages
- Special effects - Matrix rain, plasma effects, classic BBS animations
Style we're after:
- Authentic early 90s underground/warez BBS aesthetic
- Classic color schemes (cyan/magenta highlights, ice colors)
- Scene-style fonts and logos
- Period-appropriate group shoutouts and "greetz"
If you have skills, old .ANS files gathering dust, or just love the aesthetic of the golden age of BBSing, we want to hear from you! Contact us via GitHub issues or pull requests.
π» Go Developers Who Give a Damn
Do you write Go? Do you have fond memories of waiting 3 minutes for a single GIF to download at 14.4k? Are you looking for a project that will impress exactly nobody at your day job but might make a dozen middle-aged nerds unreasonably happy? Boy, do we have the unpaid volunteer opportunity for you!
If you aren't old enough to have experienced it first-hand, have you read a weird text file or listened to some wild-eyed GenX nutjob ramble on about how much we enjoyed it and decided "I need me some of that?"
Areas where we need help:
- File transfer protocols beyond Zmodem (XMODEM, YMODEM)
- Performance optimization and scalability
- Terminal emulation improvements
- Modern features while maintaining the classic feel
- Testing, bug fixes, and code reviews
Your reward? The satisfaction of knowing that somewhere, someone is reliving their misspent youth thanks to your code. Also, we'll put your handle in the credits. Not your real name though - this is a BBS, we have standards.
Please submit PRs!
Current Status: PRE-ALPHA (Expect crashes, data loss, and general chaos)
| Feature |
Status |
Notes |
| Networking |
|
|
| SSH Server |
β
Working |
Pure-Go (gliderlabs/ssh), PTY support, SyncTerm compatible, legacy algorithms, auto-login |
| Telnet Server |
β
Working |
Full IAC negotiation, TERM_TYPE detection |
| Users |
|
|
| Signup & Authentication |
β
Working |
bcrypt hashed passwords, JSON persistence |
| User Listings & Stats |
β
Working |
Last callers, user listing, call history, stats display |
| NUV (New User Verification) |
β
Working |
Voting-based approval system for new user accounts |
| Info Forms |
β
Working |
Up to 5 configurable forms; required form enforcement on login; user fill/view; SysOp browse and management |
TUI User Editor (ue) |
β
Working |
Full-screen terminal user management |
WFC Sysop Console (wfc) |
β
Working |
Remote read-only monitor of live nodes/callers + event feed over SSH, gated by a hot-reloadable WFC Access toggle in Access Levels (guide) |
| Menus |
|
|
| Menu System |
β
Working |
.MNU, .CFG, .ANS files, ACS evaluation, password protection |
TUI Menu Editor (menuedit) |
β
Working |
Full-screen menu configuration editor |
| Messaging |
|
|
| Message Areas |
β
Working |
JAM format, echomail/netmail, conferences, lightbar reader, threading, quoting, vi-style editor, newscan, last read |
| Private Mail |
β
Working |
User-to-user messaging, send/read/list |
| Message List View (scan) |
β
Working |
Title/subject scan view |
| QWK Offline Mail |
β
Working |
QWK/REP packet download/upload, stable conference map, reply threading, HEADERS.DAT extended headers, REP upload dedup, configurable BBS ID |
| QWK Packet API |
π§ͺ Experimental |
REST API for offline mail clients (off by default β companion app not yet released) β see the QWK API docs and the QWK Mobile client |
| Files |
|
|
| File Areas |
β
Working |
List/select areas, list files, search, file info, newscan, configurable columns, extended listing |
| File Transfers |
β
Working |
ZMODEM upload/download via sexyz, batch download with per-area ACS validation |
| File Management |
β
Working |
SysOp file delete, move, edit descriptions, review queue for uploads, lightbar sysop bar (* toggle) |
| Doors & Scripting |
|
|
| Door/External Programs |
β
Working |
Dropfile generation, PTY passthrough |
| SyncJS Doors |
β
Working |
Synchronet-compatible JavaScript door engine |
| V3 Scripting Engine |
β
Working |
goja-based JavaScript runtime for native V3 script doors |
| Networking/FTN |
|
|
| FTN Echomail/Netmail |
β
Working |
JAM-backed, tosser, import/export, dupe checking |
| Integrated Binkd Mailer |
β
Working |
Bundled bin/binkd supervised as a child process (auto-restart on crash, clean shutdown); one-toggle echomail β inbound tosses automatically, outbound exports on a timer. See FTN Echomail. |
| FTN Setup Wizard |
β
Working |
Guided setup in ./config: pick network, download echo list, auto-create areas + binkd.conf |
| V3Net Networking |
π§ͺ Experimental |
Native inter-BBS message networking via REST+SSE (hub/leaf, signed area lists) β see the V3Net docs |
| Community Features |
|
|
| Voting System |
β
Working |
Voting booths, mandatory topics, SysOp management |
| News System |
β
Working |
SysOp-managed news items, auto-display on login |
| Chat & SysOp Paging |
β
Working |
Inter-node chat, SysOp page |
| One-liner System |
β
Working |
|
| Sponsor Menus |
β
Working |
Area management for SysOps and area sponsors |
| Admin & Tools |
|
|
| Event Scheduler |
β
Working |
Cron-style, automated maintenance, FTN polling |
| Admin Functions |
β
Working |
User validation, banning, deletion, purge |
TUI String Editor (strings) |
β
Working |
Full-screen BBS string customizations |
| Config Hot Reload |
β
Working |
Live reload via fsnotify, no restart required |
| Invisible SysOp Login |
β
Working |
SysOp/CoSysOp login without appearing in caller log |
SysOp Config TUI (config) |
β
Working |
Full-screen TUI configuration editor (cmd/config) |
| Quality |
|
|
| Comprehensive Testing |
π Planned |
|
| Complete Documentation |
π Planned |
|
Technology Stack
- Language: Go 1.24+
- SSH Server:
github.com/gliderlabs/ssh β pure-Go SSH server with legacy algorithm support (SyncTerm, NetRunner compatible)
- TUI Framework: Charmbracelet BubbleTea (
github.com/charmbracelet/bubbletea) β full-screen terminal editors and admin tools
- JavaScript Engine:
github.com/dop251/goja β embedded JS runtime for V3 scripting and SyncJS door support
- Event Scheduling:
github.com/robfig/cron/v3 β cron-style event scheduler
- Config Monitoring:
github.com/fsnotify/fsnotify β live configuration hot reload
- PTY Support:
github.com/creack/pty β PTY handling for door programs
- Terminal Handling:
golang.org/x/term
- Password Hashing:
golang.org/x/crypto/bcrypt
- Message Base: JAM binary format (echomail/netmail compatible)
- Data Format: JSON (for users and configuration)
Pre-built releases are available for all major platforms. Linux x86_64 is the primary development platform.
| Platform |
Architecture |
Status |
Notes |
| Linux |
x86_64 |
β
Tested |
Primary development platform |
| Linux |
ARM64 |
β
Released |
Includes Raspberry Pi 4/5 (64-bit) |
| Linux |
ARMv7 |
β
Released |
Raspberry Pi 3 and earlier |
| macOS |
Universal |
β
Released |
Intel + Apple Silicon (M1/M2/M3/M4) |
| Windows |
x86_64 |
β
Released |
|
Note: ViSiON/3 is pure Go. The standard Go toolchain is all that's required to build for any supported platform.
Project Structure
vision-3-bbs/
βββ setup.sh / .ps1 / .bat # One-time setup: SSH host key, configs, dirs, build binaries
βββ build.sh / .ps1 / .bat # Build all ViSiON/3 binaries
βββ dev-setup.sh # Install a BBS instance into a separate directory (standalone or dev)
βββ Dockerfile # Container image build
βββ docker-compose.yml # Container orchestration
βββ docker-entrypoint.sh # Container startup script
βββ cmd/
β βββ ansitest/ # ANSI color test utility
β βββ config/ # TUI system configuration editor
β βββ helper/ # FTN setup utility (import echomail areas)
β βββ ini2ftnreg/ # Convert Synchronet init-fidonet.ini to the FTN wizard's JSON registry
β βββ menuedit/ # TUI menu editor
β βββ strings/ # TUI string configuration editor
β βββ ue/ # TUI user editor
β βββ v3mail/ # JAM message base and FTN mail processor
β βββ v3net-bootstrap/ # Create and publish an initial NAL for a V3Net network
β βββ vision3/ # Main BBS server application
β βββ wfc/ # Remote sysop console (SSH client for the WFC TUI)
βββ configs/ # Active configuration files (not tracked in git)
β βββ allowlist.txt # IP allowlist for connection filtering
β βββ archivers.json # Archive handler configurations
β βββ blocklist.txt # IP blocklist for connection filtering
β βββ config.json # Main BBS configuration
β βββ conferences.json # Message/file conference definitions
β βββ doors.json # Door/external program configurations
β βββ events.json # Event scheduler (cron-style tasks)
β βββ file_areas.json # File area definitions
β βββ ftn.json # FidoNet/FTN network configuration
β βββ login.json # Login sequence flow definition
β βββ message_areas.json # Message area definitions
β βββ protocols.json # File transfer protocol configuration
β βββ strings.json # BBS string customizations
β βββ ssh_host_rsa_key # SSH host key
βββ templates/ # Configuration templates (tracked in git)
β βββ configs/ # Template configuration files
β βββ infoforms/ # Info form templates
βββ data/ # Runtime data
β βββ users/ # User database and call history
β βββ msgbases/ # JAM format message bases
β β βββ general/ # General discussion area
β β βββ sysop/ # Sysop area
β βββ files/ # File areas
β βββ ftn/ # FidoNet/FTN data (packets, tosses, etc.)
β βββ logs/ # Application logs
βββ internal/ # Internal packages
β βββ admin/ # WFC admin contract (shared types for the sysop console)
β βββ ansi/ # ANSI/pipe code processing
β βββ archiver/ # Archive format handling (ZIP, etc.)
β βββ chat/ # Inter-node chat and sysop paging
β βββ config/ # Configuration loading
β βββ configeditor/ # TUI configuration editor (BubbleTea)
β βββ conference/ # Conference management
β βββ editor/ # Full-screen ANSI message editor
β βββ file/ # File area management
β βββ ftn/ # FidoNet/echomail support
β βββ jam/ # JAM message base format
β βββ logging/ # Logging setup and helpers
β βββ menu/ # Menu system & lightbar UI
β βββ menueditor/ # TUI menu editor (BubbleTea)
β βββ message/ # Message base management
β βββ qwk/ # QWK offline mail packet format
β βββ qwkapi/ # QWK packet transport REST API (experimental)
β βββ qwkservice/ # QWK packet export/import service
β βββ scheduler/ # Cron-style event scheduler
β βββ scripting/ # V3 scripting engine (goja-based JavaScript runtime)
β βββ session/ # Session management
β βββ sshserver/ # pure-Go SSH server (gliderlabs/ssh wrapper)
β βββ stringeditor/ # TUI string configuration editor
β βββ syncjs/ # Synchronet-compatible JavaScript door engine
β βββ telnetserver/ # Telnet server
β βββ terminalio/ # Terminal I/O handling
β βββ tosser/ # FTN echomail tosser (import/export)
β βββ transfer/ # File transfer protocols
β βββ types/ # Shared types
β βββ uitext/ # Shared UI text/formatting helpers
β βββ user/ # User management
β βββ usereditor/ # TUI user editor
β βββ util/ # Utility functions
β βββ v3net/ # V3Net inter-BBS networking service (experimental)
β βββ version/ # Version information
β βββ wfcui/ # WFC (Waiting For Call) sysop console TUI (BubbleTea)
β βββ ziplab/ # ZIP archive processing and viewer
βββ menus/v3/ # Menu set files
β βββ ansi/ # ANSI art files
β βββ bar/ # Lightbar menu definitions
β βββ cfg/ # Menu configuration files
β βββ mnu/ # Menu definition files
β βββ templates/ # Display templates
β βββ message_headers/ # Customizable message header styles (unlimited, 16 included)
βββ bin/ # External helper binaries (not tracked in git)
βββ scripts/ # Utility scripts and example V3/SyncJS scripts
β βββ examples/ # Example JavaScript scripts for V3 scripting and SyncJS
βββ third_party/ # Modified third-party packages (tracked in git)
βββ ziplab/ # ZipLab support data files
βββ docs/ # GitHub Pages website (vision3bbs.com)
βββ sysop/ # Sysop documentation (published)
Setup & Installation
Third-party binaries: sexyz (ZMODEM file transfers) and binkd (FTN echomail/netmail) are not built by this project. Pre-compiled binaries for these β along with all ViSiON/3 binaries β are available on the GitHub Releases page.
Option 1: Download a Pre-Built Release
The fastest way to get started β no Go toolchain required.
- Download the archive for your platform from the GitHub Releases page
- Extract it and run the setup script:
tar -xzf vision3_<platform>.tar.gz # Linux/macOS
cd vision3
./setup.sh # Linux/macOS
.\setup.ps1 # Windows (PowerShell)
- Edit
configs/config.json with your BBS settings
- Run the server:
./vision3 # Linux/macOS
.\vision3.exe # Windows
Option 2: Docker (Recommended for Production)
git clone https://github.com/ViSiON-3/vision-3-bbs.git
cd vision-3-bbs
docker-compose up -d
See Docker Deployment Guide for detailed instructions.
Option 3: Build from Source
Go 1.24+ is the only build requirement.
-
Clone and set up:
git clone https://github.com/ViSiON-3/vision-3-bbs.git
cd vision-3-bbs
./setup.sh # Linux/macOS
.\setup.ps1 # Windows (PowerShell)
setup.sh will generate SSH host keys, copy template configs to configs/, create the required directory structure, and build all binaries (vision3, helper, v3mail, strings, ue, config, menuedit, wfc).
Installing to a separate directory: setup.sh installs the BBS in-place inside the repo checkout. To install into a separate directory instead (recommended for a real deployment, and required for running multiple instances), use dev-setup.sh:
./dev-setup.sh ~/my-bbs # build binaries + a full config/data tree into ~/my-bbs
./dev-setup.sh ~/my-bbs --symlink # symlink binaries to the repo (instance always runs your latest build)
This builds and installs all binaries (vision3, helper, v3mail, strings, ue, config, menuedit, wfc) into the target directory, creates the full configs/, data/, menus/, and doors/ tree, generates an SSH host key, and seeds a default sysop account β leaving the repo checkout clean. Re-running it never overwrites existing config or data. Start the instance with cd ~/my-bbs && ./vision3.
-
Configure your BBS:
nano configs/config.json
-
Run the server:
./vision3 # Linux/macOS
.\vision3.exe # Windows
The server listens on port 2222 (SSH) and 2323 (Telnet) by default.
Default Login
The system creates a default user on first run:
- Username: felonius
- Password: password
IMPORTANT: Change this password after first login!
Connecting
ssh felonius@localhost -p 2222
SyncTerm and Retro Terminal Support
ViSiON/3 fully supports SyncTerm, NetRunner, and other classic BBS terminal emulators:
- Automatic CP437 encoding for authentic ANSI graphics
- Compatible with modern SSH algorithms
Download SyncTerm: https://syncterm.bbsdev.net/
Command Line Options
./vision3 --output-mode=auto
--output-mode: Terminal output mode (auto / utf8 / cp437)
auto: Automatically detect based on terminal type (default)
utf8: Force UTF-8 output
cp437: Force CP437 output for authentic DOS/BBS experience
Configuration
All configuration files live in configs/ and are generated from templates in templates/configs/ during setup. See the SysOp Documentation for full configuration reference.
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Acknowledgments
This project is built in tribute to ViSiON/2 and my friend Crimson Blade.
For the original ViSiON/2 BBS (Pascal version), see: vision-2-bbs