Skip to content

Releases: directvt/vtm

v2025.12.19

19 Dec 11:22
28af418

Choose a tag to compare

GitHub all current

Changes

  • Fix xml parser crashes.

v2025.12.13

13 Dec 23:31
c775c9e

Choose a tag to compare

GitHub all current

Changes

  • Add yaft support (TERM=yaft-256color). #858

v2025.12.12

12 Dec 19:12
df6997a

Choose a tag to compare

GitHub all current

Changes

  • Fix dtvt child process handling (freezing on unexpected child process termination).
  • Forward dtvt-process' stderr to logs.

v2025.12.03

03 Dec 17:50
4bd69e2

Choose a tag to compare

GitHub all current

Changes

  • Fix dtvt session closing when process creation failed (empty frozen grey window).
  • Update /doc/architecture.md (Remote Access using socat/winsocat over SSH Reverse Tunnel).
    Note: vtm has the ability to fully deserialize/serialize its state through arbitrary channels (like socat over ssh reverse tunnel) and does not require a running ssh server on the remote side. For example, this makes it easy to get interactive access to GithubActions runner on any platform.

Remote Access using socat/winsocat over SSH Reverse Tunnel

Notes:

  • The remote and local sides may differ in platform.
  • Using the localhost name may cause connection issues with the IP address family (IPv4: 127.0.0.1 vs. IPv6: [::1]) between remote systems. Use an explicit IP address to avoid this.

Unix

  • Remote side
    #   Run reverse tunnel for 1122tcp in background
    #                         ┌─ relay all traffic passed through 127.0.0.1:1122tcp to the remote host
    #                ─────────┴────
      ssh -N -R 1122:127.0.0.1:1122 [email protected] &
    #     ─┬ ─┬─────                ─┬────────── ┬
    #      │  └─ listen on remote    │           └─ run in background
    #      │                         └─ remote host
    #      └─ do nothing on remote just listen 1122tcp
    #
    # Save the background process'' PID
    ssh_tunnel_pid=$!
    #
    # Run vtm and forward its stdio (in dtvt format) streams to 127.0.0.1:1122
    #            ┌──────< relay dtvt-stream <─────┐      ┌─ kill the ssh reverse tunnel after vtm exits
    #       ─────┴────────────────────────       ─┴─   ──┴─────────────────
      socat tcp-listen:1122,bind=127.0.0.1 exec:"vtm"; kill $ssh_tunnel_pid
    #       ─────┬────────────────────────
    #            └─ wait for forwarded connections on 127.0.0.1:1122tcp
    # or reversed
    # socat exec:"vtm" tcp-listen:1122,bind=127.0.0.1; kill $ssh_tunnel_pid
  • Local side with ip=1.2.3.4 (connect to the remote vtm desktop via 127.0.0.1:1122tcp)
    #    ┌──────────< binary DirectVT <─────────────┐
    # ───┴───────                          ─────────┴─────
      vtm -r dtvt socat tcp:127.0.0.1:1122 stdin\!\!stdout
    #                   ────┬───────────── ─────────┬─────
    #                       └─> relay dtvt-stream >─┘

Windows

  • Install winsocat:
    winget install winsocat
    
  • Remote side
    # Run reverse tunnel for 1122tcp in background.
    $process = Start-Process "ssh" "-N -R 1122:127.0.0.1:1122 [email protected]" -PassThru -WindowStyle Minimized
    # Run vtm and forward its stdio streams to 127.0.0.1:1122.
    #               ┌──────< relay dtvt-stream <─────┐      ┌─ kill the ssh reverse tunnel after vtm exits
    #          ─────┴────────────────────────       ─┴─   ──┴─────────────────────────
      winsocat tcp-listen:1122,bind=127.0.0.1 exec:"vtm"; Stop-Process -Id $process.Id
    #          ─────┬────────────────────────
    #               └─ wait for forwarded connections on 127.0.0.1:1122tcp
    # or
    # winsocat exec:"vtm" tcp-listen:1122,bind=127.0.0.1; Stop-Process -Id $process.Id
  • Local side with ip=1.2.3.4 (connect to the remote vtm desktop via 127.0.0.1:1122tcp)
    #    ┌───────< binary DirectVT <─────────────┐
    # ───┴───────                             ───┴─
      vtm -r dtvt winsocat tcp:127.0.0.1:1122 stdio
    #                      ┬───────────────── ───┬─
    #                      └> relay dtvt-stream >┘
    # Kill the abandoned winsocat process (it keeps running for some reason)
    Get-Process -Name "winsocat" | Stop-Process -Force

v2025.11.29

29 Nov 10:16
4087907

Choose a tag to compare

GitHub all current

Changes

  • Fix macOS builds.
  • Rename Pure XML to DynamicXML (vtm settings file format).
  • Fix parsing of non-quoted negative numbers in settings.

v2025.11.26

26 Nov 22:04
78bba46

Choose a tag to compare

GitHub all current

Known issues

  • The release build does not work on macOS.

Changes

  • Revise the way dependencies are handled (harfbuzz freetype lua).
    Use Visual Studio to manually build for Windows/WSL.
  • Don't use fat (Universal) binaries on macOS anymore.

v2025.11.13

13 Nov 19:54
45929de

Choose a tag to compare

GitHub all current

Breaking changes

  • Add case-insensitive APC payload marker lua:.
    APC sequences containing Lua scripts must now have a case-insensitive marker at the beginning - lua:, to distinguish them from sequences that are non-script.
    • Example:
      printf "\e_lua: vtm.terminal.LineAlignMode(2)\a"

v2025.11.07

07 Nov 19:52
21382bd

Choose a tag to compare

GitHub all current

Changes

v2025.10.31

31 Oct 18:50
8d8e157

Choose a tag to compare

GitHub all current

Changes

  • Fix background fill color artifacts in VT2D mode.

v2025.10.29

29 Oct 12:13
a1876e9

Choose a tag to compare

GitHub all current

Changes

  • Improve the accuracy of timer timeouts on input.