This content originally appeared on DEV Community and was authored by subhadip pahari
Caching is one of those invisible building blocks that keeps applications fast, reliable, and efficient. If youβve ever used node-cache, you know how handy it can be β but also how limited.
Thatβs why I built flexi-cache-node : a zero-dependency, TypeScript-ready caching library for Node.js with modern features baked in.
Why I built it
I needed a cache that:
could expire keys (TTL) reliably,
had LRU eviction so memory wouldnβt blow up,
supported tags so I could bulk-delete groups of keys,
could persist data to disk securely,
worked seamlessly in both JavaScript and TypeScript,
and most importantly⦠had zero dependencies.
Instead of bolting these features on top of node-cache, I decided to start fresh.
What makes flexi-cache-node different
— TTL (Time-To-Live) per key or global
— LRU eviction to keep size under control
— Tag-based grouping for smarter key management
— Disk persistence with crash-safe writes
— AES-256-GCM encryption for at-rest data security
— Stats & events β track hits, misses, expirations
— Works with JavaScript & TypeScript out of the box
— Zero dependencies β smaller, safer, faster
Think of it as the caching library I wish existed when I started out.
Installation
npm install flexi-cache-node
# or
yarn add flexi-cache-node
Please check out the examples for practical use cases in various scenarios.
example 1: Basic in-memory cache
const NodeCache = require("flexi-cache-node");
const cache = new NodeCache({ stdTTL: 5 });
cache.set("foo", "bar");
console.log(cache.get("foo")); // "bar"
example 2: Tag-based cache
const { TagCache } = require("flexi-cache-node");
const tc = new TagCache();
tc.setWithTags("user:1", { name: "Alice" }, ["active", "premium"]);
tc.setWithTags("user:2", { name: "Bob" }, ["active"]);
console.log(tc.getValuesByTag("active"));
// β [ { name: "Alice" }, { name: "Bob" } ]
example 3: LRU eviction
const { LRUCache } = require("flexi-cache-node");
const lru = new LRUCache({ size: 2 });
lru.set("a", 1);
lru.set("b", 2);
lru.get("a");
lru.set("c", 3); // evicts "b"
console.log(lru.getKeys()); // [ "a", "c" ]
example 4: Persistence with encryption
const NodeCache = require("flexi-cache-node");
const cache = new NodeCache({
encryption: true,
secretKey: "superSecretKey123",
persistPathFolder: {
type: "disk",
diskConfig: { folderLocation: "./cache-data" }
}
});
cache.set("token", { id: 123 });
await cache.flush(); // writes encrypted snapshot
Coming soon
Browser-based cache (using LocalStorage & SessionStorage)
Cloud persistence (S3, GCP, Azure)
Compression for large values
Final thoughts
Please give flexi-cache-node a try and let me know any feedback.
Iβm open to modifying or improving it based on your suggestions β letβs make caching in Node.js a little less boring and a lot more powerful together .
This content originally appeared on DEV Community and was authored by subhadip pahari