Compare
AcruxCore next to seven 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 seven 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 | Agenta Checked 2026-10-18 | |
|---|---|---|---|---|---|---|---|---|
| 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/ folders. A separate Enterprise License covers those folders, so the features in them 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.LICENSE ↗Tie | Apache License 2.0, and no part of the repository is under a different license. The same terms as AcruxCore.LICENSE ↗Tie | Apache License 2.0, and no part of the repository is under a different license. The same terms as AcruxCore.LICENSE ↗Tie | Apache License 2.0. At the commit we checked, no part of the repository was under a different license. The same terms as AcruxCore.LICENSE ↗Tie | MIT, except for the ee/ folder. A separate license covers that folder, so the features in it are not MIT. AcruxCore has no such folder.LICENSE ↗ |
| Self-hosting | 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 ↗ | docker compose up, after you copy the example env file. The stack runs 14 containers.Self-host quick start ↗ | |
| 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. Opik also offers an LLM Gateway in beta, which its docs say is for development and testing.Checked 2026-11-02Opik LLM Gateway ↗ | In the request path, same as AcruxCore. The hosted AI Gateway lists 100+ providers and can bill you from Helicone credits. In our self-hosted benchmark it forwarded all 300 calls to OpenAI.Checked 2026-11-02AI Gateway ↗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. | Partly. The invoke endpoint renders a stored prompt and calls the model, so those calls pass through Agenta. It has no spend cap, response cache, or virtual keys. A call from your own code goes straight to the provider, and the SDK traces it. |
| 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 tool ↗Our 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. A prompt version's body takes the OpenAI chat-request shape, which includes tools, per Helicone's prompt API docs and source (not tested).Checked 2026-11-02Create a prompt ↗ | 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. | A catalog of third-party actions from Composio, which Agenta runs for its agents once you set a Composio API key. You cannot add your own tool to it or keep versions of a tool. A prompt carries its own tool schemas. |
| MCP server | The server has 32 tools. AcruxCore hosts it, and you can also run it locally with npx. An assistant can commit a prompt version, promote it to an alias, and run it through AcruxCore's gateway. The assistant can then read the resulting trace, test a prompt over a dataset, and call entries in the Tool Catalog.Checked 2026-10-18Connect an MCP client ↗ | Langfuse's hosted server has about 95 tools for prompts, datasets, experiments, evaluators, scores, annotation queues, dashboards and traces. Read and write tools are on by default. Some tools create prompts and move prompt labels, but no tool runs a stored prompt.Checked 2026-11-02Langfuse MCP server ↗ | Phoenix's local server has 27 tools for prompts, traces, spans, sessions, datasets and experiments. The hosted server can call any REST endpoint, including chat completions, and can be set read-only. No tool runs a stored prompt.Checked 2026-10-18Phoenix MCP server source ↗ | Read and write traces, scores, prompt versions, test suites and experiment records; no delete.Checked 2026-11-02Opik MCP tools ↗ | Helicone's local server has 3 tools. Two tools search logged requests and sessions. The third tool sends chat messages that you write through Helicone's gateway. That tool cannot send a stored prompt.Checked 2026-10-18helicone-mcp source ↗ | Experimental. The default genai group has tools for traces, scorers, experiments and runs, and an optional ml group has experiments, runs, models and deployments. There are no Prompt Registry tools.Checked 2026-11-02MLflow MCP server ↗ | Laminar's hosted server has 3 read-only tools. The tools run SQL over traces, fetch the details of one trace, and send a question to an agent inside Laminar. Laminar has no prompt registry, so no tool reads or runs a prompt.Checked 2026-10-18Laminar MCP server ↗ | Agenta's MCP server has 3 tools, and all of them search Agenta's documentation. No tool reads or changes your prompts, traces or evaluations.Checked 2026-10-18Agenta MCP server ↗ |
| 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. Users and three instance-wide roles when authentication is on.Checked 2026-11-02 | 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. Members are invited by email, and an admin sets each role in the members list.Checked 2026-11-02 | Optional Workspaces (off by default) let teams share one deployment, with roles scoped per workspace. No hard isolation between workspaces.Checked 2026-11-02Workspaces ↗ | 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 | Three levels: organization, workspace, and project. Members are managed on the organization.Their edge |
| Pricing | Free to use. You bring your own provider keys, and there is no paid plan.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 ↗ | The open-source version is free. Agenta Cloud costs $0, $29, or $299 a month, and Enterprise is priced on request.agenta.ai/pricing ↗ |
| RBAC | One role per team member, and no organization layer above the team.Manage team roles and permissions ↗ | Organization roles on every plan. Project-level roles need Pro with the Teams add-on or Enterprise on Langfuse Cloud, and a licence key when self-hosted.Checked 2026-11-02langfuse.com/pricing ↗ | Three roles (admin, member, viewer) once you set PHOENIX_ENABLE_AUTH and PHOENIX_SECRET; authentication is off by default.Checked 2026-11-02Authentication ↗ | Not found when you self-host. Comet's pricing page lists roles as Enterprise-only. | Three roles: owner, admin and member. An admin changes a role in the members list, not in the invite dialog.Checked 2026-11-02orgMemberItem.tsx ↗ | Optional login (--app-name basic-auth), off by default. Roles group READ, USE, EDIT and MANAGE permissions on experiments, models, prompts, scorers and gateway resources; every user starts with READ. With Workspaces on, roles are scoped per workspace.Checked 2026-11-02Role-based access control ↗ | Three workspace roles: owner, admin, and member. In AcruxCore each person has one role.Their edge | Six roles in the open-source version: owner, admin, developer, editor, annotator, and viewer. On Agenta Cloud, roles come with the $299/mo Business plan.Roles and permissions ↗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 trail ↗Our 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, or in the Helicone source.Checked 2026-11-02 | Not found. Settings has only General, LLM Connections, and Webhooks. | Not found in any project or workspace settings page we checked. | Audit logs are on the Enterprise plan, for Agenta Cloud and for self-hosting.agenta.ai/pricing ↗ |
| 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 ↗ | Mustache (full syntax, including sections and inverted sections), f-string, or none. There is no Jinja-style if/for syntax.Checked 2026-11-02Prompts concepts ↗ | 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. | Full Jinja2 when you choose the Jinja2 syntax. A variable that appeared only inside {% if %} or {% for %} got no input field in the editor. The invoke endpoint rejected that variable until we edited the input list by hand. |
| Prompt optimizer | Built into the dashboard. The optimizer rewrites a prompt from failed test cases and judge feedback, scores each rewrite on several models, and you promote the winner.Checked 2026-09-10Improve a prompt from feedback ↗ | No optimizer in the product. An Agent Skill in Claude Code reads trace feedback and edits the prompt through Langfuse's API.Checked 2026-09-10Prompt improvement with Agent Skills ↗ | Arize's Prompt Learning optimizer rewrites a prompt from eval results. The optimizer sits in a separate research repo that you clone, not on PyPI or in the Phoenix app.Checked 2026-09-10Arize-ai/prompt-learning ↗ | Opik Agent Optimizer (Apache 2.0) rewrites a prompt against a dataset and a metric, with more algorithms than AcruxCore, including GEPA. You start a run from the SDK, not the UI.Checked 2026-09-10Opik Agent Optimizer ↗ | No optimizer. Helicone's old Auto-Improve rewrote a prompt once, with no dataset or scoring, and was deprecated with the prompt editor on 20 August 2025.Checked 2026-09-10Prompt editor (deprecated) ↗ | mlflow.genai.optimize_prompts() is experimental. It runs DSPy MIPROv2 or GEPA against a dataset and saves the rewrite as a new prompt version. You start a run from the SDK only, not 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 | No optimizer that rewrites a prompt from evaluation results. Agenta's agents can update their own instructions from feedback in chat. |
| GitHub stars | Public mirror opened 2026-08-03 | 36,886GitHub ↗ | 10,923GitHub ↗ | 21,169GitHub ↗ | 6,044GitHub ↗Acquired by Mintlify. Helicone's own announcement says "services will remain live... in maintenance mode." | 27,416GitHub ↗ | 3,470GitHub ↗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. | 4,843GitHub ↗ |
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 AgentaA workspace for building agents by chatting, with a prompt registry, evaluation, and tracing behind it.Read the write-up