openreader/docs-site/docs/reference/stack.md
Richard R f5d7408f17 refactor(pdf-layout): remove compute "none" mode and unsupported parse status
Eliminate the "none" compute mode and all related code paths, including the NoneComputeBackend, "unsupported" parse status, and PDF margin settings. Parsing is now always available if the app starts successfully, and configuration is limited to "local" or "worker" compute modes. Update types, API routes, client adapters, and documentation to reflect this simplification.

BREAKING CHANGE: "none" is no longer a valid COMPUTE_MODE; only "local" and "worker" are supported. "unsupported" parse status and PDF margin settings are removed.
2026-05-19 18:25:27 -06:00

4 KiB

title
Stack

Framework

Containerization and runtime

  • Docker (linux/amd64 and linux/arm64)
  • Shared entrypoint that runs DB migrations by default and can bootstrap embedded SeaweedFS before app startup

Next.js client

Next.js server

  • APIs: Route Handlers for sync, blob/content access, migrations, audiobook export, TTS/Whisper proxying
  • State sync: request-based today (not realtime push updates)
  • Authentication: Better Auth server handlers/adapters with anonymous session support
  • Metadata DB: Drizzle ORM with SQLite (better-sqlite3) by default and optional Postgres (pg)
    • App tables are manually maintained in Drizzle schema files
    • Auth tables are auto-generated by the Better Auth CLI and migrated alongside app tables via Drizzle
  • Blob storage: embedded SeaweedFS (weed mini) by default, or external S3-compatible storage via AWS SDK v3
  • TTS providers: OpenAI-compatible API (openai SDK), Replicate (replicate client), DeepInfra, and custom OpenAI-compatible endpoints — credentials are encrypted at rest
  • Audio pipeline: ffmpeg (ffmpeg-static) for audiobook assembly, archiver for export packaging
  • Utilities: lru-cache for in-process caching, fast-xml-parser for EPUB/XML parsing, uuid for identifier generation, zod for schema validation

External compute worker (optional)

Monorepo packages under compute/:

  • @openreader/compute-core — ONNX runtime lifecycle, model management, and inference logic shared between local and worker modes
    • ONNX runtime: onnxruntime-node with @huggingface/tokenizers
    • Whisper alignment: onnx-community/whisper-base_timestamped (int8) for word-level timestamps
    • PDF layout: Bei0001/PP-DocLayoutV3-ONNX for document block detection and layout parsing
    • PDF rendering: pdfjs-dist, @napi-rs/canvas for server-side page rasterization
    • Utilities: jszip, ffmpeg-static
  • @openreader/compute-worker — standalone Node.js worker service
    • HTTP server: Fastify v5
    • Job queue: BullMQ + ioredis (queues: whisper-align, pdf-layout)
    • Storage: AWS SDK v3 S3 client for reading/writing blobs
    • Logging: Pino
    • Validation: Zod
  • Compute mode is controlled by COMPUTE_MODE env var: local (in-process) or worker (remote queue via HTTP + Redis)

Tooling and testing

  • ESLint
  • TypeScript
  • Playwright end-to-end tests
  • Drizzle migration/generation scripts
  • Docusaurus documentation site (docs-site/)