Compare

AcruxCore next to six open-source alternatives.

Every fact below links to the competitor's own pricing page, license file, or docs, and carries the date it was checked. A row we win against every one of them is marked "Our edge," a row a competitor wins is marked "Their edge" in its own column, and a row where we land in the same place is marked "Tie" — nothing is buried. For the hands-on side — the same prompt, actually run on both platforms — read the full write-up linked in each column.

Scroll right to see all six competitors →

AcruxCore
Checked 2026-08-07
Langfuse
Checked 2026-08-06
Phoenix
Checked 2026-08-07
Opik
Checked 2026-08-07
Helicone
Checked 2026-08-07
MLflow
Checked 2026-08-08
Laminar
Checked 2026-09-06
License
Apache License 2.0, permissive and OSI-approved. No part of the repository is under a different license.LICENSE
MIT, except for the ee/ folder. A separate Enterprise License covers that folder, so the features in it are not MIT. AcruxCore has no such folder.LICENSE
Elastic License 2.0. Source-available, not OSI-approved, and not permissive.LICENSE
Apache License 2.0, and no part of the repository is under a different license. The same terms as AcruxCore.LICENSETie
Apache License 2.0, and no part of the repository is under a different license. The same terms as AcruxCore.LICENSETie
Apache License 2.0, and no part of the repository is under a different license. The same terms as AcruxCore.LICENSETie
Apache License 2.0. At the commit we checked, no part of the repository was under a different license. The same terms as AcruxCore.LICENSETie
Self-hosting
docker compose upGitHubTie
docker compose upGitHub
docker compose upGitHub
docker compose upGitHub
docker compose upGitHub
pip install mlflow, then mlflow server. There is also a docker compose stack backed by Postgres.GitHub
docker compose up. Laminar's lite stack switches Signals off and does not create the Quickwit span index.GitHub
Gateway
In the request path. Routing, caching, budget checks, and virtual keys all take effect before a call reaches the provider.Route calls through the gateway
Not in the request path. Langfuse receives a trace after your own client has called the provider, so it cannot enforce a budget, serve a cache hit, or issue a virtual key.
Not in the request path. The Playground is the one place where a call goes through Phoenix's own backend. From the SDK your client calls the provider directly, with nothing in between to route or cap the call.
Not in the request path. Opik receives a trace after your own client has called the provider, so it cannot enforce a budget, serve a cache hit, or issue a virtual key.
In the request path, same as AcruxCore. On a native OpenAI key, Helicone forwarded all 300 calls in our benchmark. A key from a provider Helicone does not support natively failed. In our test OpenRouter either returned a 501 or reached a provider we had not asked for. Until you set a Helicone organization key, Helicone forwards calls but logs nothing.Tie
In the request path, same as AcruxCore. Named endpoints route to more than 60 providers and track usage. Each endpoint can also apply content guardrails for PII and safety. AcruxCore has no content guardrails. MLflow and AcruxCore both enforce a spend cap in the request path.Their edge
Not in the request path, by design. An OpenTelemetry SDK records the call your own client already made, so nothing can route, cap, or cache that call. In exchange, any provider works and there is no proxy to configure.
Tool catalog
A Tool Catalog that keeps every version of each tool. The gateway runs those tools, and the catalog reports per-tool usage analytics.Create a toolOur edge
You can save a tool schema from the Playground and reuse it anywhere in the same Langfuse project. There is no catalog page, no version history, and nothing ever runs the tool.
No catalog anywhere in Phoenix's navigation. The closest thing is a JSON Schema written per prompt in Phoenix's Playground, and nothing runs or measures that schema.
No tool catalog. Opik's "Agent playground" attaches to your own running code for debugging, rather than letting you define a tool schema.
No tool catalog in self-hosted Helicone. There is no schema builder and no record of a tool call.
An MCP Registry (Beta) catalogs each external MCP server from that server's server.json manifest. The registry stores a whole server, not a single tool, so a single tool has no version history. Nothing here runs or measures a tool call.
Tool schemas are a JSONB field on a single playground row, and tool calls appear as spans. There is no catalog page, no version history, and nothing here runs a tool.
Team & org structure
One team with members, invites, and roles. Nothing sits above the team.Invite a teammate
Two levels, with an organization above the project. Every settings breadcrumb shows the organization and the project.Their edge
No teams and no user management in the local open-source version. Opening /account with authentication switched off throws an error.
No teams, members, invites, or organizations when you self-host. Comet's own pricing page says members are a Cloud-tier feature.
One organization level, with no project layer below it. The "Add New Member" dialog takes an email address and has no role field.
No teams, members, invites, or organizations. The self-hosted open-source version has no login screen.
Two levels, with a workspace above the project, and three roles. The invite dialog takes an email address only, and you assign a role afterwards.Their edge
Pricing
Free during beta. You bring your own provider keys, and no paid tier is published yet.Pricing
Free Hobby tier, then $29–$2,499/molangfuse.com/pricing
Phoenix itself is free. Arize AX, Arize's hosted product, costs $0–$50/mo.arize.com/pricing
The open-source version is free. Comet Cloud costs $0–$19/mo.comet.com/site/pricing
Free Hobby tier, then $79–$799/mohelicone.ai/pricing
MLflow itself is free. Managed MLflow, hosted by Databricks, is priced by usage in DBUs, with no flat price published.databricks.com/product/managed-mlflow
Free tier with 1 GB ingested, 7-day retention, and 1 seat. Paid plans run $30–$150/mo, priced by GB ingested rather than by trace count.laminar.sh/pricing
RBAC
One role per team member, and no organization layer above the team.Manage team roles and permissions
Two levels of role, one on the organization and one on the project. On the account we checked, the project role showed "N/A on plan".
Not found. The local open-source version has no teams and no users.
Not found when you self-host. Comet's pricing page lists roles as Enterprise-only.
No role picker anywhere in the member-invite flow we checked.
Not found. The self-hosted open-source version has no authentication. We checked every Settings page.
Three workspace roles: owner, admin, and member. In AcruxCore each person has one role.Their edge
Audit log (who changed what)
On by default, with nothing to pay and nothing to switch on. Every prompt and every tool keeps its own history, and the team has one trail you can filter by area, event, or person.Read the team audit trailOur edge
The audit log is in the UI. It needs the Enterprise plan at $2,499/mo, whether you use hosted Langfuse or self-host it.
Not found in any settings page we checked.
Not found in any settings page we checked.
Not found in any settings page we checked.
Not found. Settings has only General, LLM Connections, and Webhooks.
Not found in any project or workspace settings page we checked.
Prompt templating logic
Every prompt is a template. Templates take {% if %} conditionals, {% for %} loops, and filters, in the same syntax as Jinja2.Use conditional logic in prompt templates
Variable substitution only, written as {{var}}. Langfuse does not render Jinja2 or Liquid itself, and a feature request for conditionals is still open.Using external templating libraries
Variable substitution only, in mustache or f-string form. There is no syntax for conditionals or loops.Using the Playground
Mustache substitution by default. Opik's SDK has a Jinja2 prompt type, but a feature request for conditionals and loops in the playground is still open.GitHub issue #5838
Variable substitution only, through a prompt_id and its inputs. There is no templating logic.Prompt Management
Full Jinja2. {% if %} conditionals and {% for %} loops both render natively. There is also a version diff, plus @production and @staging aliases. MLflow is the one competitor that matches AcruxCore's own templates.Tie
No prompt registry. A playground holds a single row of messages that you overwrite. It has no versions, aliases, or variables, so there is nothing to template.
Prompt optimizer
Built into the dashboard. The optimizer drafts candidate rewrites from the test cases that an eval run got wrong, and from the feedback that your LLM judge left. Every candidate is scored against the prompt you run today, across several models at once. The scores come back in one report, and you promote the winner from that report.Checked 2026-09-10Improve a prompt from feedback
No optimizer in the product. The nearest thing is an Agent Skill that runs in Claude Code, reads trace feedback, and edits the prompt through Langfuse's API. The rewriting happens in your editor, not in Langfuse.Checked 2026-09-10Prompt improvement with Agent Skills
Arize's Prompt Learning optimizer does rewrite a prompt from eval results. It sits in a separate research repository that you must clone to install. The optimizer is not on PyPI and not part of the Phoenix app, and Arize documents it as a tutorial rather than a feature.Checked 2026-09-10Arize-ai/prompt-learning
Opik Agent Optimizer is Apache 2.0 and rewrites a prompt against a dataset and a metric. It has more algorithms than AcruxCore: MetaPrompt, GEPA, evolutionary, and few-shot Bayesian optimizers. It optimizes MCP tool signatures too. You drive it from the SDK, and a run is logged back to the UI but cannot be started there.Checked 2026-09-10Opik Agent Optimizer
Helicone's only optimizer was "Auto-Improve", a single-pass rewrite with no dataset and no scoring. It sat in the prompt editor that Helicone deprecated on 20 August 2025. Helicone's current prompts feature has no optimizer.Checked 2026-09-10Prompt editor (deprecated)
mlflow.genai.optimize_prompts() is experimental. It runs DSPy MIPROv2 or GEPA against a dataset, then registers the rewritten template as a new prompt version. DSPy MIPROv2 and GEPA are published research algorithms that AcruxCore does not implement. You can start a run from the SDK only, not from the UI.Checked 2026-09-10Optimize prompts
Nothing to optimize. With no prompt registry, there is no stored prompt for an optimizer to rewrite or version.Checked 2026-09-10
GitHub starsPublic mirror opened 2026-08-03
6,044GitHub ↗Acquired by Mintlify. Helicone's own announcement says "services will remain live... in maintenance mode."
3,230GitHub ↗Y Combinator S24. On the date we checked it had 29 contributors and release v0.2.3. It ships a PII redaction toggle and an LLM-watched Signals engine. AcruxCore has no equivalent of either.

Community stats are a footnote, not a scored comparison — a young project is not a weak one, and a mature project is not automatically the better fit for your team.

The hands-on side

The same prompt, actually run on both platforms.

LangfuseOpenTelemetry-based tracing and prompt management, with an organization layer above projects.Read the write-up PhoenixArize's tracing and evaluation, running on your own machine inside a notebook.Read the write-up OpikObservability from Comet, built around datasets, experiments, and online scoring rules.Read the write-up HeliconeA request-path proxy with per-user metrics. It has been in maintenance mode since Mintlify acquired it.Read the write-up MLflowThe open-source ML and GenAI platform, with a prompt registry, tracing, evaluation, and its own request-path AI Gateway.Read the write-up LaminarObservability for agent runs, built in Rust on ClickHouse. Laminar has SQL over spans, LLM-watched Signals, and a CLI made for coding agents.Read the write-up

See the platform, not just the table.

No credit card required. Bring your own provider keys and route the first call in a few minutes.