# Changes

## 0.5.0 — 10 November 2026

**New windows and tools**
- **SFTP Browser** (Transfer menu, F7, or right-click an SSH session or tab): this computer on the left, the server on the right. **Upload >>** and **<< Download** copy the selected files and folders; double-clicking a file copies it to the other side; files dropped on the window are uploaded. New Folder, Rename and Delete work on both sides (deleting on this computer asks first and is permanent), and **Permissions…** sets read, write and run on the server. Interrupted transfers resume: an unfinished download is kept as `name.part` here and an unfinished upload as `name.part` on the server, and sending the same file again continues where it stopped (as long as the original has not changed since). Transfers keep the modification time; uploads from Linux keep the file's permissions. Works through jump hosts. Login questions (host key, password, passphrase) appear in the window.
- **Copy Public Key to Server** (Tools menu, or right-click an SSH session or tab), like `ssh-copy-id`: logs in once (with your password if needed), creates `~/.ssh` and `authorized_keys` if they are missing, sets the permissions SSH requires (700 and 600), adds the key unless it is already there, then checks that the key logs in on its own. It points out a misspelt `authorised_keys` file, which SSH ignores. The server needs a Unix-like shell.
- **SSH Agent** window (Tools menu, replaces the three agent items): the agent's keys; add key files (passphrase, how long to keep the key, ask before each use), add or remove smartcard/token keys through PKCS#11, remove one or all keys, lock and unlock, and (Linux) start an agent for Lantern's sessions, stopped again when Lantern closes. Passphrases and PINs are never put on a command line.
- **Tear-off tabs**: drag a tab out of the tab bar to open it in its own window, where the session keeps running; drag it onto another tab bar to move it there. Also right-click a tab → **Move to New Window** / **Dock to Main Window**, and **Window → Move Tab to New Window** / **Dock All Tabs to Main Window**. Closing a torn-off window docks its tabs; closing the main window brings them home first. Menu shortcuts act on the window you are typing in.
- **RDP sessions** (Windows Remote Desktop) as a new session type in a normal tab, built on FreeRDP: TLS with Network Level Authentication, the remote desktop fitted to the tab (it follows the tab's size) or a fixed size, keyboard and mouse, text clipboard both ways, and Ctrl+Alt+Del, Windows key and Full screen buttons (Ctrl+Alt+End also sends Ctrl+Alt+Del). The server certificate is checked like an SSH host key: shown and asked about the first time, remembered in `known_rdp_certificates`, and a changed certificate is refused. The password comes from a credential (the system password store) or is asked when connecting and never saved. `rdp://host` works in the connection bar. Find, logging and file transfers say they are not available on RDP tabs. The domain can be given in the session, the new-session wizard, Quick Connect, the login window, or as `DOMAIN\user`. The Windows version bundles FreeRDP 3.32.2 and logs in with Windows' own NLA (SSPI).
- **Sync between computers**: **Options → Global settings → General → Sync** keeps sessions, folders, credential user names (never passwords), commands, button bars and the default session the same on every computer through a shared folder (Nextcloud, Syncthing, Dropbox or a network share). The newest change wins; deletions carry over. Settings that belong to one computer (local shells, serial ports, key files, log and transfer folders, programs to run) stay as they are on each computer. **Tools → Sync Now** syncs at once.
- **Update notifications**: Lantern checks the website once a day and says when a new version is out, with **Update Now**, **Not Now** and **Skip This Version**. Update Now installs the Debian package (asking for your password) or runs the Windows installer; other copies open the download page. **Help → Check for Updates…** checks at once; the daily check can be turned off. After an update, **Restart Now** brings the window back as it was.

**Keys**
- **Function keys**: F1 keyboard shortcuts, F2 Session properties, F3 / Shift+F3 Find next / previous, F4 Quick Connect (Ctrl+Shift+O still works), F5 Reconnect, F6 next split pane, F7 SFTP Browser, F8 Zmodem upload, F9 start/stop logging, F11 full screen, F12 Script → Run, Shift+F12 cancel the script, Ctrl+F12 run the last script again. F10 stays with the remote program; Alt+F1 to Alt+F12 send the plain function key to it; the session option **Function keys go to the remote program** (Terminal → Input) gives them all back. Your own key mappings win over these keys.
- **Script → Run** opens in the last script's folder, and **Run Last Script Again** (Ctrl+F12) remembers the script and its arguments, also after a restart.

**SSH (built-in engine)**
- **Jump hosts** (one or a chain, `user@host:port,user2@host2`), each with its own host-key check and login. The SFTP browser works through them too.
- **X11 forwarding** (a fake cookie is swapped for the real one locally; untrusted mode uses an xauth untrusted cookie like `ssh -X`) and **agent forwarding** (also with the Windows OpenSSH agent), no longer handed to OpenSSH.
- **Kerberos (GSSAPI)** login with the ticket from kinit, and credential delegation (Session properties → SSH2). Linux; the Windows libssh is built without GSSAPI.
- **Ed25519 OpenSSH certificates** (RSA and ECDSA certificates already worked).
- **About 40 OpenSSH `-o` options** are now handled by the built-in engine: ServerAliveInterval/CountMax (keepalives that close a session whose server stops answering), ConnectTimeout, Ciphers, KexAlgorithms, HostKeyAlgorithms, MACs, PubkeyAcceptedAlgorithms, Compression, StrictHostKeyChecking (yes, no, ask, accept-new), UserKnownHostsFile, IdentitiesOnly, IdentityFile, CertificateFile, Port, User, HostName, ProxyJump, ProxyCommand, ForwardAgent, ForwardX11, ForwardX11Trusted, RequestTTY, PreferredAuthentications, the authentication switches and Local/Remote/DynamicForward. Other options still use the OpenSSH client, which the terminal names. Options are checked when the session is saved.
- **Use FIPS-approved algorithms only** (Session properties → SSH2) limits key exchange, ciphers, MACs and key types to FIPS-approved ones (and RSA keys to 2048 bits or more), refuses Ed25519 keys with a clear message, and says whether OpenSSL's FIPS provider is active. Also applied to the OpenSSH engine. It limits algorithms; Lantern is not a FIPS 140 validated module.

**Transfers**
- Built-in **Xmodem** (checksum, CRC, 1K), **Ymodem** batch and **Kermit** (long packets, CRC, 8th-bit prefixing, repeat counts, attribute packets) uploads and downloads in the Transfer menu, on Linux and Windows. Kermit downloads start by themselves (File Transfer → Start Kermit downloads automatically). Downloads use the Zmodem "existing file" setting and are written to `name.part` until complete.

**Terminal emulation**
- **Sixel graphics**: images appear at the cursor and scroll with the text; xterm types announce sixel in their device attributes.
- **132-column mode** (DECCOLM): the screen becomes 132 columns and the font shrinks to fit.
- **Double-width and double-height lines** (DECDWL, DECDHL) are drawn doubled.
- **Left/right margins** (DECLRMM, DECSLRM) now also wrap text and carriage returns at the margins.
- **C1 controls** as characters (U+0080–U+009F, from ISO 8859 or UTF-8 text) work like their ESC forms.
- New terminal types **Wyse 60** and **SCO ANSI**, with their own keys. **VT100** and **VT220** sessions send VT function and editing keys.

Tests: new suites for the SSH tools (SFTP browser, Copy Key), Xmodem/Ymodem/Kermit against lrzsz and G-Kermit, RDP against FreeRDP's shadow server, update checks against a local web server; more checks in the SSH engine, core and workspace suites.

## 0.4.2 — 9 November 2026

- **New BBS session** has moved to **Tools → New BBS session…**. The **BBS session** tick-box is no longer in the ordinary new-session wizard, and choosing RLogin there no longer turns BBS settings on. The BBS wizard offers Telnet (the default, port 23), RLogin, SSH2 and Raw TCP. Existing sessions are not changed.

## 0.4.1 — 8 November 2026

- **Apply BBS settings** to existing sessions: right-click saved sessions or a folder in the Sessions pane, or **Options → Apply BBS settings to this session…** for the current tab. Sets the same options as a new BBS session and keeps everything else; local shell and SFTP sessions are skipped.

## 0.4.0 — 8 November 2026

BBS support: everything the specification lists as Core for calling bulletin board systems.

- **BBS sessions.** Tick **BBS session** in the new-session wizard for CP437, the ANSI-BBS screen, the built-in VGA font, 80×25 with the font scaled to the window, and BBS keys (Backspace 0x08, Delete 0x7F).
- **ANSI-BBS emulation** (DOS ANSI.SYS behaviour): VGA colours, bold as bright, blinking text, iCE colours (bright backgrounds, by option or when the BBS sends `CSI ?33h`), clear-screen homes the cursor, `CSI s`/`CSI u`, form feed clears, CP437 symbols (☺ ♥ ♪ …) for control bytes in ANSI art, ANSI music ignored. New terminal type `ansi-bbs`.
- **Built-in VGA font**: an 8×16 PC-style bitmap font. Block and line-drawing characters fill their cells, so ANSI art has no gaps at any size.
- **Zmodem**: downloads start automatically; uploads start when the BBS (or `rz`) is ready, with files chosen then or queued with **Transfer → Zmodem upload…**. Progress window with speed and Cancel; existing files are kept (rename) unless you choose overwrite or skip; partial downloads are removed on cancel or failure. Scripts: `ZmodemUpload`, `ZmodemCancel`, `ZmodemActive`.
- **Import a SyncTERM BBS list** (Tools menu) with a preview; passwords only if you ask, into the system password store.
- New protocol: RLogin (default port 513), for BBSes. Sends the client user name, server user name and terminal type/speed; answers the server's window-size request and sends new sizes after resizing. As in SyncTERM, BBSes read the client user name as the password. A session can take the user name and password from a saved credential instead; the password is kept in the system vault (Tools → Manage credentials → Set password…), not in the settings file. `rlogin://user@host` URLs work in the connection bar and with `--connect`.

## 0.3.4 — 8 November 2026

- Fixed a crash: answering a script's dialog after the script had already gone (it timed out after 60 seconds, or was cancelled) closed Lantern. This happened when a bot finished its day and its "finished" message was left open for more than a minute.
- Script dialogs (message, input, Yes/No, file) now wait for the user however long that takes; other script requests still time out after 60 seconds.

## 0.3.3 — 8 November 2026

- Scripts written for the SyncTERM-Lua fork run unchanged: the SyncTERM globals (send, expect, screen, regex, bbs, ...) are provided on first use, including PCRE2 regular expressions, triggers, CP437 bytes and unattended answers. Tested with the TradeWars bot playing a simulated day and a LORD bot start-up.
- New character encoding CP437 for BBSes (built-in table; control characters keep their meaning).
- Script API: Yes/No dialog (`dialog.confirm`); scripts started with a session see the text received since the connection began.

## 0.3.2 — 8 November 2026

**Built-in SSH engine (libssh), now the default for SSH2 sessions**
- Shows the negotiated cipher, key exchange and MAC; the connection state comes from the protocol, not from reading ssh's debug output.
- Host-key, passphrase, keyboard-interactive and password prompts appear in the terminal. Agent keys are tried first (Windows: the Windows OpenSSH agent), then the selected key (three passphrase attempts), then default keys. Host trust is shared with the OpenSSH engine.
- Local, remote and dynamic SOCKS4/4a/5 port forwarding and forwarding-only sessions. A slow or unreachable forward target never freezes the terminal.
- Sessions using X11 or agent forwarding, extra OpenSSH options or (Windows) a proxy command use OpenSSH automatically and say so. **Session properties → Connection → SSH2 → SSH engine** chooses OpenSSH explicitly. SFTP uses OpenSSH.
- The Windows package bundles libssh 0.11.3, OpenSSL 3.5.9 and zlib 1.3.1.

**Keyboard**
- Ctrl+P, Ctrl+N, Ctrl+F, Ctrl+S, Ctrl+Q, Alt+letters and F1 now reach the terminal. Lantern's own shortcuts use Ctrl+Shift: new session Ctrl+Shift+S, Quick Connect Ctrl+Shift+O, local shell Ctrl+Shift+N, find Ctrl+Shift+F, print Ctrl+Shift+P, close tab Ctrl+Shift+W, exit Ctrl+Shift+Q. Alt+1…9 tab switching is off by default.
- Ctrl+C with Windows-style copy hotkeys copies only when text is selected; otherwise it is the interrupt.
- Windows: AltGr characters are sent as characters.

**Fixes**
- Crash choosing Upload files with SFTP from a local-shell or serial tab.
- Crash opening a tab after closing the last tab of the first split group.
- Logon expect/send pairs wait for a new prompt instead of matching earlier output.
- Settings import merges instead of replacing, never overwrites a different session with a clashing ID, and lists anything that would run a program (default No). `--import` needs `--trust-import` for such files.
- Automatic reconnect no longer retries failed logins or changed host keys, does not retry connections that never worked, and backs off up to five minutes.
- A connection that fails immediately no longer starts its log, idle timer or logon script.
- Scripts can wait for and answer login prompts while a session is still logging in. Python scripts work when TMPDIR is set; a too-long temporary path falls back to /tmp.
- Telnet: DONT is handled correctly (window-size reports stop), state changes are acknowledged, negotiation loops are prevented, and binary mode is supported both ways (8-bit/CP437 data, no NUL after CR).
- Paste sends line breaks as CR, so Windows text no longer presses Enter twice and LF-only text works on Telnet, serial and BBS hosts.
- "Translate CR to CRLF" only adds LF after a bare CR.
- Terminal drawing is several times faster (about 2 ms for a full 200×60 screen). Highlights, search and double-click line up after wide (CJK, emoji) and combining characters.
- Log file names cannot add directories through host/session/folder names; anti-idle waits for real inactivity; failed TFTP uploads leave no partial file; BEL bursts ring once; the mouse wheel scrolls full-screen programs without mouse reporting.

## 0.3.1 — 8 November 2026

- Preserve connecting/authenticating SSH and TCP tabs when reusing disconnected tabs.
- Keep close confirmation and Reconnect All from treating a pending login as disconnected.
- Display live sessions as open before authentication confirmation, and recognise older Windows OpenSSH success messages.
- Regression coverage for mixed Telnet/SSH tabs with default tab reuse enabled.

## 0.3.0 — 8 November 2026

- Bundled Lua 5.4.9 runtime and application API on Linux/Windows, without an external interpreter dependency.
- Lua support in Run, logon scripts, command buttons and CLI; Python/Lua recording with exact text and binary replay.
- Preserve full Unicode Windows command-line arguments and script paths, including characters outside the active code page.
- Unicode script paths/arguments and file helpers, prompt capture, cancellation and Activity tracebacks.
- Binary sends bypass session text encoding; failed script starts release the per-tab script slot.
- Lua examples, API guide, regression tests and source/build packaging.

## 0.2.1 — 8 November 2026

- SSH failures show the actual SSH error instead of only a process exit number.
- Public-key-only authentication failures explain where to select an authorised private key or use an SSH agent.
- Connection errors use plain, wrapped text. Debug negotiation and key paths are excluded from the short error message.
- Added live regression coverage for a rejected key and a recreated session retaining the accepted server key.

## 0.2.0 — 8 November 2026

- Fixed unreadable new-session wizard colours and added immediate Options → Theme selection for System, Light and Dark. Protocol-specific wizard fields are shown only when relevant.
- Fixed Windows SSH diagnostic-file sharing: OpenSSH receives a closed regular file in a private temporary directory. No QTemporaryFile handle remains held by the application.
- Added manual session/folder ordering, expanded-folder persistence, and native Linux/Windows desktop session launchers using stable IDs.
- Added command cut/copy/paste, folder selection, script arguments and validation of pasted/imported command/bar data.
- Added named button bars, ordered buttons, bar copy/rename/delete, shared action references, clipboard interchange and per-session/global selection. Old button configurations migrate automatically.
- Added unambiguous saved-session CLI lookup by stable ID or folder/name. Preserved --session as an alias without conflicting with Qt's own desktop-session option.

## 0.1.0

First functional desktop release, with session management, terminal rendering, supported connections, logging, Python automation and cross-platform packaging.
