Concourse is a local-first learning suite for building routes, practicing retrieval, and exchanging portable course packs. The same application facade runs in the browser and in a Tauri desktop shell.
- Project site: https://concourse.conalhickey.com
- Contributing: CONTRIBUTING.md
- Roadmap: ROADMAP.md
- Security: SECURITY.md
- A polished learning workspace for Today, Routes, Loop retrieval practice, Transfer pack management, Progress, profiles, and settings.
- Deterministic learning sessions with evidence, feedback, recaps, concept side paths, and local persistence.
- Portable learning-pack contracts and an SDK for validation, canonical hashes, deterministic archives, release diffs, and atomic installation.
- Browser directory imports and a Tauri desktop adapter for a user-selected Courses folder and durable installed-pack records.
- Defensive handling for untrusted packs: bounded archive reads, path checks, capability validation, canonical-byte verification, and known-good release preservation.
- Learner-controlled pack-asset delivery for notebooks, scripts, datasets, and text-based lab files. Concourse re-verifies active-release bytes before an explicit browser download or bounded atomic desktop save, and never previews or executes the asset.
- Three built-in subjects plus a distributable Logic Foundations course pack adapted from CC BY 4.0 source material.
- Comprehensive TypeScript and Rust coverage across contracts, pack tooling, application flows, browser persistence, React UI, and native storage.
- Concourse: the suite and app shell
- Route: course creation and course learning
- Loop: flashcards, retrieval practice, and review
- Transfer: course and pack exchange
- Modes: configurable learning and presentation settings
Requirements: Node.js 22.12 or newer and npm 11.
npm ci
npm run devThe browser app opens at http://127.0.0.1:5173.
For the desktop shell, install the Tauri system prerequisites, then run:
npm run desktop:devnpm run verify
npm audit --omit=dev
cargo test --locked --manifest-path src-tauri/Cargo.tomlnpm run verify checks formatting, lint, workspace packages, all TypeScript
tests, type safety, and the production browser build.
src/ learning core, application, adapters, and UI
src-tauri/ native desktop shell and filesystem commands
packages/learning-pack-contracts portable pack schema and validators
packages/learning-pack-sdk archive, hashing, diff, and CLI tooling
content/logic-foundations authored Logic Foundations course source
courses/logic-foundations generated canonical pack documents
The learning core remains framework-agnostic. Browser and desktop behavior enters through adapters, while imported pack documents remain canonical and runtime views are derived projections. See docs/architecture.md and docs/decisions/ for the boundaries and decision history.
Concourse has no accounts, hosted learner state, analytics, or application backend. Browser progress stays in browser-local storage; desktop pack state and the selected Courses folder stay on the local machine. Imported packs may contain external resource links such as YouTube or Vimeo, but opening those links is an explicit learner action.
The bundled learner profile is fictional demo data and does not represent a real person.
Pack authoring and integration guidance lives under docs/learning-packs/. The example Logic Foundations pack can be rebuilt with:
npm run build:logic-foundationsPack authors can expose learner-saved notebooks, Python files, CSV data,
Markdown, plain text, and YAML through the optional
learning-resource.pack-asset@1 capability. See the
resource authoring guide
and delivery-boundary decision.
Concourse software and the two workspace packages are available under the MIT License. Learning-pack content carries its own license in pack metadata; the bundled Logic Foundations course is CC BY 4.0 with attribution in courses/logic-foundations/README.md.