Web application to view lines from file on local system or on remote server built with Svelte.
Download executable for your platform from latest release.
Docker image is also available here.
Configuaration is done with web-tail.config.toml file. Following keys are available:
port- port that Web tail will run on. Default value is4444allowedOrigins- list of allowed origins for WebSocket connections. Default value is["*"]servers- reusable servers configurationname- name of server to use insourcesconfigshost- host of remote server. Mandatory field for source typesssh:*port- port of remote server. Mandatory field for source typesssh:*username- username for ssh connection to remote server. Mandatory for source typesssh:*password- password to authenticate on remote server. Either this orprivateKeyPathis mandatory for source typesssh:*privateKeyPath- path to file with private key to authenticate on remote server. Either this orpasswordis mandatory for source typesssh:*
sources- list of sources to tail lines fromname- name of source. Mandatory fieldtype- type of source. Possible values:local:file,local:docker,local:openclaw,ssh:file,ssh:docker,ssh:openclaw. Mandatory fieldpath- path to file. Mandatory field for source types*:fileserverName- name of a server fromserverslistcontainerId- Docker container ID. Mandatory field for source types*:dockerhost- host of remote server. Mandatory field for source typesssh:*port- port of remote server. Mandatory field for source typesssh:*username- username for ssh connection to remote server. Mandatory for source typesssh:*password- password to authenticate on remote server. Either this orprivateKeyPathis mandatory for source typesssh:*privateKeyPath- path to file with private key to authenticate on remote server. Either this orpasswordis mandatory for source typesssh:*
String fields support environment placeholders in the exact form ${VAR_NAME}.
If a placeholder is used and the environment variable is not set, web-tail fails to start with a config error.
Only exact placeholders are expanded, so values like prefix-${VAR_NAME} stay unchanged.
Example:
[[servers]]
name = "production"
host = "${SSH_HOST}"
port = 22
username = "${SSH_USER}"
password = "${SSH_PASSWORD}"
privateKeyPath = "${SSH_PRIVATE_KEY_PATH}"
[[sources]]
name = "app-log"
type = "ssh:file"
path = "/var/log/app.log"
serverName = "production"Options from left to right:
- Dropdown to select one of sources from
web-tail.config.toml - Search field. Matching results will be selected. Search is case insensitive by default
Filtertoggle. If enabled only lines with matching results are shown.*toggle. If enabled treats text in search field as regular expressionAatoggle. If enabled makes search case sensitiveReversetoggle. If enabled latest lines shown on top- Max lines field. How much lines will be shown
Frontend app lives in /client and uses Bun + Vite.
- Install frontend dependencies:
cd client && bun install
- Build frontend assets for Go embed:
cd client && bun run build
- Run backend:
go run ./server
For frontend HMR in development, run both services:
go run ./servercd client && bun run dev
Vite dev server proxies /sources and /logstream to http://localhost:4444.

