# Built-in services

Jadpo gives your app some common backend features itself, so you don't
install a library or write your own. Each is part of Jadpo's runtime and runs
inside your app's process, never as a separate container. Some reach an outside
service, such as a mail provider, through a connection you declare in
`app.jadpo`. Each has one page: what it's for and how to use it, then its exact
rules last.
[How packages, connections, capabilities and services fit together](/docs/how-integrations-fit-together.md)
says how the pieces relate.

A feature is built in only when the compiler gains something by knowing
about it: a mistake becomes a compile error, a test or a report is
generated, policy or erasure reaches it, or the runtime does the work
with nothing for you to write. Saving a library install isn't enough.
[What isn't built in](/docs/not-built-in.md) says why each service is here, and
where you set it up.

| Service | What it is | Status | What's missing |
|---|---|---|---|
| [Email](/docs/email.md) | Emails as typed values: templates the compiler checks, sent after your action commits, caught in tests and in a dev inbox. | ✓ built |  |
| [Files](/docs/files.md) | A `File` field on a record, with the bytes kept in a store of files. | ▲ partly | Uploads, downloads, the S3 driver and jadpo files |
| [Feature flags](/docs/feature-flags.md) | A feature flag lets you ship code switched off, then turn it on for some users, a share of users, or everyone, without a deploy. | ▲ partly | Turning a flag on for a named tenant; erasing a person from the flag tables |
| [Rate limits](/docs/rate-limits.md) | A rate limit caps how many requests a caller may make in a period. | ▲ partly | The Redis store; turning a limit off |
| [Search](/docs/search.md) | Give an entity a `search:` section and people can search its records by words. | ▲ partly | Outside search engines, `jadpo search reindex` and sensitive fields |
| [Audit trail](/docs/audit-trail.md) | An entity's history of changes: who made each, when, and what it changed, kept when you ask for it. | ▲ partly | Personal fields in a history, and more on its page; publishing |
| [AI](/docs/ai.md) | Your app can ask a language model for an answer, a stream of text or an embedding (a list of numbers that stands for a text's meaning). | ▲ partly | `keep_content:`, `embed:` batches below 100 and `jadpo call` |
| [Monitoring](/docs/monitoring-thresholds.md) | A threshold says when something your app does is too slow, too frequent or failing too often, such as a route's p95 duration. | ▲ partly | Telemetry, recording the path each request takes, and `jadpo traces`, `metrics`, `logs` and `path` |
| [Caches](/docs/caches.md) | Copies of records and query results kept in Redis, so busy pages read them quickly. | ○ not built | All of it |
| [Documents](/docs/documents.md) | A document is something your app renders for people to keep, such as an invoice as a PDF. | ○ not built | All of it |
| [Bot protection](/docs/bot-protection.md) | Bot protection stops scripts from using a public form, such as a sign-up or a demo request. | ○ not built | All of it |
| [Outgoing webhooks](/docs/outgoing-webhooks.md) | Outgoing webhooks let your app's customers receive its events at an address of their own. | ○ not built | All of it |
| [What isn't built in](/docs/not-built-in.md) | Some features other frameworks offer aren't part of Jadpo, because the compiler gains little by knowing about them. | – |  |

Each row's status comes from [What is built](/docs/built-in-services-built.md).
