Most API key tools are built for enterprises. This one is built for developers who just want to get stuff done.

Track your API keys. Know who created them. Renew them for security. That's it.// Why pay for 47 features when you only need 3? This is the tool built for the problem.

Use Keystrok and claim back your power over your API keys.

You own your data
MIT Licensed
Self-hostable
story.md

███████╗████████╗ ██████╗ ██████╗ ██╗   ██╗
██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗╚██╗ ██╔╝
███████╗   ██║   ██║   ██║██████╔╝ ╚████╔╝
╚════██║   ██║   ██║   ██║██╔══██╗  ╚██╔╝
███████║   ██║   ╚██████╔╝██║  ██║   ██║
╚══════╝   ╚═╝    ╚═════╝ ╚═╝  ╚═╝   ╚═╝
  

// The Real Story
#ce9178">"color: #569cd6">const problem = {
  cto_friends: "complaining daily",
  existing_tools: "Swiss Army knife bloat",
  cost: "way too much"
}
// So I built the tool they actually wanted
features.js

███████╗███████╗ █████╗ ████████╗██╗   ██╗██████╗ ███████╗███████╗
██╔════╝██╔════╝██╔══██╗╚══██╔══╝██║   ██║██╔══██╗██╔════╝██╔════╝
█████╗  █████╗  ███████║   ██║   ██║   ██║██████╔╝█████╗  ███████╗
██╔══╝  ██╔══╝  ██╔══██║   ██║   ██║   ██║██╔══██╗██╔══╝  ╚════██║
██║     ███████╗██║  ██║   ██║   ╚██████╔╝██║  ██║███████╗███████║
╚═╝     ╚══════╝╚═╝  ╚═╝   ╚═╝    ╚═════╝ ╚═╝  ╚═╝╚══════╝╚══════╝
  

// features.js - Keystrok Core Features
#ce9178">"color: #569cd6">const keystrok = {
  keyInventory: {
    trackCreation: true,
    trackOwner: true,
  },
  rotationWorkflows: {
    automated: true,
  },
  security: {
    noLongTermCredentialStorage: true,
  },
};
security.py

███████╗███████╗ ██████╗██╗   ██╗██████╗ ██╗████████╗██╗   ██╗
██╔════╝██╔════╝██╔════╝██║   ██║██╔══██╗██║╚══██╔══╝╚██╗ ██╔╝
███████╗█████╗  ██║     ██║   ██║██████╔╝██║   ██║    ╚████╔╝
╚════██║██╔══╝  ██║     ██║   ██║██╔══██╗██║   ██║     ╚██╔╝
███████║███████╗╚██████╗╚██████╔╝██║  ██║██║   ██║      ██║
╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝   ╚═╝      ╚═╝
  

# security.py - Credential Handling Policy
#ce9178">"color: #569cd6">def handle_credentials(credentials):
    """
    Processes credentials for temporary use.
    Credentials are never stored long-term.
    """
    #569cd6">try:
        connect_to_platform(credentials)
        scan_for_keys(credentials)
    #569cd6">finally:
        discard_credentials(credentials)
demo.tsx

██████╗ ███████╗███╗   ███╗ ██████╗
██╔══██╗██╔════╝████╗ ████║██╔═══██╗
██║  ██║█████╗  ██╔████╔██║██║   ██║
██║  ██║██╔══╝  ██║╚██╔╝██║██║   ██║
██████╔╝███████╗██║ ╚═╝ ██║╚██████╔╝
╚═════╝ ╚══════╝╚═╝     ╚═╝ ╚═════╝
  

// demo.tsx - Sandbox Mode Initialization
#ce9178">"color: #569cd6">import { initializeSandboxData } from "@/lib/db";

#569cd6">async function startSandboxDemo() {
  console.log("Initializing sandbox data...");
  #569cd6">await initializeSandboxData();
  console.log("Sandbox loaded!");
}
waitlist.sh

██╗    ██╗ █████╗ ██╗████████╗██╗     ██╗███████╗████████╗
██║    ██║██╔══██╗██║╚══██╔══╝██║     ██║██╔════╝╚══██╔══╝
██║ █╗ ██║███████║██║   ██║   ██║     ██║███████╗   ██║
██║███╗██║██╔══██║██║   ██║   ██║     ██║╚════██║   ██║
╚███╔███╔╝██║  ██║██║   ██║   ███████╗██║███████║   ██║
╚══╝╚══╝ ╚═╝  ╚═╝╚═╝   ╚═╝   ╚══════╝╚═╝╚══════╝   ╚═╝
  

$ ./keystrok --join-waitlist

Enter your details to get early access: