# Installation
- [Requirements](#requirements)
- [Installation](#installation-step)
- [Basic Setup](#basic-setup)
- [Verify Installation](#verify-installation)
Getting started with fluttersdk_artisan requires a few steps to wire the CLI binary and codegen scaffolding into your project.
## Requirements
Before adding fluttersdk_artisan to your project, ensure your environment meets these minimum version requirements. We recommend staying on the latest stable Dart SDK for the best experience.
fluttersdk_artisan is a pure Dart package. Flutter is optional: it is only required when you intend to drive a running Flutter app (hot reload, Dusk gestures, Telescope inspection). Projects that only need scaffolding, code generation, or the MCP server can run on any Dart 3.4+ environment.
| Dependency | Minimum Version | Recommended |
|:-----------|:----------------|:------------|
| Dart | `>= 3.4.0` | `3.6.0+` |
| Flutter | optional | `3.27.0+` |
## Installation
Add `fluttersdk_artisan` to your project using the Dart CLI:
```bash
dart pub add fluttersdk_artisan
```
Alternatively, add it manually to your `pubspec.yaml`:
```yaml
dependencies:
fluttersdk_artisan: ^0.0.1
```
Then fetch dependencies:
```bash
dart pub get
```
## Basic Setup
After installing the package, run the scaffold command to create the canonical consumer wrapper in your project:
```bash
dart run fluttersdk_artisan consumer:scaffold
```
This command writes three files into your project:
| File | Purpose |
|:-----|:--------|
| `bin/artisan.dart` | The runnable entry point. `dart run artisan ` dispatches here. |
| `lib/app/_plugins.g.dart` | Generated plugin provider list. Updated by `plugin:install` and `plugins:refresh`. |
| `lib/app/commands/_index.g.dart` | Generated command index. Updated by `make:command` and `commands:refresh`. |
The command is idempotent: re-running it skips files that already exist. Pass `--force` to overwrite:
```bash
dart run fluttersdk_artisan consumer:scaffold --force
```
### Dependency injection into pubspec.yaml
`consumer:scaffold` also ensures `fluttersdk_artisan` is listed as a direct dependency in your `pubspec.yaml`. The generated barrel files at `lib/app/_plugins.g.dart` and `lib/app/commands/_index.g.dart` import from `package:fluttersdk_artisan/artisan.dart`, so the analyzer requires a direct dep to pass `depend_on_referenced_packages`.
The injection is automatic and follows two modes:
- **Monorepo / path-dep workflow**: when your project already resolves `fluttersdk_artisan` via a local path (detected from `.dart_tool/package_config.json`), the scaffold injects a `path:` reference pointing to the same checkout. This avoids a pub.dev fetch against a version that may not yet be published.
- **pub.dev workflow**: when no local resolution is found, the scaffold injects the `any` constraint and lets pub resolve the version transitively. Replace `any` with a pinned range (e.g. `^0.0.1`) before committing.
## Verify Installation
Run the built-in `list` command to confirm the scaffold is wired correctly:
```bash
dart run artisan list
```
The output lists all registered commands grouped by namespace. A fresh scaffold with no additional plugins shows 21 built-in commands organized across these namespaces:
| Namespace | Commands |
|:----------|:---------|
| (root) | `help`, `list` |
| `artisan` | `start`, `stop`, `status`, `logs`, `restart`, `reload`, `hot-restart`, `doctor` |
| `commands` | `commands:refresh` |
| `consumer` | `consumer:scaffold` |
| `make` | `make:command`, `make:plugin` |
| `mcp` | `mcp:serve`, `mcp:install`, `mcp:uninstall` |
| `plugin` | `plugin:install`, `plugin:uninstall` |
| `plugins` | `plugins:refresh` |
| `tinker` | `tinker` |
If the list prints without errors, the installation is complete.