Questions before you wire it in.
Short, honest answers — including where the answer is "no". If yours isn't here, get in touch or open an issue on GitHub.
What does Perishable actually do?
It is a self-hosted Node proxy plus a browser SDK that lets client-side apps call OpenAI-compatible APIs without exposing the upstream key. The proxy holds the real key; the client gets a short-lived, fingerprint-bound JWT. Published on npm as perishable, MIT licensed.
Is it a hosted service?
No. There is no Perishable cloud. You run the process — via npx perishable-proxy or by embedding new server.PerishableServer({…}) in your own Node service. Your traffic never leaves your infrastructure.
Which providers work with it?
Anything that speaks the OpenAI API shape: OpenAI itself, Anthropic (via an OpenAI-compatible base URL), OpenRouter, and a local Ollama. Point OPENAI_BASE_URL at the endpoint and the same session machinery applies.
Is it bot-proof?
No — and it does not claim to be. Fingerprinting plus entropy collection is bot-resistance, not bot-proofing. A determined attacker driving a real browser can still obtain a session; the design raises the cost of casual, high-volume abuse, which is the common failure mode.
Does it replace my authentication?
No. A fingerprint-bound JWT is not a user login. If you need "this is logged-in user 42" or authorization on sensitive actions, you still need your own auth system alongside the proxy.
How do sessions expire?
Sessions are short-lived JWTs bound to a client fingerprint, with a TTL you control. The browser SDK refreshes them before expiry via sessionOptions.expiryBuffer, so a leaked token stops working within minutes rather than lingering.
How does rate limiting work?
The proxy applies per-fingerprint rate limiting — configurable points-per-window with an optional block duration. It is enough to stop a casual abuser from running up your bill; it is not a substitute for provider-side quotas.
Is it open source?
Yes, MIT licensed, maintained by Skelf-Research. Source is on GitHub, the package is on npm as perishable, and the reference docs live at docs.skelfresearch.com/perishable/.