# Core e ext

O framework e sua aplicação: dois repositórios, procurados primeiro em ext.

Um projeto Nimbly combina dois repositórios Git numa única árvore de pastas: o framework, e a sua aplicação dentro dele.

```text
my-project/          framework repository (core)
  core/              routes, templates, libraries and modules of the framework
  css/  js/          sources of the default asset build
  ext/               your application, a repository of its own
    data/            resources and records
    lib/             PHP libraries
    modules/         packaged features
    tpl/             reusable templates
    uri/             routes
    static/          built assets and static files
    theme.css        your styles
```

| Repositório | Contém | Pertence a |
|---|---|---|
| Framework | `core/` e a configuração de build compartilhada | Código aberto, licença ISC |
| Aplicação | `ext/` | Você, sob a licença que escolher |

Os repositórios têm históricos, branches e remotes próprios. `git status` na raiz do projeto mostra as mudanças no framework; `git -C ext status` mostra as suas.

## Primeiro ext, depois core

Todo template, biblioteca, rota, módulo e arquivo estático é procurado primeiro em `ext/`, depois em `core/`. Isso dá a você três maneiras de trabalhar com o framework:

- **Acrescentar.** Um arquivo novo em `ext/` fica ao lado do framework: uma rota, um template, uma biblioteca, um tipo de campo.
- **Substituir.** Um arquivo em `ext/` com o mesmo caminho de um arquivo em `core/` é usado no lugar dele. Substitua um template da shell da página, uma tela do admin ou um arquivo estático, e mantenha o resto.
- **Deixar como está.** O que seu projeto não substitui vem do core e melhora a cada atualização.

Por exemplo:

| Arquivo em ext | Efeito |
|---|---|
| `ext/tpl/html/stylesheets.tpl` | Suas próprias folhas de estilo em toda shell de página |
| `ext/static/favicon.svg` | Seu ícone no lugar do padrão |
| `ext/uri/health/index.tpl` | Sua própria resposta para o health check |
| `ext/agents/nimbly/project.md` | Contexto do site para o agente integrado, que mantém sua definição do core |

O próprio core nunca é editado para um projeto. Uma mudança de que toda aplicação Nimbly precisa pertence ao framework; uma mudança para uma aplicação pertence a `ext/`.

## Atualizações

Um projeto roda o core atual: não há versões do framework para fixar, o commit é a versão. Faça pull do core para atualizar; seu `ext/` não é tocado. Uma atualização do core nunca reescreve arquivos gerados como o `.htaccess`, então `./nimbly system:repair` informa onde um site mais antigo difere de uma instalação nova, e aplica as mudanças com `--yes`. Veja [Atualizações](/pt/docs/operate/updates/).

## Leia a seguir

- [Ciclo de vida de uma requisição](/pt/docs/concepts/request-lifecycle/): como uma requisição encontra sua rota.
- [Seu próprio HTML](/pt/docs/guides/html-shell/): substituir a shell da página, em parte ou por inteiro.
- [Módulos](/pt/docs/concepts/modules/): empacotar uma funcionalidade dentro de `ext/`.
