Use the Web UI

3xcode ui launches a local, single-user browser workspace for uploading files, running conversions, and tracking sessions. It covers everything the CLI can do, with live progress and a file browser.

Launching the Web UI

The web UI is a local web server the CLI starts on your machine. It is not a hosted app. It's localhost-only and single-user, meant as a friendlier surface over the same workspace/session engine the CLI uses, not a replacement for it.

Terminal
# Launch on the default port (3210)
3xcode ui

# Launch on a different port
3xcode ui --port 8080

Running 3xcode ui opens http://localhost:3210 (or your chosen port) in your default browser after a short delay. Any active backend announcements are printed to the terminal first, then the server starts.

You must be logged in first. If you open the UI without an active session, it shows an auth-gate banner: "Not logged in. Run 3xcode login in your terminal to get started." Run 3xcode login in a terminal, then reload the page.

The Dashboard

The Dashboard is the landing page after login: an at-a-glance view of your account and recent activity. From here, the sidebar gives you every other page: Convert, Sessions, Files, Workspaces, Settings, and Help.

Account & Plan Status

Shows your plan tier, conversions used this month, and license state, pulled live from your account.

Announcements

Any active platform announcements from the 3XDE backend surface here first, same as in the CLI.

Starting a Conversion

The Convert section covers both single-file and bulk conversion: the browser equivalent of 3xcode pyspark convert.

Single File

Upload one .sql file and run it through the pipeline with live progress. A quick, fire-and-forget mode is also available for a single detached run.

Bulk Convert

Upload multiple .sql files in one batch: the same bulk engine behind 3xcode pyspark convert --dir, with parallel workers under the hood.

Every conversion started from the UI runs the same 5-phase pipeline as the CLI (discovery, planning, conversion, validation, and auto-fix), so results, gotcha detection, and confidence grading are identical to what you'd get from 3xcode pyspark convert.

Monitoring Progress

The Sessions page is where every conversion run, single file or bulk, is tracked. It mirrors the CLI's 3xcode session command group with a live view on top.

Session actions

ActionWhat it doesCLI equivalent
ListSee every session in the current workspace with state, file counts, and cost3xcode session list
CreateStart a new named session for a batch of files3xcode session create
ResumeContinue an interrupted or partially-completed session3xcode session resume <id>
Pause / CancelPause a running session, or cancel it cleanly (already-completed files stay completed)3xcode session cancel <id>
Rename / DeleteRename a session, or delete its session record and files3xcode session rename / 3xcode session delete

Live Event Stream

Open any running session to watch phase transitions, per-file status, and worker heartbeat update in real time over a live stream, no manual refreshing needed.

Per-File Detail

Drill into a session to see individual file status, cost, duration, and any error messages, plus a summary view for the whole batch.

Browsing Output Files

The Files page lets you browse and download everything a session produced, and also browse the source SQL files already in your active workspace.

Converted Output

Browse generated PySpark modules, audit reports (.md / .json), and per-object reports for any completed session, and download individual files.

Workspace Source Files

Browse the .sql files already present in your workspace's input directory without leaving the browser.

Workspaces & Settings

Two more pages round out the UI: Workspaces and Settings, both browser equivalents of CLI commands you'd otherwise run in the terminal.

Workspaces

Set up, switch, initialize, or delete local workspaces using a native directory browser, instead of typing 3xcode workspace init/switch by hand.

Settings

Configure app settings, enter and test BYOK provider keys (Anthropic, Bedrock, Vertex, Azure Foundry), and see auto-detected provider info.

BYOK keys entered in Settings are stored the same way as 3xcode keys store: locally on your machine, never sent to the 3XDE backend.

Troubleshooting

UI shows "Not logged in" even though I ran 3xcode login in the terminal

The UI mints a fresh session cookie each time 3xcode ui starts. A browser tab left open from before a restart can serve a stale cached page and get stuck failing on every API call. Hard-refresh or close and reopen the UI tab after restarting 3xcode ui.

Conversion prompt is unavailable

Prompts and the knowledge base are served exclusively by the 3XDE backend and are never shipped locally. If both the live fetch and the local cache fail, run 3xcode login, confirm you have network connectivity, and retry the conversion.

Discovery failed for a file

The analysis phase couldn't return a usable object inventory. The file may be malformed or truncated, or the model response failed to parse. Check the input file isn't corrupted or cut off, then retry.

A phase timed out

A pipeline phase exceeded its timeout, usually on a large or very complex file, or under slow network conditions. Retry (this is often transient), or split a very large SQL file into smaller pieces before converting.

"Claude Code CLI not found"

The Claude Code CLI binary required by the conversion engine isn't installed or isn't on PATH. Install it with curl -fsSL https://claude.ai/install.sh | bash, then restart 3xcode ui.

Claude process failed / connection dropped

The underlying Claude CLI subprocess exited unexpectedly or the connection dropped before returning a result. Retry the conversion; if it keeps happening, check the embedded error text for the specific cause (often an auth issue, try 3xcode login again).

No workspace found

The UI couldn't resolve an active workspace. Open the Workspaces page and use the directory browser to switch to an existing workspace, or initialize one from a terminal with 3xcode workspace init <path> --name <name>.