Live demo · Query-private vector search

Let the server search.
Keep your question to yourself.

The database is public. Your question does not have to be. FHE lets a server calculate on encrypted data without decrypting it.

Loading the application. If this message stays visible, check that the local server is running and reload this page.

HTTPS protects the connection. FHE keeps the query encrypted during calculation too. Comparison only: no plaintext request is sent here.

01 Your browser

Browser-side encryption

Choose a group to generate a nearby sample vector. We will find the closest records in a seeded, synthetic database. This is not text search or a real customer database.

Search in English. This lightweight demo matches words, not meaning.

Example query (local)
1Encrypt here
2Compare on server
3Read here
Ready
Ready
0%
Status Idle
Session
Total elapsed
Private keys live only in this tab's worker. Reloading or cancelling releases them.

02 The server's view

Public database / encrypted query
Database
Preview database labels

Cluster membership is synthetic metadata, not a guarantee of the nearest match.

Watch the server work without a readable query

  1. 1. Browser encrypts
  2. 2. Server computes
  3. 3. Browser decrypts
Query sent to serverNo query sent yetReal ciphertext appears when you run the search.
Scores returned to browserNo response received yetThe reply is encrypted too.
Question text Not sentDecryption key Browser onlyDatabase Open to server

No receipt yet

Inspect the actual exchange
Fields in the first POST /v1/query
-
Query ciphertext SHA-256
-
First returned score ciphertext SHA-256
-
First batch request ID
-

Previews use real ciphertext, not generated animation. Fingerprints identify the first query and first score of the first batch; the server independently hashes those bytes. Compare the receipt in Network. This is a transport check, not a proof of correct computation or an independent security audit.

Demo scope

This small public catalog could also be searched entirely locally. The demo shows encrypted server computation, not a need for FHE at this size. Preset questions are public examples.

Only titles and short summaries are indexed, not full source pages. Opening a source visits an external website; your query is not included in the link.

03 Back in your browser

Highest dot product after local decryption. Not a probability.

Your matches will appear here. The server compares encrypted vectors; only this browser can read the scores.

What took the time?

Key generation + preparation-
Query encryption-
HTTP wait (includes server work)-
Server compute (reported)-
Local decryption-
Request bodies sent-
Response bodies received-

These timings overlap; do not add HTTP wait and server compute. Bytes exclude HTTP headers and the WASM download. Cancellation does not stop an in-flight server batch.

What This Demo Does

The API receives encrypted query vectors, not their plaintext values. This demo uses reproducible sample queries with public seeds; they are not secrets. A real application must supply private client-side input.

Database

Random vectors are generated on the server (seeded) and stored in plaintext. Similarity = dot product.

Query

Generated in your browser, normalized, packed into CKKS slots, encrypted, and sent to the server.

Computation

Server computes encrypted dot‑products with rotate‑sum and returns encrypted scores.

Ranking

Browser decrypts scores locally and shows Top‑K results.

Encryption Params