Communications, canonical.
Email and SMS are first-class capability surfaces in Vadyl, not bolted-on services. EmailRuntimeCompiler and SmsRuntimeCompiler produce per-project runtime descriptors. Vendor-neutral provider factories let you swap SendGrid for Postmark, Twilio for Vonage, without touching handler code. Branchable per environment. Audited through the canonical observability relay.
Pick a vendor. Or run SMTP.
SendGrid · Postmark · SES · Resend · SMTP
Five canonical email transports. Vendor-neutral provider factory. Switch by changing a binding — no handler refactor.
EmailRuntimeCompiler
Per-project compiled runtime descriptor. Inheritance through the project hierarchy. Branchable per environment. Cache-coherent across instances via the canonical invalidation bus.
Secret refs only
API keys live in the key ring, referenced by the binding. Raw credentials never appear on the entity row, never appear in audit trails, never appear in observability.
Same shape. Different physics.
Twilio · Vonage · MessageBird · AWS SNS
Four canonical SMS transports. Same vendor-neutral pattern. Same secret-reference model. Same canonical observability surface.
Branchable bindings
A staging branch can point Twilio at a test sub-account. Production stays on the live account. Branch and environment are the right layering — not a feature flag.
Capability-aware delivery
Vadyl honors per-vendor capability differences. SMS providers that support shortcodes, MMS, regional routing — all surface as DbCapabilities-style flags. Handlers don't branch on vendor.
Vendor-neutral
Same shape
Real isolation
Through the canonical relay
Send mail. Send SMS. Without lock-in.
Bind a vendor. Reference the secret. Send. Switch the binding when the contract expires. Your handler doesn't care.