---
title: "Structure du Projet"
description: "Une visite guidée de chaque répertoire dans un projet Nibiru."
---
```
my-app/
├── core/                   # Framework code (don't edit)
│   ├── a/                  # Abstract classes + adapters
│   ├── c/                  # Concrete classes (router, view, form types…)
│   ├── f/                  # Factories (db, form)
│   ├── i/                  # Interfaces
│   ├── l/                  # Composer vendor (yes, in core/)
│   ├── t/                  # Traits
│   └── framework.php       # Main bootstrap
├── application/            # Your app
│   ├── controller/         # *Controller.php files
│   ├── model/              # Auto-generated models (from DB schema)
│   ├── module/             # Modules (the second M in MMVC)
│   │   └── users/          #   each with its own MVC + plugins
│   ├── settings/
│   │   └── config/
│   │       ├── settings.<env>.ini
│   │       ├── database/   #   numbered SQL migration files
│   │       └── navigation/main.json
│   └── view/
│       ├── templates/      # Smarty .tpl files
│       ├── templates_c/    # Smarty compile cache (auto)
│       ├── cache/          # HTML cache (when caching=true)
│       └── mockup/         # Static design mockups
├── public/                 # CSS / JS / images / fonts (web-served)
├── nibiru                  # CLI binary
├── index.php               # Entry point
├── composer.json
└── vhost.conf              # Sample nginx vhost
```
## Conventions notables

### Contrôleurs
- Fichier : `application/controller/<nom>Controller.php`
- Classe : `Nibiru\<nom>Controller extends Nibiru\Adapter\Controller`
- Méthodes requises : `pageAction()`, `navigationAction()`. Optionnelles : toutes les méthodes `<verbe>Action()`.

### Vues
- Fichier : `application/view/templates/<nom>.tpl` pour le contrôleur correspondant.
- Sous-vues se trouvent sous `application/view/templates/<nom>/<action>.tpl`.
- Partiels partagés résident dans `application/view/templates/shared/`.

### Modèles
- Générés automatiquement sous `application/model/`.
- Les noms de fichiers correspondent aux noms des tables. Chaque classe étend un adaptateur `Db` (`MySQL\Db` ou `PostgreSQL\Db`).

### Modules
- Dossier : `application/module/<nom>/`
- Chaque module est une île MVC à part entière, avec des traits, des plugins, des interfaces et des paramètres.
- Le [Registre](/core/registry/) détecte automatiquement les paramètres `*.ini` situés dans le dossier `settings/` de chaque module.

### Migrations
- `application/settings/config/database/<NNN>-<slug>.sql`
- Numérotées. Exécutez via `./nibiru -mi <env>`.
- Un fichier par changement logique — ne les compressez pas.

### Composer vendor dans `core/l/`
Ceci est intentionnel. `composer.json` définit `vendor-dir: core/l`. Le chargeur automatique du framework l'attend là-bas. Ne le déplacez pas.

### `templates_c/` et `cache/`
Smarty doit pouvoir écrire dans `templates_c/`. Le cache est facultatif via la clé INI `[ENGINE] caching = true`. Les deux dossiers doivent être ignorés par votre `.gitignore`.
