Skip to content

Instantly share code, notes, and snippets.

@mootari
Last active July 27, 2025 18:21
Show Gist options
  • Save mootari/6f43558f0e2511b0bcd04a7ba2a243d3 to your computer and use it in GitHub Desktop.
Save mootari/6f43558f0e2511b0bcd04a7ba2a243d3 to your computer and use it in GitHub Desktop.
Getting the SQLite DB path for a local R2 bucket
#!/usr/bin/env yarn -s tsx
import { createHash, createHmac } from "node:crypto";
import { parseArgs } from "node:util";
const uniqueKey = "miniflare-R2BucketObject";
// Adapted from https://github.com/cloudflare/workers-sdk/blob/2df1d066c/packages/miniflare/src/plugins/shared/index.ts#L236-L249
function durableObjectNamespaceIdFromName(name: string) {
const key = createHash("sha256").update(uniqueKey).digest();
const nameHmac = createHmac("sha256", key).update(name).digest().subarray(0, 16);
const hmac = createHmac("sha256", key).update(nameHmac).digest().subarray(0, 16);
return Buffer.concat([nameHmac, hmac]).toString("hex");
}
function dbFromName(name: string) {
return `.wrangler/state/v3/r2/${uniqueKey}/${durableObjectNamespaceIdFromName(name)}.sqlite`;
}
// Returns the path to a local R2 bucket's SQLite DB.
const {positionals: [name]} = parseArgs({allowPositionals: true});
if(!name) {
console.error(`Usage: bucket-path BUCKET_NAME`);
process.exitCode = 1;
}
else process.stdout.write(dbFromName(name));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment