Self-host Phoenix when traces must stay in your network and your team can run the database, sign-in, and upgrades. The software is free with every feature included, and all of the operating work falls to you. Settle the license, storage, access, retention, scale, and upgrade plan before a shared instance takes production traffic. Move to Arize AX when you need SAML SSO, separate access per team, or managed alerts.
When you need this
- A team wants traces and evals without sending prompts or customer data to a vendor.
- A Phoenix instance that started on a laptop is about to serve several teams or environments.
- Legal or security must approve the license and the data path before rollout.
Evaluation criteria
License review
Does the Elastic License 2.0 fit your policy?
Look forPhoenix's Elastic License 2.0 allows free self-hosting on your own infrastructure or cloud account, with no feature gates. It forbids offering Phoenix to third parties as a hosted or managed service. Arize calls Phoenix open source, and ELv2 is not on the Open Source Initiative's approved list, so check it against your policy. The client library carries a separate license. After a contributor asked in 2025, Arize moved arize-phoenix-client to Apache-2.0 in November 2025.
Storage
Where do traces persist?
Look forUse PostgreSQL 14 or later for a shared instance. The default SQLite database lives in the working directory, so a container stopped without a volume loses its traces. Phoenix runs as one container beside PostgreSQL. One developer measured it at about 400 MiB, against 1,848 MiB for the four-container Langfuse v4 stack it replaced.
Sign-in
Who can open the instance?
Look forTurn on authentication before you share Phoenix. With it off, anyone who can reach the container can use the UI and API. Set PHOENIX_ENABLE_AUTH and a secret. Connect OAuth2 through a provider such as Keycloak or Microsoft Entra ID, or use LDAP. Seed the admin account at deployment and test the identity provider. One team found Keycloak let users sign in regardless of role. Another hit an Entra ID configuration error.
Access by team
Can one instance serve several teams?
Look forEach Phoenix instance is one tenant. The admin, member, and viewer roles apply to the whole instance, so a viewer sees every project. Per-project roles are on Arize's roadmap as Phoenix issue #11646, which was still open on October 25, 2026, and a maintainer confirmed in July 2026 that they will come to self-hosted Phoenix. Until they ship, give each team or environment its own instance with its own database or PostgreSQL schema. AX already has organizations and spaces with custom roles.
Retention
How long are traces kept?
Look forPhoenix keeps data indefinitely by default. From Phoenix 9.0, set PHOENIX_DEFAULT_RETENTION_POLICY_DAYS or a per-project policy by age or trace count, which a cron schedule enforces. A policy covers a whole project, so traces that need longer retention belong in a project with a longer policy. Phoenix has moved traces between projects since August 2025, from the UI or its GraphQL API.
Scale
What happens at production volume?
Look forSize PostgreSQL for your span volume and load-test your own queries. Users report slow attribute searches on Cloud SQL at about 100,000 interactions a day, and an Arize maintainer endorsed adding PostgreSQL indexes on the attributes you search. Other reports describe OpenShift deadlocks that lost traces and a connection pool exhausted by two replicas under sustained ingestion. Projects above 10,000 spans failed to load behind nginx, and large gRPC exports returned RESOURCE_EXHAUSTED. Phoenix scales by adding instances against one database. OpenTelemetry head or tail sampling cuts volume.
Upgrades
How do you take a new release safely?
Look forPin the image version, as Arize recommends for production. Read the release notes and test database migrations on a copy. Arize lists each major version's required steps in MIGRATION.md. Version 13 removed the old evaluations endpoint and client, which broke direct REST calls. It also builds an index on span attributes at startup. Arize tells teams with PostgreSQL databases of hundreds of GiB to create that index concurrently before upgrading, because the migration can lock the table for a long time.
Privacy and air gap
What leaves the network?
Look forSelf-hosted Phoenix keeps traces, evaluations, and datasets away from Arize. PHOENIX_TELEMETRY_ENABLED=false turns off web analytics. PHOENIX_ALLOW_EXTERNAL_RESOURCES=false stops its internet requests for air-gapped use. In September 2026 an Arize maintainer confirmed that pip install arize-phoenix[container,pg] is a supported offline install, and that the published arizephoenix/phoenix image bundles the evaluator runtimes and runs offline. Older releases tried to download a WASM binary at startup and timed out behind a firewall. Arize made the external-resources flag cover that download on October 1, 2026, so deploy a release that includes the fix.
When to move to AX
What would make managed Arize AX the better buy?
Look forMove to AX when you need SAML SSO, access split by team, managed monitors and alerts, HIPAA, or a database Arize runs at your volume. Arize's migration skill moves traces, datasets, experiments, and stored eval results. Recreate evaluator definitions, prompts, and annotations in AX yourself.
Questions to ask vendors
- Has legal approved the Elastic License 2.0 for our use?
- Which database backs the instance, and who restores it?
- Which identity provider signs users in, and which roles can see production projects?
- What retention policy applies to each project?
- Who owns upgrades, and how do we test migrations?
Red flags
- A shared instance on SQLite in a container with no persistent volume.
- Authentication left off on an instance reachable from the company network.
- Production and development traces in one instance that every viewer can read.
- Upgrading to the latest image tag without reading the release notes.
Products in this piece
Sources
- Official documentation
- 11
- Public source
- 13
- Phoenix docs: License
- Arize Phoenix LICENSE (Elastic License 2.0)
- Phoenix docs: Self-hosting
- Phoenix docs: Architecture
- Phoenix docs: Authentication
- Phoenix docs: Access control (RBAC)
- Phoenix docs: Data retention
- Phoenix docs: Privacy
- Phoenix docs: Trace sampling
- Phoenix docs: Arize Phoenix or Arize AX
- Arize AX docs: Migrate from Phoenix to Arize AX
- jordimo/infra pull request #15: standardise on Phoenix, keep Langfuse v4 as fallback (Aug 6, 2026)
- Phoenix issue #9890: Apache-2.0 relicensing for arize-phoenix-client (Oct 13, 2025)
- Phoenix issue #6685: authorization beyond authentication with Keycloak (Mar 5, 2025)
- Phoenix issue #10504: group-based multi-tenancy for data isolation (Dec 8, 2025)
- Phoenix issue #8537: copy or move traces between projects to keep them longer (Jul 11, 2025)
- Phoenix discussion #11233: slow attribute search at about 100,000 interactions a day (Feb 4, 2026)
- Phoenix issue #8879: PostgreSQL deadlocks and lost traces on OpenShift (Jul 31, 2025)
- Phoenix issue #12358: bulk inserter exhausts the connection pool under load (Mar 25, 2026)
- Phoenix issue #11243: projects with more than 10,000 spans fail to load (Feb 5, 2026)
- Phoenix issue #10021: RESOURCE_EXHAUSTED when exporting large traces (Oct 27, 2025)
- Phoenix discussion #11452: breaking changes in v13.0 (Feb 13, 2026)
- Phoenix discussion #16004: image dependencies for an air-gapped deployment (Sep 9, 2026)
- Phoenix issue #11646: Custom RBAC & Roles roadmap epic, open (opened Feb 20, 2026)