# What changed in @scure/base

> 19 changes in @scure/base 2 from its official release notes, upgrade guides and advisories: 11 breaking, 3 new APIs and options. Each one cited. Sources checked 2026-10-19. HTML: https://unstale.sh/npm/@scure/base/

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

## @scure/base 2

### Breaking changes

- Rejects non-ASCII input that becomes valid only through case folding. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Inputs are limited to 2048 bytes because of quadratic complexity. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Inputs are limited to 2048 bytes because of quadratic complexity. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Rejects non-printable-ASCII input instead of allowing case folding to normalize it into a valid string. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Enforces the 90-character BIP-173 length limit by default; pass false or a number to override. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Rejects non-printable-ASCII prefixes. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Rejects non-printable-ASCII input instead of allowing case folding to normalize it into a valid string. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Enforces the 90-character BIP-173 length limit by default; pass false or a number to override. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Rejects non-printable-ASCII prefixes. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- Error messages are improved and type checks are stricter. (2.3.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.3.0)
- The UTF-8 decoder is now strict and uses isWellFormed, which is polyfilled in some environments. (2.2.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.2.0)

### New APIs and options

- Adds a base36 coder for lowercase alphanumeric encoding with the multibase k payload used by IPFS/IPNS addresses. (2.4.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.4.0)
- An overload allows Bech32.decode to handle arbitrary string input. (2.2.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.2.0)
- A strict ASCII decoder is added for character codes in the range 0..127. (2.2.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.2.0)

### Performance

- Encoding and decoding algorithms are substantially faster, including base64, base32, base16, bech32 toWords, and base58 decode. (2.3.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.3.0)
- Source maps are disabled, reducing the on-disk package size. (2.3.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.3.0)
- Tree-shaking is improved to reduce bundle sizes. (2.2.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.2.0)

### Fixes and other changes

- Compilation issues on TypeScript v6 are fixed. (2.2.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.2.0)
- Byte array types now work with TypeScript 5.6 and TypeScript 5.9+, avoiding incompatibilities and errors such as TS2345. (2.2.0) — [release notes](https://github.com/paulmillr/scure-base/releases/tag/2.2.0)
