TempBox is a lightweight, in-memory key-value store for Node.js with built-in TTL (time-to-live) support and proactive expiration. It's not a cache—it's a tiny ephemeral store that keeps your data just long enough, and then lets it go.
- 🧠 In-memory, in-process store
- ⏳ Per-key TTL support (milliseconds)
- ⏱️ Proactive expiration (via
setTimeout
, not lazy) - 🔔 Optional
onExpire
callback - 🚫 No LRU, no persistence, no external dependencies (except for
tinyqueue
)
npm install tempbox
import { TempBox } from "tempbox";
const store = new TempBox();
store.set("session:123", { userId: 1 }, 3000); // expires in 3 seconds
store.set("token:abc", "xyz"); // no expiration
console.log(store.get("session:123")); // { userId: 1 }
setTimeout(() => {
console.log(store.get("session:123")); // undefined (expired)
}, 3100);
You can provide a callback that runs when keys expire:
const store = new TempBox({
onExpire: (key, value) => {
console.log(`Expired: ${key} →`, value);
},
});
Creates a new instance of the store.
Option | Type | Default | Description |
---|---|---|---|
onExpire |
(key: string, value: any) => void |
undefined |
Callback invoked when a key expires |
Stores a key with an optional TTL in milliseconds. If no TTL is provided, the value will not expire automatically.
Returns the stored value if it exists and hasn't expired.
If the key has expired, it will be removed and undefined
is returned.
Returns true
if the key exists and hasn't expired, false
otherwise.
Manually removes a key.
Returns true
if the key existed and was deleted, false
otherwise.
Stops the internal expiration timers. Useful for graceful shutdown or during testing.
TempBox is not a cache. It's not optimized for size or eviction strategies (e.g. LRU). It's built for situations where you just want to store small pieces of data for a limited time, entirely in memory.
TempBox only uses tinyqueue internally for efficient scheduling of expirations. No other dependencies.
MIT 2025 - José F. Romaniello