Skip to content
AutoSuggesAutoSugges home
Start free
Menu
Appearance
Appearance: System.

Turn any list into fast, accurate autocomplete

Publish an immutable version of your list once and AutoSugges serves it from the edge — so a keystroke never waits on a database, and your list stays yours.

Every suggestion shows what you typed

The characters you enter stay in full ink; the rest is what AutoSugges supplied. This is a real query against the platform’s countries list, answered from the Cloudflare edge — the same component you would mount, on the same runtime your own lists are served from.

Wire this into your own list on an integration guide.

Try any list

Every platform dataset is free to query on every plan, including Free (see pricing). Pick one: each is a live query against the Cloudflare edge, with the exact code that runs it.

Loading the live demo…

Example result: Africa > Western Africa > Burkina Faso

Code for this list

import { createAutosuggesClient } from '@autosugges/client';
import { Autocomplete } from '@autosugges/client/react';

// List: world-regions
// Example query: burkina
const autosugges = createAutosuggesClient({
  baseUrl: 'https://runtime.autosugges.com',
  publishableKey: 'YOUR_PUBLISHABLE_KEY',
});

void autosugges.bootstrap().catch(() => {});

export function WorldRegionsSearch() {
  return (
    <Autocomplete
      source={autosugges}
      label="Search World regions"
      placeholder="Start typing…"
    />
  );
}
Provenance and schema

Cities

A live hierarchy query against the platform's own Cities list — pick a city and its state and country fill themselves in.

Code for this demo

import { createAutosuggesClient } from '@autosugges/client';
import { Autocomplete } from '@autosugges/client/react';

// List: cities
const autosugges = createAutosuggesClient({
  baseUrl: 'https://runtime.autosugges.com',
  publishableKey: 'YOUR_PUBLISHABLE_KEY',
});

void autosugges.bootstrap().catch(() => {});

export function CitiesForm() {
  return (
    <>
      <Autocomplete
        source={autosugges}
        label="City"
        placeholder="Start typing a city"
        fillAncestors={{ 1: 'country', 2: 'state' }}
      />
      <label>
        State
        <input name="state" />
      </label>
      <label>
        Country
        <input name="country" />
      </label>
    </>
  );
}
Provenance and schema

From your list to an edge lookup

Three steps. The published version is what answers every query — never a live query against your data.

  1. 1. Author a list

    Add items with hierarchy, aliases, locales and metadata — through the dashboard or a CSV/JSON import.

  2. 2. Publish an immutable version

    A version activates only after it verifies. Once published, it never changes — no client ever sees data mixed from two versions.

  3. 3. Serve it from the edge

    Every query is answered from the edge, close to your users, from the version you published.

See how publishing and lookups work

Built so your data stays yours

Tenant isolation and secret handling are not a feature you enable — they are built in.

  • Isolated by tenant

    Every tenant's data is isolated from every other tenant's.

  • Credentials kept apart

    Signing keys and billing records are stored separately from your list data.

  • Your database is never in the path

    Autocomplete is served from your published version, never from your database.

  • Origin-restricted keys

    Publishable keys can be restricted to your own origins, and usage limits are enforced on our side, never trusting the client.

A few lines, not an integration project

The same @autosugges/client package the docs teach is what you ship — debounce, cancellation and ARIA wiring included.

import { useState } from 'react';
import { createAutosuggesClient } from '@autosugges/client';
import { Autocomplete } from '@autosugges/client/react';

// One client per app, created outside the component so it survives re-renders.
const autosugges = createAutosuggesClient({
  baseUrl: 'YOUR_RUNTIME_BASE_URL',
  publishableKey: 'YOUR_PUBLISHABLE_KEY',
});

// Reads the list's real minChars/debounce. Fire-and-forget: the
// component works on documented fallbacks until this resolves, and the SDK has
// already logged any failure once at its own boundary.
void autosugges.bootstrap().catch(() => {});

export function CityField() {
  const [city, setCity] = useState('');
  const [region, setRegion] = useState('');
  const [errorCode, setErrorCode] = useState<string | undefined>();

  return (
    <>
      <Autocomplete
        source={autosugges}
        label="City"
        placeholder="Start typing a city"
        onSelect={(item, { ancestors }) => {
          // item.value is what you store; item.displayValue is what was shown.
          // ancestors is the precomputed hierarchy chain, root first — use it to
          // auto-fill state/country fields without a second request.
          setCity(item.value);
          setRegion(ancestors.map((ancestor) => ancestor.displayValue).join(', '));
        }}
        onError={(error) => {
          // error is an AutosuggesError. Switch on error.code — the codes and
          // their remediation are listed below. Never invent a message string.
          setErrorCode(error.code);
        }}
      />
      <input type="hidden" name="city" value={city} />
      <input type="hidden" name="region" value={region} />
      {errorCode !== undefined && <p role="alert">Lookup unavailable ({errorCode}).</p>}
    </>
  );
}

React, Next.js, Expo and vanilla JS guides all carry the same Copy for AI / LLM control next to the code.

AutoSugges in numbers

Figures you can check against the docs and the platform's published limits.

Default result limit
10 suggestions
A list owner can set another default.
Default minimum query length
2 characters
Configurable per list, never 1.
Default debounce
150 ms
Delivered with the list settings and raisable per list.
Free reference datasets
24
Never priced on their own; every plan includes them.
Measured round-trip latency, p50 / p95
72 ms / 92 ms
Measured on 2026-09-23 from a single client; includes the network round trip.

As of .

Priced on queries, not on features

Every plan gets the same platform: aliases, hierarchy, localization and the SDK. What scales with your plan is how many queries you get and how many domains you can map — the Free tier gets everything except a custom subdomain or domain.

Start free

No card required to try it — publish a list and query it today.