---
title: "Concepts · Affordances"
description: "The few ideas Affordances is built on. A page says what it shows and what can be done there, once, for people and agents alike."
url: "https://affordances.vercel.app/docs/concepts"
image: "https://affordances.vercel.app/og/docs/concepts"
lang: "en"
---

# Concepts

The few ideas Affordances is built on. A page says what it shows and what can be done there, once, for people and agents alike.

An Affordances page has two files next to it. `state.ts` says what the page shows, and `actions.ts` says what can be done there. Everything an agent sees is derived from those two files.

- [**Actions**](https://affordances.vercel.app/docs/concepts/actions): one `defineAction` call describes something a person or an agent can do on a page, and returns the server action that does it.
- [**State**](https://affordances.vercel.app/docs/concepts/state): a route's `state.ts` says what the page shows, as entities. It's loaded for the graph and again after every action.
- [**Expose**](https://affordances.vercel.app/docs/concepts/expose): nothing reaches agents until an action says who may call it. `expose` is `public`, `session`, or `confirm`.
- [**Guards and confirm**](https://affordances.vercel.app/docs/concepts/guards): a guard is the precondition an action checks before it runs. Agents see it before they call, and get its reason when it fails.
- [**Deltas**](https://affordances.vercel.app/docs/concepts/deltas): calling an action returns what changed on the page, so the agent doesn't have to read it again.
- [**Plugins**](https://affordances.vercel.app/docs/concepts/plugins): a plugin serves the same pages in another form, such as Markdown, at the same URLs and from the same render. The [Plugins](https://affordances.vercel.app/docs/plugins) section lists each one.
