Skip to content
Home » News » IJCCRL LIVE ARENA OFICIAL GUIDE

IJCCRL LIVE ARENA OFICIAL GUIDE

IJCCRL LIVE ARENA

IJCCRL LIVE ARENA

Broadcasting Computer-Chess Games with TLCS + WinBoard + Node-TLCV + Nginx (HTTPS)

Overview

IJCCRL LIVE ARENA is a lightweight, production-ready pipeline for broadcasting engine games in real time using a classic WinBoard/TLCS backend and a modern web viewer served by a Node.js relay and protected behind Nginx + Let’s Encrypt.

This system is designed for:

  • Engine matches run locally on Windows (WinBoard + engines).
  • TLCS acting as the live game feed (ICS mode).
  • A VPS running node-tlcv to collect state/evaluation updates and serve a web viewer.
  • Public access via https://live.ijccrl.com with stable WebSocket support.

1) Architecture

High-level diagram

Windows Host (Local)                         VPS (Public)
┌─────────────────────────┐                 ┌─────────────────────────┐
│ WinBoard + Engines       │                 │ node-tlcv (Express)      │
TLCS (ICS mode, port P)  │  WireGuard/LANHTTP :8080 + Socket.IO
└───────────┬─────────────┘ ───────────────▶ └───────────┬─────────────┘
            │                                              │
            │                                              │ Nginx reverse proxy
            ▼                                              ▼
     TLCS feed updates                               https://live.ijccrl.com
                                                     (443/80 + SSL)

What each component does

  • WinBoard (Windows): runs the actual match between engines.
  • TLCS (Windows): publishes live state (FEN, last move, PV/eval signals, etc.) in ICS mode.
  • node-tlcv (VPS): connects to TLCS, maintains current game state, serves:
    • /ijccrl-viewer.html
    • Socket.IO stream (/socket.io/...)
  • Nginx (VPS): exposes the service publicly on HTTPS, including WebSockets.

2) Known Behaviour (Important)

Why moves may look “delayed” compared to engine GUIs

WinBoard/TLCS does not behave like modern PGN push services. In practice:

  • The web clocks can be smooth (client-side estimation).
  • Moves / position updates may arrive in bursts when TLCS emits state/eval messages.

This is a protocol/producer characteristic, not a defect in Nginx or the viewer.


3) Windows Side Setup (WinBoard + TLCS)

Required paths (example)

  • TLCS: C:\TLCS\tlc_server16a.exe
  • WinBoard: C:\WinBoard-4.4.0\WinBoard\winboard.exe
  • WinBoard INI: C:\WinBoard-4.4.0\WinBoard\winboard.ini
  • TLCS server.ini: C:\TLCS\server.ini
  • TLCS debug output file: C:\winboard\winboard.debug

TLCS server.ini (working baseline)

PATH=c:\winboard\winboard.debug

PORT=16000
SITE=IJCCRL LIVE ARENA
TOURNEYPGN=

DELAY=100
DELAYAFTERMOVE=50
DELAYAFTERGAME=2000

ICSMODE=1
SAVEDEBUG=1

Notes

  • PATH= is the TLCS debug/log output target.
  • PORT=16000 must match what you open in the viewer: ?port=16000

Recommended start order

  1. Start TLCS (so it binds port 16000)
  2. Start WinBoard and begin the match

If you use a .bat launcher: keep it minimal and avoid unsupported flags (some builds error on unknown args).


4) VPS Side Setup (node-tlcv)

Verify node is listening on 8080

sudo ss -lntp | egrep ':(8080)\b' || true
curl -I http://127.0.0.1:8080/ || true
curl -I http://127.0.0.1:8080/ijccrl-viewer.html || true

Expected:

  • HTTP 200 OK for / and /ijccrl-viewer.html

5) Nginx Reverse Proxy (HTTP + HTTPS + WebSockets)

Working Nginx config (/etc/nginx/sites-available/live.ijccrl.com)

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name live.ijccrl.com www.live.ijccrl.com;

  location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; }
  location = /.env { return 444; }

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    proxy_read_timeout 90;
    proxy_send_timeout 90;
  }
}

Then enable:

sudo ln -sf /etc/nginx/sites-available/live.ijccrl.com /etc/nginx/sites-enabled/live.ijccrl.com
sudo nginx -t
sudo systemctl reload nginx

SSL with Certbot

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d live.ijccrl.com -d www.live.ijccrl.com
sudo nginx -t
sudo systemctl reload nginx

Confirm ports

sudo ss -lntp | egrep ':(80|443)\b' || true

6) Public URL

Once DNS A records point to your VPS:

  • A live -> <VPS_IP>
  • A www.live -> <VPS_IP>

Your public viewer becomes:

https://live.ijccrl.com/ijccrl-viewer.html?port=16000

7) Operational Checklist

  • TLCS running in ICS mode on Windows
  • Port 16000 reachable from VPS (WireGuard/LAN ok)
  • node-tlcv running on VPS and listening on :8080
  • Nginx proxy active on :80 and :443
  • Certbot certificate installed
  • Viewer loads and Socket.IO shows “Connected”
  • Game state updates arriving (STATE, UPDATE, BPV, etc.)

8) Next Phase: IJCCRL 16m+10s Exclusive Time Control

After the broadcasting base is stable:

  • Define the 8 engines list
  • Define tournament format
  • Prepare naming, pairing, and long-TC rules (16m+10s as IJCCRL signature)
  • Publish “Live Event” landing page (with the viewer link + schedule)

GitHub: How to Publish This Documentation in the Correct Repository

In the repo that contains the node-tlcv source, do this structure:

/README.md
/docs/
  live-arena-setup.md
  architecture.md   (optional)

Recommended approach

  1. Put a short summary in README.md
  2. Put the full article above into docs/live-arena-setup.md
  3. In README.md, link to it:
## Documentation
- [IJCCRL LIVE ARENA Setup (TLCS + WinBoard + Node-TLCV + Nginx)](docs/live-arena-setup.md)

Jorge Ruiz

Jorge Ruiz

Filólogo y amante de la antropología social africana

Leave a Reply

Your email address will not be published. Required fields are marked *