A feature release. Custom dashboards gain a GeoIP world map and a raw log table with configurable metadata columns, webhook channels pointing at Discord finally work, and repeated webhook events no longer get stuck at pending forever.
Geo map panel: plot GeoIP-enriched log volume on a world map, per country or per location, with no tile servers and no CDN assets
Log table panel (#289): raw log rows on a dashboard with configurable metadata columns and an optional live tail
Webhook channels pointing at Discord now work: every event is delivered as a Discord embed instead of a rejected envelope
Repeated webhook events no longer get stuck at pending forever: deduplication is now explicit and time-bounded
The graphile-worker queue pool no longer crashes the backend when the database restarts (#291)
Eight Dependabot advisories cleared, including a SvelteKit Accept-header ReDoS reachable on the public frontend port
1.2.0: Error-Group Merging, Email Digests & a UX Audit Pass
A feature release. Duplicate error groups are fixed at the root and auto-merged at ingestion, scheduled email digest reports ship complete and enabled, clock skew detection covers logs, spans and metrics, and a full UX audit lands ~25 fixes and refinements across the dashboard.
Duplicate error groups solved end to end: fingerprint fix for node: frames, auto-merge at ingestion, and a one-click manual merge for historical splits
Scheduled email digest reports (#154) are complete and enabled: five report sections, live hourly scheduling, one-click unsubscribe
Clock skew detection for logs, spans and metrics (#279): misconfigured shipper clocks are surfaced on the project overview, never rejected
Local login now routes through the auth provider registry (#266, community contribution) with user-enumeration hardening
UX audit pass: shareable log-search URLs, data-aware command palette, remembered project & time range, System theme, error regression detection and more
A feature release. External systems can now push events into LogTide through tokenized inbound webhook receivers (GitHub, Uptime, generic JSON), and deleting a project moves it to a recoverable 30-day trash instead of wiping it. Plus five dashboard and log-count correctness fixes.
Inbound webhook receivers: GitHub, Uptime Robot / Better Stack and generic-JSON senders can push events in via per-receiver tokenized URLs
Received events flow through the full pipeline — PII masking, quotas, Sigma detection, metering and live tail all apply
Project soft-delete: deletion moves a project to a recoverable 30-day trash (still queryable, read-only) with a Restore action
Log total is now exact below 50k rows on TimescaleDB instead of an unreliable planner estimate (#271)
Activity Overview chart tracks live data again instead of lagging 1–2h behind (#274)
Dashboard editing works over plain HTTP on a LAN IP again (#272)
A security-focused release resolving privately reported issues (coordinated disclosure via KIberblick.de): cross-tenant dashboard reads, stored XSS in the service map, an open redirect, SSRF DNS-rebinding, and two races. Trace span attributes are now PII-masked. No migrations — a drop-in upgrade.
Cross-tenant read on the dashboard API endpoints closed — API-key auth now matches the requested org/project against the key's bound scope
Stored XSS via OTLP service.name in the service map fixed; service.name is also sanitized at ingestion as defense in depth
Open redirect on the auth-free login/register path fixed with a shared safe-redirect helper
SSRF guard now pins the validated IP on the HTTP path (DNS-rebinding hardening)
PII masking now also covers trace span attributes, including deep-masked request/response bodies
No database migrations — a drop-in upgrade from 1.0.2
A frontend correctness and security release from a multi-agent frontend bug hunt, plus hardened auth for the live-streaming endpoints. The headline: single-use stream tickets keep the session token out of WebSocket/SSE URLs. One additive migration — otherwise a drop-in upgrade.
Single-use stream tickets: the session token no longer travels in WebSocket/SSE URLs, where reverse proxies log it
Webhook channel secrets are no longer rehydrated into the DOM when editing a notification channel
Global 401 handler redirects a revoked or expired session to login instead of failing silently
Stale-response race guards across log search, traces, error groups, SIEM incidents, monitors and dashboard panels
Admin pages enforce a client-side admin guard; the OIDC callback strips the token from the URL
One additive migration (049_stream_tickets) — otherwise a drop-in upgrade from 1.0.1
A security and correctness release from a multi-engine bug audit of the 1.0 line. Two cross-tenant data-exposure fixes that were live in 1.0.0, plus a broad sweep of detection, ingestion, storage, alerting and frontend correctness fixes. No migrations — a drop-in upgrade.
Cross-tenant log exposure via the WebSocket live-tail closed — it now enforces the same membership check as the REST query routes (was live on 1.0.0)
Cross-tenant leak of notification-channel secrets (webhook auth tokens) closed with a membership check
PII masking fail-open fixed: separator-less card numbers are no longer stored unmasked
Storage-layer correctness fixes validated against real ClickHouse, MongoDB and TimescaleDB; CI now runs the MongoDB reservoir suite
New official Ruby SDK (the `logtide` gem) — Rack/Rails middleware, tracing and a stdlib Logger bridge; docs at /docs/sdks/ruby
No database migrations — a drop-in upgrade from 1.0.0
First beta of the 1.0 line. Tenant data isolation audit, per-org metering with a capability/quota system, typed lifecycle hooks, a hardened outbound webhook dispatcher, a structured audit log primitive, and fail-closed PII masking.
Tenant data isolation audit across every backend data-access path, with a CI tripwire and isolation test suite (#228, #219)
Closes a sibling-gap left by the 0.9.6 SSRF hardening: the alert/Sigma webhook delivery path now routes through the centralized safeFetch guard instead of the bypassable inline filter (GHSA-7v53-pw6r-99vj, CWE-918).
SSRF fix: alert/Sigma webhook delivery now uses the centralized safeFetch guard (GHSA-7v53-pw6r-99vj, CWE-918)
DNS resolution + per-redirect-hop revalidation + full IPv4/IPv6 private/reserved range coverage on webhook delivery
Read-back oracle closed: blocked targets are rejected before the response body is read
MONITOR_ALLOW_PRIVATE_TARGETS still lets self-hosted deployments target internal endpoints
Frontend now runs as a full SPA on adapter-node (kills hydration bugs), SSRF guard on monitors and webhooks, cross-tenant projectId validation on four routes, OIDC iss-parameter fix for Authelia, and an infinite-skeleton fix on search/traces/metrics.
Frontend converted to a full SPA (ssr=false root cascade), removing 22 per-route ssr=false workarounds and a whole class of hydration bugs
Security: SSRF guard on uptime monitors and webhooks, denied by default (MONITOR_ALLOW_PRIVATE_TARGETS to opt in)
Security: cross-tenant projectId validation enforced on alerts/preview, alerts, monitors and sourcemaps routes
OIDC login fixed for issuer-identifying providers (RFC 9207 iss param) like Authelia (#233, #234)
Fixed infinite skeleton spinner on search/traces/metrics when no project had a data-availability flag
Metadata filters now work on ClickHouse and MongoDB, error notifications are throttled per group to stop email storms, the notification-channels defaults endpoint accepts monitoring, plus 19 Dependabot advisories resolved.
Metadata filters now translated on ClickHouse and MongoDB, not just TimescaleDB (#226, #224)
Error notifications throttled per error group via a race-safe cooldown (ERROR_NOTIFICATION_COOLDOWN_MINUTES, default 15)
notification-channels defaults endpoint now accepts the monitoring event type
Migration 043 adds last_notified_at to error_groups
Data-availability endpoint now reads cached flags on projects (6s+ → <50ms on ClickHouse), activity_overview panel works across all engines, 14 dashboard pages get proper titles, plus uuid 14 and fast-xml-parser 5.7.3 security bumps.
GET /api/v1/projects/data-availability rewritten to read cached has_X_at flags — 6s+ → <50ms on production ClickHouse
Boot-time one-shot backfill for the new project flags, throttled and gated by system_settings
activity_overview panel logs/log_errors series now work on ClickHouse and MongoDB via reservoir.aggregate
14 dashboard pages now set proper <title> instead of falling back to generic 'LogTide'
Security: uuid 14.0.0 (CVE-2026-41907) and fast-xml-parser 5.7.3 (CVE-2026-41650) bumps
Traces Live Tail, Dashboard Panels & Async Ingestion Buffer
Traces gain live tail (SSE), row expand, keyboard shortcuts and export; monitoring reorganized into tabs; user settings promoted to a full page; new trace_volume and activity_overview dashboard panels; opt-in ReservoirBuffered async ingestion with in-memory and Redis Streams transports.
Traces live tail via SSE, inline span expand, j/k/enter/r keyboard shortcuts and JSON/CSV export
Monitoring page split into Monitors / Incidents / Maintenance / Status page tabs with summary cards
User settings promoted from dialog to full page at /dashboard/account
New trace_volume and activity_overview dashboard panels using continuous aggregates with raw fallback
Opt-in ReservoirBuffered async ingestion: in-memory (signal-wakeup) and Redis Streams transports with DLQ, circuit breaker and Prometheus metrics
Metadata Filters, Admin User Creation & Org-Scoped Status URLs
Generic metadata filters across log search and alert rules, admin-driven user provisioning, editable org/project slugs, org-scoped public status page URLs (BREAKING), plus SIEM heatmap crash fix and three fastify/SvelteKit security bumps.
Generic metadata filter builder with 7 operators, backed by GIN-indexed JSONB queries and shared with alert rules
Configurable metadata.* columns in the log search table, persisted per project
Admins can create users from the dashboard (#198) without enabling public signup
BREAKING: public status page URLs moved to /status/:orgSlug/:projectSlug
Security: fastify 5.8.5 and SvelteKit 2.57.1 bumps (3 CVEs, 2 HIGH / 1 MEDIUM)
SQL injection fix in querySpans, ReDoS protection for monitor assertions, 25+ bug fixes across auth, pipelines, SIEM, monitoring, and SSR safety, plus comprehensive input validation on all route params.
SQL injection fix in querySpans sortBy/sortOrder for both TimescaleDB and ClickHouse
ReDoS protection on HTTP monitor body assertion via safe-regex2
UUID validation, positive-int clamping, and max-length guards across all route params
PII salt race condition, SSE duplicate sends, and Sigma sync FK corruption fixed
localStorage SSR crash guards and URL-encoding fixes in frontend navigation
Service Monitoring, Log Pipelines & Custom Dashboards
Three major features: uptime monitoring with public status pages (#152), log parsing and enrichment pipelines with grok and GeoIP, and fully customizable dashboards with 9 panel types (#151).
Service health monitoring with HTTP/TCP/heartbeat checks and public Uptime Kuma-style status pages
Log parsing pipelines with 5 built-in parsers, custom grok patterns, and GeoIP enrichment
Custom dashboards with 9 panel types, drag-and-drop reorder, resize, and YAML import/export
Scheduled maintenances and manual status incidents on public status pages
Versioned dashboard schema with migration framework and cross-org isolation guards
Quick Start cURL example now validates without a manual timestamp, Sigma worker no longer floods logs on empty detection batches, and fresh instances without INITIAL_ADMIN_* env vars auto-promote the first registered user to admin.
logSchema now defaults time to current ISO string so minimal payloads and copy-paste examples validate
Sigma worker [SigmaDetection] No matches found log gated behind DEBUG_SIGMA=true
First registered user is auto-promoted to admin when no INITIAL_ADMIN_* is set and no admin exists
Fixed ClickHouse traces/metrics data-availability queries failing due to raw epoch date parameters, and resolved stale dashboard sessions after volume resets.
ClickHouse traces/metrics data-availability queries now use toDateTime64() clamp instead of raw epoch dates
Dashboard validates session token against backend on load and auto-logs out on invalid session
Five cross-org and auth security fixes, corrected SSE real-time streams, resolved 20+ Svelte memory leaks on navigation, and multiple bug fixes across SIEM, incidents, webhooks, and retention jobs.
Cross-org isolation and auth bypass fixes in SIEM and pattern routes
SSRF protection for legacy webhook path and disabled-user login blocked
SSE real-time events and log stream duplicate emission fixed
20+ Svelte memory leaks from unsubscribed auth stores resolved
Docker config sync and dependency security bumps (picomatch, brace-expansion, fast-xml-parser)
All dashboard pages now show content-shaped skeleton loaders, automated Helm chart releases on every stable Docker image, and multiple performance and correctness fixes for API endpoints and admin pages.
Skeleton loaders and loading overlays on all dashboard pages
Automated Helm chart releases triggered on every stable Docker image release
API 400 responses now include field-level validation errors
Fixed admin pages returning 502 on direct load/reload
POST /api/v1/logs/identifiers/batch performance: bypasses storage engine, one PostgreSQL query
GET /api/v1/logs/hostnames 8+ second queries fixed with engine-specific indexes and a 6h window cap
Major expansion of the audit trail system covering all critical platform actions for GDPR/SOC2 compliance, OIDC provider brand icons, and fixes for date formatting localization and data availability routing.
Audit logging for log access, auth events, identity management, provider config, settings, and sessions
Daily auto-sync for SigmaHQ community rules, trace navigation from log detail panel, audit logs for alert rules, and security/robustness fixes for ingestion and admin endpoints.
SigmaHQ rules auto-sync daily at 2:30 AM
View Trace link in log detail panel when trace_id is present
Audit log entries for alert rule create/update/delete
Admin pagination capped at 200 to prevent oversized allocations
NDJSON lines exceeding 1MB rejected with HTTP 400
api_key_id removed from log metadata (information disclosure fix)
MongoDB storage adapter for @logtide/reservoir, browser and frontend SDKs with source maps and Core Web Vitals, and OTLP metrics dashboards with cross-signal correlation.
MongoDB storage adapter for @logtide/reservoir
Browser/Frontend SDKs with session tracking & source maps
Core Web Vitals and network breadcrumbs
OTLP Metrics rollups & Golden Signals (P50/P95/P99)
POST /api/v1/ingest now accepts direct arrays and wrapped arrays in addition to the standard format, improving compatibility with collectors like Vector and Fluent Bit.
Standard format {"logs": [...]} unchanged
Direct array payloads (Vector with codec: json)
Wrapped array payloads (Vector with VRL wrapping)
Array formats auto-normalize time, level, and service fields
ClickHouse as a full alternative to TimescaleDB via the @logtide/reservoir abstraction layer, with factory pattern engine selection and full query migration.
Project rebranding from LogWard to LogTide, substring search with trigram indexes, clickable dashboard elements, exception visualization, and customizable retention.
Enterprise authentication with LDAP and OpenID Connect, auth-free mode for home labs, initial admin via environment variables, and ARM64 Docker builds.
First public release of LogTide with multi-organization architecture, batch log ingestion, real-time streaming, TimescaleDB storage, Sigma detection engine, and official SDKs.