Changelog
2026-09-17
Section titled “2026-09-17”Revenue
Section titled “Revenue”- Revenue is an event. Money comes from the page that completed the
purchase, as
tracing("purchase", { revenue: 49, currency: "USD" })ortracing.revenue(49, "USD"). There is no payment processor to connect, no webhook and no ledger; the Revenue screen switches on with the first event. → Tracking revenue - One rule of attribution. A revenue event belongs to the visit it fired in, so source, campaign, landing page, country and device come with it and there is no unattributed bucket. → How attribution works
- The screen, rebuilt. Revenue, transactions, average order, customers and revenue per visitor with deltas; a chart with the previous period; What sold, Acquisition and Audience breakdowns; a transaction list that links to the visit. One currency at a time, as before. → Revenue
- Gone: the Stripe revenue webhook, the payment and customer ledgers, MRR and ARR, refunds, the “unverified revenue” panel. Account billing is unchanged.
Realtime
Section titled “Realtime”- A globe. Active visitors are placed on a globe by the city the geo lookup returned, sized by how many are there, with the three live tiles beside it. Coordinates are city-level and are stored on the event. → What is stored
Sessions
Section titled “Sessions”- Visitor avatars. Every visitor id gets a face drawn from its hash, so a list of visits can be scanned by eye and the same visitor reads the same on every screen. It is a picture of a hash, not of a person.
2026-09-16 Major
Section titled “2026-09-16 ”The release this documentation describes. Substantially every analysis screen was rebuilt, and the documentation site with them.
Performance
Section titled “Performance”- Core Web Vitals. The tracker now measures LCP, INP, CLS, FCP and TTFB on every real page load and sends one report when the page is hidden or closed. Reports are not events and never count toward the plan. → Script configuration
- Performance screen. Five p75 tiles with Good / Needs work / Poor ratings, the share of loads behind each, a trend chart, and where the slow loads are by page, device, country, browser and OS. → Performance
- Vitals API.
GET /api/v1/sites/:id/vitalsreturns the same p75s, the previous window, the series and an optional breakdown. → Vitals - Settings, four sections. General, Install, Plan & usage and the Danger zone as a row of pills across the top; sharing lives in General and API keys in Install. → Settings
- Hosted only. The self-hosting chapter is gone; tracing.tools is run as a service.
Collection
Section titled “Collection”- Geo, properly. Country, region and city now resolve through Cloudflare’s
edge data first and a local MaxMind GeoLite2 City database second, with a
documented order and an honest
nullthird.pnpm geoip:fetchdownloads the database;DEV_GEO_IPgives local development real locations. → Geo - Time on page fixed. The unload flush used to be sent as a pageview named
$duration, which double-counted every view, turned every real bounce into a two-view session and put a phantom step in every journey. It is now adurationhit that tops up the pageview it belongs to and writes no row. Old installs sending the previous shape are accepted and filed correctly. → Pageviews & SPAs - Identity is decided server-side. The tracker asks the collector which mode a site is in before its first hit and holds everything until the answer arrives, so the landing hit — the one carrying the campaign — is never filed under a provisional identity. → Script configuration
Analysis
Section titled “Analysis”- Goals — event and path goals with
*wildcards, a detail screen with acquisition, converting pages, who-converts and time-to-convert breakdowns, and agoalfilter that re-reads every other screen as “for people who converted”. → Goals - Funnels — up to eight ordered steps of pages and events, conversion windows, per-step drop-off with a pinned “Left the site” row, entry-step breakdowns and saved funnels that live in the URL until you name them. → Funnels
- Retention — day and week cohort grids, visitor and identified modes, a size-weighted curve, D1/D7/D14 and W1/W4/W8 milestones, same-day return and an identity-coverage figure that says how much of your traffic the grid can honestly describe. → Retention
- Journeys — a padded flow diagram in both directions, anchored on any page or event, with top routes and a per-page neighbour explorer. → Journeys
- Events — a full explorer: volume, trend and sparkline per event; property keys with coverage, numeric statistics and histograms; a raw occurrence feed; outbound links by host and URL; revenue by event split by currency. → Events
- Sessions — one row per visit with sortable columns, four quick chips, a
search box that matches visitor ids, landing pages and
identify()traits, a drawer that replays the visit and walks the result set, and a visits CSV. → Sessions
Revenue
Section titled “Revenue”- Partitioned by currency. Every revenue figure is reported for one currency at a time, with a switcher when more than one took money. Replaced on 2026-09-17 by event-based revenue; see above.
Billing
Section titled “Billing”- Hobby, Pro, Business and Enterprise, monthly or yearly, with a 14-day trial offered once per account. → Plans & limits
- Usage counted per UTC month across the account, with a month-end projection, per-site attribution of a spike, and metered overage reported to Stripe in 100k blocks. → Usage & overage
- A built-in billing sandbox for deployments with no Stripe key, including dev controls for renewal, dunning and cancellation. → Sandbox billing
Documentation
Section titled “Documentation”- This site, rebuilt on Starlight: search, a sidebar, on-page contents, dark mode, code highlighting and roughly fifty pages written against the code rather than from memory.
Earlier
Section titled “Earlier”No changelog was kept before this release.