prisma-accelerate-local
Version:
[](https://www.npmjs.com/package/prisma-accelerate-local) [](https://www.npmjs.com/package/prisma-accelerate-local) [ • 7.49 kB
Markdown
# prisma-accelerate-local
[](https://www.npmjs.com/package/prisma-accelerate-local)
[](https://www.npmjs.com/package/prisma-accelerate-local)
[](https://www.npmjs.com/package/prisma-accelerate-local)
[](https://deepwiki.com/node-libraries/prisma-accelerate-local)
Prisma Accelerate functionality can be self-hosted locally.
## Samples
- Node.js (local)
https://github.com/SoraKumo001/prisma-accelerate-local-test
- Cloudflare Workers(Postgres) (local)
https://github.com/SoraKumo001/cloudflare-workers-prisma
- Cloudflare Workers(Postgres) (server)
https://github.com/SoraKumo001/prisma-accelerate-workers
- Cloudflare Workers(D1) (server)
https://github.com/SoraKumo001/prisma-accelerate-workers-d1
- Deno(Postgres) (server)
https://github.com/SoraKumo001/prisma-accelerate-deno
## usage
### CLI Options
| Category | Option | Description |
| ------------- | --------------------------- | --------------------------------------------- |
| **USAGE** | [option] _\<url>_ | |
| **ARGUMENTS** | _\<url>_ | Datasource url |
| **OPTIONS** | -t, --http | Accepted at http |
| | -p, --port \<port> | Port to listen on (default:4000) |
| | -h, --host \<host> | Host to listen on (default:localhost) |
| | -c, --cert \<path> | Path to ssl cert file |
| | -k, --key \<path> | Path to ssl key file |
| | -w, --wasm | Use wasm as the run-time engine(early-access) |
| | -s, --secret \<secret> | Secret used with API key |
| | -m, --make | make api key |
| | -b, --bodyLimit \<size(MB)> | body limit size(default: 16MB) |
### CLI
#### Start without setting an API key for local use.
```sh
# Startup by specifying the Datasource url
npx prisma-accelerate-local postgresql://postgres:password@localhost:5432/postgres
# Startup by specifying Port
npx prisma-accelerate-local postgresql://postgres:password@localhost:5432/postgres -p 8000
```
#### When setting the API key
- Create an API key
```sh
npx prisma-accelerate-local -s secret -m postgresql://postgres:password@localhost:5432/postgres
# Output
eyJhbGciOiJIUzI1NiJ9.eyJkYXRhc291cmNlVXJsIjoiYSIsImlhdCI6MTcwMzY2NDg1NywiaXNzIjoicHJpc21hLWFjY2VsZXJhdGUifQ.4ruaA1RAT9cD3PACSEVIdUs3i2exKkMpNYGks3hyos4
```
- Activate with API key enabled.
If secret is used, the DB address is embedded in the API key
```sh
npx prisma-accelerate-local -s secret
```
### Client Environment Variables
#### With regard to the Node.js configuration.
Please set the environment variable NODE_TLS_REJECT_UNAUTHORIZED because you are using an unauthenticated certificate.
#### With regard to api_key
- If you are not using `secret`, the api_key can be any string.
- If you are using `secret`, put `--secret` and the api_key created with `--make` in api_key
#### Example
- .env
```env
DATABASE_URL="prisma://localhost:4000/?api_key=API_KEY"
NODE_TLS_REJECT_UNAUTHORIZED="0"
# To remove the NODE_TLS_REJECT_UNAUTHORIZED warning
NODE_NO_WARNINGS="1"
```
## library
If you call this package as a library, it will look like this.
```ts
import { createServer } from 'prisma-accelerate-local';
const server = createServer({
datasourceUrl: 'postgresql://postgres:password@localhost:5432/postgres',
})
.listen({ port: 4000 })
.then((url) => console.log(`🚀 Server ready at ${url} `));
```
## When self-hosting with Deno Deploy (PostgreSQL)
https://github.com/SoraKumo001/prisma-accelerate-deno
```ts
import { PrismaPg } from 'npm:@prisma/adapter-pg';
import { createHandler, importModule } from 'npm:prisma-accelerate-local/deno';
import runtime from 'npm:@prisma/client/runtime/query_engine_bg.postgresql.js';
const engine = '@prisma/client/runtime/query_engine_bg.postgresql.wasm';
Deno.serve(
createHandler({
runtime: () => runtime,
secret: Deno.env.get('SECRET')!,
queryEngineWasmModule: importModule(engine, import.meta.url),
adapter: (datasourceUrl: string) => {
const url = new URL(datasourceUrl);
const schema = url.searchParams.get('schema') ?? undefined;
return new PrismaPg(
{
connectionString: url.toString() ?? undefined,
},
{
schema,
}
);
},
})
);
```
## When self-hosting with Cloudflare Workers (D1)
https://github.com/SoraKumo001/prisma-accelerate-workers-d1
```ts
import WASM from '@prisma/client/runtime/query_engine_bg.sqlite.wasm';
import { PrismaD1 } from '@prisma/adapter-d1';
import { createFetcher } from 'prisma-accelerate-local/workers';
export type Env = {
SECRET: string;
} & {
[key: string]: D1Database;
};
export default {
fetch: createFetcher({
queryEngineWasmModule: WASM,
secret: (env: Env) => env.SECRET,
runtime: () => require(`@prisma/client/runtime/query_engine_bg.sqlite.js`),
adapter: (datasourceUrl: string, env) => {
return new PrismaD1(env[datasourceUrl]);
},
singleInstance: false,
}),
};
```
## When self-hosting with Cloudflare Workers (PostgreSQL)
https://github.com/SoraKumo001/prisma-accelerate-workers
- package.json
Need `pg-compat` to patch `pg` to fix it.
```json
{
"name": "prisma-accelerate-workers",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"deploy": "wrangler deploy",
"dev": "wrangler dev",
"start": "wrangler dev"
},
"dependencies": {
"@prisma/adapter-pg": "^5.20.0",
"@prisma/client": "^5.20.0",
"pg": "^8.13.0",
"prisma-accelerate-local": "^1.1.10"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20241011.0",
"@types/pg": "^8.11.10",
"pg-compat": "^0.0.7",
"typescript": "^5.6.3",
"wrangler": "^3.80.4"
}
}
```
- wrangler.jsonc
```jsonc
{
"name": "prisma-accelerate-workers",
"main": "src/index.ts",
"minify": true,
"compatibility_date": "2025-04-09",
"compatibility_flags": ["nodejs_compat"],
"placement": {
"mode": "smart",
},
"observability": {
"enabled": true,
},
"vars": {
// "SECRET":"***"
},
}
```
- src/index.ts
```ts
import { Pool } from 'pg';
import { PrismaPg } from '@prisma/adapter-pg';
import { createFetcher } from 'prisma-accelerate-local/workers';
import WASM from '@prisma/client/runtime/query_engine_bg.postgresql.wasm';
export type Env = {
SECRET: string;
};
export default {
fetch: createFetcher({
runtime: () => require(`@prisma/client/runtime/query_engine_bg.postgresql.js`),
secret: (env: Env) => env.SECRET,
queryEngineWasmModule: WASM,
adapter: (datasourceUrl: string) => {
const url = new URL(datasourceUrl);
const schema = url.searchParams.get('schema') ?? undefined;
const pool = new Pool({
connectionString: url.toString() ?? undefined,
});
return new PrismaPg(pool, {
schema,
});
},
}),
};
```