← Docs

Local-first by default

Libre Academy is local-first. By default:

  • Every course is a JSON file on disk (or in IndexedDB in the browser)
  • Progress, XP, and streak counters live in SQLite (desktop) / IndexedDB (browser)
  • The AI tutor runs against a local Ollama instance, so zero tokens get billed and there’s no cloud round-trip
  • Anonymous, cookieless product analytics (self-hosted, first-party Plausible) help us improve the apps. No personal data, no cross-site tracking, no error reporters, and you can turn it off anytime under Settings → Data & storage. Beyond that and the optional cloud-sync toggle, there are no outbound calls except the playground proxies

What does talk to a server?

A small, well-defined set of things:

  • The Anthropic backend for the AI tutor, if you flip it on under Settings (the local Ollama path stays default)
  • Cloud sync, if you sign in. Small JSON progress records, nothing else
  • The Rust + Go playgrounds at play.rust-lang.org and play.golang.org, since neither toolchain ships with Libre Academy
  • Product analytics (self-hosted, first-party Plausible). On by default, but anonymous and cookieless, with no personal data and no cross-site tracking. Turn it off anytime under Settings → Data & storage

Everything else, including PDF ingest, lesson rendering, and code execution for the in-browser languages, runs entirely on your machine.