Self-hosted · your server, your data

Catch the error.
Get the fix as a pull request.

Bugban is self-hosted error, performance and slow-query monitoring for PHP, JavaScript and mobile apps. Every new error is analysed by AI — and on the projects you connect to GitHub, the fix arrives on its own branch, ready to review.

No card required · one project · every feature switched on

# 1 — install composer require bugban/laravel # 2 — point it at your Bugban BUGBAN_API_KEY=bb_…
BUGBAN_HOST=https://bugban.online # 3 — an error happens, and two seconds later branch bugban/fix-498 · pull request opened
# 1 — install npm i @bugban/node # 2 — point it at your Bugban BUGBAN_API_KEY=bb_…
BUGBAN_HOST=https://bugban.online # 3 — an error happens, and two seconds later branch bugban/fix-498 · pull request opened
# 1 — install npm i @bugban/js # 2 — point it at your Bugban VITE_BUGBAN_KEY=bb_…
VITE_BUGBAN_HOST=https://bugban.online # 3 — an error happens, and two seconds later branch bugban/fix-498 · pull request opened
# 1 — install flutter pub add bugban_flutter # 2 — point it at your Bugban const apiKey = 'bb_…';
const host = 'https://bugban.online'; # 3 — an error happens, and two seconds later branch bugban/fix-498 · pull request opened

Everything it does

One platform, from the stack trace to the pull request

Not a list of buzzwords — every item below is a screen you can open on the day you install it.

Automatic fix on GitHub

A GitHub App reads only the files the stack trace points at, writes the change to a bugban/fix-… branch and opens a pull request. Never "all repositories", never an automatic merge.

AI analysis in your language

Root cause, explanation and a concrete fix, written in the language of your panel — Azerbaijani, English, Russian or Turkish.

Slow queries with EXPLAIN

Every query over your threshold arrives with its plan: full scan or index, rows examined, key used — and a leading-wildcard LIKE is flagged as unfixable by any index.

Errors and exceptions

Handled and unhandled alike, grouped by fingerprint with first seen, last seen, occurrence count and status (open / resolved / ignored).

Re-run a query safely

One click re-measures a slow query — executed by YOUR SDK on YOUR database, read-only, single statement, forced LIMIT, always rolled back, and the rows never leave your server.

Request, route, user, session

Method, URL, route template, controller@action, headers with secrets redacted, the signed-in user and the session, for every occurrence.

Breadcrumbs and network log

What happened before the error: clicks, navigation, console output and HTTP calls with status codes and timings.

DOM snapshot (browser)

The page exactly as it looked when it broke, with every input value masked — so a layout bug does not need a reproduction.

Mobile screenshots

A real PNG from React Native, Expo and Flutter, with sensitive widgets painted over BEFORE the shutter — not a claim of masking after the fact.

Performance metrics

Web Vitals in the browser; app start, screen load and jank on mobile — with thresholds and a separate AI prompt, because LCP means nothing on a phone.

Releases and regressions

Which release introduced it, whether a resolved error came back, and whether a fixed slow query stayed fixed — measured by frequency, not by average.

Team, roles and audit

Invite by email with owner, admin, member and viewer roles, an expiring invitation, and a log of who changed what.

Alerts and escalation

From a quiet notification to a ringing phone

Two independent systems, because "a new error appeared" and "the site is on fire" are not the same message.

Normal notifications

On every new error: in-app, email, Slack and Telegram. Email goes through an outbox, so a mail outage delays a message instead of losing it.

Emergency — a real phone call

When errors spike past your threshold within your window, Bugban places an actual Telegram call to the person on duty — Telegram forbids bots from calling, so the call comes from your own connected account. A WhatsApp message can go out alongside it, and a cooldown keeps one incident from calling you twenty times.

Webhook for your task manager

A JSON POST to any system you run — Jira, Trello, ClickUp, n8n or your own endpoint — so an incident can open a ticket without a human copying it across.

Webhook payload

POST https://your-system.com/webhook { "project": "shop-api", "error_count": 142, "window_seconds": 300, "threshold": 50, "message": "142 errors in 5 minutes", "timestamp": "2026-08-14T09:12:03Z" }

Technologies

What it runs on

Official SDKs, no agent to install and no sidecar process. If your stack is on this list, setup is one package and one key.

PHP
Laravel Symfony CodeIgniter 3 · 4 Yii2 Plain PHP 7.0 → 8.4

Versions 7.0 through 8.4 — old servers included. Uses curl when present and falls back to streams when it is not.

JavaScript · TypeScript
Node.js Express NestJS Next.js React Vue

Per-request isolation on the server through AsyncLocalStorage, so one request never inherits another user’s identity.

Mobile
React Native Expo Flutter

An offline queue writes to disk BEFORE sending, so a crash in a lift is still reported when the app next opens.

Databases
MySQL PostgreSQL Prisma TypeORM Knex pg PDO MongoDB

Slow queries arrive with their EXPLAIN plan and the index actually used, through the ORMs and drivers above.

Git
GitHub App per-project consent no stored token

No token is stored in the database — an installation token is minted from a private key when a fix is written, and expires within the hour.

How it works

Three steps, then it runs itself

The only recurring human step is the one that should be: deciding whether a fix ships.

  1. Install the SDK

    One package, one API key. PHP 7.0 through 8.4, Node, the browser, React Native, Expo or Flutter. The panel shows “SDK connected” the moment the first ping arrives, so you never wonder whether it is wired up.

  2. Connect the repository

    Each project authorises one repository through a GitHub App — never “all repositories”, and never another project’s.

  3. An error arrives

    It is grouped, analysed, and matched against your current code. If the fix is clear, a pull request is opened within seconds.

  4. You review and merge

    Deploy it, then mark the error resolved. If it comes back, Bugban reads the merged code and tries again — once.

Pricing

Pay for the projects you track

Every package includes the whole platform — errors, performance, alerts and the AI fixes. The only thing that changes is how many projects you can run. Packages add up, and each keeps its own renewal date.

Free trial

Free · 7 days

1 project

  • 7 days, 1 project
  • Everything included — errors, performance, AI analysis
  • GitHub auto-fix pull requests
  • No card required
Start the trial

Starter

$10/month

1 project

  • 1 project
  • Errors + slow query tracking
  • AI analysis
  • GitHub auto-fix pull requests
Choose Starter

Business

$100/month

15 projects

  • 15 projects
  • Everything in Growth
  • 180-day retention
  • Priority support
Choose Business

Why self-hosted

The difference that matters

Hosted error trackers see everything your application sees. Bugban does the same job without that being true.

Bugban compared with a hosted error tracker
 BugbanHosted SaaS
Where your errors liveYour serverTheir cloud
Who can read a stack traceOnly youYou and the vendor
Fix delivered as a pull requestIncludedRarely, add-on
Slow query plans (EXPLAIN)IncludedSeparate APM product
Priced byProjectsEvents, seats, retention
Data retentionYour disk, your rulesTier-dependent

FAQ

Questions people actually ask

Everything below is how the product behaves today, not a roadmap.

Is Bugban self-hosted?

Yes. Bugban runs on your own server and your errors, requests and screenshots never leave it. There is no third party in the path between your application and your data.

How does the AI fix work?

When a new error arrives, Bugban reads the files its stack trace points at — from your repository, at their current state — and asks a model for the change. The result is pushed to a bugban/fix-… branch and opened as a pull request. Nothing is ever merged automatically: a developer reviews it, merges it, deploys it, and marks the error resolved.

Which frameworks are supported?

PHP: Laravel, Symfony, CodeIgniter, Yii2 and plain PHP, from 7.0 to 8.4. JavaScript: Node.js, Express, NestJS, Next.js, React and Vue. Mobile: React Native, Expo and Flutter.

What does it capture besides the stack trace?

The request (method, URL, route, headers with secrets redacted), the signed-in user, the session, breadcrumbs, device and app details, slow database queries with their EXPLAIN plan, and — on mobile — a real screenshot with sensitive fields masked before the capture.

Do I need a credit card to try it?

No. Every account starts with a 7-day trial covering one project, with every feature switched on, including the AI fixes.

What happens when my package expires?

Your errors keep being collected and nothing is deleted. The panel stops showing them and the AI stops working until you renew — at which point everything collected in the meantime is there again.

Can I run several projects on one account?

Yes. Each package covers a number of projects, and packages add up: buying a second one adds its projects to your allowance and keeps its own renewal date.