TraceHawk // browser and PHP errors Group · Count · File the ticket Ingest operational

Product

An issue page built for reading an error, not for browsing a dashboard.

The list is a feed of grouped errors. The detail page is one issue and one event: the stack, the release, the trace, and what happened just before it.

Issue list

Each row is one grouped error: title, the file it came from, a short volume chart, event count, users, and when it was last seen. Filter by project, status, or text.

Issue detail

  • Header with level, short id, event count, and user count.
  • Volume for 1 hour, 24 hours, 7 days, 14 days, or 30 days, with release marks on the chart.
  • Highlights for release, environment, URL, browser, and user.
  • Stack with application frames open and library frames collapsed.
  • Breadcrumbs leading up to the event.
  • A short trace waterfall when the event carries a trace id.
  • Request, tags, and runtime context.
  • Sidebar with first seen, last seen, the releases, the assignee, the Jira link, and the activity log.

Install

A project is JavaScript or PHP. Both post to the same /api/<key>/store. Grouping, the issue page, and the Jira rule do not care which client sent the event.

Browser

A public key and a script tag. The script reports uncaught errors and unhandled promise rejections, and keeps recent clicks as breadcrumbs. Call TraceHawk.captureException for an error you already caught, and set a release, a user, and tags. The key is visible in the page, so set allowed origins before production. async keeps a dead host from blocking the page.

<script async src="https://tracehawk.net/api/<key>/snippet.js" crossorigin="anonymous"></script>

PHP

tracehawk/sdk reads TRACEHAWK_DSN itself. Laravel needs one call in bootstrap/app.php. Symfony needs one line in config/bundles.php. A try/catch you already handled does not reach either hook, so call TraceHawk::capture($e) there yourself. If TraceHawk is down, the call gives up in under half a second.

composer config repositories.tracehawk composer https://tracehawk.net/sdk
composer require tracehawk/sdk:1.0.0
.env
TRACEHAWK_DSN=https://tracehawk.net/api/<key>
Laravel
# bootstrap/app.php
use TraceHawk\Sdk\Laravel\Integration;

->withExceptions(function (Exceptions $exceptions) {
    Integration::handles($exceptions);
})
Symfony
# config/bundles.php
TraceHawk\Sdk\Symfony\TraceHawkBundle::class => ['all' => true],

What is not on the page

Session replay, profiles, and an AI write-up are not part of the product. The page stays on the error, the version, and the ticket.

Integrations

The hawk sits between the error and the tools you already use.

Ready to turn error noise into actionable issues?