Typo-tolerant Typesense search, running locally, in one command.
Compatibility note: Requires Node.js 22+. Docker is optional. Without it, point at a Typesense you already run or a Typesense Cloud cluster.
With NPM:
npm create typesense-app@latestOr with npx:
npx create-typesense-app@latestThen follow the prompts!
To skip them, pass a directory and --yes:
# npm 7+, extra double-dash is needed:
npm create typesense-app@latest my-search-app -- --yescd my-search-app
npm run devType hary potr. It finds Harry Potter.
-t, --template <id> nextjs | qwik | solid | vanilla
--dataset <name> books (default) | empty
--port <number> host port for the local server (default 8108)
-y, --yes take the defaults, no prompts
-h, --help show this
-v, --version print the version
| id | Stack |
|---|---|
nextjs |
Next.js + react-instantsearch |
qwik |
Qwik + instantsearch.js, bundled by Vite |
solid |
SolidJS + instantsearch.js connectors, bundled by Vite |
vanilla |
Vanilla JS + instantsearch.js, bundled by Vite |
Both give you the same app. A template is a manifest plus a file overlay, so adding one touches nothing else. See templates/README.md.
- A search box, hits with covers, and one facet
- Typesense in Docker, CORS already configured
- ~10,000 books indexed
- A schema and a seed script, short and commented, in the template's language
- A search-only API key in the browser, scoped to
documents:searchon one collection. The admin key stays server-side and never gets the public prefix.
| Script | Does |
|---|---|
npm run seed |
rebuilds the collection, and restores the search key if it went missing |
npm run typesense:up |
starts the server |
npm run typesense:down |
stops it, keeping your data |
