# UI as data

tratto's interface is declared as data: the menus, the texts, the themes, the settings screen, the layouts of the
sidebar and the history, the clone flow. The app ships these files and reads your own versions from the
[configuration folder](/docs/settings), so a change does not need a new build.

## What applies while tratto runs

Two kinds of files are watched and applied within a moment of saving them:

- **`style.json`:** colours, corner radii, strokes, text sizes and weights, fonts, icons and spacing, for both
  appearances or separately for `light` and `dark`. This is what the copilot changes when you ask it to restyle tratto.
- **The `layout/` folder:** the layouts of the refs sidebar, the project sidebar, the history columns, the repository
  view and the notifications.

## What applies at the next start

Everything else is read when tratto starts, so restart it after a change:

- `settings.json`, and the per-profile and per-project settings;
- `themes/*.json`, to adjust one of the built-in themes: see [Themes](/docs/customize/themes);
- `locales/*.json`, to change texts or add a language;
- `flows/clone.json`, to replace the clone flow;
- the IDE's layout, project types and file icons.

The full list is in [Configuration files](/docs/reference/configuration-files).

## What is not yours to change yet

The menus and their keys (`menu.json`), the settings schema, the AI prompts for commits and the What's New list ship
with the app and have no override yet: see [Menus & shortcuts](/docs/customize/menus-and-shortcuts).

## When a file is wrong

tratto reads every file strictly: an unknown key, a missing key or invalid JSON is an error. A wrong file of yours is
skipped, the built-in one is used, and the reason, with the file and the place in it, shows at the bottom of the
settings. A wrong `style.json` or layout keeps the last good version while it tells you why.

A `settings.json` written by a newer tratto is read but never overwritten by an older one.

## Plugins

Plugins are not available yet: the app does not load any.
