{"id":36868442,"url":"https://github.com/robbiew/retrograde","last_synced_at":"2026-01-12T14:57:53.585Z","repository":{"id":318746094,"uuid":"1071201754","full_name":"robbiew/retrograde","owner":"robbiew","description":"Retrograde is an old-school Bulletin Board System (BBS) built for modern use. It seeks to replicate many features of classic BBS software -- while adding some new ones.","archived":false,"fork":false,"pushed_at":"2025-11-21T13:22:58.000Z","size":534516,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-21T15:16:19.114Z","etag":null,"topics":["ansi-art","bbs","console-application","go","textmode"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robbiew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-07T02:40:49.000Z","updated_at":"2025-11-21T13:23:02.000Z","dependencies_parsed_at":"2025-10-30T01:16:40.043Z","dependency_job_id":"f1fd712c-f9a2-41a8-a18e-20165cb4ab3a","html_url":"https://github.com/robbiew/retrograde","commit_stats":null,"previous_names":["robbiew/retrograde"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/robbiew/retrograde","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fretrograde","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fretrograde/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fretrograde/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fretrograde/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robbiew","download_url":"https://codeload.github.com/robbiew/retrograde/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiew%2Fretrograde/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340414,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansi-art","bbs","console-application","go","textmode"],"created_at":"2026-01-12T14:57:53.510Z","updated_at":"2026-01-12T14:57:53.572Z","avatar_url":"https://github.com/robbiew.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Retrograde BBS\n\n|                                                            |                                                 |\n| :--------------------------------------------------------: | :---------------------------------------------: |\n|  ![BBS Config TUI](content/screenshots/tui_screen_1.png)   | ![File List](content/screenshots/file_list.png) |\n| ![Subscription Manager](content/screenshots/subscribe.png) |   ![File Search](content/screenshots/fsr.png)   |\n\nRetrograde is a retro-style Bulletin Board System (BBS) implemented in Go. The project has achieved **moderate functional completeness** for some core BBS operations and is test-ready. Active development continues on advanced features like file areas and transfer protocols. Don't use in production yet!\n\n## AI Trigger warning\n\nI use LLMs strategically to guide work that would otherwise take months of trial-and-error in my limited free time. Most LLM-related contexts and notes are documented in the `memory-bank/` and in `.github/` folders for transparency.\n\n## Core Objectives\n\n- Open and transparent development: contributors welcome!\n- Targeting Linux (including Raspberry Pi). Some functions might not yet work on Windows or Mac yet\n- Classic BBS experience: Maintain the spirit and look \u0026 feel of software like Telegard, Renegade, Iniquity, ViSiON-X\n\n## Planned Feature Status\n\n| Feature                         | Progress | Notes                                                                           |\n| ------------------------------- | -------- | ------------------------------------------------------------------------------- |\n| Installation                    | 100%     | Install and build scripts, including external deps                              |\n| Telnet Server                   | 100%     | Completed with full session                                                     |\n| Binkd Server                    | 100%     | External dependency, runs as a child process                                    |\n| Security System                 | 100%     | White/Blocklist support, GeoIP filtering, Rate Limiting                         |\n| SQLite Database                 | 100%     | Seeds sensible defaults on initialization                                       |\n| TUI Configuration Editor        | 100%     | View and edit configuration in Terminal UI application                          |\n| Automatic First-Time Setup      | 100%     | Creates database with sensible defaults automatically                           |\n| ANSI Art Support                | 100%     | Print up to 80 col ansi art, automatic SAUCE record stripping                   |\n| Session Management              | 100%     | Idle timeout, disconnection, time tracking                                      |\n| Node Management                 | 100%     | Max nodes, per-user limits, node directories, logging                           |\n| Auth /Login UI                  | 100%     | Create New User, Login with direct auth flow                                    |\n| Timed Event System              | 100%     | Do things on a timed/recurring schedule (example poll \u0026 maint scripts included) |\n| Menu Construction System        | 100%     | Renegade-style approach for constructing menus and prompts                      |\n| Menu Execution                  | 100%     | Execute Menu Command Logic (stacking, first run, special keys)                  |\n| Message Base Configuration \u0026 UI | 100%     | Conference \u003e Area creation and management hierarchy                             |\n| JAM message files               | 100%     | Format implementation, read/write, lastread tracking                            |\n| Message Base (FTN) Support      | 100%     | JAM format, Husky/hpt and binkd config generation                               |\n| Message Base New Scan           | 100%     | Scan subscribed areas from Last Read pointers                                   |\n| Message Base Subscriptions      | 100%     | Subscribe/Unsubscribe to areas for New Scan with MZ command                     |\n| JAM Utility (jamutil)           | 100%     | Complete replacement for hptutil - [Details](docs/jamutil-go-replacement.md)    |\n| FTN mailer                      | 100%     | Binkd support built in, binkd.conf auto generation                              |\n| Netmail Support                 | 100%     | Type defined, basic \"Private mail\" menu                                         |\n| Private Email Support           | 100%     | Support user-to-user local private mail                                         |\n| Message Editor (basic)          | 100%     | Classic DOS editors like IceEdit, DCTEdit, and new StormEdit (Linux)            |\n| Message Reader (basic)          | 100%     | UI integration with basic template and MCI code support                         |\n| Linux Doors                     | 100%     | Native PTY execution, environment variables, full I/O                           |\n| DOS Door Support                | 100%     | DOSEMU2 integration, DOOR.SYS/door32.sys/DORINFO#.DEF dropfiles                 |\n| Pipe Colors                     | 100%     | Support for Renegade-style pipe colors                                          |\n| Color Themes                    | 100%     | Support for color themes                                                        |\n| Python Scripting                | 100%     | Python3 scripting with pipe color support, BBS API functions                    |\n| User Settings Menu              | 100%     | Allow users to change Personal Settings                                         |\n| MCI Codes                       | 25%      | Template system with visual placeholder support, needs expansion                |\n| Menu Commands                   | 35%      | [List](docs/menu-commands.md) - Core navigation \u0026 door commands done            |\n| File Area Management            | 80%      | Database schema and TUI configuration complete                                  |\n| File Area UI                    | 80%      | List and search files                                                           |\n| Echo File Area UI               | 5%       | Basic structure planned                                                         |\n| TIC File Area Processing        | 0%       | Database schema supports TIC processing                                         |\n| Mass Import Files               | 100%     | Database schema supports batch imports using 'helper' binary                    |\n| Upload/Download Functions       | 100%     | Complete - SEXYZ + lrzsz protocols, TUI configuration, menu integration         |\n| Archivers                       | 100%     | zip, arj, lzh, etc.                                                             |\n| Achievements                    | 0%       | Implement achievement tracking and rewards                                      |\n| SSH Server                      | 0%       | Not started                                                                     |\n| TelnetS Server                  | 0%       | Not started                                                                     |\n| 132x37 art support              | 0%       | Not started                                                                     |\n| Ansi Art Gallery                | 0%       | Not started                                                                     |\n| One-Liners                      | 0%       | Not started                                                                     |\n| Local Last 10 Callers           | 0%       | Not started                                                                     |\n| Network Last Callers            | 0%       | Not started                                                                     |\n| Users Online Now                | 0%       | Not started                                                                     |\n| Node Messaging                  | 0%       | Not started                                                                     |\n| User List                       | 0%       | Not started                                                                     |\n| System Information              | 0%       | Not started                                                                     |\n| MRC Chat                        | 0%       | Not started                                                                     |\n| RLOGIN Server                   | 0%       | Not started                                                                     |\n| Game Server Mode                | 0%       | Not started                                                                     |\n| Connect to Game Servers         | 0%       | Not started                                                                     |\n| Built-in Web Server             | 0%       | Not started                                                                     |\n| Web-Based Messaging             | 0%       | Not started                                                                     |\n| Built-in File Access/Download   | 0%       | Not started                                                                     |\n| Discord Notifications           | 0%       | Not started                                                                     |\n| SMTP Integration                | 0%       | Not started                                                                     |\n| Forgot/Reset PW Function        | 0%       | Not started                                                                     |\n\n## External Dependencies\n\nRetrograde includes an automated system for managing external Fidonet utilities required for message processing:\n\n### Bundled Utilities\n\n- **Husky HPT** - FTN message processor for importing/exporting echomail and netmail\n- **Binkd** - Mailer daemon for FTN message exchange with other nodes\n- **StormEdit** - Modern cross-platform message editor with UTF-8 support\n\nFor detailed information, see `docs/building-external-dependencies.md`.\n\n## Quick Start\n\n### System Dependencies\n\nFor full functionality, you may want to install additional system packages. See [docs/package-requirements.md](docs/package-requirements.md) for detailed installation commands for your distribution.\n\n**Quick install for Ubuntu/Debian:**\n\n```bash\nsudo apt-get install golang-go build-essential git curl wget tar zip unzip python3\n```\n\n*Note: DOSemu2 requires adding a PPA first - see the full documentation for details.*\n\n## Installation\n\n### Build from Source\n\nThe easiest way to install Retrograde is using the installation script:\n\n```bash\nchmod +x install.sh\n./install.sh\n```\n\nThe installer will:\n\n1. Prompt for installation directory (default: `~/retrograde`)\n2. **Download external dependencies** (Husky HPT, Binkd, StormEdit)\n3. Build a fresh binary from source\n4. Copy all content files (themes, doors, docs)\n5. Set up directory structure\n\nAfter installation:\n\n```bash\ncd ~/retrograde  # or your chosen directory\n./retrograde config  # Configure BBS settings\n./retrograde  # Start the server\n```\n\n**Message Base Maintenance:**\n\n```bash\n# JAM message base utilities (replaces buggy `hptutil`):\nbin/jamutil sort link pack    # Sort, link, and pack message areas\nbin/jamutil fix               # Check message base integrity\nbin/jamutil purge             # Remove old messages per retention settings\n```\n\n## Command Line Options\n\n- `./retrograde` - Run the server (creates database with defaults if needed)\n- `./retrograde config` (or -config, --config, /config) - Launch configuration editor\n\n## Documentation\n\nComprehensive documentation is available in the `docs/` directory:\n\n### User Guides\n\n- **[Helper Tool Guide](docs/helper-tool.md)** - File management and bulk operations 🤖\n- **[File Storage Architecture](docs/file-storage.md)** - How the content-addressed storage system works 📁\n\n### System Administration  \n\n- **[First Time Setup](docs/first-time-use.md)** - Getting your BBS running\n- **[Door Games](docs/doors.md)** - Setting up classic BBS games\n- **[Python Scripts](docs/python-scripts.md)** - Custom scripting and automation\n\n## Security File Management\n\nThe server uses IP allowlist and blocklist files for access control. These files don't exist, create them if you want to se them:\n\n**Blocklist** (`security/blocklist.txt`):\n\n```text\n# Format: IP_ADDRESS REASON\n1.2.3.4 Known spam source\n192.168.100.0/24 Blocked subnet range\n```\n\n**Allowlist** (`security/allowlist.txt`):\n\n```text\n# Format: IP_ADDRESS REASON\n127.0.0.1 Localhost\n192.168.1.100 Admin home IP\n203.0.113.0/24 Trusted ISP range\n```\n\n**Features:**\n\n- Comments start with `#`\n- Supports individual IPs and CIDR ranges\n- Allowlist takes priority over blocklist\n- Files are loaded at server startup\n- Auto-populated by rate limiting system\n\n## Data Storage\n\nAll BBS data is stored in SQLite database, e.g. default (`data/retrograde.db`):\n\n- **User accounts**: Authentication, profiles, and preferences\n- **Configuration**: Server settings and BBS configuration\n- **Sessions**: Active user sessions and node management\n- **Security**: Audit logs and threat intelligence data\n\n**Security Logs** (`logs/` directory):\n\n- Security events logged to `logs/security.log`\n- Connection attempts, blocks, and system events\n- Daily logs in `logs/YYYY-MM-DD.log` format\n\n## Project Structure\n\nThis project follows the [Standard Go Project Layout](https://github.com/golang-standards/project-layout):\n\n```text\nretrograde/\n├── cmd/\n│   └── server/         # Main BBS server binary\n├── content/            # Content assets for the BBS (themes, doors, scripts)\n│   ├── DOS/            # DOSEMU2 configuration templates\n│   ├── doors/          # Door game files (LORD, IceEdit, StormEdit, etc.)\n│   ├── scripts/        # Python scripts and utilities\n│   └── theme/          # ANSI art themes and templates\n├── docs/               # Documentation, design notes, and research\n├── internal/           # Private application packages\n│   ├── auth/           # User authentication, registration, and session management\n│   ├── binkd/          # Binkd mailer integration and configuration\n│   ├── color/          # Color theme system and pipe color support\n│   ├── config/         # Configuration management and database integration\n│   ├── database/       # SQLite database layer and schema management\n│   ├── door/           # Door system (dropfiles, execution, DOSEMU2)\n│   ├── editor/         # Message editor system (internal/external)\n│   ├── event/          # Timed event system and scheduler\n│   ├── filesystem/     # Filesystem operations and utilities\n│   ├── hpt/            # HPT integration for FTN message processing\n│   ├── husky/          # Husky FTN config generation\n│   ├── jam/            # JAM message base format implementation\n│   ├── logging/        # Logging utilities and node management\n│   ├── mci/            # MCI code processing and template system\n│   ├── menu/           # Menu construction system, rendering, and navigation\n│   ├── networking/     # Network configuration and FTN address management\n│   ├── python/         # Python scripting bridge and API\n│   ├── security/       # Security system (rate limiting, geo-blocking, threat intel)\n│   ├── sys/            # System utilities and platform-specific code\n│   ├── telnet/         # Telnet I/O and protocol handling\n│   ├── tui/            # Configuration TUI (Terminal User Interface)\n│   └── ui/             # UI utilities (ANSI art, terminal handling, colors)\n├── memory-bank/        # Development documentation (AI notes, design docs, etc.)\n├── release/            # Build artifacts and release binaries\n├── scripts/            # Build and utility scripts\n└── third_party/        # External dependencies and build configurations\n\n```\n\n## Requirements\n\n- Go 1.24+\n- Modern terminal/telnet client with ANSI support (like Syncterm, Netrunner, Icy_Term or MagiTerm)\n\n## Dependencies\n\n### Go Dependencies\n\n- `github.com/charmbracelet/bubbletea` - Terminal UI framework\n- `github.com/charmbracelet/lipgloss` - Terminal styling\n- `modernc.org/sqlite` - SQLite database\n- `github.com/mattn/go-isatty` - Terminal detection\n- `golang.org/x/text` - Text processing utilities\n- `github.com/google/uuid` - UUID generation\n\n---\n\nPart of the *Retrograde BBS* project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbiew%2Fretrograde","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobbiew%2Fretrograde","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbiew%2Fretrograde/lists"}