Changelog

What's new

Notable changes, shipped.

Multi-tenant invites

NewImproved

Invite teammates by email and accept through a signed link. Roles are configurable per organization.

We shipped a full invite flow that works across organizations.

How it works

An invite generates a signed token tied to the target organization. Recipients click the link, sign in (or sign up), and are added with the role you picked.

  • Roles: owner, admin, member
  • Expiry: 7 days, refreshable from the team page
  • Audit: each invite event is logged

What's next

We're working on bulk invites by CSV upload and SCIM-style provisioning for enterprise plans.

Better-auth session refresh

Fixed

Stale cookies no longer cause silent 401s on the dashboard.

Sessions older than the cookie max-age were occasionally surviving on the client while the server-side session had already expired, producing silent 401s.

The middleware now revalidates session freshness on every request and triggers a soft refresh before issuing the response. No user action needed.

Dashboard refresh

NewImproved

Redesigned dashboard with denser tables, faster page transitions, and a new command palette.

The dashboard got its first major refresh since launch.

New

  • Command palette (⌘K) for jumping between projects, members, and settings
  • Inline filters on every table — no more popovers
  • Keyboard shortcuts for the five most-used actions

Improved

  • First-paint is ~40% faster on the projects page
  • Tables now stream rows server-side so large workspaces don't block the UI

Stripe webhook retries are now idempotent

Fixed

Replays of the same event no longer double-credit subscriptions.

Stripe occasionally retries the same invoice.payment_succeeded event when the original delivery times out. The webhook handler now keys on the event ID and short-circuits replays after the first successful processing.

If you saw doubled credits between April 10 and April 17, support has already been in touch — no action needed from your side.

Audit log v1

New

Every workspace action is now recorded and exportable as CSV.

Admins on Pro and Enterprise plans now have a per-workspace audit log under Settings → Audit.

Each entry records the actor, the action, the affected resource, and the IP. The full log is exportable as CSV from the same page.

Retention is 90 days on Pro and 12 months on Enterprise.

Keyboard shortcuts panel

New

Press `?` anywhere to see the full list of shortcuts.

A discoverable shortcut sheet. Hit ? from any page; the panel groups shortcuts by surface (global, tables, editor) and links each one to the action it triggers.

SAML SSO for Enterprise

New

Connect any SAML 2.0 identity provider in under five minutes.

Enterprise workspaces can now require sign-in via a SAML 2.0 provider — Okta, Azure AD, Google Workspace, and any other SP-initiated flow.

JIT provisioning is on by default. Group-based role mapping is available from the SAML settings page.

CSV export honors filters

Fixed

Exports used to always include all rows. They now respect the active filter.

The export button under any table previously ran an unfiltered query against the dataset. It now uses the same query as the rendered view, so the CSV contains exactly what you see.

Dark mode token pass

Improved

Audited every component for token usage; dark mode is now genuinely usable.

Several components had hardcoded light-mode greys that produced flat or muddy contrast in dark mode. We replaced them with semantic tokens that respect the user's theme.

Should affect every surface — tables, dialogs, sidebars, the editor.

Per-token API rate limits

NewImproved

Configure rate limits on a per-API-token basis. Default unchanged.

Until now, all tokens in a workspace shared the workspace's rate limit. You can now set a custom limit on any individual token from the API settings page.

The default cap is unchanged at 1,000 req/min per token.

Signed webhook deliveries

New

Outbound webhooks are now signed with HMAC-SHA256. Old endpoints keep working.

Every outbound webhook carries an X-Webhook-Signature header containing an HMAC-SHA256 of the body, keyed by a secret you can rotate from the webhook settings page.

Existing endpoints continue to receive unsigned deliveries until you opt them in, so no immediate action is required.

Friendlier empty states

Improved

Replaced blank screens with illustrations and a single suggested action.

Every list view that could show nothing has a real empty state now: a small illustration, a one-line explanation, and exactly one suggested next action. No more guessing whether the page is loading or genuinely empty.