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.
# 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
| Action | What it does | CLI equivalent |
|---|---|---|
| List | See every session in the current workspace with state, file counts, and cost | 3xcode session list |
| Create | Start a new named session for a batch of files | 3xcode session create |
| Resume | Continue an interrupted or partially-completed session | 3xcode session resume <id> |
| Pause / Cancel | Pause a running session, or cancel it cleanly (already-completed files stay completed) | 3xcode session cancel <id> |
| Rename / Delete | Rename a session, or delete its session record and files | 3xcode 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.