DeployKit

The Effect-native SDK for deploying your customers' sites. Reuse cached content and keep control of activation and recovery.

Get started
bun add @deploykit/node@alpha
publish.ts
const deploykit = yield* Deploykit.Deploykit
const artifact = yield* Artifact.fromDirectory("./dist")
const live = yield* deploykit.deployAndWait(appId, artifact)
return live.url
  1. Files240 files
  2. Hash240 / 240
  3. Negotiate234 skipped
  4. Upload6 sent
  5. Liveready
Effect-native, with a Node APITyped errors, layers and interruption in Effect. The same API as Promises for plain Node.
Uploads the differenceThe host says what it already has. One changed file uploads one file.
Recover uncertain outcomesLost create responses stay explicit. Reconcile them on supported providers.
Live when you sayOn Vercel, stage a build, check it, then activate. Provider capabilities stay explicit.
Errors with a next stepEvery failure says whether to retry, reconcile, wait or fix the input.
Bounded memoryStream from disk or object storage inside one shared budget.

Examples

import { Effect, Layer } from "effect"
import { NodeFileSystem } from "@effect/platform-node"
import { Artifact, Deploykit } from "@deploykit/core"
import * as Vercel from "@deploykit/vercel"

const publish = Effect.gen(function* () {
  const deploykit = yield* Deploykit.Deploykit
  const artifact = yield* Artifact.fromDirectory("./dist")
  return yield* deploykit.deployAndWait(appId, artifact)
})

const DeploykitLive = Vercel.layerConfig().pipe(Layer.provideMerge(NodeFileSystem.layer))
publish.pipe(Effect.provide(DeploykitLive))