1. Installing and first launch
- Download Hermes BBS from hermesbbs.com/downloads, unzip it and drag the app into Applications. (On disk the app is still named
Hermes 4.app; everywhere you see it, it's Hermes BBS.) - Open it. On first launch Hermes BBS creates its data folder, a self-signed TLS certificate, an SSH host key and a Sysop account, then starts listening for callers.
- Open File › Sysop Terminal (⇧⌘T). This is a built-in terminal that logs you straight in as Sysop. Use it to look around the board the way callers will see it.
Requirements: a Mac with Apple Silicon, running macOS 13 or later.
Run the board in the background
In Settings › Server › Background Server, turn on Run BBS in the background (hermesd). The board then keeps running when you quit the console window, and starts again at login. With it off, the board only runs while the Hermes BBS app is open.
The Sysop account's password
The Sysop account is created with a random password, because you don't need one locally: the Sysop Terminal logs you in. To log in as Sysop from another computer, set a password in Users › Sysop › Reset Password.
Where your data lives
Everything is in ~/Library/Application Support/com.hermes.server/:
| Item | What it is |
|---|---|
hermes.sqlite | The database: users, forums, messages, email, chat, settings |
Files/ | Files callers have uploaded (unless an area has its own folder, see §6) |
GFiles/ | Bulletins, welcome screens and other ANSI/text screens |
Externals/ | Classic Hermes 68K externals and their data |
DOSDoors/ | DOS door games (a suggested home; see §9) |
Use Hermes BBS backups (§10, Maintenance › Automatic Backups) rather than copying these by hand while the board is running. A backup always covers the database and screens, plus the server's SSH host key, TLS certificate, remote-admin pairings and preferences. Uploaded files and doors are included unless you leave them out. File areas kept in their own folders are included only if you turn that on, and native door folders kept elsewhere never are.
2. Letting callers in
Ports
Hermes BBS listens on a block of ports starting at 2300:
| Port | Protocol | Used by |
|---|---|---|
| 2300 | Telnet | SyncTERM, NetRunner, PuTTY, Hermes Terminal and other BBS clients |
| 2301 | Telnet over TLS (TelnetS) | Encrypted Telnet clients, Hermes Terminal |
| 2302 | HTTPS and secure WebSocket | Web terminal, file transfers |
| 2304 | SSH | Any SSH client |
Each listener can be turned on or off, and its port changed, in Settings › Server.
To accept callers from the internet, forward these TCP ports on your router to the Mac running Hermes BBS. Forward 2302 if you want browser access and HTTPS file transfers; without it, callers can still use ZMODEM.
TLS certificate
Hermes BBS makes a self-signed certificate on first launch. It encrypts traffic, but browsers and some clients warn about it. For a trusted certificate under your own domain, use a free Let's Encrypt certificate. The same steps are in the app under Settings › Security › TLS Certificate (the ⓘ button).
These steps assume your domain's DNS is hosted on Cloudflare. With another DNS provider, use the matching certbot DNS plugin; the rest is the same.
Install certbot in Terminal:
brew install certbot pip3 install certbot-dns-cloudflare- Create a Cloudflare API token at dash.cloudflare.com › My Profile › API Tokens, with permission Zone › DNS › Edit, limited to your domain.
Save the token where certbot can read it:
mkdir -p ~/.secrets cat > ~/.secrets/cloudflare.ini << 'EOF' dns_cloudflare_api_token = YOUR_TOKEN_HERE EOF chmod 600 ~/.secrets/cloudflare.iniRequest the certificate:
sudo certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \ -d bbs.yourdomain.comLet Hermes BBS read it. certbot saves certificates readable only by root:
sudo chmod 755 /etc/letsencrypt/live /etc/letsencrypt/archive sudo chmod 644 /etc/letsencrypt/live/bbs.yourdomain.com/*.pem sudo chmod 644 /etc/letsencrypt/archive/bbs.yourdomain.com/*.pem- Restart the server. Hermes BBS looks in
/etc/letsencrypt/live/automatically. Use Change… in Settings › Security › TLS Certificate only if your certificate is somewhere else. The settings show the domain, expiry date and fingerprint once it's loaded.
Renewal is automatic: certbot renews on a schedule, and Hermes BBS checks for a renewed certificate every six hours.
Web access
Port 2302 also accepts secure WebSocket connections at wss://yourhost:2302/ws. Browser-based terminals built on xterm.js use this to reach the board without any software install.
Keeping trouble out
Settings › Security › Geo-IP & IP Blocking looks up each caller's country (shown as a flag on the Connections screen). From there you can block whole countries or individual IP addresses and ranges.
Settings › Security › Password Policy sets the minimum password length and whether passwords must mix letters, numbers and symbols. It can also reject common passwords.
3. Users, security levels and groups
New callers type NEW at the username prompt to register. Callers who forget their password type RESET. If they have an email address on file, they're sent a reset code.
Security levels
Every user has a security level from 0 to 255. New users start at 10 unless you change it, and the Sysop is 255. Forums, file areas, GFiles, menu items and door games each have a minimum level; anything above a user's level is hidden from them. A common scheme:
| Level | Typical use |
|---|---|
| 0–9 | Restricted or unvalidated |
| 10 | New users (default) |
| 20–100 | Validated and trusted callers |
| 255 | Sysop |
Setting what new callers get. In Settings › Security › New Callers, choose the Starting level every new caller gets, and any Starting groups they join automatically. For example, you could put everyone in internet-email, or in a "members" group your forums require. The sysop group is never given this way, and the starting level stops at 199, because 200 and above counts as sysop. Changing these settings doesn't affect existing callers; adjust those in Users.
Groups
Groups are for access that doesn't fit a single ladder, such as "beta-testers" or "game-ops". Select any user in Users and use the Groups box to create groups and tick memberships. Any forum, file area, GFile, menu item or door can list Required Groups. A user then needs both the security level and membership in one of those groups.
Managing a user
Select a user in Users to edit their profile, security level, groups and display settings. You can also reset their password, or delete and restore the account. Users who have asked for internet email show an EMAIL REQ badge, which you approve or deny there.
You can do the same from a terminal while logged in as the sysop: U (User Editor) on the main menu. Edit User changes a user's name, location and screen size, and 5 sets a new password for them. You don't need their old one; the new one is entered twice and must meet your password rules. The change goes in the activity log, without the password. Use G to change a security level, and K and R to delete and restore accounts.
4. Forums and messages
Forums are organized as forums containing subforums, and each level has its own security level and required groups.
- Forums screen: add forums and subforums, set the description and display order, and mark a subforum Read Only for announcements.
- Messages screen: read the message base as the sysop and delete posts.
Callers see a new-message scan when they log on. They can catch up, reply, and vote in polls (the Voting Booth on the main menu).
5. Screens (GFiles) and menus
GFiles
GFiles are the board's text and ANSI screens. GFiles › Import Files… adds .ans or .txt files. Then pick where each one appears:
| Context | Shown |
|---|---|
| Welcome (Pre-Login) | Before the login prompt |
| Login (Post-Login) | Right after login, one after another (your logon sequence) |
| News | In the news reader |
| Info (Browsable) | In the Information section |
| Main Menu | In place of the built-in main menu |
| Messages Menu, Files Menu, Externals Menu | Above the forum, file area or program list when a caller enters that section. The Files Menu also replaces the built-in help when a caller presses ? inside a file area |
| Download Menu | When a caller presses D in a file area, before the download starts |
| Email Menu | In place of the built-in email menu |
| BBS Info | When a caller presses I on the main menu. The BBS Info item appears on the menu once a screen is assigned here |
| Logoff (Goodbye) | When a caller logs off |
Several screens can share a context; they're shown in order. To change the order, drag them in the GFiles list, or set Display Order by hand.
Delete removes a screen and its file from the GFiles folder. The sample screens that come with Hermes BBS (such as logoff1.ans or armageddon.ans) stay deleted once you remove them.
Menu screens are skipped for callers who turned on expert mode, the same as the built-in menus.
Pauses
- Pause after showing (a checkbox on each screen) waits for a key after a Login, News or Info screen. Use it so a logon sequence doesn't scroll past before callers can read it.
- Screens taller than the caller's screen stop at each screenful. At any pause in a screen, callers can press Q to skip the rest of it (and any further screens in that sequence).
- Classic Hermes II pause codes work: a Ctrl-I or Ctrl-K character in a screen pauses at that point. Ctrl-I is the Tab character, so a screen with more than ten Tabs, such as a tab-separated files list, keeps its Tabs as ordinary text instead. Ctrl-K always pauses. Turn pause codes off entirely with the Pause codes checkbox under the GFiles list.
Callers who set Screen Pause to off in their Defaults are never stopped.
Variables
Screens can show live information using the same codes as Hermes II, so classic screens work unchanged. For example:
| Code | Shows |
|---|---|
%bbs | Your BBS name |
%users | Number of members |
%tcall / %tctdy | Total calls / calls today |
%tptdy, %tetdy, %tutdy, %tdtdy | Posts, emails, uploads, downloads today |
%lstul, %lstdl, %lstpt, %lstem | Date of the last upload, download, post, email |
%u.name, %u.real, %u.num | The caller's name, real name and user number |
%u.slvl, %u.tcl, %u.tmsg | Their security level, total calls and posts |
%u.lston, %u.fston | Their last and first call dates |
%u.dmin, %u.tmin | Minutes on today and in total |
%date, %time, %vers | Today's date, the time, the Hermes BBS version |
The rest of the Hermes II codes are recognized too. Ones for details Hermes BBS doesn't keep, such as baud rate or phone number, show nothing. Put %novars anywhere in a screen to show it with no substitution. Values are inserted as-is, as in Hermes II, so a long value shifts the rest of its line. To keep a border lined up after a variable, move the cursor to a fixed column with the ANSI column code: ESC[79G puts the next character in column 79, whatever length the value before it turned out to be.
Hermes II color codes (Ctrl-C followed by color digits) are converted to ANSI color automatically.
ANSI screens must use DOS-style CRLF line endings. Without them the art drifts to the right line by line. When the GFiles screen sees a file with plain LF endings, it offers Fix (Convert to CRLF).
Language Variants let you provide translated versions of the same screen. Callers who chose that language see the matching variant.
File › New ANSI Document opens the built-in ANSI editor for drawing your own screens. The magnifying glass buttons in its toolbar zoom the canvas up to 300%.
Menus
The Menus screen lets you rename main-menu items, change their hotkeys, hide them, and restrict them by security level or group. Changes save automatically. Reset to Default undoes them. For a classic Hermes II layout, for example, set Messages to P, Email to M and Your Info to Y, and relabel Information as "GFiles".
The main menu offers these commands. Every key can be changed in Menus:
| Key | Command | What it does |
|---|---|---|
| M | Messages | Forums and subforums |
| F | Files | File areas, downloads and uploads |
| E | Mailbox, sent mail, writing email | |
| C | Chat | Live chat |
| N | New Scan | New messages in every forum |
| G | Information | Your bulletin screens |
| I | BBS Info | Your BBS information screen (shown once you assign one in GFiles) |
| W | Who's Online | Callers on the board now |
| S | Your Info | The caller's statistics |
| D | Defaults | The caller's settings |
| V | Voting | Polls |
| L | Last Callers | The most recent callers |
| A | Auto Message | A short message any caller can replace, shown at logon |
| B | BBS List | A list of other boards that callers add to |
| K | Feedback | Email to the sysop |
| R | User List | Every caller's name, location, last call and number of calls |
| T | Callers Today | Who has called since midnight |
| X | Externals | Door games and classic externals |
| O | Off the BBS | Log off |
| U | User Editor | Sysop only |
As in Hermes 3, callers can also type these // commands at the main menu:
| Command | What it does |
|---|---|
//UPLOAD | Paste or type text (end with /END); it becomes the start of the caller's next message or email |
//QSCAN | Show messages from a chosen date on as new again |
//RESETC | Turn ANSI color back on |
//CATCHUP | Mark every message on the board as read |
To match a Hermes 3 menu, for example, set Feedback to F (moving Files to T), User List to U (it only clashes with the sysop's User Editor, so move that too) and Callers Today to L (moving Last Callers).
6. File areas
The Files screen manages file areas, the download libraries callers browse.
- Add a file area with the + button. Give it a name and description, a Security Level (who can see and download) and an Upload Security level (who can upload).
- Browse an area's files by selecting it. You can delete individual files from the list.
- Add files with Add Files…. Choose files, or whole folders (their subfolders come too). Hermes BBS copies them into the area and lists them for callers straight away. Files uploaded by callers appear on their own.
- Use files you already have. Give the area its own storage folder (see below), point it at the folder holding your files, and click Scan Folder. Every file in it, including subfolders, is listed in place under its own name, with nothing copied. After adding more files to the folder in Finder, click Scan Folder again to pick them up. Hermes BBS doesn't watch folders on its own, so creating folders inside
Files/doesn't add anything by itself. - Chat Uploads is a built-in area that holds files shared in chat. It can't be deleted.
- Area List Colors… (below the list of areas) sets the colors callers see in the list of file areas: area number, name, description, number of files and number of new files. The preview shows the result. File counts are lined up at the right edge of each caller's screen.
What callers can do. In the list of file areas, callers type a number to open an area, N to see every new file in every area (and mark them all as seen), or P to choose a date from which files count as new. Inside an area, [ and ] step to the previous and next area, J jumps to another area by number, L lists files, N lists this area's new files, S searches, T tags files for a batch, D downloads, U uploads, and ? shows your Files menu screen or the built-in help.
Keeping an area on an external drive
Each file area can store its files in a folder of your choosing, so a large library can live on an external drive instead of the Mac's internal disk.
- Select the area in Files.
- Under Storage Folder, click Choose Folder… and pick or create a folder on the drive.
- If the area already has files, Hermes BBS asks before moving them. They're copied to the new folder first and only removed from the old one once every file has arrived. Callers can keep downloading while this runs, and a progress bar shows how far it has got.
Use Default moves an area back to the shared Files/ folder. You can also choose a folder when you create a new area.
If the drive is disconnected, the area shows an orange warning in the console. Callers trying to download or upload there are told the area is unavailable right now. Nothing is lost: reconnect the drive and the area works again. Hermes BBS never recreates a missing folder on the internal disk.
macOS may ask whether Hermes BBS can access files on a removable volume the first time it reads the drive. Click Allow. If you missed the prompt, enable it under System Settings › Privacy & Security › Files & Folders.
Backups include areas with their own folder only when you ask. Turn on Files in areas that have their own storage folder under Maintenance › Automatic Backups › Include, or back those drives up separately (Time Machine works well). For a large drive, a separate backup is usually better: each Hermes BBS backup is a complete copy.
How callers transfer files
| Method | Used by |
|---|---|
| HTTPS | Hermes Terminal (native progress) and browsers. Telnet callers get a link to open in a browser |
| ZMODEM | Classic terminal programs like SyncTERM and NetRunner |
Each caller picks Auto, HTTPS or ZMODEM under Defaults on the main menu. Auto uses HTTPS in Hermes Terminal and ZMODEM elsewhere.
7. Chat and AI chat bots
Callers press C on the main menu to join multi-channel chat. They can switch channels, use @mentions, send private messages and share files with /share. The Chat screen shows every channel live and lets you post as the sysop, create or delete channels, and drag in files to share.
AI chat bots
Chat bots are AI-powered regulars. They greet people joining a channel, reply when someone talks to them, and keep a quiet channel from feeling empty. They use xAI's Grok models:
- Get an API key from x.ai and paste it into Settings › Chat › AI Chat Bots › xAI API Key.
- On the Chat Bots screen, turn bots on, choose which channels each bot sits in, and pick a Personality (or write your own system prompt).
- Max/hour caps how many messages each bot can send. This keeps your API bill under control, and Stats shows messages and tokens used.
Bots always answer a person who is talking with them. Responsive sets how readily they join conversations they weren't asked into.
8. Email and internet email
Users can always email each other on the board, with no setup. Internet email goes further: it gives each permitted caller a real address, username@yourdomain.com, that can send to and receive from anywhere. You don't run a mail server. Incoming mail arrives through a provider's webhook, and outgoing mail leaves through a provider's API or an SMTP relay.
Everything is set in Settings › Email. Changes save automatically, and each box has a ? button with the same steps shown below.
What you need
- A domain you control (for example
mybbs.net), with DNS you can edit. Cloudflare DNS is the easiest because inbound mail uses Cloudflare. - Port 2302 (HTTPS) on the Mac reachable from the internet, because incoming mail is delivered to it.
- An outbound provider account: Amazon SES, an SMTP relay, or Cloudflare.
A common, proven pairing is Cloudflare for inbound and Amazon SES for outbound.
Step 1: choose providers and your domain
At the top of the settings, set Inbound to Cloudflare and choose an Outbound provider. Then enter your Domain. This is the part after the @ in your users' addresses.
Step 2: receiving mail (Cloudflare Email Routing)
Cloudflare receives mail for your domain, and a small Cloudflare Worker turns each message into a signed web request to your board.
- Turn on Email Routing. In the Cloudflare dashboard, select your domain › Email › Email Routing › Enable. Cloudflare adds the MX records for you.
- Create the Email Worker. Go to Email Routing › Email Workers › Create Worker. Open the ? next to Receiving (Inbound) in Hermes BBS, click the copy button above the Worker code, and paste it into the Worker in place of the default code. The code imports the
postal-mimelibrary to read each message. If the dashboard editor can't resolve that import, deploy the Worker with Cloudflare'swranglertool after runningnpm install postal-mime. Give the webhook a proxied hostname. Email Workers can only call standard HTTPS (port 443), but Hermes BBS listens on 2302. To bridge them:
- Add a DNS A record such as
mail.yourdomain.com, pointing at your public IP, with the proxy turned on (orange cloud). - Add an Origin Rule (Rules › Origin Rules) for that hostname that rewrites the destination port to 2302.
- Enter that hostname as Webhook Host in Hermes BBS. The Webhook URL below it then reads
https://mail.yourdomain.com/mail/inbound.
- Add a DNS A record such as
Connect the Worker to your board. In the Worker's Settings › Variables, add:
HERMES_WEBHOOK_URL: copy it from the Webhook URL field.WEBHOOK_SECRET: copy it from the Webhook Secret field.
The secret proves messages came from your Worker. If you ever click Regenerate, update
WEBHOOK_SECRETin the Worker to match.- Route all mail to the Worker. Under Email Routing › Routes, add a catch-all rule that sends to your Worker.
- Test it. From an outside account (Gmail, iCloud…), email
someuser@yourdomain.com. The message should land in that user's BBS inbox within seconds. Attachments are kept in the hidden Email Attachments file area.
Amazon SES can't be used for inbound mail yet; it is outbound only.
Step 3: sending mail
Pick one outbound provider. Whichever you choose, finish by typing your own address into Test to and clicking Send Test. This sends a real message using the settings on screen, so you can check them before any user relies on them.
Amazon SES
- In the AWS console, open SES in your preferred region (for example us-east-1). Go to Identities › Create identity › Domain and enter your mail domain.
- Add the three DKIM CNAME records SES gives you to your DNS.
Add deliverability records to your DNS:
TXT yourdomain.com "v=spf1 include:amazonses.com include:_spf.mx.cloudflare.net ~all"TXT _dmarc.yourdomain.com "v=DMARC1; p=quarantine"
The SPF record covers both SES (sending) and Cloudflare (receiving).
- In IAM, create a user with
ses:SendEmailandses:SendRawEmailpermissions and generate an access key. Enter the Access Key, Secret Key, Region and From Identity (your domain) in Hermes BBS. - New SES accounts start in a sandbox that can only send to addresses you've verified. To send to anyone, request production access under SES › Account dashboard › Request production access.
SMTP relay
Any authenticated SMTP relay works: SES SMTP, Mailgun, Postal, your own Postfix, or Cloudflare's smtp.mx.cloudflare.net. The relay does the signing and delivery, so use one that is authorized to send for your domain.
- Enter the relay's Host and Port. Use implicit TLS on port 465. STARTTLS (port 587) isn't supported yet, so pick the 465 endpoint if your provider offers both. Plain, unencrypted port 25 is only for a trusted relay on your own network.
- Enter the Username and Password if the relay needs them (most do).
- Leave From Override empty to send as each user's own address, or set it to force one fixed sender.
Cloudflare
Cloudflare's sending service is in public beta. Either:
- Switch Outbound to SMTP and use
smtp.mx.cloudflare.net, port 465, with your Cloudflare SMTP credentials (no code to deploy), or - Deploy your own Worker that accepts a JSON POST and sends it. Hermes BBS posts
{from, fromName, to, subject, text, html, messageId, inReplyTo, references}with your API Token as anAuthorization: Bearerheader. Enter the Worker's address (such ashttps://your-worker.workers.dev/send) in Outbound URL.
Step 4: deciding who gets internet email
Internet email is granted per user, through membership in the built-in internet-email group.
- To give someone access, tick the group for them in Users. Caller Access › Manage in Users jumps there.
- With Prompt users to request internet email access on, callers are offered a request from the board. Pending requests show an EMAIL REQ badge in Users, where you approve or deny them.
- Daily Limit caps how many messages each user can send per day (0 means unlimited; the default is 200). This protects your domain's reputation if an account is misused.
9. Door games and external programs
Hermes BBS runs three kinds of programs for callers. On the board they all appear on the same Externals menu (X on the main menu), grouped as Externals (Hermes 68K Emulation), Door Games (Native) and Door Games (Hermes x86 Emulation). Callers don't need to know the difference.
| Kind | What it is | Managed in |
|---|---|---|
| Classic Hermes externals | Original 1990s Hermes programs for 68K Macs, run in a built-in 68K emulator | Externals |
| Native doors | Modern doors built for macOS that read a DOOR32.SYS drop file | Door Games |
| DOS doors | Classic MS-DOS BBS doors, run in the built-in 8086 emulator (no DOSBox) | Door Games |
Classic Hermes externals (68K)
Where to get them. The hermesbbs.com Downloads page has three collections, each a single archive of every known external for that era:
| Collection | Contents |
|---|---|
| v2.2 Externals (60+ programs) | Blackjack, Checkers, Chess, Hangman, Slots, HerTris, ANSI Doodle, H:UX, sysop utilities and more |
| v3.1 Externals (16 programs) | Blackjack Pro, HerTris, Taipan, Othello, Video Poker, Merchant, BattleRoom and more |
| v3.5 Externals (9 programs) | Blackjack Pro 1.3.1, Snake, Leech 3.5, TakeStock, Cups, Slycrel |
Externals from Hermes v2.2 through v3.5.11 run unmodified.
Unpacking. The archives are classic Mac StuffIt (.sit) files. Expand them with The Unarchiver (free, on the Mac App Store) or StuffIt Expander. These tools keep each file's resource fork, which is where a classic external's program code lives. Don't unpack them with tools that drop resource forks, or copy them through a non-Mac file system (a FAT USB stick, a zip made on another OS). An external that lost its resource fork shows no code segments and won't run.
Installing.
- Open the Externals screen and click Import Externals….
- Select one or more external files, or the folders a collection unpacked into. Hermes BBS copies them into
~/Library/Application Support/com.hermes.server/Externals/as they are, keeping their resource forks and data folders, and tells you how many externals it found. You can also drop the unpacked folders straight into the Externals folder: Hermes BBS looks inside subfolders. Select each external to review it. You'll see its version, code segments and original settings. Then set:
- Enabled: whether callers see it.
- Override min security level: replace the level built into the external.
- Required Groups: limit it to certain groups.
Click Save Access Settings.
Good to know:
- Some externals keep scores or game files. Reveal in Finder shows their data, and Reset clears it, for example to start a new game season.
- Shareware registration codes are obsolete. Hermes BBS bypasses the old registration checks automatically, so these externals run without codes.
- Some old externals came with a sysop configuration screen for the original Mac admin app. Hermes BBS shows those settings for reference, but doesn't run those screens.
Native doors (DOOR32.SYS)
Native doors are ordinary macOS programs. Each time a caller launches one, Hermes BBS writes a DOOR32.SYS drop file describing the caller (name, node, time left, ANSI support). It starts the program with that file's path added to the end of its arguments, and connects the program's input and output to the caller.
Where to put them. Anywhere stable on the server Mac. This guide uses a doors folder in your home folder, with one subfolder per door: ~/doors/usurper-reborn, for example. Keep each door's data files next to it; many doors store their game data in their own folder.
Adding one. In Door Games, click Add Door Game…, set Type to Native (macOS binary), and fill in:
| Field | What to enter |
|---|---|
| Name | What callers see on the menu |
| Executable | The door program (use Browse…) |
| Arguments | Any options the door needs before the drop-file path, space-separated |
| Working Directory | Usually the door's own folder |
| Use PTY | Turn on for doors that need a real terminal (they check isatty()) |
| Min Security Level, Required Groups, Sort Order | Who can play it and where it sits in the list |
Example: Usurper Reborn, the medieval RPG that's a flagship native door.
- Download the latest macOS-AppleSilicon zip from the Usurper Reborn releases on GitHub and unzip it.
- The zip contains
usurper-reborn.app. Copy the contents ofusurper-reborn.app/Contents/Resources/into~/doors/usurper-reborn/. Don't point Hermes BBS at the.appitself. The download doesn't mark the program as executable. Fix that in Terminal:
chmod +x ~/doors/usurper-reborn/UsurperReborn- Add it in Door Games: Executable
~/doors/usurper-reborn/UsurperReborn, Arguments--door32, Working Directory~/doors/usurper-reborn.
To update later, back up usurper_online.db (it holds players' characters), copy the new release's files over the old ones, and run the chmod again.
Python doors. If you write your own doors, Add Python Door… takes a .py script and configures everything: the interpreter, the drop file, and a copy of the Hermes door kit (hermes_door.py) next to your script. It needs Python 3 on the Mac. If it's missing, Hermes BBS tells you to install Apple's command line tools with xcode-select --install. Native and Python doors also get two extra environment variables: HERMES_DOOR_LANG (the caller's language) and HERMES_DOOR_GROUPS (their groups).
DOS doors (Hermes86)
DOS doors run inside Hermes BBS's own 8086 emulator. There's nothing else to install: no DOSBox and no FOSSIL driver.
Where to get them. Classic doors come from their authors' or publishers' distribution archives and from the many BBS software archives online. Check each door's license and registration terms. Doors confirmed working today are Legend of the Red Dragon (LORD) and Pimp Wars. Others may work too, but the emulator covers the DOS features doors commonly use, not all of DOS, so test a new door before opening it to callers.
Where to put them. One folder per door inside the data folder:
~/Library/Application Support/com.hermes.server/DOSDoors/games/lord/
~/Library/Application Support/com.hermes.server/DOSDoors/games/pimpwars/
Unzip the door's original archive into its folder. Run any setup the door needs on another DOS system first if it requires one; many doors, LORD included, come ready to run.
Adding one. In Door Games, click Add Door Game…, set Type to DOS (Hermes86 emulator), and fill in:
| Field | What to enter |
|---|---|
| Door Directory | The door's folder. Inside the emulator this is drive C: |
| Executable + Args | The .EXE name plus its command line, exactly as a DOS BBS would run it |
| Max concurrent nodes | How many callers can play at once; each gets their own node number |
For each session, Hermes BBS writes the two classic drop files, DOOR.SYS and DORINFO1.DEF. They go on drive D: and are also copied into the door's folder, so doors find them wherever they look.
Settings for the two confirmed doors:
| Door | Door Directory | Executable + Args |
|---|---|---|
| Legend of the Red Dragon | …/DOSDoors/games/lord | LORD.EXE 1 /DREW |
| Pimp Wars | …/DOSDoors/games/pimpwars | PIMPWARS.EXE DORINFO1.DEF 1 |
Pimp Wars must be told to use DORINFO1.DEF; it doesn't work with DOOR.SYS. For both, 4 concurrent nodes is a sensible starting point.
Remember: DOSDoors/ is in Hermes BBS backups (unless you turn off Externals and DOS doors), but native door folders kept elsewhere are not, and they hold your players' game data. Include them in your own backups.
10. Maintenance and updates
Maintenance
- Automatic Backups: see Backups below.
- Manual Backup & Restore: Create Backup saves a backup wherever you choose. To restore, stop the server first and then use Restore from Backup.
- Database: check integrity, and Run VACUUM to compact the database.
- Purge Old Data: trim old activity-log entries, chat history and closed polls.
- Storage Breakdown shows what's using disk space, including areas kept on their own folders.
- Statistics: top callers, posters and most active forums.
Backups
Turn on Maintenance › Automatic Backups and Hermes BBS backs itself up once a day:
- Click Choose… and pick a folder. Pick one that isn't only on this Mac's internal drive: a folder in iCloud Drive, a second disk or a network share. A backup that lives on the same drive as the board doesn't survive that drive failing.
- Tick Back up every day at and pick a time when the board is quiet. If the Mac is off or asleep at that time, the backup runs soon after it wakes.
- Under Include, choose what goes in (see below).
- Set Keep to how many backups to hold. Older ones are deleted from that folder automatically; nothing else in the folder is touched.
- Click Back Up Now to make the first one and check that it works.
The panel shows when the last backup ran, its size and file name, when the next one is due, and the error if one failed. A failed backup is retried every hour. The last-backup line turns orange when no backup has succeeded for two days.
Each backup is a single hermes-backup-<date>-<time>.zip. It always holds:
- the database: users, forums, messages, mail, chat and settings (copied safely while callers are on)
GFiles/: your screens and bulletins- the SSH host key, so callers' SSH clients don't warn about a changed host after a restore
- the TLS certificate, the file-transfer signing key and paired remote-admin devices
- the server's preferences: listener switches, country and IP blocklists
Under Include you choose the rest. Each option shows its current size:
| Option | What it adds | Default |
|---|---|---|
| Uploaded files in the Hermes data folder | Files/: uploads in areas using the default storage folder | On |
| Externals and DOS doors | Externals/ (with the classic resource forks) and DOSDoors/, including players' game data | On |
| Files in areas that have their own storage folder | The files of areas you moved to their own folder or drive | Off |
If your file areas are large, leave them out here and back them up another way (Time Machine, or a copy on a second drive). Every backup still lists every file, so a restore brings the file catalog back. Put the files themselves back before callers try to download them. A restore never deletes anything a backup left out: those folders stay exactly as they are on the Mac.
These choices apply to Create Backup under Manual Backup & Restore too.
Without large file areas, a board with a few thousand messages and a set of externals backs up to under 10 MB, so keeping two weeks of copies in iCloud Drive costs little.
The backup is written by the server process itself. If it reports that the folder isn't available, check that the folder exists and that the drive is connected. For iCloud Drive, also check that Hermes BBS is allowed under System Settings › Privacy & Security › Files & Folders.
Restoring. Stop the server, then use Maintenance › Restore from Backup and restart Hermes BBS. On a new Mac, install Hermes BBS, open it once, quit it, then restore. If the console can't be used, restore from Terminal while the server is stopped:
"/Applications/Hermes 4.app/Contents/MacOS/Hermes 4" --restore-backup ~/path/to/hermes-backup-….zip
Files for areas with their own folder go back only into folders that exist, and never overwrite a file already there. Connect the drive before restoring.
Activity Log
The Activity Log screen is a live record of logons, uploads, downloads, door sessions and admin changes. Filter it by user or event type.
Software updates
Settings › Advanced › Software Update controls how Hermes BBS updates itself:
| Setting | What happens |
|---|---|
| Off | No update checks |
| Notify Only | You're told when an update is available |
| Install When Available | Updates install as soon as they're released |
| Install at Scheduled Time | Updates install at a quiet hour you choose |
Hermes BBS › Check for Updates… checks right away.
Importing a classic Hermes board
Import reads a classic Hermes BBS folder and brings its users and message base into Hermes BBS. Point it at the old board's folder, click Scan, review what it found, then Import Selected.
Administering from another Mac
Settings › Remote Admin lets a copy of Hermes BBS on another Mac manage this server. Turn on remote administration, then pair the other Mac with the one-time code shown. Folder choices made from a remote console, such as a file area's storage folder, are typed paths on the server Mac.
Getting help
- What's New: Hermes BBS › What's New in Hermes BBS…
- Website: hermesbbs.com
- Feedback and bug reports: use the contact link on the website. Describe what you did and what you saw, and include the build number from Hermes BBS › About Hermes BBS.