Skip to content

Zero Transfer SDK

One unified, type-safe API for moving bytes between any two systems - SFTP, FTPS, S3, Azure Blob, GCS, WebDAV, HTTP, Dropbox, Google Drive, OneDrive, and more.

One profile, every provider

A single ConnectionProfile shape works for SFTP, FTPS, S3, Azure Blob, GCS, WebDAV, HTTP, and every major cloud drive. Switch backends without rewriting code.

Type-safe & tree-shakeable

First-class TypeScript: every option, callback, and error is typed. Scoped packages (@zero-transfer/sftp, @zero-transfer/s3, …) let you pull in only the providers you actually use.

Production-grade transfers

Streaming, resume, multipart, server-side copy, checksum verification, and structured progress events on the providers that support them - discoverable through the capability matrix.

MFT-grade orchestration

Compose transfers into routes, schedules, approvals, and audit logs. Plan syncs without moving bytes; apply atomic deploys with rollback.

Secrets stay secret

Every credential field accepts a SecretSource (env, file, callback). Profiles are auto-redacted before any log line is emitted.

Built for Node 20+

Modern engine target, native fetch, AbortSignal everywhere, ESM-first with CJS interop, and tested against real Dockerized servers.

Terminal window
npm install @zero-transfer/sdk

Or pull in just the provider you need:

Terminal window
npm install @zero-transfer/sftp
npm install @zero-transfer/s3
npm install @zero-transfer/ftps
import { createTransferClient, uploadFile } from "@zero-transfer/sdk";
const client = createTransferClient();
const session = await client.connect({
host: "sftp.example.com",
provider: "sftp",
username: "deploy",
ssh: {
privateKey: { path: "./keys/id_ed25519" },
pinnedHostKeySha256: "SHA256:abc123…",
},
});
await uploadFile({
client,
localPath: "./dist/app.tar.gz",
destination: {
path: "/releases/2026.04.28/app.tar.gz",
profile: session.profile,
},
onProgress: (e) => console.log(`${e.bytesTransferred}/${e.totalBytes ?? "?"}`),
});
await session.disconnect();

Keep going → Getting started.