What unkeyed/unkey shipped
Written by FoxPlug from the repository's own releases; not affiliated with Unkey. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/unkeyed/unkey; Unkey did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of October 26, 2026
What shipped
- Frontline now caps OpenAPI request body size at 4MiB and enforces a per-pod memory budget, so large requests can no longer OOM pods. Pull request #8235
- The plain-HTTP listener now streams request bodies instead of reading them fully into memory, closing an unauthenticated large-POST path. Pull request #8287
- Root keys can now have their own IP allowlists, returning 401 when a caller does not match the configured IPs or CIDRs. Pull request #8301
- Builds now deny pulls from the build registry host, so a Dockerfile can no longer pull another project's image using shared registry credentials. Pull request #8213
- Gateway logs now redact Cookie, Set-Cookie and Proxy-Authorization header values before they are stored and returned through the analytics API. Pull request #8307
- Root key mutations now take locks in a consistent order, fixing a deadlock when two root keys mutate each other at the same time. Pull request #8300
- Authentication now accepts bearer scheme names in any casing and rejects embedded spaces and tabs in tokens. Pull request #8265
- You can now stop a non-live production deployment, while the current live deployment stays protected. Pull request #8293
- Root keys now show whether they are enabled, disabled or expired, along with the expiration time. Pull request #8317
- The API now serves its OpenAPI specification as JSON at /openapi.json. Pull request #8305
Why it matters
This week focused on hardening the data path: request bodies are capped, streamed and budgeted on Frontline, registry credentials are no longer usable for cross-project pulls, and sensitive headers are redacted from logs. The API surface also changed in ways users will notice, with per-root-key IP allowlists, more consistent auth header parsing, a JSON OpenAPI endpoint, and root key status display. Dashboard work improved deployment visibility, resource list consistency and audit log behavior.
Changelog entry
- Cap OpenAPI request bodies at 4MiB and enforce a per-pod memory budget on Frontline. Pull request #8235
- Stream request bodies on the plain-HTTP listener instead of reading them into memory. Pull request #8287
- Add IP allowlists per root key, returning 401 for callers that do not match. Pull request #8301
- Deny builds pulling from the build registry host to stop cross-project image use. Pull request #8213
- Redact Cookie, Set-Cookie and Proxy-Authorization values in gateway logs. Pull request #8307
- Order root key mutation locks to fix a deadlock between concurrent root key updates. Pull request #8300
- Accept bearer authentication scheme names in any casing and reject embedded spaces. Pull request #8265
- Allow stopping non-live production deployments. Pull request #8293
- Show root key status and expiration in the dashboard. Pull request #8317
- Serve the OpenAPI specification as JSON at /openapi.json. Pull request #8305
- Add grid and list views plus a Show more button to resource lists. Pull request #8217
- Skip the Turbopack build cache in production builds. Pull request #8267
This week: request body caps and streaming on Frontline, build pulls denied from the build registry host, redacted cookies and proxy credentials in gateway logs, per-root-key IP allowlists, order-fixed root key locks, case-insensitive bearer auth, and /openapi.json.
What shipped this week: Frontline now caps request bodies at 4MiB with a per-pod memory budget and streams bodies on the plain-HTTP listener. Builds deny pulls from the build registry host, so one project's Dockerfile can't pull another's image with shared credentials. Gateway logs redact Cookie, Set-Cookie and Proxy-Authorization values. Root keys support their own IP allowlists and show enabled, disabled and expired status. Root key mutation locks are ordered to prevent deadlocks, bearer auth parsing is case-insensitive, non-live production deployments can be stopped, and the OpenAPI spec is served as JSON at /openapi.json.
Week of October 19, 2026
What shipped
- Unkey login, unkey logout, and unkey workspace list and switch were added to the CLI for device login. Pull request #7784
- The dashboard can now approve CLI logins at a device page and manage CLI sessions. Pull request #7783
- The CLI now stores large keychain sessions on macOS without truncating them. Pull request #8031
- API routes now return 403 instead of 404 when a caller can read a resource but lacks permission to change it. Pull request #8030
- Logs.getApiRequestMetrics was added, with denser server-chosen buckets and the same filters as the log list. Pull request #7960
- The logs table, live mode, and key and identity request panels moved to the SDK, and late rows are no longer skipped in live mode. Pull request #7959
- The cache was replaced with a deterministic S3-FIFO store. Pull request #8067
- An in-memory global rate limiter was added for per-pod decisions before sessions are written to MySQL. Pull request #8033
- Deployments now return issues from getDeployment and listDeployments so callers see what is wrong with a running app. Pull request #8035
- Keyspace IP allowlists are now enforced in frontline. Pull request #8125
Why it matters
This week brings CLI sign-in with a matching dashboard approval flow, so keys and workspaces can be managed from a terminal without leaking root keys in help output. The logs API gained a metrics endpoint and the dashboard moved its logs views onto the SDK. Reliability and safety work landed too: IP allowlist enforcement, 403 responses for permitted reads, bounded root key rerolls, and a deterministic cache.
Changelog entry
- Add CLI device login with unkey login, unkey logout, and workspace list and switch. Pull request #7784
- Add dashboard pages to approve CLI logins and manage CLI sessions. Pull request #7783
- Store large CLI keychain sessions on macOS without truncation. Pull request #8031
- Return 403 instead of 404 when a readable resource lacks permission. Pull request #8030
- Add logs.getApiRequestMetrics with server-chosen buckets and the same filters as the list. Pull request #7960
- Move the logs table, live mode, and request panels to the SDK; live mode no longer skips late rows. Pull request #7959
- Replace the cache with a deterministic S3-FIFO store. Pull request #8067
- Add an in-memory global rate limiter for per-pod decisions before sessions go to MySQL. Pull request #8033
- Include issues in getDeployment and listDeployments. Pull request #8035
- Enforce keyspace IP allowlists in frontline. Pull request #8125
- Invalidate cached verification after a key reroll when the old key was deleted. Pull request #8144
- Register krane metrics at startup, add
unkey_krane_leader, and reset leader-only gauges when leadership ends. Pull request #8065
This week in Unkey: unkey login and workspace switch in the CLI, dashboard pages to approve CLI logins and manage sessions, a new logs.getApiRequestMetrics endpoint, the logs table on the SDK, a deterministic S3-FIFO cache, and keyspace IP allowlists now enforced.
This week in Unkey: the CLI now supports unkey login, unkey logout, and workspace list and switch, paired with dashboard pages to approve CLI logins and manage sessions. Large keychain sessions on macOS are stored without truncating. On the API side, logs.getApiRequestMetrics was added with denser buckets and the same filters as the log list, and the dashboard logs table and live mode moved to the SDK. The cache was replaced with a deterministic S3-FIFO store, an in-memory global rate limiter was added, keyspace IP allowlists are enforced in frontline, and rerolling a key now evicts cached verification. Deployments also return issues describing what is wrong with a running app.
Week of October 12, 2026
What shipped
- Unkey is now licensed under FSL-1.1-ALv2, with package and release metadata and public documentation updated; the rbac and error internals stay under MIT and icons keep their package license. Pull request #7941
- Krane now runs workloads as Deployments behind a rollout gate instead of bare ReplicaSets, so changes to the pod template can roll out under control. Pull request #7798
- API and frontline X-Unkey-Timing headers are off by default; send X-Unkey-Debug=1 to get them back. Pull request #7871
- Frontline now returns 422 instead of a 5xx when a key auth policy names a rate limit that does not exist on the key or identity. Pull request #7867
- Ctrl no longer moves the live route to a new deploy when the app is still marked as rolled back. Pull request #7934
- The dashboard new-app wizard is replaced by a guided card flow. Pull request #7882
- Concurrent SWR misses for the same cache key are now deduplicated into a single in-flight origin request. Pull request #7928
- Log and list tables in Safari show their rows again instead of having the sticky header background cover them. Pull request #7903
- Request logs are no longer written for server-side flag loads that call the API directly from the root layout. Pull request #7926
- Ctrl adds soft-delete state with
deleted_aton projects, apps and environments, and public lookups now exclude deleted resources. Pull request #7673
Why it matters
The license change means anyone using Unkey should check the new FSL-1.1-ALv2 terms, with the rbac and error internals and icons unaffected. Several fixes this week make deployments behave more predictably, from rolled-back apps keeping their live route to clear 422 responses for missing rate limits and quieter timing headers. Dashboard users also get a reworked new-app flow and fewer broken tables and forms.
Changelog entry
- Relicense Unkey under FSL-1.1-ALv2; rbac and error internals remain MIT and icons keep their package license. Pull request #7941
- Krane runs workloads as Deployments behind a rollout gate. Pull request #7798
- X-Unkey-Timing headers are disabled by default; opt in per request with X-Unkey-Debug=1. Pull request #7871
- Frontline returns 422 for key auth policies naming a missing rate limit. Pull request #7867
- Ctrl keeps the live route in place on rolled-back deploys. Pull request #7934
- Dashboard new-app wizard replaced with a guided card flow. Pull request #7882
- Concurrent SWR misses for the same key share a single in-flight origin read. Pull request #7928
- Fix Safari log and list tables where the sticky header covered rows. Pull request #7903
- Skip request log rows for server-side flag loads. Pull request #7926
- Duplicate app slugs in a project now return 409 instead of 500. Pull request #7900
- Remove redundant permissions indexes. Pull request #7895
- Soft-delete projects, apps and environments via
deleted_at; public lookups exclude them. Pull request #7673
This week: Unkey is now licensed under FSL-1.1-ALv2, with rbac and error internals kept under MIT. Krane runs workloads as Deployments behind a rollout gate. Rolled-back apps keep their live route. Timing headers are opt-in via X-Unkey-Debug. Frontline returns 422 for missing rat
This week in Unkey: the main license is now FSL-1.1-ALv2, with the rbac and error internals kept under MIT and icons under their package license. Krane runs workloads as Deployments behind a rollout gate, and Ctrl no longer moves the live route to a new deploy on a rolled-back app. The X-Unkey-Timing headers are off by default and can be turned on per request with X-Unkey-Debug=1, and frontline returns 422 instead of a 5xx when a rate limit named in a key auth policy does not exist. The dashboard new-app wizard is replaced by a guided card flow, and Safari log tables show rows again.
Week of October 5, 2026
What shipped
- The deployments API accepts branch and time filters, returns the fields the deployments table shows, and orders by createdAt so later pages load faster. Pull request #7788
- The dashboard reads usage from the API through the SDK instead of tRPC, with better skeletons, caching and tidier props. Pull request #7702
- Permissions.updateRole was added so the role edit dialog can move off tRPC, taking the ID or name plus optional name and description. Pull request #7805
- Permissions.updatePermission was added, filling in a missing permission CRUD operation for the edit dialog. Pull request #7802
- The dashboard now updates permissions through the SDK, using permissions.updatePermission and showing the API's 409 detail when a slug is taken. Pull request #7803
- The dashboard reads deployments through the SDK instead of tRPC, with the deployments collection as the only place that fetches them. Pull request #7790
- Dashboard requests are no longer logged when they come from the dashboard with the X-Unkey-Client header and a JWT principal. Pull request #7770
- Krane now requires hostname spread for deployments with more than one replica so pods do not all land on a single node. Pull request #7748
- Krane caps replicas per node at a third of the maximum instead of one node per replica, with a minimum of three domains. Pull request #7772
- The dashboard time range picker keeps focus while typing and no longer drops the start time when it is later than the end. Pull request #7753
Why it matters
This week moved several dashboard pages off internal tRPC calls and onto the public API through the SDK, including usage and deployments, while adding the permission and role update endpoints those pages needed. The deployments API also gained filters and more fields, and several fixes reduce noise and flakiness in local development and tests. For anyone using the project, more of what the dashboard does now goes through the same API that is available to them.
Changelog entry
- Feat(api): deployment list filters, new response fields and createdAt order Pull request #7788
- Refactor(dashboard): move usage to SDK Pull request #7702
- Feat(api): add permissions.updateRole Pull request #7805
- Feat(api): add permissions.updatePermission Pull request #7802
- Refactor(dashboard): update permissions through the SDK Pull request #7803
- Refactor(dashboard): read deployments through the SDK Pull request #7790
- Fix(api): dont log dashboard requests Pull request #7770
- Krane: enforce hostname spread for scalable deployments Pull request #7748
- Krane: cap replicas per node instead of one node per replica Pull request #7772
- Fix(dashboard): time range picker inputs Pull request #7753
- Api: resolve environment regions by name Pull request #7787
- Fix: update Next.js to 16.3.6 Pull request #7755
This week: deployments API gained branch and time filters plus more response fields. Dashboard usage, deployments, limits and permissions now read and write through the SDK. Krane spreads replicas across nodes. Dashboard requests are no longer logged when they come from the dashb
This week we moved several dashboard surfaces onto the public API through the SDK. Usage reads workspace.getUsage, limits read workspace.getLimits, deployments read listDeployments, and permission edits use permissions.updatePermission and permissions.updateRole. The deployments API also accepts branch and time filters, returns more of the fields the table shows, and orders by createdAt so later pages load faster. On the infrastructure side, krane now caps replicas per node and requires hostname spread for multi-replica deployments. We also stopped logging dashboard requests that come through the dashboard client, and fixed focus handling in the dashboard time range picker.
Week of September 28, 2026
What shipped
- Added /v2/rootKeys.createKey API endpoint for creating root keys with URN permission validation. Pull request #7552
- Dashboard now lets you see who is signed into your portal and revoke individual end user sessions. Pull request #7660
- Policy conditions now support Remote IP matching with ranges or CIDR notation for firewall rules. Pull request #7640
- Dashboard now routes read queries to PlanetScale read replicas across regions for better performance. Pull request #7697
- Usage billing page now lets you switch between current and previous billing periods. Pull request #7685
- Added /~/ deep links to dashboard pages that automatically redirect to your current workspace. Pull request #7695
- Worker steps now display as running immediately instead of waiting until completion. Pull request #7679
- Documentation explains how to choose least-privilege URN permissions for root keys. Pull request #7686
Why it matters
Root key management got significantly more capable with the new v2 API, URN permission builder, and remote IP policy conditions. Portal session revocation and dashboard performance improvements make managing production systems easier. The shift toward region-aware reads and immediate feedback on long-running operations reflects operational maturity.
Changelog entry
- API: /v2/rootKeys.createKey endpoint with URN permission validation Pull request #7552
- Dashboard: Revoke individual end user portal sessions Pull request #7660
- Dashboard: Remote IP match conditions in policy builder (in/not in ranges) Pull request #7640
- API: gateway.setPolicies and gateway.updatePolicy accept remoteIp matches Pull request #7639
- Frontline: remoteIp match expression for gateway policies Pull request #7638
- Dashboard: Route reads to PlanetScale read-only replica Pull request #7697
- Dashboard: Switch usage billing periods with period query param Pull request #7685
- Dashboard: /~/ deep links redirect to current workspace Pull request #7695
- Worker: Display steps as running immediately Pull request #7679
- Dashboard: Delay workspace loading spinner 300ms to reduce flicker Pull request #7698
- Dashboard: Truncate long API key and root key secrets with ellipsis Pull request #7670
- Docs: Root key URN permission reference and configuration guide Pull request #7686
Shipped: root key v2 API with URN validation, portal session revocation from dashboard, Remote IP policy conditions, regional read replicas, and better UX for long-running operations.
This week's updates focus on production readiness and operational control. The new /v2/rootKeys.createKey API validates permissions server-side while the dashboard builder creates keys with URN-based policies. You can now revoke individual portal sessions without affecting the whole portal. Remote IP conditions let policies match client IP ranges, and the dashboard uses PlanetScale read replicas across regions for faster loads. Long-running worker steps now show progress immediately instead of a blank screen.
Week of September 21, 2026
What shipped
- Upgraded Go to version 1.27.1 with strict claim decoding, updated golangci-lint to 2.13.2, and replaced deprecated patterns like ptr.P with native Go expressions. Pull request #7320
- Released API version 1.1.46 with URN permission support for project, app, and deployment handlers. Release
- Redesigned app cards in the dashboard and added list view with search functionality for projects with larger numbers of apps. Pull request #7597
- Added URN permissions to apps.listApps endpoint with read access patterns for specific and wildcard app scopes. Pull request #7562
- Added URN permissions to projects.listProjects endpoint with a new pagination.FetchAuthorized utility to load only authorized rows. Pull request #7556
- Refactored dashboard to create and delete keyspaces through the SDK instead of tRPC routes. Pull request #7531
- Added krane recovery from API outages and cross-replica coordination to prevent panics and race conditions from concurrent instances. Pull request #7450
- Migrated dashboard ratelimit overrides to read through the SDK, removing the tRPC ratelimit.override.list route. Pull request #7575
- Fixed override restoration when setting an override for a previously deleted identifier. Pull request #7598
- Replaced arbitrary font sizes with a formalized type scale in the dashboard UI. Pull request #7608
Why it matters
This week focused on completing URN permission authorization across API endpoints and accelerating the dashboard's SDK migration away from tRPC. The Go upgrade brings the codebase current with standard library improvements. Together these changes improve permission granularity, reduce infrastructure complexity, and enhance the dashboard user experience.
Changelog entry
- Upgrade: go to 1.27.1 with strict claim decoding; update golangci-lint to 2.13.2; replace ptr.P with new expressions Pull request #7320
- Release: api 1.1.46 with URN permissions on project, app, and deployment handlers Release
- Feat(dashboard): redesign app cards and add list view with search Pull request #7597
- Feat(api): authorize apps.listApps with URN permissions for app read access Pull request #7562
- Feat(api): authorize projects.listProjects with URN permissions; add pagination.FetchAuthorized utility Pull request #7556
- Refactor(dashboard): create and delete keyspaces through SDK instead of tRPC Pull request #7531
- Feat(krane): recover from API outages and coordinate replicas to prevent concurrent instance race conditions Pull request #7450
- Refactor(dashboard): read ratelimit overrides through SDK, remove tRPC ratelimit.override.list Pull request #7575
- Fix(api): restore deleted overrides when set again Pull request #7598
- Refactor(ui): replace arbitrary font sizes with formalized type scale Pull request #7608
Shipped: Go 1.27.1 upgrade, API 1.1.46 with expanded URN permissions, dashboard SDK migration for keyspaces & overrides, app card redesign with search, and krane outage recovery.
This week we upgraded to Go 1.27.1, released API 1.1.46 with URN permission coverage across more endpoints, and continued migrating the dashboard from tRPC to SDK calls. We redesigned app cards with search functionality, added outage recovery for krane, and improved tooltip consistency across the UI. URN permissions now cover projects, apps, deployments, and more.
Week of September 14, 2026
What shipped
- Frontline 1.0.26-rc.1 released with gateway policy fixes for workspace keyspaces and duplicate-key error resolution. Release
- Project cards now display each app's deployment status and in-flight or failed builds on the overview page. Pull request #7417
- Dashboard now warns before deleting API keys or root keys that were used in the last 7 days. Pull request #7463
- Portal re-implements the analytics:scope permission end-to-end, making it requestable again through the API and integrate dialog. Pull request #7410
- Key tables now display stored prefixes and last-four character suffixes for both root and API keys. Pull request #7429
- Dashboard sidebar compute meter now serves cached data while fresh data loads, reducing page settle time from 2.64s to 1.62s. Pull request #7441
- Removed all custom WorkOS login code in favor of hosted WorkOS and their widgets across the board. Pull request #7316
- Portal operator URNs added to the URN catalog so portal routes work correctly when root keys move to URN format. Pull request #7377
- Fixed relative timestamp updates on project cards that were not refreshing until page interaction. Pull request #7474
Why it matters
This week brings better visibility into deployments and key usage on the dashboard, stronger safeguards against accidental key deletion, and foundational work to support portal permissions through the new analytics scope. Performance improvements to the dashboard and fixes to gateway policies make the platform more reliable.
Changelog entry
- Frontline 1.0.26-rc.1: Fixed gateway policies to work with workspace keyspaces and resolved duplicate-key errors on clusters Release
- Project cards now display each app's deployment status and build progress Pull request #7417
- Added warning when deleting API keys or root keys used in the last 7 days Pull request #7463
- Portal analytics:scope permission now fully implemented end-to-end Pull request #7410
- Key tables display stored prefixes and last-four character suffixes Pull request #7429
- Gateway request log drawer now loads details from correct table Pull request #7434
- Dashboard compute meter now serves cached data while fetching fresh updates Pull request #7441
- Portal operator URNs added to support URN-based root keys Pull request #7377
- Migrated authentication to hosted WorkOS solution Pull request #7316
- Fixed relative timestamps on project cards to update without page interaction Pull request #7474
Frontline 1.0.26-rc.1 shipped. Better deployment visibility, safer key deletion, analytics scope back in the portal, and gateway policy fixes.
This week's updates focus on platform stability and usability. Frontline 1.0.26-rc.1 brings gateway policy fixes, project cards now show deployment status directly, and we added safeguards that warn before deleting recently-used keys. The portal re-implements analytics scope end-to-end, and we optimized dashboard performance by serving cached compute meter data. Removed all custom WorkOS code in favor of their hosted solution.