# CLI
> Every shellui-native command and option.
Source: https://native.shellui.dev/docs/cli
The CLI is a .NET global tool. Install or update it with:
```bash
dotnet tool install -g ShellUI.Native.CLI --prerelease
dotnet tool update -g ShellUI.Native.CLI --prerelease
```
Run every command from the folder that holds your project's `.csproj`.
## init
Sets up ShellUI Native in the project: detects the platform, creates `Components/UI`, installs `Shell.cs` and writes `shellui-native.json`. On MAUI it also writes `Resources/Styles/ShellUITheme.xaml`.
In a project that also uses ShellUI for Blazor (it has a `shellui.json`), the components go in `Components/Native` instead, so the two sets don't clash. The namespace follows the folder: `Components/UI` gives `YourApp.Components.UI`, `Components/Native` gives `YourApp.Components.Native`.
```bash
shellui-native init [--yes] [--force] [--style default|minimal]
```
| Option | Description |
|---|---|
| `--yes` | Use the defaults without asking. |
| `--force` | Initialise again in a project that's already set up. |
| `--style` | `default` or `minimal`. Saved in `shellui-native.json`; it doesn't change the installed code yet. |
## add
Copies components into `Components/UI`, with every component and helper they depend on. Adding a part, such as `dialog-trigger`, installs its whole family. The namespace in each file is replaced with your project's.
```bash
shellui-native add [--force]
```
Separate names with spaces or commas: `shellui-native add button input card` or `shellui-native add button,input,card`. An unknown name gets suggestions: `shellui-native add donut` answers "Did you mean 'donut-chart'?".
| Option | Description |
|---|---|
| `--force` | Overwrite components that are already installed (and your edits to them). |
## list
Shows the components that have a template for the project's platform, with their category and whether they're installed.
```bash
shellui-native list [--installed] [--available]
```
| Option | Description |
|---|---|
| `--installed` | Only installed components. |
| `--available` | Only components that aren't installed yet. |
## remove
Deletes each named component's file from `Components/UI` and drops it from `shellui-native.json`. Only that file goes: the parts and helpers it installed stay, since other components may use them.
```bash
shellui-native remove
```
## update
Replaces installed components with the CLI's current templates. With no names, or with `--all`, it updates every installed component. Your edits to those files are overwritten, so commit first.
```bash
shellui-native update
shellui-native update --all
```
`add` never touches a file that's already in your project, so after updating the CLI a new component can land next to an older version of something it depends on. If it doesn't build, update that dependency: `date-range-picker` needs the current `calendar`, and `button-group` the current `button`.
## shellui-native.json
`init` writes the project's configuration; `add` and `remove` keep `InstalledComponents` up to date.
```json
{
"Schema": "https://native.shellui.dev/schema.json",
"Style": "default",
"ComponentsPath": "Components/UI",
"TargetPlatform": 1,
"Theme": {
"Enabled": true,
"Style": "default",
"SyncWithShellUI": true
},
"InstalledComponents": []
}
```