tiktoken

Fast BPE tokenizer for OpenAI models, providing WASM and pure-JS bindings for Node, browsers, and edge runtimes.

Library
npm
v1.0.22
1,073 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
47 /100 Fair
Development Activity 0
Maintenance 44
Community 52
Maturity 52
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
67 /100 Good
Architecture 78
Code Quality 62
Innovation 74
Learning Curve 55

tiktoken is the JavaScript/WASM port of OpenAI’s Python tiktoken library, giving Node.js, Bun, and browser-based applications the same byte-pair-encoding tokenizer used internally by GPT models. It ships prebuilt encodings for every OpenAI encoding scheme (gpt2, r50k_base, p50k_base, p50k_edit, cl100k_base, o200k_base) so developers can count tokens, truncate prompts, or estimate API costs without making a network call.

The repository builds two distinct npm packages from a shared Rust core compiled to WebAssembly: tiktoken, a full-featured WASM build with 1-to-1 feature parity with the Python original, and js-tiktoken, a pure-JavaScript port for environments like Vercel Edge Functions or Cloudflare Workers where WASM support is limited or undesired. Both expose the same encode/decode/encoding_for_model API surface, and a lightweight tiktoken/lite entry point lets consumers load only the encoding they need instead of bundling every vocabulary.

What You Get

  • Precompiled BPE encodings for every OpenAI tokenizer scheme (gpt2, r50k_base, p50k_base, p50k_edit, cl100k_base, o200k_base) available via a single get_encoding() call
  • A model-aware encoding_for_model() helper that maps any current OpenAI model name, including gpt-4o, gpt-4.1, gpt-5, and the o-series reasoning models, to its correct encoding
  • A lightweight tiktoken/lite plus tiktoken/load entry point for loading only the ranks you need, sized for edge runtimes like Cloudflare Workers and Vercel Edge Functions
  • A pure-JavaScript sibling package (js-tiktoken) for runtimes where WASM isn’t well supported, with matching encode/decode semantics
  • Support for custom vocabularies and special tokens by constructing a Tiktoken instance directly from your own BPE ranks and pattern string

Common Use Cases

  • Counting tokens client-side or server-side before sending a prompt to the OpenAI API, to stay under context-window limits
  • Estimating and tracking per-request API costs by converting text length into exact billed token counts
  • Truncating or chunking long documents to fit a fixed token budget for RAG pipelines and chat history windows
  • Running consistent tokenization in edge functions (Vercel, Cloudflare Workers) where the Python tiktoken library isn’t available

Under The Hood

Architecture

tiktoken is built as a Rust/WASM monorepo with a clear layered design: a shared core crate (core/src/lib.rs) implements the byte-pair-merge tokenization algorithm (CoreBPENative) independent of any binding target, a wasm/ crate wraps that core with wasm-bindgen to expose a Tiktoken class (wasm/src/lib.rs) compiled via wasm-pack into the published tiktoken npm package, and a separate pure-JavaScript js-tiktoken package (under js/) reimplements the same encode/decode surface for WASM-constrained runtimes like Vercel Edge Functions. Turborepo and Yarn workspaces coordinate builds across these packages plus a legacy-compatibility alias package (wasm/alias), and Changesets drives versioned, independent npm publishes for each.

Tech Stack

The tokenizer core relies on fancy_regex for pattern matching and rustc_hash::FxHashMap for fast rank lookups, bridged to JavaScript via wasm-bindgen and gloo-utils; the WASM build is produced with wasm-pack build --target bundler, then post-processed by TypeScript scripts (scripts/postprocess.ts, scripts/alias.ts) that generate the final dist/ output. Tests run under Vitest, and the README documents explicit integration recipes for Node.js, Bun, Vite, Next.js, Create React App (via Craco), Vercel Edge Runtime, Cloudflare Workers, and Electron, reflecting broad target-runtime support.

Code Quality

Vitest test files under wasm/test/ (test_simple_public.test.ts, init_error.test.ts) cover the public API’s encode/decode round-trip across multiple encodings and its error-throwing behavior on invalid model/encoding names, and CI (.github/workflows/build_js.yml) enforces yarn build and yarn test on every pull request. Error handling in the Rust layer is explicit, converting internal failures into typed JsError/unwrap_throw exceptions rather than swallowing them, though test coverage is comparatively thin for a tokenizer with this much downstream usage, and no dedicated lint step is wired into CI.

API Design The public API deliberately mirrors the original Python tiktoken almost one-to-one (get_encoding, encoding_for_model, .encode()/.decode()), which lowers the learning curve for teams porting existing Python token-counting logic into JavaScript. A tiktoken/lite entry point paired with a registry-driven load() helper is a JS-specific addition for loading a single encoding’s ranks on demand in bundle-size-constrained edge environments, and the README’s per-runtime setup guides are unusually thorough; the main rough edge is the requirement to manually call .free() to release WASM memory, an unfamiliar pattern for typical JS developers.

Used by 23 apps in this directory

TypeScript
96%
Apache 2.0

Pezzo

AI Development · Monitoring

3,277

Open-source LLMOps platform for prompt management, AI observability, intelligent caching, and real-time cost tracking across LLM providers.

View details
60
Repo Health
75
Technical
66
Dependency
Built with
TypeScript 96%
Updated 2 months ago
JavaScript
86%
AGPL 3.0

SillyTavern

AI Assistants

34,272

The power-user LLM frontend that unifies dozens of AI backends with a rich scripting engine, immersive Visual Novel mode, and a thriving extension ecosystem.

View details
90
Repo Health
71
Technical
64
Dependency
Built with
JavaScript 86%
Updated 3 weeks ago
TypeScript
72%
Apache 2.0

Supabase

Authentication · Databases · Developer Tools

111,288

The open-source Postgres development platform that replaces Firebase with authentication, real-time APIs, edge functions, storage, and vector embeddings — all built on PostgreSQL.

View details
90
Repo Health
91
Technical
62
Dependency
Built with
TypeScript 72%
MDX 26%
Updated 1 weeks ago
TypeScript
96%
Other

superglue

AI Agents · Data Engineering · Developer Tools

2,066

superglue is an AI-agent-driven integration engine that turns plain-English descriptions of enterprise systems into production-grade API tools, ERP/CRM connectors, and data pipelines — self-hosted or cloud, Y Combinator-backed (W25).

View details
45
Repo Health
79
Technical
67
Dependency
Built with
TypeScript 96%
Updated 2 months ago
TypeScript
98%
Apache 2.0

Tianji

Analytics · Monitoring

3,106

Replace Google Analytics, UptimeKuma, and Prometheus with one self-hosted platform that tracks websites, monitors uptime, and reports server health.

View details
85
Repo Health
76
Technical
65
Dependency
Built with
TypeScript 98%
Updated 2 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers