1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
---
slug: pbech32-v0.1.0
title: "pbech32 v0.1.0"
date: "2026-03-08T02:50:28-04:00"
---
I just released the first version of [pbech32][], a [Rust][] library for
encoding and decoding [Bech32][] data.
[Bech32][] is a fast and user-friendly [base 32][] encoding format
that includes a [namespace][] and [checksum][].
### Links
- [pbech32 Git repository][git repository]
- [pbech32 package on crates.io][crates-io-pbech32]
- [pbech32 API Documentation on docs.rs][docs-rs-pbech32]
### Library Features
- [Bech32 (BIP173)][bip173] and [Bech32m (BIP350)][bip350] support.
- Idiomatic encoding and decoding via the [`Display`][display] and
[`FromStr`][fromstr] traits.
- Decode arbitrarily long strings.
- Streamed, allocation-free encoding to any [writer][].
- No external dependencies.
### Examples
Decode from string:
```rust
use pbech32::Bech32;
let s = "a1qypqxpq9mqr2hj"; // bech32m-encoded string
let got: Bech32 = s.parse()?; // decode string
assert_eq!(got.hrp.to_string(), "a"); // check human-readable part
assert_eq!(got.data, vec![1, 2, 3, 4, 5]); // check data
```
Encode to string:
```rust
use pbech32::{Bech32, Hrp, Scheme};
let scheme = Scheme::Bech32m; // checksum scheme
let hrp: Hrp = "a".parse()?; // human-readable part
let data = vec![1, 2, 3, 4, 5]; // data
let got = Bech32 { scheme, hrp, data }.to_string(); // encode as string
assert_eq!(got, "a1qypqxpq9mqr2hj"); // check result
```
Encode to a [writer][]:
```rust
use std::io::Write;
use pbech32::{Encoder, Hrp, Scheme};
let mut vec: Vec<u8> = Vec::new(); // output vector
let hrp: Hrp = "hello".parse()?; // human readable part
{
let mut enc = Encoder::new(&mut vec, Scheme::Bech32m, hrp)?; // create encoder
enc.write_all(b"folks")?; // write data
enc.flush()?; // flush encoder (RECOMMENDED)
}
let got = str::from_utf8(vec.as_ref())?; // convert output vector to string
assert_eq!(got, "hello1vehkc6mn27xpct"); // check result
```
More examples are available in the [`examples/` directory][examples] of
the [pbech32 Git repository][git repository].
### Updates
- 2026-03-27: [pbech32 v0.2.0][]: Add `impl Drop for Encoder`. Fix
clippy warnings. Minor documentation improvements.
[bech32]: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki
"Bech32 (BIP173)"
[bech32m]: https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
"Bech32m (BIP350)"
[bip173]: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki
"BIP173 (Bech32)"
[bip350]: https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
"BIP350 (Bech32m)"
[ascii]: https://en.wikipedia.org/wiki/ASCII
"ASCII (Wikipedia)"
[base 32]: https://en.wikipedia.org/wiki/Base32
"Base 32 (Wikipedia)"
[checksum]: https://en.wikipedia.org/wiki/Checksum
"Checksum (Wikipedia)"
[namespace]: https://en.wikipedia.org/wiki/Namespace
"Namespace (Wikipedia)"
[alphabet]: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#bech32
"BIP173: Specification: Bech32"
[writer]: https://doc.rust-lang.org/std/io/trait.Write.html
"writer"
[age encryption]: https://age-encryption.org/
"age encryption"
[html]: https://en.wikipedia.org/wiki/HTML
"HyperText Markup Language"
[rust]: https://rust-lang.org/
"Rust programming language."
[git repository]: https://github.com/pablotron/pbech32
"pbech32 git repository"
[pbech32]: https://github.com/pablotron/pbech32
"pbech32 Rust library"
[cargo]: https://doc.rust-lang.org/cargo/
"Rust package manager"
[podman]: https://podman.io/
"Podman container management tool"
[docker]: https://docker.com/
"Docker container management tool"
[api]: https://en.wikipedia.org/wiki/API
"Application Programming Interface (API)"
[linter]: https://en.wikipedia.org/wiki/Lint_(software)
"Static code analysis tool to catch common mistakes"
[crates.io]: https://crates.io/
"Rust package registry"
[docs-rs-pbech32]: https://docs.rs/pbech32
"pbech32 API documentation on docs.rs"
[crates-io-pbech32]: https://crates.io/crates/pbech32
"pbech32 on crates.io"
[examples]: https://github.com/pablotron/pbech32/tree/main/examples
"pbech32 examples/ directory"
[cargo-tarpaulin]: https://crates.io/crates/cargo-tarpaulin
"Tarpaulin code coverage reporting tool."
[display]: https://doc.rust-lang.org/std/fmt/trait.Display.html
"std::fmt::Display trait"
[fromstr]: https://doc.rust-lang.org/std/str/trait.FromStr.html
"std::str::FromStr trait"
[pbech32 v0.2.0]: https://github.com/pablotron/pbech32/releases/tag/0.2.0
"pbech32 version 0.2.0"
|