wojt-janowski/laravel-glitchtip
A Laravel integration for GlitchTip, the open-source, Sentry-compatible error tracking service. Automatically captures exceptions and reports them to your GlitchTip instance, so you can monitor application errors without relying on a hosted third-party service.
is_up snake_case quirk, null-name 500s, updateKey() being a no-op on 6.2). Each of those is a bug your team would have shipped and debugged.using() API (one client per account/credentials) makes it practical to provision a GlitchTip project and DSN per customer workspace at signup, then hand the DSN back to your app's config. This is the highest-leverage use case: it turns error tracking from an ops ticket into a product feature.lazy() cursor pagination make it viable to build internal dashboards, project/user admin screens, and bulk operations (e.g. auditing keys across hundreds of projects) without paginating by hand.stats() fixes (daily series now aggregated from hourly buckets) unlock customer-facing usage/health charts — "errors this week", "uptime", "usage vs. plan" — that previously required workarounds or returned wrong numbers. If you were blocked on daily-granularity reporting, that blocker is gone.Adopt when most of the following hold:
using() to keep credentials scoped per tenant rather than threading an API token through the app.Look elsewhere — or scope carefully — when:
sentry/sentry-laravel against a GlitchTip DSN). Do not let "Laravel GlitchTip package" in a ticket get confused with "instrument our app".stats() is a different architecture with different cost/latency tradeoffs.updateKey() no-op in 6.2).usingSession() tempted you. Acting as a browser-signed-in user (shipping sessionid + csrftoken cookies and Django CSRF headers) is clever and useful for apps served from the GlitchTip instance's origin — but it's coupled to Django session/CSRF internals and is inherently fragile across auth changes. Sanction it only for same-origin, first-party tooling; don't build a customer-facing integration on it.Practical adoption gate: stand up the opt-in live integration suite against a staging GlitchTip you control (tests/Integration runs create/update/delete and cleans up) and confirm the exact operations on your roadmap pass before committing.
To executives: We can now make error tracking a feature of our product instead of an ops chore. Every customer workspace can get its own GlitchTip project and key automatically at signup, with typed, tested code rather than a bespoke script — and a test suite that proves we cover the vendor's entire documented API. Because it's a small open-source dependency rather than a paid integration platform, cost is near zero and switching cost stays low: it wraps a standard HTTP API, so the exit path is "replace the client", not "re-architect". The honest caveat is maturity — this is a v1.0.0 with a single maintainer — which we mitigate by pinning the version and keeping usage confined to provisioning and internal tooling.
To engineering: Typed readonly DTOs, lazy() cursor pagination, per-account clients via using(), and retries restricted to idempotent requests so POSTs can't double-fire. OpenAPI parity is enforced by a test, so no endpoint is missing without a documented reason. Full write coverage is validated by an opt-in live suite against self-hosted GlitchTip 6.2.6. The release also closes several sharp edges we'd otherwise hit ourselves: monitor heartbeats always reading "down" (is_up snake_case), 500s on monitor updates without a URL and user updates without a name, social-app updates demanding a server URL, daily stats silently returning only the first hour of each day, and updateKey() being documented as a no-op on 6.2. Guzzle 8 is now allowed, so it installs cleanly on Laravel 13. Two things to hold in review: usingSession() depends on Django session/CSRF internals and should be limited to same-origin tooling, and the integration target is a specific self-hosted version — verify against our instance in staging before we depend on it.
How can I help you explore Laravel packages today?