PackageTrack

npm

@exodus/bytes

1.15.1ExodusOSS/bytes

Various operations on Uint8Array data

Release timeline

31 releases since 2025
20252026

One column per month.

Releases

  1. 1.15.120 May 2026
    Release notes

    What's Changed

    • fix: don't use bigint literals by @exo-mv in #72

    New Contributors

    Full Changelog: v1.15.0...v1.15.1

    Open source →
    Additional notes

    v1.15.1 Latest

    Latest

    Compare

    Choose a tag to compare

    Open source →
  2. 1.15.04 Mar 2026
    Release notes
    • feat: isomorphicDecode(), isomorphicEncode() in /encoding.js (in #68)
    • doc: deprecate latin1toString() / latin1fromString() in favor of isomorphicDecode() / isomorphicEncode() (see #55)
    • feat: fromBase32crockford / toBase32crockford in /base32.js
    • feat: typedCopyBytes() in /array.js
    • feat: add 'arraybuffer' output format support in methods accepting format parameter (in #70)
    • feat: 'uint8' (default) output format now never returns pooled Uint8Array instances (see below)

    This release brings support of native ArrayBuffer return format (under the name of format: 'arraybuffer').

    Converting Uint8Array to ArrayBuffer downstream is non-trivial, and there is a lot of confusion in the ecosystem around those.
    A simple access to .buffer is often seen and is incorrect -- code accepting Uint8Arrays that it didn't create should not assume that it did not receive for example a result of .subarray() (where .buffer size mismatches the view size), or a Node.js pooled Buffer instance (which are also Uint8Arrays).

    That pattern (using .buffer and failing to check bounds) has been a source of numerous errors in ecosystem libraries.

    To minimize the risks from such mistakes, this library now never returns Uint8Array instances (default format) that are not complete views of their underlying ArrayBuffer.

    In other words, now the following are true for a returned Uint8Array instance u8:

    • u8.buffer.byteLength === u8.byteLength
    • u8.byteOffset === 0
    • deepStrictEqual(new Uint8Array(u8.buffer), u8)

    The affected parts (which previously returned non-complete views / subarrays) are:

    1. On multiple platforms: fromBase58Check, createMultibyteEncoder, createSinglebyteEncoder
    2. On Node.js import condition only (any Node.js version): latin1fromString, utf8fromString, utf16fromString
    3. On Node.js import condition with Node.js < 25: fromHex, fromBase64

    This comes at a reasonable performance cost (almost exclusively on Node.js import condition), but correctness/security comes first.

    Note

    This change doesn't affect TextEncoder, which is already governed by the Encoding Standard which demands non-pooled Uint8Arrays.

    This also doesn't affect typedView() (from /array.js) which by definition is always a view of the same underlying ArrayBuffer data.
    But now typedCopyBytes() is introduced.

    Important

    This change does not affect 'buffer' return format, which can still return pooled Buffer instances.
    This is similar to the behavior of native Buffer.from / Buffer.alloc which are pooled.

    Apart from making returned Uint8Array instances complete views, a dedicated ArrayBuffer return format is introduced to eliminate the need to use .buffer on the returned values in downstream code at all (as it's a bad pattern in general and tooling/lint will/should flag that).

    Full Changelog: v1.14.1...v1.15.0

    Open source →
    Additional notes

    v1.15.0

    Compare

    Choose a tag to compare

    Open source →
  3. 1.14.113 Feb 2026
    Release notes

    fix: ensure TextEncoder never returns pooled arrays

    Previous implementation always ensured 0-offset Uint8Array (ret.byteOffset === 0),
    but not that there is no data past the returned view (ret.byteLength === ret.buffer.byteLength).

    This is now fixed.

    This only affected Node.js-like platforms, as only there native buffers are pooled.

    Full Changelog: v1.14.0...v1.14.1

    Open source →
    Additional notes

    v1.14.1

    Compare

    Choose a tag to compare

    Open source →
  4. 1.14.012 Feb 2026
    Release notes
    • Fix makeBase58check() Typescript types

    • Add sideEffects configuration

      Only @exodus/bytes/encoding.js export has side-effects, and those side-effects are internal:

      It is documented to load multi-byte codecs for both this import and future (and previous) /encoding-lite.js imports, even if the current import does not use the provided TextDecoder.

      Both /encoding.js and /encoding-lite.js are designed to return the exact same TextDecoder class and methods, and loading full implementation provides multi-byte encodings support everywhere.

      As /encoding-lite.js can be used as a global polyfill, the setup has to avoid polyfill conflicts if something loads /encoding.js and then something else replaces it with /encoding-lite.js (or vice versa)

      The same mechanism is reused to keep /whatwg.js minimal by default, and only support multi-byte encodings if /encoding.js was imported and loaded them at any point.

      This is not a new change, just documenting the existing behavior and exposing sideEffects configuration so that bundlers can optmize out other imports.

    • Further bundle size optimizations

    Full Changelog: v1.13.0...v1.14.0

    Open source →
    Additional notes

    v1.14.0

    Compare

    Choose a tag to compare

    Open source →
  5. 1.13.011 Feb 2026
    Release notes

    What's Changed

    • Bundle size reductions, especially for browsers

      Under browser module resolution target, we rely on browsers to have a working UTF-8 / UTF-16 / windows-1252 (latin1 subset) TextDecoder implementation that doesn't have bugs when used without streaming and with ignoreBOM: true, and a TextEncoder

      While browsers have bugs even in UTF-8, those bugs are related to streams and/or BOM processing, and that specific combination we use seems to be always robust.

      In previous versions we already used native codepaths for those where possible and operated under the same assumption.

    • Disable hex/base64 performance optimization for Firefox >=133 <146

      We used a guarded useragent check for those versions to prefer js fallback instead of native base64 / hex implementations, as native was slow before FF 146 (ref: https://bugzilla.mozilla.org/show_bug.cgi?id=1994067 and linked issues)

      As the usage of FF <146 diminished according to caniuse stats, this check is not worth it anymore.

      This version removes that useragent check.

      Those Firefox versions are still supported by the library, but now the native base64 / hex implementation is always used when available.

      See 8cab29a for implementation details.

    Full Changelog: v1.12.0...v1.13.0

    Open source →
    Additional notes

    v1.13.0

    Compare

    Choose a tag to compare

    Open source →
  6. 1.12.08 Feb 2026
    Release notes
    • Fix UTF-16 on platforms with present but broken native UTF-16 TextDecoder (e.g. workerd, see cloudflare/workerd#6028)
    • Test in CI on workerd, xs and graaljs

    Full Changelog: v1.11.0...v1.12.0

    Open source →
    Additional notes

    v1.12.0

    Compare

    Choose a tag to compare

    Open source →
  7. 1.11.01 Feb 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v1.10.0...v1.11.0

    Open source →
    Additional notes

    v1.11.0

    Compare

    Choose a tag to compare

    Open source →
  8. 1.10.026 Jan 2026
    Release notes

    What's Changed

    • Add TypeScript types for all entry points
    • Test and accept Uint8Array<SharedArrayBuffer> input
    • Add iso-2022-jp fatal encoder (in #36)
    • Improve documentation

    Full Changelog: v1.9.0...v1.10.0

    Open source →
    Additional notes

    v1.10.0

    Compare

    Choose a tag to compare

    Open source →
  9. 1.9.018 Jan 2026
    Release notes
    • Implement strict multi-byte encoders, except for iso-2022-jp for now
    • Add /encoding-browser.js to load only native lightweight TextDecoder/TextEncoder in browser bundles
    • Add /index.js export with usage warning, mostly for IDEs
    • Switch /base58check.js peer dep (used on non-Node.js platforms) to @noble/hashes directly (previously @exodus/crypto)
    • Fix legacyHookDecode() behavior on non-even (incomplete) UTF-16 byte length
    • Fix utf16toString(uint16arr) on Big-Endian Node.js
    • Performance improvements in encoders and decoders

    Full Changelog: v1.8.0...v1.9.0

    Open source →
    Additional notes

    v1.9.0

    Compare

    Choose a tag to compare

    Open source →
  10. 1.8.02 Jan 2026
    Release notes

    What's Changed

    • feat: support iso-8859-1, iso-8859-9, iso-8859-11 encodings in single-byte.js
    • feat: latin1fromString, latin1toString
    • feat: types for encoding.js by @ajaymathur in #12
    • feat: types for encoding-lite.js
    • perf improvements for encodings

    New Contributors


    Full Changelog: v1.7.0...v1.8.0

    Open source →
    Additional notes

    v1.8.0

    Compare

    Choose a tag to compare

    Open source →
  11. 1.7.028 Dec 2025

    Nothing published for this version

  12. 1.6.025 Dec 2025

    Nothing published for this version

  13. 1.5.024 Dec 2025

    Nothing published for this version

  14. 1.4.024 Dec 2025

    Nothing published for this version

  15. 1.3.023 Dec 2025

    Nothing published for this version

  16. 1.2.022 Dec 2025

    Nothing published for this version

  17. 1.1.022 Dec 2025

    Nothing published for this version

  18. 1.0.020 Dec 2025

    Nothing published for this version

  19. 1.0.0-rc.1217 Dec 2025pre-release

    Nothing published for this version

  20. 1.0.0-rc.1116 Dec 2025pre-release

    Nothing published for this version

  21. 1.0.0-rc.1015 Dec 2025pre-release

    Nothing published for this version

  22. 1.0.0-rc.915 Dec 2025pre-release

    Nothing published for this version

  23. 1.0.0-rc.86 Dec 2025pre-release

    Nothing published for this version

  24. 1.0.0-rc.73 Dec 2025pre-release

    Nothing published for this version

  25. 1.0.0-rc.62 Dec 2025pre-release

    Nothing published for this version

  26. 1.0.0-rc.514 Oct 2025pre-release

    Nothing published for this version

  27. 1.0.0-rc.46 Oct 2025pre-release

    Nothing published for this version

  28. 1.0.0-rc.33 Oct 2025pre-release

    Nothing published for this version

  29. 1.0.0-rc.219 Sept 2025pre-release

    Nothing published for this version

  30. 1.0.0-rc.119 Sept 2025pre-release

    Nothing published for this version

  31. 1.0.0-rc.019 Sept 2025pre-release

    Nothing published for this version