Every release, every change. We ship in the open — see what's new, what's improved, and what's coming next.
api.apilocker.app. PKCE-mandatory (S256), Dynamic Client Registration per RFC 7591, refresh-token rotation with family-wide reuse detection, RFC 8414 metadata discovery, RFC 9728 protected-resource metadata. Any MCP client that speaks the modern remote-MCP spec can connect over HTTPS with no pasted master tokens — just a consent screen click.readOnlyHint / destructiveHint / idempotentHint / openWorldHint) on all 21 MCP tools, CORS allowlisted for claude.ai + claude.com./oauth-consent with the brand-new API Locker mascot, scope descriptions in plain English, user-email display, explicit trust warning, and Approve/Deny buttons. Preserves return_to through the OAuth round-trip so users land back on the consent page after sign-in.vault:read (list/get/reveal/activity/doctor), vault:write (store/rotate/rename/pause/resume/delete/tokens/devices), vault:proxy (make proxied API calls through stored credentials). Enforced per-tool on the MCP endpoint.GET /v1/oauth/grants lists your active grants (grouped by refresh-token family, not raw token rows), and POST /v1/oauth/grants/:id/revoke kills one. Both session-authed, and the user_id check in the revoke query prevents cross-user revocation.src/oauth-providers.ts is the canonical registry — each entry defines authorize URL, token URL, user-info URL, scopes, and a mapping function from the provider's user-info response to our normalized shape. Routes /v1/auth/:provider and /v1/auth/:provider/callback dispatch generically.GET /v1/auth/providers. Zero HTML edits needed to enable a new provider. And return_to now round-trips through the OAuth dance correctly, so deep-linked sign-in flows work.Access-Control-Allow-Origin header. Previously every response baked in www.apilocker.app regardless of the caller's Origin, which worked by coincidence for the dashboard but would have blocked Claude and every other cross-origin caller./brand/.support@, security@, feedback@, privacy@, and legal@ email addresses, all routed through Cloudflare Email Routing. Wired into every footer, the docs, the privacy policy, the terms, and the README.initialize → tools/list → store_key → reveal_key → delete_key → Connected clients panel → Revoke → access/refresh both rejected. 16/16 steps pass.registry.modelcontextprotocol.io as io.github.apilocker/apilocker. Any AI tool that auto-discovers MCP servers via the canonical registry can now find API Locker.mcpName field added to package.json — required by the MCP Registry's package-ownership verification flow. No runtime impact; pure metadata.server.json describes the stdio bridge for the MCP Registry listing: npm package identifier, transport, and the apilocker mcp positional argument.apilocker rotate <alias> --field <name> — rotate just the client_secret or refresh_token of an OAuth credential without touching client_id, authorize URL, token URL, scopes, or redirect URI. The server decrypts the existing blob, merges the new field(s), re-encrypts, and bumps rotated_at. Scoped tokens that reference the credential keep working unchanged./rotate:client_secret vs /rotate:client_secret,refresh_token).POST /v1/keys/:keyId/rotate extended: body for api_key still { key }, body for oauth2 now { client_secret?, refresh_token? }. Response includes rotated_fields so the CLI and dashboard can display what changed.src/vault-client.ts helper decrypts directly from KV + D1 with a 60-second in-memory cache — no HTTP loopback, no bootstrap token. The only Worker-level config is APILOCKER_SERVICE_USER_ID.wrangler secret put calls synchronized across two providers, which bit us three times on the same literal-vs-placeholder paste mistake. That entire failure mode is gone.GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GOOGLE_CLIENT_ID, and GOOGLE_CLIENT_SECRET are no longer needed as Worker secrets and have been deleted from production.api/, cli/, site/). The CLI's package.json repository.url points at the monorepo with directory: "cli", and the npm package page shows the real repo.client_id, client_secret, refresh_token, scopes, and endpoints as a single named credential. 14 pre-configured templates: Google, GitHub App, Slack, Microsoft, Notion, Spotify, Twitter/X, LinkedIn, Discord, Zoom, Dropbox, Salesforce, HubSpot, plus Custom OAuth.apilocker run injects OAuth credentials as multiple env vars. A credential named google-oauth contributes GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET, GOOGLE_OAUTH_REFRESH_TOKEN, etc. — one env var per non-empty field.apilocker rename <old> <new> — lossless rename. Old names are remembered forever via a previous_names fallback, so existing .apilockerrc files and app code that reference the old name keep working. The CLI prints a gentle nudge whenever a legacy alias is used.apilocker pause <alias> / resume — freeze proxy access without deleting. Reveal / run / get / env still work on paused credentials, so you can still rotate or inspect during incident response.xi-api-key header correctly supported end-to-end through the proxy.return_to parameters (same-origin validation).base_url is optional. Credentials stored without one work with apilocker run/get/env but are not proxyable — a clear error message explains how to enable proxy access if you want it.apilocker doctor — security health report. Flags stale rotations, unused keys, expiring tokens, stale devices, and insecure local config permissions. Every warning comes with a concrete remedy command.apilocker activity --follow — stream new proxy calls live, like tail -f. Poll every 2 seconds, deduped by ID. Perfect for debugging during development.apilocker update — check the npm registry for a newer version and show the upgrade command.apilocker import .env — migrate an existing project in 30 seconds. Reads a .env file, auto-detects providers from variable name prefixes, stores each secret, and offers to replace the .env with a committable .apilockerrc.apilocker rotate <alias> — replace a credential's value in place with a masked-input prompt. Scoped tokens that reference the key continue working without reissue.apilocker list: filter by tag, provider, or substring search. Also added --tag as a repeatable flag on apilocker store.apilocker run -- <command> — the killer feature. Run any subprocess with vault secrets injected as environment variables. Raw secrets never touch disk, never hit shell history, never get committed to git. Ctrl+C, SIGTERM, and SIGHUP are forwarded to the child cleanly.apilocker get <alias> — print a single secret to stdout for scripting.apilocker env — emit shell-eval-able export statements. Supports sh / bash / zsh / fish / PowerShell formats.apilocker init + .apilockerrc support — pin a project to a specific set of credentials with a committable config file. After apilocker init, running apilocker run in that directory automatically picks up the right keys.apilocker register rewritten to use the RFC 8628 device authorization flow. No more pasted master tokens. Opens your browser for a one-click confirmation, same pattern as gh, vercel, wrangler.apilocker devices list / revoke — manage devices registered to your account directly from the CLI.register, store, list, delete, token, activity. 19 provider templates for major API services. Published to npm as apilocker.