An app is code, a static site, or both on one address. Code runs in lightweight isolates (the same workerd runtime as Cloudflare Workers) on every edge node, so the nearest node answers each visitor. Apps start in milliseconds and you pay for what they use.
An app can serve a folder of files (a built React, Vue or Astro site, or plain HTML). Files are served by the edge directly, without running code. Add a _worker.js or a main entry to handle API routes on the same address; enable single-page-app mode to serve index.html for unknown paths.
For state that must be consistent across all visitors, such as a game room, a chat channel or a counter, export a Durable Object class. Each id lives on one node with its own storage (key-value and SQL), alarms and WebSockets.
Every deploy is a new version. You can roll back to any earlier version in one click (or rr rollback), or send a percentage of traffic to a new version first and raise it once it looks healthy.
Add cron expressions under Triggers (or triggers.crons in the config). Runs that keep failing after retries are kept under Failed jobs so you can fix and replay them.
Open Logs on the app's page, or run rr tail, to watch console.log output and errors live. Every response has an x-request-id header; responses your code produced say x-rf-served-by: rf-compute.