
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
@async/json
Advanced tools
Use a JSON file or folder like a small database, with sidecar state, queries, history, and Redis-backed scale paths.
Use a JSON file or a folder of JSON files like a small database.
pnpm add @async/json
The package is ESM-only and supports Node.js 24 and newer.
import json from '@async/json';
const users = await json('./users.json');
await users.create({ name: 'Ada Lovelace', role: 'admin' });
await users.find({ where: { role: 'admin' } });
const db = await json('./db');
await db.collection('users').find({ where: { role: 'admin' } });
await db.document('settings').get();
By default the visible JSON file is seed data and writes go to sidecar state
under .async-json/state. Use writes: 'source' only when the JSON file itself
should be rewritten.
@async/json owns standalone JSON database semantics: collection/document
runtime APIs, scalar and compound identity, append-only collections, encoded
payload validation, sidecar state, local indexes, and RedisJSON storage. Use
@async/db when you also need readers, schemas, generated types, REST/GraphQL,
operations, lifecycle, and store graduation.
Single-field resources keep using id by default:
const users = await json('./users.json');
await users.get('u_1');
Compound identity uses object keys instead of delimiter-encoded ids:
const memberships = await json('./memberships.json', {
identity: { fields: ['orgId', 'userId'] },
indexes: ['role'],
});
await memberships.get({ orgId: 'o_1', userId: 'u_1' });
await memberships.patch({ orgId: 'o_1', userId: 'u_1' }, { role: 'admin' });
Append-only collections allow append() and block create/update/delete/replace
APIs:
const events = await json('./events.json', {
writePolicy: 'append-only',
});
await events.append({ id: 'e_1', type: 'created' });
Bytes fields validate JSON-safe encoded strings while keeping payloads opaque:
const updates = await json('./updates.json', {
fields: {
id: { type: 'string', required: true },
update: { type: 'bytes', encoding: 'base64url', required: true },
},
});
await updates.append({ id: 'u_1', update: 'YWJjZA' });
import json from '@async/json';
import { redisJson } from '@async/json/redis';
const db = await json('./db', {
store: redisJson({ client, prefix: 'app:' }),
indexes: {
users: [{ fields: ['email'] }],
},
});
Redis mode stores collection records as per-record Redis JSON keys. Declared indexes can be mapped to Redis Search; indexes are not created implicitly from observed queries.
pnpm install
pnpm run build
pnpm run test
pnpm run release:check
release:check builds the package, runs tests, verifies the API surface
ledger, and runs a package dry-run.
Generated files:
dist/ is build output and is not committed..async/pages/ is generated GitHub Pages output and is not committed..async/, .async-json/, node_modules/, and *.tgz are local runtime,
cache, dependency, and package output..github/workflows/async-pipeline.yml is generated from pipeline.ts.The project site is published through GitHub Pages at https://async.github.io/json/.
@async/json publishes as a public npm package. Public API changes should
update api-contract.json, regenerate API_SURFACE.md, update this README,
and add tests in the same change.
FAQs
Use a JSON file or folder like a small database, with sidecar state, queries, history, and Redis-backed scale paths.
The npm package @async/json receives a total of 4 weekly downloads. As such, @async/json popularity was classified as not popular.
We found that @async/json demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.