
From the Terminal
Run Phoenix via the CLI on your local machine

As a Container
Self-host your own Phoenix

In a Notebook
Run Phoenix in the notebook as you run experiments
If you are set up, see Quickstarts to start using Phoenix in your preferred environment.
Remote deployments
Any Phoenix instance that isn’t running on the same machine as your app — a container, a Kubernetes deployment, or a managed host — is reached the same way: pointPHOENIX_COLLECTOR_ENDPOINT at its hostname, and supply an API key if it has authentication enabled.
Container
See Self-Hosting.Notebooks
To start phoenix in a notebook environment, run:By default, Phoenix does not persist your data when run in a notebook.
Terminal
If you want to start a phoenix server to collect traces, you can also run phoenix directly from the command line:http://127.0.0.1:6006 so no additional configuration is needed. However if the server is running remotely, you will have to modify the environment variable PHOENIX_COLLECTOR_ENDPOINT to point to that machine (e.g. http://<my-remote-machine>:<port>)
Configuration & environment variables
Phoenix reads its connection settings from environment variables. Two endpoint variables exist — one per concern, usually holding the same URL:
If you set only one, set
PHOENIX_COLLECTOR_ENDPOINT. It configures tracing, and the clients and the px CLI use it for API access too — so one value covers everything. PHOENIX_ENDPOINT is the canonical setting for those client surfaces, and it wins when both are set, but you rarely need it on its own.
The fallback does not run both ways in every SDK. API access falls back to PHOENIX_COLLECTOR_ENDPOINT everywhere, but Python trace export does not yet read PHOENIX_ENDPOINT, so setting only PHOENIX_ENDPOINT can leave Python trace export pointed at http://localhost:6006.
Set both — to the same value in the usual case where one Phoenix serves both concerns, which is what px setup writes into .env.phoenix, or to different values when trace ingest and API access genuinely live at different URLs.
PHOENIX_HOST is not a client setting — on the Phoenix server it is the bind host (e.g. 0.0.0.0, paired with PHOENIX_PORT). Some JS tools still accept it as a last-resort legacy fallback for the base URL, but new configuration should use the variables above.
Choosing a project
PHOENIX_PROJECT selects the project that project-scoped operations write to and read from. PHOENIX_PROJECT_NAME is a supported alias for the same setting. When both are set, PHOENIX_PROJECT wins and Phoenix logs a one-time conflict warning. If neither is set, the project defaults to "default".
Credential file discovery (.env.phoenix)
Instead of exporting variables in every shell, you can drop PHOENIX_-prefixed settings into a .env.phoenix file. The Phoenix SDKs and CLI auto-discover it: starting from the current working directory they walk up toward the filesystem root and load the first .env.phoenix they find (dotenv format).
px setup writes: it records both endpoint variables (same value — one server) so trace export and API access are each explicit.
A few rules worth knowing:
-
The process environment always wins. A value already set in the environment is never overridden by the file.
Watch for endpoint variables exported globally — a
PHOENIX_ENDPOINTin your shell profile, or in~/.claude/settings.jsonfrom Claude Code tracing, applies in every directory and will shadow a project’s.env.phoenix. Ifpxor a client is reaching the wrong Phoenix, checkecho $PHOENIX_ENDPOINTfirst. Scope such variables to the session or project that needs them. -
The filename is
.env.phoenix, not.env. -
Add it to your ignore rules before storing credentials in it — the Phoenix repository already git-ignores
.env.phoenix. -
Opt out by setting
PHOENIX_DISCOVER_CONFIG=false(also accepts0,no,off), which disables file discovery entirely.

