typeahead.js

A fast, flexible autocomplete library combining the Bloodhound suggestion engine with a jQuery-based UI view.

Library
npm
v0.11.1
16,437stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
48/100Fair
Development Activity0
Maintenance0
Community92
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
68/100Good
Architecture80
Code Quality65
Innovation55
Learning Curve70

typeahead.js grew out of the autocomplete search box on twitter.com and splits the problem into two independent pieces: Bloodhound, a client-side suggestion engine that indexes and ranks data, and Typeahead, the jQuery UI plugin that renders suggestions and wires up keyboard/DOM interaction. The two are designed to be used together but can also be used on their own, so a team can swap in a custom rendering layer while keeping Bloodhound’s indexing, or plug a different data source into the existing UI.

Bloodhound builds a Trie over tokenized data so prefix lookups stay fast even as a dataset grows, and layers on prefetching (with localStorage caching), rate-limited remote requests, and local-data merging so suggestions can blend cached, local, and network-backed results without extra plumbing. The project has been dormant since 2015 on npm and 2023 on GitHub, but its architecture and cross-browser test suite (down to IE8) remain a useful reference for anyone building a jQuery-era autocomplete widget or maintaining a legacy app that still depends on it.

What You Get

  • A jQuery plugin ($.fn.typeahead) that turns any text input into a suggestion-driven typeahead with keyboard navigation, hint text, and custom rendering templates
  • Bloodhound, a standalone suggestion engine usable independently of the UI layer, with Trie-based tokenized indexing for fast prefix matching
  • Built-in support for multiple named datasets rendered in the same menu, useful for grouping suggestions by category
  • Prefetch caching via localStorage plus rate-limited, cancellable remote AJAX requests, so a dataset can combine bundled, cached, and live-fetched suggestions
  • A custom event system (typeahead:select, typeahead:render, typeahead:asyncrequest, etc.) for hooking into every stage of the suggestion lifecycle
  • Precompiled-template support for suggestion, header, footer, notFound, and pending states, so markup is fully customizable per dataset

Common Use Cases

  • Adding a search-as-you-type autocomplete box to a jQuery-based web app without pulling in a full SPA framework
  • Building a typeahead over a bundled/local dataset with no network calls needed
  • Building a typeahead that prefetches a dataset once, caches it in localStorage, and falls back to remote lookups for anything not covered locally
  • Maintaining or extending legacy applications that already depend on typeahead.js and can’t easily migrate to a React/Vue-based alternative

Under The Hood

Architecture typeahead.js separates concerns cleanly across src/bloodhound/ and src/typeahead/: bloodhound.js orchestrates a SearchIndex (Trie-based token index), an optional Remote (rate-limited, cancellable AJAX transport with response caching via transport.js), and an optional Prefetch (one-time fetch plus PersistentStorage localStorage cache) behind a single search(query, sync, async) call that de-duplicates remote results against local ones. The UI half composes Input, Menu, Dataset, and Typeahead objects wired together through a shared EventBus/EventEmitter pub-sub, with plugin.js acting as the thin jQuery adapter ($.fn.typeahead) that instantiates and mixes in a WWW class name/DOM-namespace object (www.js) so every internal class shares consistent class names. Nothing here breaks catastrophically if one piece changes — Bloodhound and the UI communicate only through the source(query, sync, async) contract, so either half can be swapped independently.

Tech Stack The library targets plain ES5 JavaScript with jQuery >=1.7 as its only runtime dependency, built via Grunt (grunt-contrib-concat, grunt-contrib-uglify, grunt-umd to wrap each dist file as a UMD module, grunt-contrib-jshint for linting) into dist/bloodhound.js, dist/typeahead.jquery.js, and a combined dist/typeahead.bundle.js. Distribution was historically via Bower (bower.json) and npm/Composer manifests rather than a single bundler-driven pipeline, and CI ran Karma against real browsers (Chrome, Firefox, Safari, IE8-11) through Sauce Labs via Travis CI, alongside a PhantomJS unit run.

Code Quality The test suite is extensive for its era: dedicated Jasmine specs for every Bloodhound module (bloodhound_spec.js, search_index_spec.js, tokenizers_spec.js, transport_spec.js, remote_spec.js, prefetch_spec.js, lru_cache_spec.js, options_parser_spec.js, persistent_storage_spec.js) and every Typeahead module (typeahead_spec.js, input_spec.js, dataset_spec.js, event_bus_spec.js, event_emitter_spec.js, highlight_spec.js, plugin_spec.js), plus a browser integration suite under test/integration/. .jshintrc enforces single quotes, curly braces, and trailing whitespace checks. There are no TypeScript types and no typed public API, consistent with its 2013-2015 vintage, and the project has had no commits since 2023 and no npm release since 0.11.1 in 2015 — 505 open issues sit unaddressed.

What Makes It Unique For its time, splitting the suggestion engine (Bloodhound) from the rendering layer (Typeahead) was a deliberate, unusual choice that let either half be used or replaced independently, and Bloodhound’s Trie-based index with sorted-array intersection for multi-token queries kept prefix search fast without a server round-trip. The prefetch-then-cache-then-remote-fallback data flow, with automatic de-duplication between local and remote result sets, was a genuinely thoughtful piece of client-side suggestion architecture that predates most JS “headless autocomplete” libraries by several years, even though the ecosystem has since moved toward React/Vue-native equivalents.

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

Search