> ## Documentation Index
> Fetch the complete documentation index at: https://hyperlocalise.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# v1.9.1

> Go CLI release notes for v1.9.1.

`run`, `check`, `entries`, `status`, and `sync` now treat SubRip (`.srt`) and WebVTT (`.vtt`) as first-class locale files. This release also speeds up `run` planning and several parsers, and keeps the bundled Crowdin client aligned with API v2.

[View the GitHub release](https://github.com/hyperlocalise/hyperlocalise/releases/tag/v1.9.1) · [Full changelog](https://github.com/hyperlocalise/hyperlocalise/compare/v1.9.0...v1.9.1)

## Breaking changes

None.

## Features

* Add [SubRip and WebVTT support](https://github.com/hyperlocalise/hyperlocalise/pull/1940). Cue payload text is keyed as `srt.0001` / `vtt.0001`. Cue numbers, timestamps, positioning, WebVTT headers, and `NOTE` / `STYLE` / `REGION` blocks stay in the file. Writeback reuses an existing target only when cue IDs and timings still match the source, so equal cue counts cannot attach new text to stale timestamps. WebVTT checks keep class spans (`<c.red>`), voice tags, and karaoke timestamps.

## Fixes

* When `--config` is omitted and `i18n.yml` is missing, fall back to `i18n.jsonc` only if that file exists; otherwise look for `i18n.yml`. ([#1920](https://github.com/hyperlocalise/hyperlocalise/pull/1920))
* Align the bundled Crowdin API client with v2 optional fields: report `individualRates`, `TargetLanguageID` on string comments, `FileID` / `LabelIDs` / `CroQL` on string translations, `Force` on app install, and pointer `Config` on custom fields. ([#1980](https://github.com/hyperlocalise/hyperlocalise/pull/1980), [#1972](https://github.com/hyperlocalise/hyperlocalise/pull/1972), [#1960](https://github.com/hyperlocalise/hyperlocalise/pull/1960), [#1930](https://github.com/hyperlocalise/hyperlocalise/pull/1930), [#1898](https://github.com/hyperlocalise/hyperlocalise/pull/1898), [#1886](https://github.com/hyperlocalise/hyperlocalise/pull/1886), [#1871](https://github.com/hyperlocalise/hyperlocalise/pull/1871))

## Performance

* Faster `run` planning: skip FormatJS JSON detection when `defaultMessage` is absent, skip prompt token substitution on plain prompts, and hash source text without copying the string. About 14% faster on large catalogs and 27% fewer allocations (`BenchmarkPlanTasksLarge`: \~52.4 ms → \~45.0 ms; 150k → 110k allocs/op). ([#1978](https://github.com/hyperlocalise/hyperlocalise/pull/1978))
* Prompt-context sanitizer: single-line inputs allocate nothing; multiline inputs are about 4× faster and use 87% less memory. Large planning runs drop about 10,000 allocations. ([#1927](https://github.com/hyperlocalise/hyperlocalise/pull/1927))
* GNU gettext PO parse/marshal is about 18% faster; parse allocations are cut about 48%. ([#1895](https://github.com/hyperlocalise/hyperlocalise/pull/1895))
* JSONC comment extraction is about 15% faster. ([#1957](https://github.com/hyperlocalise/hyperlocalise/pull/1957))
* Extra-placeholder scan in segment validation is about 53% faster. ([#1869](https://github.com/hyperlocalise/hyperlocalise/pull/1869))
* Liquid, HTML, and Markdown segment keys use 1,000 fewer heap allocations per parser benchmark. ([#1885](https://github.com/hyperlocalise/hyperlocalise/pull/1885))

## Tests

* Subtitle parser edges, lockfile codec, path resolver tokens, path-guard symlink chains, storage-adapter registry, and progress UI renderer.
* Segment-validation fast paths.

## Maintenance

* Bump Go dependencies (Lip Gloss v2.0.6, `golang.org/x/net` v0.58.0, `golang.org/x/text` v0.41.0, protobuf v1.36.12). ([#1873](https://github.com/hyperlocalise/hyperlocalise/pull/1873), [#1850](https://github.com/hyperlocalise/hyperlocalise/pull/1850))
