ViSiON/3 BBS Software


Overview
This project is a work-in-progress refactor and modernization of the classic ViSiON/2 BBS software, written in Go. The goal is to recreate the core functionality of the classic BBS experience using modern technologies.
This version utilizes the gliderlabs/ssh library for handling SSH connections.
Note: This is currently under active development and is not yet feature-complete.
STUFF WE NEED
π― Project Lead - 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 did the tour once")
- Deep understanding of terminal emulation, ANSI/VT100, character encodings
- 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 Relationship:
I will provide:
- Funding when we need something specific
- Cover any actual costs so nobody's out of pocket
- Keep the lights on while you focus on the code
You will provide:
- 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 Rust/JavaScript/whatever
- Add a REST API and React frontend
- Turn it into a web app
- Modernize away what makes it a BBS
If this sounds like your particular flavor of madness, email: [email protected]
π¨ Period-Correct ANSI Artists & Art
Are you a 40+ 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 TheDraw 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 (ZMODEM upload support, XMODEM, YMODEM)
- Message threading and advanced message base features
- Performance optimization and scalability
- Terminal emulation improvements
- Modern features while maintaining the classic feel
- Testing, bug fixes, and code reviews
- Documentation and examples
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!
Do we need a Discord? Do you want to host it? Contact me!
[email protected]
Current Status
Working Features
- SSH Server with PTY support (via
gliderlabs/ssh)
- User Authentication (bcrypt hashed passwords)
- User Persistence (
data/users/users.json)
- Menu System Loading & Execution (
.MNU, .CFG, .ANS files)
- Access Control System (ACS) Evaluation with basic operators (
!, &, |, ())
- Menu Password Protection
- Message Areas (basic implementation):
- List message areas
- Compose messages
- Read messages
- Newscan functionality
- File Areas (basic implementation):
- List files
- List file areas
- Select file area
- User Statistics Display
- Last Callers Display
- User Listing
- One-liner System
- Door/External Program Support (with dropfile generation)
- Call History Tracking
In Development / TODO
- Full Message Base Implementation (threading, replies, etc.)
- File Transfer Protocols (upload/download)
- Complete SysOp Tools
- User Editor
- Full File Base Implementation
- Comprehensive Testing
- Complete Documentation
See docs/status.md for detailed progress and tasks/tasks.md for specific development tasks.
Technology Stack
- Language: Go 1.24.2
- SSH Library:
github.com/gliderlabs/ssh
- Terminal Handling:
golang.org/x/term
- Password Hashing:
golang.org/x/crypto/bcrypt
- Data Format: JSON (for users, configuration, and message storage)
Project Structure
vision3/
βββ cmd/
β βββ ansitest/ # ANSI color test utility
β βββ vision3/ # Main BBS server application
βββ configs/ # Global configuration files
β βββ config.json
β βββ doors.json # Door/external program configurations
β βββ file_areas.json # File area definitions
β βββ strings.json # BBS string customizations
β βββ ssh_host_rsa_key # SSH host key
βββ data/ # Runtime data
β βββ users/ # User database and call history
β βββ files/ # File areas
β βββ logs/ # Application logs
β βββ message_*.jsonl # Message base files
βββ internal/ # Internal packages
β βββ ansi/ # ANSI/pipe code processing
β βββ config/ # Configuration loading
β βββ editor/ # Text editor
β βββ file/ # File area management
β βββ menu/ # Menu system
β βββ message/ # Message base system
β βββ session/ # Session management
β βββ terminalio/ # Terminal I/O handling
β βββ transfer/ # File transfer protocols
β βββ types/ # Shared types
β βββ user/ # User management
βββ menus/v3/ # Menu set files
β βββ ansi/ # ANSI art files
β βββ cfg/ # Menu configuration files
β βββ mnu/ # Menu definition files
β βββ templates/ # Display templates
βββ docs/ # Documentation
βββ tasks/ # Development task tracking
Setup & Installation
Quick Setup
-
Clone the repository:
git clone https://github.com/stlalpha/vision3.git
cd vision3
-
Run the setup script:
./setup.sh
This script will:
- Generate SSH host keys
- Create necessary directories
- Initialize data files
- Build the BBS executable
-
Run the server:
cd cmd/vision3
./vision3
Manual Setup
If you prefer to set up manually:
-
Build the application:
cd cmd/vision3
go build
-
Generate SSH Host Keys:
cd configs
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
-
Create directories:
mkdir -p data/users data/files/general log
The server listens on port 2222 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
Connect using any SSH client:
ssh felonius@localhost -p 2222
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
Configuration files are located in the configs/ directory:
strings.json: Customize BBS prompts and messages
doors.json: Configure external door programs
file_areas.json: Define file areas
config.json: General BBS configuration
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