Alchemy: زیرساخت ابری با تایپاسکریپت
خلاصهٔ کاملتر
Alchemy یه فریمورک Infrastructure as Code هست که با تایپاسکریپت نوشته شده و هدفش اینه که بتونی کل زیرساخت ابریات رو مثل یه برنامهی معمولی TypeScript تعریف و مدیریت کنی. به جای فایلهای YAML یا DSL اختصاصی، یه فایل alchemy.run.ts داری که توش منابع ابریت رو تعریف میکنی و ابزار بقیهاش رو مدیریت میکنه.
فلسفهی پشت Alchemy اینه که «کل کلاد تو، یه برنامهی TypeScript». این یعنی IDE هوشمند داری، تایپچکینگ داری، و دیگه لازم نیست با فرمتهای عجیب کُنار بیای. این ابزار روی کتابخونهی Effect ساخته شده و از Effect.gen برای تعریف منابع استفاده میکنه.
یه Stack نمونه توی Alchemy اینطوری به نظر میرسه:
export default Alchemy.Stack(
"MyApp",
{ providers: Cloudflare.providers() },
Effect.gen(function* () {
const Photos = yield* Cloudflare.R2Bucket("Photos");
const Sessions = yield* Cloudflare.KVNamespace("Sessions");
const api = yield* Cloudflare.Worker("Api", {
main: "./src/worker.ts",
bindings: { Photos, Sessions },
});
return { url: api.url };
}),
);همونطور که میبینی، توی یه فایل هم R2 Bucket میسازی، هم KV Namespace، هم Worker رو bind میکنی و URL نهایی رو برمیگردونی. همهچیز تایپچک میشه و IDE کاملاً ازش آگاهه.
سه دستور اصلی Alchemy اینان: plan که یه پیشنمایش از تغییراتی که قراره اعمال بشه نشون میده، deploy که تغییرات رو اعمال میکنه، و destroy که همهچیز رو پاک میکنه. این سیکل ساده باعث میشه بتونی سریع آزمایش کنی و مطمئن باشی که چیزی ناخواسته باقی نمیمونه.
یکی از ویژگیهای جذاب Alchemy پشتیبانی از ephemeral test stacks هست؛ یعنی میتونی برای هر PR یه محیط مجزا بسازی، تست بزنی و بعد پاکش کنی. این قابلیت بهخصوص توی CI/CD خیلی به درد میخوره.
Alchemy از قابلیتهای پیشرفتهی Cloudflare هم پشتیبانی میکنه: Durable Objects با state per-key و RPC، WebSocketهایی که hibernation رو تحمل میکنن، Vite SPA با فریمورکهایی مثل TanStack یا Vue، Workflows برای orchestration چندمرحلهای، و Containers برای پروسههای طولانیمدت.
برای احراز هویت هم کافیه alchemy login رو بزنی یا alchemy deploy رو اجرا کنی — خودش تعاملی ازت میپرسه OAuth میخوای یا API token و اطلاعات رو توی ~/.alchemy/profiles.json ذخیره میکنه. نیازی نیست دستی متغیر محیطی set کنی.
نسخهی فعلی v2.0.0-beta.28 هست و نسبت به نسخهی قبلی (که async/await بود) تغییرات زیادی داشته. اگه از v1 مهاجرت میکنی، راهنمای مخصوصی براش وجود داره.
نکات کلیدی:
- زیرساخت ابری رو مستقیم با TypeScript و Effect تعریف میکنی
- سه دستور plan / deploy / destroy برای مدیریت کامل چرخهی عمر منابع
- پشتیبانی از Cloudflare R2، KV، Workers، Durable Objects، Workflows و Containers
- تایپچکینگ پالیسیهای IAM و observability داخلی
- ephemeral stacks برای تست per-PR در CI/CD
- احراز هویت تعاملی بدون نیاز به set کردن متغیر محیطی
- نسخهی فعلی beta است (v2.0.0-beta.28)




