One API to deploy to Vercel, Netlify, Cloudflare Pages, AWS Amplify, and Firebase Hosting.
import { createDeployer } from '@deployinfra/sdk'
import { vercel } from '@deployinfra/vercel'
const deployer = createDeployer({
provider: vercel({ token: process.env.VERCEL_TOKEN! }),
})
const result = await deployer.deploy('./dist', { name: 'my-app' })
// → { deploymentId, url, status: 'ready', … }pnpm add @deployinfra/sdk @deployinfra/vercel
# or: @deployinfra/netlify | @deployinfra/cloudflare
# or: @deployinfra/aws | @deployinfra/firebaseRequires Node.js ≥ 22.12.
| Package | Auth | Notes |
|---|---|---|
@deployinfra/vercel |
Access token | Optional teamId. GitHub deploy needs the Vercel GitHub app (else archive fallback). |
@deployinfra/netlify |
Personal access token | Pass siteId or name on deploy(). Zip passthrough supported. |
@deployinfra/cloudflare |
API token (Pages Write) + account id | Wrangler-compatible direct upload. |
@deployinfra/aws |
AWS credential chain / explicit keys | Amplify Hosting manual zip deploy. Pass appId or name on deploy(). |
@deployinfra/firebase |
ADC or service account | Firebase Hosting REST (v1beta1). Pass projectId on deploy(). |
| Source | Vercel | Netlify | Cloudflare Pages | AWS Amplify | Firebase Hosting |
|---|---|---|---|---|---|
| dir | native (sha1 upload) | native (digest deploy) | native (direct upload) | zip (fflate) | gzip + sha256 |
| zip | core unzips | zip passthrough | core unzips | zip passthrough | core unzips |
| github | native gitSource (needs GH app) or archive |
archive | archive | archive | archive |
import { createDeployer } from '@deployinfra/sdk'
import { netlify } from '@deployinfra/netlify'
const deployer = createDeployer({
provider: netlify({ token: process.env.NETLIFY_TOKEN! }),
})
const result = await deployer.deploy('./dist', {
name: 'my-site',
waitUntil: 'ready',
onStatus: (r) => console.log(r.status),
})
console.log(result.url)Sources can be a local directory, zip path/URL, GitHub repo URL, or an explicit descriptor ({ kind: 'files', files: { … } }).
Project and site names are passed per deployment as deploy(source, { name });
when omitted, createDeployer() generates a dashed slug.
@deployinfra/sdk—createDeployer, types, errors@deployinfra/sdk/internal— provider-author toolkit- Provider packages above
- Provider authoring — implement a new provider
- Contributing — setup, tests, changesets
Apache-2.0