The smallest and fastest Base64 implementation in JavaScript based on atob and btoa from browser native or Buffer from node
# pnpm
pnpm add ab64
# yarn
yarn add ab64
# npm
npm i ab64import { decode, decodeUrl, encode, encodeUrl } from 'ab64'
encode('Hello World!') // SGVsbG8gV29ybGQh
encode('dankogai') // ZGFua29nYWk=
encodeUrl('dankogai') // ZGFua29nYWk
encode('小飼弾') // 5bCP6aO85by+
encodeUrl('小飼弾') // 5bCP6aO85by-
decode('SGVsbG8gV29ybGQh') // Hello World!
decode('ZGFua29nYWk=') // dankogai
decodeUrl('ZGFua29nYWk') // dankogai
decode('5bCP6aO85by+') // 小飼弾
decodeUrl('5bCP6aO85by-') // 小飼弾If you're running on a non Node environment where atob and btoa could be unavailable, you may want to include the polyfill manually
import 'ab64/polyfill'
// same as above thenatob and btoa are also available exported as ab64/ponyfill which does not polyfill by default
import { atob, btoa } from 'ab64/ponyfill'
// same as browser nativeSince mini app (from wechat) does not support global polyfill, so you have to use the separate mini-app entry instead which uses the above ponyfill inside
import { decode, decodeUrl, encode, encodeUrl } from 'ab64/mini-app'Or you should add an alias mapping ab64 to ab64/mini-app in your rollup/vite/webpack configuration
| 1stG | RxTS | UnTS | 
|---|---|---|
| 1stG | RxTS | UnTS | 
|---|---|---|
Detailed changes for each release are documented in CHANGELOG.md.