What if PostgreSQL was enough?
Build full-stack apps with real-time sync, background jobs, cron schedules, durable workflows, and auth.
One framework. One database. One binary to deploy.
curl -fsSL https://tryforge.dev/install.sh | sh
forge new my-app --demo
cd my-app
forge dev
Write Rust. Get TypeScript.
#[forge::query]
pub async fn list_todos(ctx: &QueryContext) -> Result<Vec<Todo>> {
sqlx::query_as("SELECT * FROM todos")
.fetch_all(ctx.db())
.await
.map_err(Into::into)
}
// Auto-generated, type-safe
import { listTodos$ } from '$lib/forge';
const todos = listTodos$(); // Real-time subscription
Change the database, every connected client updates. No WebSocket code. No polling.
Background jobs without Redis
#[forge::job(
priority = "high",
retry(max_attempts = 5, backoff = "exponential")
)]
pub async fn send_email(ctx: &JobContext, args: EmailArgs) -> Result<()> {
ctx.progress(0, "Sending...")?;
// ...
ctx.progress(100, "Sent")?;
Ok(())
}
Priority queues. Exponential backoff. Progress tracking. Dead letter queue.
All in PostgreSQL with FOR UPDATE SKIP LOCKED.
Webhooks with one macro
#[forge::webhook(
path = "/hooks/stripe",
signature = WebhookSignature::hmac_sha256("Stripe-Signature", "STRIPE_WEBHOOK_SECRET"),
idempotency = "header:Idempotency-Key",
)]
pub async fn stripe(ctx: &WebhookContext, payload: Value) -> Result<WebhookResult> {
ctx.dispatch_job("process_payment", payload.clone()).await?;
Ok(WebhookResult::Accepted)
}
Signature verification. Idempotency. Async dispatch. No middleware.
Workflows that survive restarts
#[forge::workflow]
pub async fn onboarding(ctx: &WorkflowContext, user_id: Uuid) -> Result<()> {
ctx.step("welcome_email", || send_welcome(user_id)).await?;
ctx.sleep(Duration::from_days(3)).await?; // Durable sleep
ctx.step("check_activation", || check_user_active(user_id))
.compensate(|_| send_reminder(user_id))
.await?;
Ok(())
}
Event sourcing. Saga pattern. Durable timers. No external orchestrator.
What you don't need
Redis Kafka BullMQ RabbitMQ SQS Temporal Celery
PostgreSQL handles it all:
SKIP LOCKEDfor job queuesLISTEN/NOTIFYfor real-time- Advisory locks for leader election
- WAL for durability
Ship one binary
cargo build --release
./target/release/my-app
Migrations run automatically. Frontend embeds optionally. Health checks included.
MIT License. No telemetry. PostgreSQL 18+.