# Installation

SMF is a command line tool, `smf`, published on pub.dev as [`smf_flutter_cli`](https://pub.dev/packages/smf_flutter_cli).

## Requirements

- Flutter 3.44 or newer, which comes with Dart 3.12 or newer. The apps that SMF generates require these versions, and `smf create` checks the Flutter SDK before it generates anything.
- `flutter` on the `PATH`. SMF uses the `flutter` it finds there, and the `dart` of the same SDK, so the Dart that builds the app is also the one that formats and fixes its code.
- A Mac with Xcode, to build the iOS app. SMF generates the Android and iOS projects on any system. For Xcode 27, see [troubleshooting](https://doc.saymyframe.com/guides/troubleshooting.md#ios-builds-with-xcode-27).

The Firebase modules need more on the machine: the Firebase CLI, the FlutterFire CLI and a Firebase account. SMF looks for them only when an app has these modules, and offers to set up what is missing; see [Firebase](https://doc.saymyframe.com/guides/firebase.md).

SMF is tested on macOS, Linux and Windows.

## Install

Activate the package globally with the Dart that comes with your Flutter SDK:

```bash
dart pub global activate smf_flutter_cli
```

This installs the `smf` command in the directory of globally activated Dart packages, which is `~/.pub-cache/bin` on macOS and Linux. If that directory is not on your `PATH`, `dart pub global activate` prints a warning. Add the directory to the `PATH` as the [Dart documentation](https://dart.dev/tools/pub/cmd/pub-global#running-a-script-from-your-path) describes.

Check the installation:

```bash
smf --version
smf --help
```

## Update and remove

Activating the package again installs its latest version:

```bash
dart pub global activate smf_flutter_cli
```

To remove SMF:

```bash
dart pub global deactivate smf_flutter_cli
```

## Next

[Create your first app](https://doc.saymyframe.com/getting-started/first-app.md).
