# Introduction

> emit runs your background jobs and workflows, and keeps each job's progress and result where your app can read them.

emit is a job queue you call over HTTP. Your app creates a **job**: a name, like `send-receipt`, and a JSON payload. emit stores it before it answers, then hands it to one of your **workers**, the processes that do the work. A job that fails is tried again. Its progress, logs and result stay with it, so your app, your team and a browser can follow it to the end.

The work runs in your own code, on your own servers. emit keeps the queue and the record.

## What you can build

- **Background jobs.** Send a receipt, resize an image or sync an account after the request that asked for it has returned.
- **Scheduled work.** Run a job in an hour, or at a set time.
- **Workflows.** A function that runs steps, sleeps for days and waits for a person or an event, and carries on after a crash or a deploy.
- **Live progress.** Show a progress bar in the browser, with no polling and no tracking table of your own.

## How it fits together

1. Your app creates jobs in a **space**, a named queue with its own settings, such as `emails` or `billing`.
2. A worker asks for jobs by name, runs them, and reports back: progress along the way, then a result or an error.
3. Your app reads the result, follows the job as it runs, or gets a signed webhook when it ends.

You reach emit through the TypeScript SDK, the Go SDK, the CLI or plain HTTP. They all use the same API.

## Where to start

:::cards {cols=2}
:::card Quickstart {href="/docs/quickstart" icon=">_"}
Create a cluster, send a job and run it.
:::
:::card Jobs {href="/docs/concepts/jobs" icon="[]"}
Statuses, retries, delays, idempotency keys and callbacks.
:::
:::card Workflows {href="/docs/concepts/workflows" icon="~>"}
Steps, sleeps, signals and approvals, written as one function.
:::
:::card API reference {href="/docs/api/overview" icon="//"}
Every endpoint, with its fields and a curl example.
:::
:::
