The Web UI (xvc-server + Web UI)

xvc-server loads an Xvc repository once and keeps it in memory, so it can be driven remotely instead of re-initializing the repository on every command. Alongside its gRPC service, it exposes a JSON REST API and GitHub/Google sign-in, and a Svelte single-page web UI (similar in spirit to DVC Studio) talks to it: a file browser, pipeline management (steps, DAG, run), and storage backend management.

This page covers running the server and pointing the web UI at it. For the underlying xvc commands the UI wraps, see the Command Reference.

Running xvc-server

# inside (or pointing at) an Xvc repository
$ xvc-server --workdir /path/to/repo
Xvc gRPC server listening on 127.0.0.1:7979
Xvc HTTP server listening on 127.0.0.1:8080

The REST API is served under /api on the HTTP address. See xvc-server's own README for the full endpoint list; the highlights are:

  • GET /api/files, POST /api/files/track -- list and track files
  • GET/POST /api/pipelines, GET /api/pipelines/:name/{steps,dag,export}, POST /api/pipelines/:name/run -- manage and run pipelines
  • GET/POST /api/storages, DELETE /api/storages/:name -- manage storage backends

Enabling GitHub/Google sign-in

Set client id/secret environment variables before starting the server to enable a provider (a provider with no credentials configured simply disables its /login route):

export XVC_SERVER_GITHUB_CLIENT_ID=...
export XVC_SERVER_GITHUB_CLIENT_SECRET=...

export XVC_SERVER_GOOGLE_CLIENT_ID=...
export XVC_SERVER_GOOGLE_CLIENT_SECRET=...

$ xvc-server --workdir /path/to/repo

Signed-in users are persisted as JSON under <repo>/.xvc/server/users.json. Sessions are in-memory only, so users sign in again after a server restart.

Running the web UI

The web UI is a static site; build it once and serve it with any static file host (or a reverse proxy alongside xvc-server):

$ cd web   # the web UI's directory
$ npm install
$ npm run build   # outputs to build/

For local development, npm run dev starts a dev server instead. Either way, the UI defaults to talking to xvc-server on the same origin it's served from; use the Server settings page (or localStorage.setItem('xvc-server-base-url', 'http://127.0.0.1:8080') in the browser console) to point it at a different instance.

Known limitations

  • xvc-server serves a single repository per process -- there's no multi-repository dashboard.
  • Only local storage backends have a create form in the UI so far.
  • There is no transport security (TLS) yet; run behind a reverse proxy or on trusted networks.