About this site

SecureRAG is a static website whose only tool answers questions about your own documents without sending them anywhere: the parsing, indexing and retrieval code runs in the browser tab, and the models that power it are downloaded once into your own browser storage. This page covers why it exists, what it is built from, what it refuses to do, and how to check all of it yourself.

Last updated:

This is a website about a browser-local retrieval tool: static HTML and JavaScript, no backend, no database, no account, and a single outbound request that fetches model weight files by name. It exists because the alternative for most people is uploading a document to a service they cannot inspect, and because the technical pieces needed to avoid that have only recently become good enough to work in a browser tab.

What this site is, and what it is not

Table 1 — the shape of the project
QuestionAnswer
What it isA set of static files that deliver one tool: ask questions about your own PDF, DOCX or text files, with citations, entirely in the browser
What it is notNot a company, not a service with an account system, not a storage provider, not an API, not a chatbot with memory
Where documents goNowhere. They are parsed in the tab and stored in your own IndexedDB and Cache Storage
What it costsNothing. There is no paid tier, no trial and no subscription to cancel
How it is fundedGoogle AdSense on a limited set of pages, loaded personalized only after you agree
Who runs itOne developer and a small number of contributors. No company entity, no registered office, no funding round to describe

Why it was built

The trigger was ordinary. A contract, a report and a set of meeting notes needed answering, and every tool available wanted the file first. Uploading a client contract to a third-party service means deciding that a company you cannot audit may hold it indefinitely, and for a lot of documents that is simply not a decision worth making. The obvious alternative, reading 200 pages by hand, is slow enough that people take the upload instead.

What changed recently is that retrieval no longer needs a server. A small embedding model quantised to int8 is about 23 to 25 MB, a browser can run it through WebAssembly in seconds, and an index of 20,000 chunks fits comfortably in IndexedDB. Once those three facts hold, the server stops being a requirement and starts being a data collection point. This site is what you get when you remove it.

Where the privacy stance comes from

The stance is architectural rather than a promise. There is no upload endpoint to secure, no server-side index to encrypt, no retention period to shorten, because there is no server holding the data. That removes a class of risk that a policy document cannot remove: a subpoena, a breach, an acquihire, a misconfigured storage bucket. It also means we cannot help you recover anything, and that trade is the whole point of this page.

The same logic applies to accounts. An account exists to give a server someone to bill, remember and identify. Remove the server and the account has nothing left to do, which is why there is no sign-up form anywhere on this site.

What it is built from

Every piece is open source and public, which is what makes the claims above checkable by reading code rather than by trusting a sentence.

Table 2 — the stack, and the job each part does
ComponentRole here
Astro, static outputGenerates the pages as pre-built HTML with no server-side rendering at request time, which is why the site can be served from any static host
Preact islandsShips only the interactive parts as JavaScript: the workspace, the file drop zone, the settings panel. A documentation page loads no application code
Transformers.jsRuns the embedding and generation models in the browser, with the same model files the upstream libraries consume
onnxruntime-webExecutes the ONNX model graphs, on WebGPU where available and through WebAssembly on the CPU otherwise
PDF.jsParses PDF files in the browser and keeps page numbers attached to the extracted text, which is what makes a citation point at a page
jszipReads DOCX, which is a ZIP container of XML parts, and keeps heading levels attached to the text inside it
IndexedDBStores text chunks and their vectors per knowledge base in your browser
Cache StorageStores the model weight files, so the download happens once per model rather than once per visit

The WebAssembly binaries that onnxruntime needs are published with the site itself rather than pulled from a third-party content network, so the number of external hosts involved in the tool stays at one: the model host.

What we deliberately do not do

  • No accounts. There is no registration, no login and no email address required to use the tool, so there is nothing to lose in a credential breach.
  • No cloud sync. Documents indexed on one machine are not available on another, because syncing them would require a server to hold them. Moving an index means re-importing the files.
  • No bring-your-own-key upload. The site does not ask for an API key and does not offer to send your documents to a provider under your credentials. That design would keep the file leaving your device, which is the thing this project exists to avoid.
  • No analytics, no tracking pixels and no session recording. There is no third-party measurement script on any page; the only third-party script present is the advertising one, and only where ads exist and personalized only with your consent.
  • No training on your content, and no mechanism by which it could happen, because no copy of it leaves the browser.
  • No claim of accuracy. The tool retrieves and, optionally, generates; it does not verify. Anything that has to be right gets checked by a person against the cited passage.

How to verify us in about two minutes

01

Watch the network while you add a file

Open DevTools with F12, go to the Network tab, clear it, filter by Fetch/XHR and drop in a document. No request carries the file. What you see are GET requests for ONNX weight files, with a file name in the path and no request body.

02

Pull the plug and ask a question

Switch the Network panel to offline and ask something about the document you just imported. The answer arrives with citations, which is only possible if retrieval, chunking and embedding were local all along.

03

Look at what is stored, and where

In the Application tab, expand IndexedDB and you will find a database called securerag, holding one metadata record per document and, under an index key, the chunk text with its Float32Array vectors; expand Cache Storage on the same origin and you will find the model weights. Clear site data and both are gone, with nothing left for us to delete.

04

Read the page source for what is missing

View source on any page and search for the usual analytics hosts. There is no measurement script, no font or script pulled from a third-party content network, and no hidden form posting anywhere.

05

Check the model host yourself

The models page names each model and links to its upstream page, where you can read the parameter count, the quantisation and the licence, and compare them with the figures published here.

06

Then tell us what you found

If a check above fails, that is a bug worth reporting rather than a wording problem. Write to guweiicy@gmail.com with the browser you used and what you saw.

A claim you cannot test is worth less than one you can. Everything asserted on this site is meant to be checkable from your own browser, without an account, a tool from us or a leap of faith.

Known limitations, stated here as well

The tool is deliberately small in scope, and the honest list is: it runs only on current browsers with WebAssembly and writable site storage; it refuses encrypted PDFs, scanned PDFs without a text layer, legacy .doc and any file above 25 MB; a knowledge base holds at most 40 documents, 200 MB and 20,000 chunks, with 10 files on phones; the optional generator is roughly 3 to 8 tokens per second on the CPU path and produces text that still has to be checked against its citations; and indexing lives per browser profile, so a cleared site or a new machine starts from an empty index.

Contact

Corrections, questions and reports go to guweiicy@gmail.com. The contact page describes what to include so that a report can be acted on, and the changelog records what changed once it has been.