# What changed in citty

> 19 changes in citty 0.2 from its official release notes, upgrade guides and advisories: 1 breaking, 7 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/citty/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## citty 0.2

### Breaking changes

- The distribution is ESM-only, which affects how projects can consume the package. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)

### New APIs and options

- A default subcommand is now supported. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- Users can define arguments using the built-in help and version flags. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- A plugin system is now available. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- Subcommands can now have aliases. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- Arguments support an enum type. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)
- Command metadata can use hidden to hide a command. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)
- Args can specify a negativeDescription. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)

### Performance

- citty now has zero dependencies, reducing install size from 267kB to 22.8kB. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)

### Behavior and default changes

- An alias value now takes precedence over a default value. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- Negative boolean argument usage is printed conditionally. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)
- Number args can be optional. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)
- Parsed optionals and enum arguments have updated type safety. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)

### Fixes and other changes

- Parsed argument values are coerced to match their declared types. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- Subcommand resolution no longer incorrectly consumes flag values. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- Usage tips are improved. (0.2.2) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.2)
- Propagates --no- negation to aliases and the main option. (0.2.1) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.1)
- CLI error messages are shown. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)
- The value type of NumberArgDef is corrected to number. (0.2.0) — [release notes](https://github.com/unjs/citty/releases/tag/v0.2.0)
