Skip to content

ExBook/ExLocal

Repository files navigation

ExLocal logo

ExLocal

搭建你的个人题库。Local-first question bank, quiz review, notes, records, and export.

Release Desktop Apps Version Tauri React TypeScript Local first

What Is ExLocal?

ExLocal is a local-first study app for people who want to own their question banks. It focuses on a calm academic workflow: create banks, add rich questions, import Markdown, practice by chapter or knowledge point, review records, write notes, and export professional PDF or portable backup packages.

The same React app runs in the browser and inside a Tauri v2 desktop shell.

Highlights

  • Bank cards with tags, custom soft colors, question counts, and progress bars.
  • Rich question editor with inline code, code blocks, inline math, block math, images, alignment, and scaling.
  • Markdown import with templates, live preview, format validation, math rendering, and unsaved-content protection.
  • Practice mode with immediate feedback and exam mode with unified submission.
  • Countdown quiz mode with forced submission when time expires.
  • Completion review with numbered navigation, answer correctness colors, correct answers, and explanations.
  • Favorites, wrong-question set, notes, and session-based quiz records.
  • Selective export from banks, favorites, wrong questions, and notes.
  • Full .exlocal backup packages containing banks, questions, records, notes, settings, and embedded images.
  • Desktop backup directory selection with platform-aware defaults.
  • PDF export with product branding and Chinese font support.

Desktop Downloads

Release artifacts are published from the main branch by GitHub Actions:

  • macOS Apple Silicon
  • macOS Intel
  • Windows x64
  • Linux x64
  • Experimental Windows ARM64 and Linux ARM64 runners are included when GitHub hosted runners are available.

Download from GitHub Releases.

Online Demo And Website

The official website lives in website. It is a static Vite site intended for Cloudflare Pages.

Useful commands:

npm run site:dev
npm run site:build
npm run site:preview

After deployment, point the online demo CTA to the hosted web app route.

Tech Stack

Layer Choice
Frontend React 18, TypeScript, Vite
UI Mantine v7, TipTap, Recharts
State Zustand
Storage IndexedDB with Dexie
Desktop Tauri v2
Export pdfmake, html2canvas, jsPDF, JSZip
Testing Vitest, fake-indexeddb

Architecture

ExLocal uses a layered frontend architecture:

React UI -> Services -> Repositories -> IndexedDB

UI components do not access Dexie directly. Services own import/export, quiz judging, settings, and data transformation. Repositories isolate storage details so a future SQLite or API backend can be added without rewriting route screens.

Read the full maintenance document in docs/design.md.

Development

Install dependencies:

npm install

Run the web app:

npm run dev

Run the desktop app:

npm run desktop:dev

Build the web app:

npm run build

Build the desktop app for the current platform:

npm run desktop:build

Verification

Run the standard checks before release:

npm run lint
npx vitest run
npm run build
npm run desktop:build

The GitHub Actions release workflow also runs lint, unit tests, web build, website build, and then native Tauri packaging.

Data Ownership

Runtime data is stored locally in IndexedDB. Desktop builds additionally support writing .exlocal backup packages to a configured local directory. The backup format is a zip package containing backup.json plus images/, so it can move between devices without losing rich-text images.

Documentation

Status

ExLocal is currently at 0.1.0. The app is ready for local-first study workflows, but the storage boundary is intentionally kept flexible for future SQLite, sync, and mobile work.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors