Tiny footprint
The WASM module and its built-in dictionary total under 227KiB gzipped — no multi-megabyte dictionary to fetch or host.
A lightweight tokenizer compiled to WebAssembly. Under 227KiB gzipped, it runs entirely client-side — no server, no multi-megabyte dictionary.
Client-side Japanese tokenization, without the usual server, dictionary, and privacy trade-offs.
The WASM module and its built-in dictionary total under 227KiB gzipped — no multi-megabyte dictionary to fetch or host.
Runs entirely in the browser or your runtime. No tokenization server, no API round-trip, no CORS setup.
Analysis happens on-device, so user input never leaves the browser and sensitive text stays out of your infrastructure.
Boundaries come from character patterns rather than a fixed dictionary, so brand names, slang, and technical terms stay intact.
Near-native WASM speed with a synchronous API. Tokenize on every keystroke without network latency.
A C++ core with first-class TypeScript types, plus Python and native C/C++ bindings for backend, batch, and embedded use.
Choose an everyday, colloquial, dialectal, or classical example, or paste your own text. Processing stays in your browser.
TinySegmenter's light footprint, closer to MeCab's detail — Suzume sits between them.
| Feature | Intl.Segmenter Built-in | TinySegmenter Light | Suzume | kuromoji | MeCab Accurate |
|---|---|---|---|---|---|
| Browser | ✓ | ✓ | ✓ | △ | ✗ |
| External Dictionary Setup | Not required | Not required | Bundled | Required | Required |
| Bundle Size | 0KB | ~10KB | 227KiB | ~20MB | N/A |
| Server-free | ✓ | ✓ | ✓ | △ | ✗ |
| POS Tagging | ✗ | ✗ | ✓ | ✓ | ✓ |
| Lemmatization | ✗ | ✗ | ✓ | ✓ | ✓ |
| Compound Nouns | ✗ | ✗ | ✗ | ✓ | ✓ |
| Custom Dictionary | ✗ | ✗ | ✓ | ✓ | ✓ |
| Unknown Words | △ | △ | ✓ | △ | △ |
npm install @libraz/suzumeyarn add @libraz/suzumepnpm add @libraz/suzumebun add @libraz/suzumepip install suzumegit clone https://github.com/libraz/go-suzume.git
cd go-suzume && make lib
cd /path/to/your/module
go mod edit -replace github.com/libraz/go-suzume=/path/to/go-suzume
go get github.com/libraz/go-suzumegit clone https://github.com/libraz/suzume.git
cd suzume && make installFor Python services and data pipelines, see the Python bindings guide. Suzume is also available through the Go binding and as a C / C++ library.
The bindings expose the same analysis model with names adapted to each language:
import { Suzume } from '@libraz/suzume'
const suzume = await Suzume.create()
try {
for (const m of suzume.analyze('東京都に住んでいます')) {
console.log(m.surface, m.pos, m.baseForm)
}
} finally {
suzume.destroy()
}from suzume import Suzume
with Suzume() as sz:
for m in sz.analyze("東京都に住んでいます"):
print(m.surface, m.pos, m.base_form)package main
import (
"fmt"
"log"
"github.com/libraz/go-suzume"
)
func main() {
analyzer, err := suzume.New()
if err != nil {
log.Fatal(err)
}
defer analyzer.Close()
for _, m := range analyzer.Analyze("東京都に住んでいます") {
fmt.Println(m.Surface, m.POS, m.BaseForm)
}
}#include "suzume/suzume.hpp"
#include <cstdio>
int main() {
suzume::Tokenizer tokenizer;
for (const suzume::Morpheme& m : tokenizer.analyze("東京都に住んでいます"))
std::printf("%s\t%s\t%s\n", m.surface.c_str(), m.pos.c_str(), m.base_form.c_str());
}Each token carries a surface form, POS, base form, offsets, and more. See the JavaScript/WASM, Python, Go, or C / C++ reference for binding-specific names.