Skip to main content
Alchemy supports multiple cloud providers and third-party services through its extensible resource system. Each provider offers a set of resources that can be deployed, updated, and managed through TypeScript code.

Available providers

Cloudflare

Deploy Workers, Durable Objects, R2 buckets, and more

AWS

Lambda functions, DynamoDB tables, S3 buckets, and IAM

Neon

Serverless Postgres databases with branching

PlanetScale

MySQL-compatible serverless database platform

Vercel

Deploy projects and manage domains

GitHub

Repository webhooks and environments

Stripe

Payment processing and webhook management

Upstash

Redis and Kafka serverless databases

Sentry

Error tracking and performance monitoring

Provider structure

Each provider in Alchemy follows a consistent pattern:
import { ResourceName } from "alchemy/provider";

const resource = await ResourceName("logical-id", {
  // Configuration properties
});

Credentials

Most providers require credentials to authenticate API calls. Alchemy uses environment variables and secrets for secure credential management:
import alchemy from "alchemy";

const app = await alchemy("my-app", {
  password: process.env.ALCHEMY_PASSWORD,
});

// Cloudflare credentials
process.env.CLOUDFLARE_API_TOKEN;
process.env.CLOUDFLARE_ACCOUNT_ID;

// AWS credentials
process.env.AWS_ACCESS_KEY_ID;
process.env.AWS_SECRET_ACCESS_KEY;
process.env.AWS_REGION;

// Database credentials stored as secrets
const db = await Database("db", {
  password: alchemy.secret.env.DB_PASSWORD,
});

Multi-provider applications

Alchemy makes it easy to use multiple providers in a single application:
import alchemy from "alchemy";
import { Worker, R2Bucket } from "alchemy/cloudflare";
import { Function, Table } from "alchemy/aws";
import { Database } from "alchemy/neon";

const app = await alchemy("multi-cloud-app");

// Cloudflare edge compute
const storage = await R2Bucket("storage", { name: "app-storage" });

// AWS serverless backend
const table = await Table("users", {
  partitionKey: { name: "id", type: "S" },
});

const api = await Function("api", {
  handler: "index.handler",
  code: "./src/api",
  environment: {
    TABLE_NAME: table.tableName,
  },
});

// Neon serverless Postgres
const database = await Database("db", {
  name: "app-db",
});

const worker = await Worker("worker", {
  entrypoint: "./src/worker.ts",
  bindings: {
    STORAGE: storage,
    API_URL: api.functionUrl,
    DATABASE_URL: database.connectionString,
  },
});

await app.finalize();

Creating custom providers

You can extend Alchemy with your own custom providers. See the Custom Providers guide for details on implementing your own resources.

Next steps

Cloudflare provider

Explore Cloudflare Workers and edge infrastructure

AWS provider

Deploy Lambda functions and serverless AWS resources

Custom providers

Learn how to create your own resource providers

API reference

Browse the complete API documentation

Build docs developers (and LLMs) love