https://github.com/alchemy-run/alchemy
Infrastructure as TypeScript
https://github.com/alchemy-run/alchemy
Last synced: about 2 months ago
JSON representation
Infrastructure as TypeScript
- Host: GitHub
- URL: https://github.com/alchemy-run/alchemy
- Owner: alchemy-run
- License: apache-2.0
- Created: 2025-01-17T02:06:40.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-11-06T19:43:25.000Z (2 months ago)
- Last Synced: 2025-11-06T21:22:10.109Z (2 months ago)
- Language: TypeScript
- Homepage: https://alchemy.run
- Size: 857 MB
- Stars: 1,506
- Watchers: 10
- Forks: 88
- Open Issues: 130
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
- awesome - alchemy-run/alchemy - Infrastructure as TypeScript (TypeScript)
README
# Alchemy
[](https://deepwiki.com/alchemy-run/alchemy)
Alchemy is an embeddable, TypeScript-native Infrastructure-as-Code (IaC) library for modeling Resources that are Created, Updated and Deleted automatically.
Unlike similar tools like Pulumi, Terraform, and CloudFormation, Alchemy is implemented in pure ESM-native TypeScript code.
Resources are simple memoized async functions that can run in any JavaScript runtime, including the browser, serverless functions and durable workflows.
```ts
import alchemy from "alchemy";
// initialize the app (with default state $USER)
const app = await alchemy("cloudflare-worker");
// create a Cloudflare Worker
export const worker = await Worker("worker", {
name: "my-worker",
entrypoint: "./src/index.ts",
bindings: {
COUNTER: counter,
STORAGE: storage,
AUTH_STORE: authStore,
GITHUB_CLIENT_ID: alchemy.secret(process.env.GITHUB_CLIENT_ID),
GITHUB_CLIENT_SECRET: alchemy.secret(process.env.GITHUB_CLIENT_SECRET),
},
});
// finalize the alchemy app (triggering deletion of orphaned resources)
await app.finalize();
```
# Features
- **JS-native** - no second language, toolchains, processes, services, etc. to lug around.
- **Async-native** - resources are just async functions - no complex abstraction to learn.
- **ESM-native** - built exclusively on ESM, with a slight preference for modern JS runtimes like Bun.
- **Embeddable** - runs in any JavaScript/TypeScript environment, including the browser!
- **Extensible** - implement your own resources with a simple function.
- **AI-first** - alchemy actively encourages you to use LLMs to create/copy/fork/modify resources to fit your needs. No more waiting around for a provider to be implemented, just do it yourself in a few minutes.
- **No service** - state files are stored locally in your project and can be easily inspected, modified, checked into your repo, etc.
- **No strong opinions** - structure your codebase however you want, store state anywhere - we don't care!
# Examples
- CloudFlare Worker with Queue, R2 Bucket, Durable Objects, Workflows and RPC: [examples/cloudflare-worker/](./examples/cloudflare-worker/alchemy.run.ts)
- CloudFlare Worker Bootstrap with Queue and R2 End-to-End Testing: [examples/cloudflare-worker-bootstrap/](./examples/cloudflare-worker-bootstrap/index.ts)
- CloudFlare ViteJS Website + API Backend with Durable Objects: [examples/cloudflare-vite/](./examples/cloudflare-vite/alchemy.run.ts)
- CloudFlare TanStack Start Application Deployment: [examples/cloudflare-tanstack-start/](./examples/cloudflare-tanstack-start/alchemy.run.ts)
- CloudFlare RedwoodJS Application with D1 Database: [examples/cloudflare-redwood/](./examples/cloudflare-redwood/alchemy.run.ts)
- CloudFlare React Router Application Deployment: [examples/cloudflare-react-router/](./examples/cloudflare-react-router/alchemy.run.ts)
- CloudFlare Nuxt 3 Application with Pipeline and R2 Bucket: [examples/cloudflare-nuxt-pipeline/](./examples/cloudflare-nuxt-pipeline/alchemy.run.ts)
- CloudFlare SvelteKit Application with KV and R2 Storage: [examples/cloudflare-sveltekit/](./examples/cloudflare-sveltekit/alchemy.run.ts)
- Deploy an AWS Lambda Function with a DynamoDB Table and IAM Role: [examples/aws-app/](./examples/aws-app/alchemy.run.ts)
# Getting Started
See the [Getting Started Guide](https://alchemy.run/getting-started).