```meta
title: @schema — declarar uma coleção
description: Os campos de uma coleção do espaço, escritos numa página. O leitor não vê nada; quem edita vê a declaração e a aplica.
```

_flows.md · documentação · [Blocos](/@docs/blocks)_

# @schema

Declara os campos de uma coleção do espaço — a tabela que um `@data` lê e em que um `@form` grava — numa página, como qualquer outro texto.

## Ao vivo

Os dois blocos abaixo estão nesta página e são de verdade: são eles que criam as coleções `tarefas-exemplo` (lida pelas páginas [@data](/@docs/blocks/data)) e `contato-exemplo` (desenhada pelo [@form](/@docs/blocks/form), que aqui é só uma prévia). Você não vê nada entre esta linha e a próxima seção, e é isso mesmo: um leitor nunca vê a declaração.

```@schema collection:tarefas-exemplo visibility:public
titulo text required label:"Tarefa"
status select:ideia,fazendo,revisao,pronto label:"Status"
responsavel text label:"Quem"
prazo date label:"Prazo"
pronto boolean label:"Pronto"
ordem number label:"Ordem"
```

```@schema collection:contato-exemplo visibility:public
nome text label:"Nome"
email email required label:"E-mail"
mensagem long_text label:"Mensagem"
```

Quem edita a página vê cada declaração como um cartão, com o estado da coleção (nova, igual, diferente) e um botão para aplicá-la. Só quem tem as configurações do espaço aplica.

## O markdown

~~~text
```@schema collection:tarefas-exemplo visibility:public
titulo text required label:"Tarefa"
status select:ideia,fazendo,revisao,pronto label:"Status"
responsavel text label:"Quem"
prazo date label:"Prazo"
pronto boolean label:"Pronto"
ordem number label:"Ordem"
```
~~~

Um campo por linha: `nome tipo`, e depois `required`, `indexed` ou `label:"…"`. Os tipos: text, long_text, number, boolean, date, datetime, email, url, select, multi_select, tags, file, reference e computed.

## Variações

**Quem lê as linhas.** `visibility:private` (o padrão) deixa as linhas só para as pessoas do espaço; `visibility:public`, para qualquer leitor — é o que deixa uma tabela `@data` aparecer numa página publicada.

**Quem envia pelo formulário.** `accepts:nobody` (o padrão), `accepts:members` ou `accepts:anyone`. Um `@form` só aparece para quem a coleção aceita. As duas coleções desta página não aceitam ninguém: nenhum leitor grava nelas.

~~~text
```@schema collection:inscricoes accepts:anyone
nome text label:"Nome"
email email required label:"E-mail"
mensagem long_text label:"Mensagem"
```
~~~

**Referências e contas.** Um campo aponta para a linha de outra coleção, e outro conta ou soma por ela:

~~~text
```@schema collection:projetos
nome text required
tarefas computed:count(tarefas.projeto)
```
~~~

**Agenda e lembretes.** `calendar:prazo` põe cada linha no calendário das pessoas do espaço, e uma linha `@remind field:prazo before:1d` avisa antes do prazo — por e-mail no plano Pro; com `via:calendar`, como alarme no calendário, em qualquer plano. Uma linha `@hook` manda as mudanças das linhas para um endereço seu.

## O que precisa

Uma página do espaço onde escrever, e alguém com as configurações do espaço para aplicar. A lista completa de tipos e opções está na [Referência](/@docs/components).
