Introducing Hot Dev
I'm excited to introduce Hot Dev, a new backend workflow platform.
Building modern backend systems often means wrestling with complex orchestration, scattered logging, and opaque AI integrations. Hot Dev is designed to solve these problems!
The Hot Dev Platform
Events
- Event-driven architecture
- Trigger Runs via
on-event: "user:created"event handler metadata - Send event via the API or from other Runs
Runs
- Primary unit of execution (a Hot function entry point)
- Scheduled with cron or English:
schedule: "every hour" - Can be Cancelled or Failed
- Retry manually from the app or automatically by metadata:
retry: 3
Streams
- Primary unit of tracing
- Events and Runs tie together for traceability
- Subscribe to a Stream via the Hot API
- Workflows can stretch over long periods, where Events and Runs are many hours, days, or more apart
Hot Dev App
- Dashboard with system-level overview
- Function-call trace observability
- Multiple environments (staging, production)
- Multiple projects
Hot Dev API
- Easily integrate your backend with Hot workflows
- Subscribe to real-time HTTP SSE Streams
Hot Packages
hot-std, the extensive standard libraryanthropic,openai,gemini,xai,aws-*,resend,postmark- and many more on the way...
Editor Integration
- VS Code Extension
- LSP (Language Server Protocol) support
Great Local Dev UX
- Mac, Linux, and Windows download
hot devruns the app, api, worker, and scheduler (just like in production!)hot deployto deploy to the Hot Cloud
The Hot Language
Hot is a simple, expressive language for defining workflows and integrating with services.
- Immutable
- Functional
- Familiar Data Literals: JSON-like data types (and more)
- Types are Optional: Powerful for API integrations, autocomplete, error-checking
- Concurrency: built-in
parallelflows andpmap - Integration with the Hot Dev App means function-call tracing for phenomenal observability and debugging
📚 Learn more about the Hot Dev Platform and Hot Language at Hot Docs
A Quick Demo
In this example, the send-my-news function takes a preset list of AI news websites, fetches them in parallel, summarizes them with Anthropic Claude, and then sends an email of the top AI news links of the day via Resend. This is a scheduled function that runs every morning or on-demand if I send the corresponding send-my-news-now event. Notice how little boilerplate Hot needs? Hot is very expressive!
The key function is send-my-news (repeated here):
// This sends news via a schedule and when it receives a "send-my-news-now" event.
send-my-news
meta {
schedule: "every day at 2pm", // run every day at 2pm UTC (8am PST)
on-event: "send-my-news-now"
}
fn (event) {
sites
|> pmap(fetch-news) // pmap is a parallel map, it will fetch news from the web in parallel
|> filter(is-some) // filter out any fetch failures (which are null)
|> summarize-news() // summarize the news via ai
|> send-email() // send the summarized news via email
}
More of the implementation...
// The namespace
::demo::my-news ns
// Namespace aliases
::http ::hot::http
::regex ::hot::regex
::time ::hot::time
::messages ::anthropic::messages
::emails ::resend::emails
// Var/Type/Fn aliases from Anthropic and Resend
MessagesPostRequest ::messages/MessagesPostRequest
InputMessage ::messages/InputMessage
POSTEmailsRequest ::emails/POSTEmailsRequest
sites [
"https://techcrunch.com/category/artificial-intelligence/",
"https://arstechnica.com/ai/",
"https://www.theverge.com/ai-artificial-intelligence",
"https://www.reddit.com/r/ArtificialInteligence/top/?t=day",
"https://www.nytimes.com/spotlight/artificial-intelligence"
]
strip-html fn (html: Str): Str {
// see full demo source on github (link below)
}
// fetch news from the web (return null if failed)
fetch-news fn (url: Str): Str? {
response ::http/get(url)
if(::http/is-ok-response(response), strip-html(response.body))
}
// summarize news via ai
summarize-news fn (news: Vec<Str>): Str {
prompt `Summarize these news items into a nicely formatted email digest.
Output ONLY raw HTML (no markdown, no code fences). Structure:
1. <h2> for the title "Hot AI News"
2. <p><em> with a 2-3 sentence summary of the major themes or biggest stories
3. <hr> separator
4. <ul> and <li> for the list of individual stories with <a href="url"> links
Today is: ${::time/PlainDate()}.
Include max 20 links--try to include at least one from each site.
Dedupe similar stories (pick one).
Order by most recent.
Keep each story to one line with the source name.`
request MessagesPostRequest({
model: "claude-sonnet-4-5-20250929",
max_tokens: 4096,
messages: [
InputMessage({
role: "user",
content: `${prompt}\n\nNews to summarize:\n\n${join(news, "\n\n---\n\n")}`
})
]
})
response ::messages/post(request)
// Extract text and strip markdown code fences if present
first(response.content).text
|> ::regex/replace-all("^```html?\\s*", "")
|> ::regex/replace-all("```\\s*$", "")
|> trim()
}
send-email fn (news: Str): Str {
request POSTEmailsRequest({
from: "hi@demo.hot.dev",
to: ["hi@hot.dev"],
subject: "Hot AI News",
html: news
})
sent ::emails/send-email(request)
if(is-ok(sent), sent, fail("Failed to send email", sent))
}
// This sends news via a schedule and when it receives a "send-my-news-now" event.
send-my-news
meta {
schedule: "every day at 2pm", // run every day at 2pm UTC (8am PST)
on-event: "send-my-news-now"
}
fn (event) {
sites
|> pmap(fetch-news) // pmap is a parallel map, it will fetch news from the web in parallel
|> filter(is-some) // filter out any fetch failures (which are null)
|> summarize-news() // summarize the news via ai
|> send-email() // send the summarized news via email
}
Full Demo Source: https://github.com/hot-dev/hot-demos/tree/main/my-news
Are we having fun yet?
I'm having a lot of fun building Hot Dev. Can you tell? 😎
Get Started with Hot Dev
Learn more and download Hot Dev for Mac, Linux, or Windows at hot.dev
What's Next?
We've only just begun! Here's what's coming soon:
- More Hot Packages: Slack, Discord, Stripe, Supabase, and more
- MCP (Model Context Protocol): Expose a Hot function as an MCP Tool--integrating your APIs and AI tools
- Hot Box Container Execution: Run any OCI Container as a Hot function
- Self-Hosted Option: Run Hot on your own infrastructure
Follow Hot Dev on X or signup for our Hot Takes newsletter to stay updated.