Skip to the text
Scholaris

Scholaris on your computer, or in your own Cloudflare account

The same app with SQLite and your disk: on Node, in Docker, as a desktop executable or deployed to your Cloudflare account. What stays on your machine and how it works offline.

Reviewed on This page as Markdown

Four ways

The instance at scholaris.joseluissaorin.com is the hosted version, the one paid for with the Pro plan. The same code also runs on your computer:

HowWhat it isWhere your data lives
NodeThe same API on Node, SQLite (with sqlite-vec for vectors) and the disk, with a queue that resumes if interrupted; listens on port 8790The folder you choose
DockerThe same in a container with ffmpeg; a variant runs it offline with its models (Ollama, EmbeddingGemma 2 and Whisper), with or without an NVIDIA GPUA Docker volume
DesktopA single executable (Bun) for macOS, Windows and Linux, with the web app inside, that opens the browser on start~/Scholaris
Your Cloudflare accountA script creates the database, storage, vector index and queue, and deploys the Worker (needs paid Workers)Your account

The home version has no quotas: the "local" plan does not limit documents, pages or searches, and takes files up to 16 GB. It can have a single user, several without an external account, or use Clerk to sign in.

Open source

The code will be published under the EUPL-1.2 at github.com/joseluissaorin/scholaris-v2. While the review is finished the repository is private: we are not giving a date. The exact installation commands will be in its README, which takes precedence over this page. The Python SDK already carries the same licence.

What stays on your machine and what does not

In the home version, your files, your library, the vectors and the index live on your disk. You choose where the intelligence runs:

  • With your keys (Gemini; OpenRouter, TypeSafe and Workers AI optional): the fastest and most faithful. Pages, audio and passages go to those providers, under their terms.
  • Offline (SCHOLARIS_SIN_CONEXION=1): no cloud key at all. Everything runs on your machine or your network and nothing goes out to the internet; a network guard blocks and logs any attempt, and an end-to-end test checks it.
PieceOfflineWith a cloud provider
Reading pages (scans, photos, slides)Your own vision model: Qwen3-VL 8B Instruct on Ollama, llama.cpp or vLLMGemini, OpenRouter (Mistral OCR) or Workers AI
VectorsEmbeddingGemma 2 (text, image, audio and video, 768 dimensions), on its own server or on InferBoxGemini Embedding 2
Rerankingbge-reranker-v2-m3Jev (TypeSafe) or Workers AI
Judging citations and draftingThe same vision model, with probabilities from logprobsJev, Gemini or OpenRouter
TranscribingWhisper large-v3-turbo (whisper.cpp) or Parakeet on InferBoxGemini Transcribe or Whisper on Workers AI
Bibliographic recordsOnly what the document says (online catalogues open with SCHOLARIS_CATALOGOS=1)Crossref, OpenAlex, Open Library, Wikidata

What it costs, measured on an M4 Max Mac: an eighteenth-century scanned page takes about 26 s (the cloud reads the whole book in 13-20 s), with a CER of 0.06 on the hand-transcribed page against 0.006 with Gemini; 19 minutes of audio are ready in 2 min 34 s; search scores 0.804 nDCG@10 against 0.899; and every citation it accepts is correct and none is invented, though it leaves more claims without a citation than the cloud does (61.5 % recall against 100 %). On CPU alone, reading scans takes minutes per page. The full report, with how to reproduce it, is in the repository (packages/proveedores/SIN-CONEXION.md), and the all-in-one Docker setup in deploy/docker/compose.sin-conexion.yml.

On top of that, opening and searching an .spdf that has already been read works with none of the above, through the Python SDK (see The SPDF format).

The same from outside

The home version speaks the same API (v1 and v2) and the same MCP as the cloud, so the Python SDK, the examples in the API guide and agents work the same pointed at http://localhost:8790.