Sign inSign up

thegmpteam/n8n-table-ui

By thegmpteam

•Updated 7 days ago

Web UI for n8n data tables. Node.js proxy for browsing, editing, and managing rows.

Image
0

1.4K

thegmpteam/n8n-table-ui repository overview

⁠n8n-table-ui

Web UI for n8n data tables — browse, edit, and manage the rows n8n buffers in its Data Tables, through a small Node.js proxy that talks to n8n exclusively over webhook endpoints.

Part of the n8n AI stack⁠ — n8n-table-ui, n8n, Ollama, PocketTTS, SearXNG and ComfyUI.

⁠Quick start

docker pull thegmpteam/n8n-table-ui:latest
docker run -d \
  --name n8n-table-ui \
  -p 3458:3458 \
  -e N8N_HOST=n8n \
  -e N8N_PORT=5678 \
  -v /path/to/.data:/app/.data \
  thegmpteam/n8n-table-ui:latest

Then open http://localhost:3458/.

On the server stack the proxy joins the shared automation network and reaches n8n by service name (n8n:5678).

⁠Adding it to a stack

Two compose files ship with the source, for two situations.

1. Adding to the stack this repo belongs to — docker-compose.n8n-table-ui.yml is a drop-in service block that joins the existing automation network and reaches n8n by service name:

services:
  n8n-table-ui:
    image: thegmpteam/n8n-table-ui:latest
    pull_policy: daily
    container_name: n8n-table-ui
    restart: unless-stopped
    ports:
      - "3458:3458"
    environment:
      - NODE_ENV=production
      - PORT=3458
      - N8N_HOST=n8n
      - N8N_PORT=5678
      - N8N_API_KEY=${N8N_API_KEY}
      - API_BASE=n8n
      - API_PORT=5678
      - DATA_DIR=/app/.data
    volumes:
      - ./data/n8n-table-ui/.data:/app/.data
    networks:
      - automation
    depends_on:
      - n8n

networks:
  automation:
    external: true
    name: automation

2. Adding to a different stack — docker-compose.n8n-table-ui.standalone.yml is self-contained, needs no checkout, and hardcodes nothing. Configure it entirely by environment variable:

docker compose -f docker-compose.n8n-table-ui.standalone.yml up -d
VariableDefaultPurpose
N8N_UI_TAGlatestImage tag to pull
N8N_UI_NETWORKn8n-table-uiDocker network to join
N8N_UI_NETWORK_EXTERNALfalsetrue when joining an existing network
N8N_UI_BIND127.0.0.1Host interface to publish on
N8N_UI_PORT3458Host port
N8N_UI_CONTAINERn8n-table-uiContainer name
N8N_UI_DATA./data/n8n-table-ui/.dataHost path for runtime state
N8N_HOSTn8nn8n service name, or a reachable host/IP
N8N_PORT5678n8n port
N8N_API_KEY(none)Only if n8n requires API auth

Shared network (default) — the UI joins the network n8n is already on and resolves it by service name; nothing needs to be published by n8n:

N8N_UI_NETWORK=<n8n-network> N8N_UI_NETWORK_EXTERNAL=true N8N_HOST=n8n \
N8N_UI_BIND=10.0.0.157 \
docker compose -f docker-compose.n8n-table-ui.standalone.yml up -d

Find the network name with:

docker inspect <n8n-container> \
  --format '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{"\n"}}{{end}}'

Isolated — no shared network; point N8N_HOST at an address the container can reach and leave the network to this file:

N8N_HOST=10.0.0.157 N8N_PORT=5678 N8N_UI_BIND=10.0.0.157 \
docker compose -f docker-compose.n8n-table-ui.standalone.yml up -d

Verify either mode:

curl -s http://<bind>:<port>/config   # proxy env snapshot
curl -s http://<bind>:<port>/version  # version / commit / branch
curl -s http://<bind>:<port>/         # serves the UI (HTTP 200)

The default N8N_UI_BIND is 127.0.0.1, so the port is not exposed on the LAN until you set it.

⁠Architecture

Browser (port 3458)
  |
  v
n8n-table-ui proxy (Node.js)
  |- GET  /                    -> serves index.html (static, no-store)
  |- GET  /config              -> proxy env snapshot
  |- GET  /version             -> version / commit / branch
  |- POST /webhook/yt-get      -> n8n:5678/webhook/yt-get
  |- POST /webhook/yt-create   -> n8n:5678/webhook/yt-create
  |- POST /webhook/yt-wright   -> n8n:5678/webhook/yt-wright
  |- POST /webhook/yt-update   -> n8n:5678/webhook/yt-update
  |- POST /webhook/yt-remove   -> n8n:5678/webhook/yt-remove
  |- (unknown routes)          -> 404, never arbitrary n8n REST access

Key constraint: the UI never uses n8n's REST API. It only knows the five webhook paths. If the n8n Data Table CRUD webhook workflow is missing, the UI is non-functional.

⁠Environment variables

VariableDefaultDescription
PORT3458Proxy listen port
N8N_HOSTn8nn8n hostname on the Docker network
N8N_PORT5678n8n port
N8N_API_KEY(none)Sent as X-N8N-API-KEY. Set only if n8n requires API auth.
API_BASEn8nUpstream host for /api/* and /webhook/*
API_PORT5678Upstream port
DATA_DIR/app/.dataWritable dir for logs, env override, HTML override, version.json

⁠Volumes

PathPurpose
/app/.dataRuntime state: version.json, optional index.html override, env drop-in, logs

⁠Prerequisites (n8n side)

  1. An active n8n workflow named Data Table CRUD with the five webhook triggers above. The bundled template is served by the proxy at GET /webhook-workflow-template.json for the Setup wizard; import it via n8n → Workflows → Import from File.
  2. Data tables created in the n8n UI (not via webhook). The Setup wizard reads each table back to verify the ID is live.
  3. An n8n REST API key is not webhook authentication. The UI does not forward an administrator API key.

⁠Setup wizard

The Setup tab walks through first-time configuration: (1) verify the proxy can reach n8n, (2) enter existing table IDs and read them back, (3) download the webhook workflow template, (4) run a read/write/update smoke test. It auto-switches to Setup on load when n8n is unreachable or tables are missing.

⁠Features

  • Home tab — browse ComfyUI Jobs rows (Completed / Next Up / Working), edit rows, push.
  • Jobs tab — browse Shorts_Production rows, edit in-place.
  • Job ID linking — click a Job ID to see all linked ComfyUI rows.
  • Config tab — localStorage config plus read-only proxy env fields.
  • Bottom bar — version, git commit and branch from GET /version.
  • Debug panel — toggleable request/response log.

⁠Tags

TagMeaning
latestCurrent main build
betaBeta branch build for testing
sha-<commit>Immutable per-commit build

Platform: linux/amd64.

⁠Security

Port 3458 is unauthenticated. Origin checks prevent cross-origin browser writes, not malicious LAN clients. Keep it on loopback or a trusted LAN; add authentication before wider exposure.

⁠License

ISC

Tag summary

Content type

Image

Digest

sha256:c82c58218…

Size

70.4 MB

Last updated

8 days ago

docker pull thegmpteam/n8n-table-ui