# What changed in pofile-ts

> 59 changes in pofile-ts 2 to 4 from its official release notes, upgrade guides and advisories: 15 breaking, 30 new APIs and options. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/npm/pofile-ts/

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

## pofile-ts 4

### Breaking changes

- The helper was removed because node types are self-documenting. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- IcuErrorKind is now just the 'SYNTAX_ERROR' string type. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- IcuNodeType is now a string union of literal, argument, number, date, time, select, plural, pound, and tag instead of a numeric enum. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Renames ArgType to ParentArgType. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)

### New APIs and options

- Adds more than 50 built-in format styles for number, date, time, and list formatting. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Adds a factory for creating pre-configured compilers. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Adds support for custom number, date, time, and list format styles. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Adds extended Intl format types for list, duration, relativeTime, and displayNames. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Adds getPluralFormsHeader. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Adds hasSelectOrdinal. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Adds metadata support for translation items. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Adds typed style properties aligned with Intl APIs. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)
- Supports supplying a dynamic currency through values.currency. (4.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v4.0.0)

## pofile-ts 3

### Breaking changes

- Plural rules are now compliant with CLDR 48, which may affect pluralization results. (3.6.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.6.0)
- The default export is removed; import named exports instead. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- The Item class is removed; use the functional API instead. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- The PO class is removed; use the functional API instead. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- PoFile is exported as an interface instead of a class. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- PoItem is exported as an interface instead of a class. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)

### New APIs and options

- Adds compileCatalog() for compiling catalogs. (3.7.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.7.0)
- Adds compileIcu() for runtime message compilation. (3.7.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.7.0)
- Adds generateCompiledCode() for generating compiled code. (3.7.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.7.0)
- Adds an ICU MessageFormat v1 parser. (3.7.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.7.0)
- Adds getPluralSamples as a new utility, exported from index. (3.5.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.5.0)
- Adds parsePluralFormsHeader as a new utility, exported from index. (3.5.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.5.0)
- Adds splitMultilineComments as a new helper, exported from index. (3.5.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.5.0)
- Adds helpers for converting catalogs. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds support for CLDR plural categories. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds a helper for creating default headers. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds an option for better TMS readability. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds a helper for formatting PO dates. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds conversion from Gettext to ICU. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds utilities for generating message IDs. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds utilities for parsing and formatting references. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Adds SerializeOptions for Crowdin-compatible output format. (3.1.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.1.0)
- Create an item with the new functional API. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- Create a PO file with the new functional API. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- Parse PO content with the new functional API. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- Serialize an item with the new functional API. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)
- Serialize a PO file with the new functional API. (3.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.0.0)

### Performance

- Optimizes hot paths in new helper functions. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- Optimizes plural serialization. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)
- String extraction uses indexOf and a fast path for unescaping. (3.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.2.0)
- Replacing a regular expression with startsWith and inlining the obsolete check improves performance. (3.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.2.0)
- Pre-compiled regular expressions and native methods optimize parsing. (3.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.2.0)
- First-character dispatch and inline plural-index extraction improve performance. (3.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.2.0)
- Fast-path escaping and loop improvements optimize serialization. (3.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.2.0)
- A fast path for simple strings and optimized line folding improve performance. (3.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.2.0)

### Behavior and default changes

- Supports numeric tags such as <0> and <1> for Lingui compatibility. (3.7.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.7.0)
- Message IDs use 8-character Base64URL encoding. (3.3.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.3.0)

### Fixes and other changes

- Robustness for partial or incomplete input is improved. (3.4.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v3.4.0)

## pofile-ts 2

### Breaking changes

- The load() method was removed for browser compatibility. (2.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.2.0)
- The save() method was removed for browser compatibility. (2.2.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.2.0)
- The minimum supported Node.js version is now 22. (2.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.0.0)
- PO.load() now returns Promise<PO> instead of using callbacks. (2.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.0.0)
- po.save() now returns Promise<void> instead of using callbacks. (2.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.0.0)

### Behavior and default changes

- Adds support for running pofile-ts on Node.js 20. (2.1.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.1.0)

### Fixes and other changes

- Uses separate type declarations for ESM and CJS exports, improving type resolution for consumers of either module format. (2.0.3) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.0.3)
- The PO.ts filename case was corrected. (2.0.0) — [release notes](https://github.com/sebastian-software/pofile-ts/releases/tag/v2.0.0)
