| Recommend this page to a friend! |
| Packages of Matthew Asham | Binkterm PHP | docs/UPGRADING_1.9.0.md | Download |
|
|||||||||||||||||||||
Upgrading to 1.9.0Make sure you have a current backup of your database and files before upgrading. Table of Contents
Summary of ChangesOutgoing Message Charset
- Outgoing FTN messages now default to CP437 (IBM PC / DOS) instead of UTF-8. This minimizes text display issues on legacy networks such as FidoNet where many nodes run software that does not support UTF-8 encoding. The default can be changed in Admin ? BBS Settings, and individual uplinks can override it with their own charset setting. Local echo areas always use UTF-8 regardless of this setting. Replies still inherit the charset of the message being replied to when possible.
- The LovlyNet registration script ( Security Fixes
- The optional MCP server now updates its Logging
- When a web-server PHP process cannot write directly to an application log file, it now sends the log entry to the admin daemon so the daemon can append it to the correct log file instead.
- Door session setup events (session start, node allocation, DOSBox launch) are now written to BinkP
- Outbound routing now checks for an exact configured uplink address match before falling back to network-based uplink selection. This allows multiple uplinks on the same FTN network, so messages explicitly addressed to a specific uplink node can be routed through that uplink instead of being matched only by shared network patterns.
- Outbound FTN packet message bodies now use bare CR ( Robots
- The echomail robot processor type previously displayed as "Auto-Reply" is now displayed as "TEST Area Auto Responder" to better describe its purpose. No configuration changes are required; the internal processor type identifier ( Caddy Configuration
- The recommended Caddy configuration has been updated. If you use Caddy, a one-time manual edit to your Caddyfile is required to ensure static files and subdirectories with Markdown Images
- Images uploaded through the echomail message editor are now served at human-readable URLs in the form Terminal Server Settings - The telnet/SSH terminal server now includes a dedicated settings screen so users can change their own preferences, profile details, and account password directly from the text interface. The terminal login screen also now includes a lost-password reset path that starts the same email reset flow as the web form, including support for username, real name, or email address lookup. The settings screen includes tabbed navigation, in-place save behavior, centered save/discard feedback, and a full-screen signature editor with signature-specific wording. File Previewer
- The file area previewer now supports Commodore 64 SID music files ( File Upload
- When a Message Composer
- Saving an echomail or netmail draft now preserves the full compose state: message encoding (charset), markup format (plain, Markdown, Style Codes), hard-wrap setting, tagline selection, and cross-posted echo areas. When the draft is reopened, all of these fields are restored to the values that were in effect when the draft was saved. Previously, only the primary echo area, message text, subject, and recipient fields were saved; the encoding, markup type, wrap setting, tagline, and cross-post selections were silently discarded. A database migration ( BBS Directory
- Each BBS listing now has its own dedicated information page at Dashboard - Usernames in the shoutbox are now clickable links that navigate to the user's profile page. - The Today's Callers list (visible to admins) has been moved out of the System Information card into its own dedicated card. Usernames in the list are now clickable links to each user's profile page. - Today's Callers now includes users who logged in today (sourced from the persistent login activity log, so they remain visible after logout) and users with an active session that has activity today (covers long-lived cookie accounts). The column previously labelled "Last seen" has been renamed to "Last Call". Bug Fixes
- Switching to a different uplink in the AreaFix Manager now automatically reloads the message history for the active tab. Previously the history panel was cleared but not repopulated, leaving it blank until the Refresh button was clicked manually.
- Users can now log in using their real name as well as their username. Both fields are case-insensitive and unique, so there is no ambiguity.
- Opening a saved netmail message in the message modal and clicking the save button unsaved it correctly from the message list, but the same button inside the modal always showed "Save" instead of "Saved" and would re-save rather than unsave. The single-message API query for netmail was missing the Documentation
- Real-time Events (BinkStream)
- Dashboard stats notifications are now targeted per user. Echomail events are sent only to users subscribed to the affected echo area who are currently online; netmail events go only to the recipient if online; file events go to all online users. Previously all events were broadcast to every connected user regardless of subscriptions.
- Browser-side BinkStream transport selection in Security FixesMCP Server Dependency UpdateThe This change affects the optional Model Context Protocol server used for AI assistant access to echomail. The main PHP application and the DOSBox bridge do not use this dependency. No database migration is required for this release. CVE CoverageThis update is included specifically to address the following dependency advisories in the MCP server stack:
If you do not run the optional MCP server, no additional service-specific action is required beyond your normal application upgrade process. BinkPExact Uplink Address MatchingOutbound routing now checks for an exact configured uplink address match before falling back to network-based uplink selection. This allows systems to carry different echo areas through different uplink nodes on the same FTN network. When a message is explicitly addressed to a configured uplink node, that specific uplink can now be selected directly instead of being resolved only through shared network patterns. If multiple uplinks are configured with the same network patterns and no exact uplink-address match applies, routing still falls back to the existing network-based selection rules. FTS-0001 Compliant Outbound Line TerminatorsFTS-0001 defines CR (0x0D) as the sole line separator in FTN packet message bodies. LF (0x0A) is explicitly defined as a character parsers may ignore ? it must not be emitted by a compliant writer. BinktermPHP was writing CRLF ( All line terminators in outbound packet bodies are now written as bare CR. This covers kludge lines ( No database migration is required. The change affects only what is written into outbound Queue List Auto-RefreshThe inbound and outbound queue lists on the BinkP administration page previously showed the state of the queues at the moment the page was loaded. Files processed or transferred during that session were not removed from the display until the page was manually refreshed. Both queue lists now poll the server every 15 seconds. The file counts in the overview cards at the top of the page are also updated on each poll. No user action is required to keep the view current. No configuration changes or database migrations are required. RobotsTEST Area Auto Responder RenameThe echomail robot processor that automatically replies to messages in a test echo area was previously labelled "Auto-Reply" in the admin interface. It is now labelled "TEST Area Auto Responder" to better reflect its intended use. No configuration changes are required. The internal processor type identifier stored in the database ( Real-time Events (BinkStream)Targeted Dashboard Stats NotificationsDashboard stats notifications are now targeted per user. Echomail events are delivered only to users who are subscribed to the affected echo area and currently online. Netmail notifications are delivered only to the recipient when that user is online. File events continue to notify all online users. This reduces unnecessary realtime traffic and prevents unrelated users from receiving dashboard refresh events for message areas they do not follow. Browser Transport Preference and Cursor Replay FixesBrowser-side BinkStream transport selection has been corrected for deployments where the realtime WebSocket server is reachable through a public URL but is not directly visible to the PHP web process by PID. Previously, With this update, browser The browser SharedWorker startup sequence was also corrected so it waits for page configuration before opening any transport. This removes an incorrect first-connect SSE attempt that could happen before the page's realtime settings were delivered to the worker. Cursor replay handling was tightened at the same time. Refreshes and worker restarts now use the persisted stream cursor without replaying already-seen application events back into the page after reload. Message List Refresh on Page RestoreWhen a browser tab or PWA window is sent to the background, BinkStream events are paused or throttled by the browser's background-tab throttling policy. As a result, The echomail and netmail pages now listen for the browser's No configuration changes are required. Caddy ConfigurationStatic File Serving FixThe previous recommended Caddy configuration passed all requests through The fix is to handle PHP files explicitly first, then serve static files. Because Caddy's
Remove the bare This change is required if you use Caddy. nginx users are unaffected; the existing File PreviewerSID Music PreviewerThe file area previewer now supports Commodore 64 SID music files ( The player reads the standard PSID/RSID file header to display the embedded song title, author, and release year. Files that contain multiple subtunes expose a track selector so listeners can navigate between them. Playback stops automatically when the preview modal is closed or a different file is opened. SID files stored inside ZIP archives are also playable directly from the archive browser without extracting them first. The websid emulator files are included under SID Player Visualizer and ControlsThe SID music player now includes a real-time spectrum visualizer rendered on an HTML5 canvas directly below the song metadata. The visualizer reads frequency data from the Web Audio AnalyserNode that the websid player framework maintains internally and draws 48 bars across the full width of the player. Each bar uses a cyan-to-green gradient. When playback is paused or stopped, the bars decay smoothly to zero rather than cutting out instantly. Playback is manual: the player loads the file and waits for the user to press Play. This avoids unexpected audio starting when browsing a file listing. No installation steps or configuration changes are required. No database migration is required. Archive Listing Size LimitListing the contents of non-ZIP archives (RAR, 7-Zip, TAR, LZH, ARJ, CAB, and similar formats) requires running the 7z command-line tool, which must read and decompress part of the archive to produce the file list. On large archives this can be slow enough to cause browser timeouts or visibly stall the page. A size cap is now enforced before 7z is invoked. Archives that exceed the limit are not listed; the file area previewer displays a message explaining the limit and offers a direct download link instead. ZIP archives are exempt because their listing reads only the central directory index, which is fast regardless of archive size. The default limit is 20 MB. To change it, set
No database migration is required. Torrent File Preview and Magnet LinksThe file area previewer now recognises The card shows:
Multi-file torrents additionally list every file path and its individual size in a scrollable table below the metadata. The magnet link is computed entirely client-side: the raw A magnet icon button also appears in the preview modal toolbar to the left of the green download button whenever a The same magnet row (with copy button and info hash display) appears in the torrent metadata preview card shown in the upload dialog. No configuration changes or database migrations are required. File UploadTorrent Metadata Pre-fillWhen a
A torrent metadata preview card also appears in the dialog immediately below the file picker, showing the same information as the file area previewer ? including a computed magnet link with a copy button. This allows the sysop to confirm the torrent contents before submitting the upload. The card disappears when the dialog is closed or a different file is selected. No configuration changes or database migrations are required. Markdown ImagesHuman-Readable Image URLsImages uploaded through the echomail message editor are now served at URLs that include the uploader's username and a descriptive slug derived from the original filename:
For example, an image originally named
Previously all uploaded markdown images were served at Existing embedded image URLs (the old hash-based form) continue to resolve correctly, so messages that contain already-embedded images do not need to be edited. The two URL forms coexist permanently. A database migration ( No configuration changes are required. Outgoing Message CharsetDefault Changed to CP437Outgoing FTN message packets previously used UTF-8 as the default character encoding for all new messages. The default has been changed to CP437 (IBM PC / DOS). FidoNet and many other legacy FTN networks were built around CP437 as the standard encoding. A significant number of nodes on these networks run software that was written before UTF-8 became common, and those systems display UTF-8 encoded text as garbled characters. Defaulting to CP437 ensures that messages are readable across the widest range of nodes, including older DOS-era BBS software, hardware terminals, and modern clients that present an authentic retro experience. The encoding used for a specific message is always written into the outgoing packet as a The default charset is configurable in Admin ? BBS Settings under the Default Outgoing Charset selector. Supported values are CP437, CP850, CP852, CP866, CP1252, ISO-8859-1, ISO-8859-2, and UTF-8. Local echo areas (areas that are not distributed to any uplink) always store and display messages as UTF-8 regardless of this setting, since no FTN packet encoding is involved. When composing a reply, the charset of the original message is inherited when possible, so responses to a UTF-8 message will remain UTF-8 even if the BBS default is CP437. No database migration is required. Existing stored messages are unaffected; only new outgoing packets use the updated default. Per-Uplink Charset OverrideIndividual uplinks can override the BBS-wide default with their own charset setting. This is useful when one uplink connects to a network that requires or recommends a specific encoding ? for example, a network that mandates UTF-8 ? while other uplinks continue to use the global default. The per-uplink charset is configured in Admin ? BinkP Configuration by editing an uplink and selecting a value from the Default Charset Override dropdown. Leaving the field set to Use BBS default means the uplink inherits the BBS-wide setting. When composing echomail, the charset selector in the compose form is automatically pre-set to the correct encoding for the selected echo area's network, updating dynamically as the user switches between areas. No configuration changes are required for existing setups. If you want to keep the previous UTF-8 default, set Default Outgoing Charset in BBS Settings to UTF-8. LovlyNet Registration Defaults to UTF-8The LovlyNet registration and renewal script ( If you have already registered with LovlyNet, re-run No database migration is required. Netmail Charset Respects Uplink and Local Delivery RulesOutgoing netmail now selects its packet charset using the same routing logic that determines which uplink will carry the message, and the compose form's charset selector reflects the correct encoding before the message is sent. Backend changes:
Compose form changes:
No configuration changes or database migrations are required. Message ComposerDraft State Now Fully PreservedSaving a message draft (echomail or netmail) now captures the full compose state at the time the draft is saved. When the draft is reopened, all of the following fields are restored:
Previously, only the primary echo area, message body, subject line, and recipient fields were saved. The encoding, markup type, hard-wrap setting, tagline, and cross-post selections were lost when the draft was stored and were not restored when it was opened again. A database migration ( Run DashboardShoutbox Profile LinksUsernames displayed in the shoutbox on the web dashboard are now rendered as hyperlinks. Clicking a username navigates to that user's profile page at No configuration changes or database migrations are required. Today's Callers in Its Own CardThe Today's Callers table (shown to admins on the dashboard) was previously embedded inside the System Information card as part of its definition list. It is now displayed in a separate card below the System Information card, giving the caller list more visual breathing room and making it easier to scan at a glance. Usernames in the list are now rendered as clickable links that navigate to each user's profile page at No configuration changes or database migrations are required. Today's Callers Persists After LogoutThe Today's Callers list was previously built from active session records. When a user logged out, their session row was deleted and they were immediately removed from the list, even though they had genuinely called the system that day. The list now draws from two sources. Users who logged in today are sourced from the login activity log ( The "Last Call" column (previously "Last seen") shows the most recent session activity time for users who are currently online, or the login time for users who have since logged out. No configuration changes or database migrations are required. BBS DirectoryIndividual BBS Information PagesEach entry in the BBS directory now has its own public detail page at The detail page displays all available information for that BBS:
Pages for pending or rejected entries return 404 to prevent unapproved submissions from being publicly indexed. The Notes field label in the admin BBS directory edit form has been updated to "Notes about what this system offers (public)" to make clear that the field contents appear on the public-facing detail page. No database migration is required. SEO ImprovementsThe BBS directory page (
The page title now reads "BBS Directory ? Telnet Bulletin Board Systems" to include search-relevant terms alongside the site name. Individual BBS detail pages carry their own per-page metadata as well:
No configuration changes or database migrations are required. Bug FixesAreaFix History Not Reloading on Uplink ChangeWhen a different uplink was selected in the AreaFix Manager dropdown, the message history panel was cleared but a new history fetch was never triggered. The panel remained blank until the Refresh button was clicked manually. The uplink selector now automatically reloads the history for the currently active tab (AreaFix or FileFix) whenever the selection changes. No configuration changes are required. Login with Real NameUsers can now log in using their real name in addition to their username. Both fields are unique and matched case-insensitively, so there is no ambiguity between accounts. No configuration changes are required. Netmail Unsave in Message ModalWhen a netmail message was saved and then opened in the message modal, the save button inside the modal always displayed "Save" rather than "Saved". Clicking it would save the message a second time instead of unsaving it. The bookmark icon in the modal header had the same problem. The root cause was that the single-message API endpoint for netmail ( The query now joins No configuration changes or database migrations are required. File Area Delete Stays in the Current AreaThe web file browser now preserves the currently selected file area and subfolder after in-page actions that rebuild the file area list, including file deletion. This means that after deleting a file from an area such as No configuration changes or database migrations are required. Terminal Server SettingsTabbed Settings Screen Parity and WorkflowThe terminal server now includes a dedicated settings screen for telnet and SSH users. This allows users to manage their own preferences, update profile fields, and change their password directly from the text interface instead of needing to switch back to the web UI. Changes in this area include:
No database migration is required for these terminal settings changes. Upgrade InstructionsFrom Git
If you run the optional MCP server, you must also update its npm packages so the new dependency version is installed:
This step updates the MCP server's Node dependency tree from Then restart the MCP server process if it is running under a service manager, supervisor, or manual shell session. If you use BinkStream with Restart the admin daemon after upgrading so the new log-ingest behavior is available when web-server PHP processes cannot write directly to the destination log file. Using the InstallerRe-run the BinktermPHP installer to update the application files. When prompted to run If you use the optional MCP server, run If you use BinkStream with browser realtime enabled, restart the web service and realtime WebSocket service after the upgrade so clients receive the updated transport selection and cursor-handling fixes. Restart the admin daemon after upgrading so the new log-ingest behavior is available when web-server PHP processes cannot write directly to the destination log file. |