# distromate

`distromate` installs the DistroMate CLI for Python users.
It provides the `distromate` command and bundles the CLI binary for the current platform.

## Install

```bash
pip install distromate
```

## What DistroMate CLI Does

- Package desktop applications for Windows, macOS, and Linux
- Prepare packaging inputs without creating the final installer
- Publish releases as a logged-in user or through anonymous release sessions
- Upload prebuilt artifacts with `publish artifacts`
- Manage apps, channels, and versions from the command line
- Print public key snippets and AI prompt references for your project

## Quick Start

1. Optionally sign in:

```bash
distromate login
```

If you stay signed out, the CLI can automatically create and use an anonymous publishing session when you run remote operations.

2. Create `distromate.yaml` in your project root:

```yaml
appId: com.example.your-app
productName: Your App Name

publish:
  appId: your-publish-app-id

package:
  name: your-app
  shortDescription: Your App Description

source:
  type: native
  root: dist
  executable: dist/your-app
  files:
    - "**/*"
    - "!**/*.map"
    - "!**/*.pdb"
  icon: dist/logo.ico
  publisher: Your Company
  language: english
```

`source.files` uses electron-builder-style glob rules, including `!` exclusions.

3. Build a local package:

```bash
distromate package -v 1.0.0
```

4. Prepare inputs only, without producing the final installer:

```bash
distromate prepare -v 1.0.0
```

5. Publish a release:

```bash
distromate publish -v 1.0.0 -d "Initial release"
```

If `publish.appId` is missing, `distromate publish` can create the remote app first and write the new value back to your config.

6. Publish existing artifacts instead of repackaging:

```bash
distromate publish artifacts --metadata ./out/.distromate-forge.json --channel stable
```

## Common Commands

```bash
distromate status
distromate anonymous status
distromate app list
distromate channel list
distromate version list
distromate pubkey -l typescript
distromate prompt
distromate --help
```

## Documentation

- CLI command reference: `docs/cli-reference.md`
- `distromate.yaml` reference: `docs/distromate-yaml-reference.md`
- Full example config: `examples/distromate.yaml`

## License

MIT
