Skip to content

Repository files navigation

Slax Reader

Open-source, AI-powered read-it-later — save web pages, highlight, and discuss.

Slax Reader web app

Get Slax Reader

Follow @SlaxReader on X for updates.

What it does

  • Permanent snapshots — saved pages stay readable even after the original link dies.
  • AI reading aids — outlines, summaries, and in-context answers while you read.
  • Highlight and discuss — annotate any passage, then share the page; anyone with the link can join the discussion.

Repository structure

This monorepo hosts all non-mobile Slax Reader code:

Path Description
apps/web Web frontend (r.slax.com)
apps/extension Browser extension (Chrome/Edge)
apps/api API server (Cloudflare Workers: Core, Edge, AI and Browser)
apps/cli Command-line client
packages/contracts Shared API, domain and event contracts (@slax-reader/contracts)
packages/frontend-types Shared Web/Extension implementation types
packages/frontend-utils Shared frontend utilities
packages/selection Shared highlighting and annotation engine
deploy/ Public API templates and local Web, Extension and API infrastructure
docs/ Web, Extension and API development documentation

Shared libraries belong in packages when at least two apps use them. See the Web architecture for the current application and package boundaries.

Development and self-hosting

Install dependencies once from the repository root:

pnpm install --frozen-lockfile

The root exposes one dispatcher per application while each app keeps its concrete command list:

pnpm preflight
pnpm setup:all
pnpm api -- dev
pnpm web -- dev
pnpm extension -- dev

pnpm preflight checks the Node.js/pnpm runtime and the API, Web, and Extension module states without changing local files or services. After configuration is prepared, pnpm setup:all runs API setup, Web setup, and Extension setup in order. Run the three dev commands separately; setup never starts application servers.

The API's setup command prepares local dependencies and exits; dev starts Workers separately. Use pnpm api -- setup when only the API needs to be initialized again. Remote deployment and migrations remain explicit operations with their safety checks. See the API development guide (中文, 日本語).

Preflight distinguishes startup blockers (当前无法启动) from missing functionality (可启动,但无法正常运行), such as unavailable Docker or missing login settings. Both return exit code 1; optional features do not. See Reading preflight results for status meanings and recovery steps.

Web and Extension configuration lives alongside the API's under deploy/local/, distinguished by filename: .env.web/.env.web.example for Web, .env.extension/.env.extension.example for Extension. The API uses the public template deploy/cloudflare/api.toml.example and ignored local configuration under deploy/local/. Secrets belong in ignored local environment files or platform secret stores; do not put them in tracked templates or browser bundles.

API commands and API-specific configuration belong to apps/api/, including Prisma configs under prisma/ and deployment code under script/deploy/. The root api command forwards to the scripts declared by apps/api/package.json. Validation commands include:

pnpm api -- gen:all
pnpm api -- lint
pnpm api -- typecheck
pnpm api -- test
pnpm api -- build

The API's setup command prepares local dependencies and exits; dev starts Workers separately. Remote deployment and migrations remain explicit operations with their safety checks. See the API development guide (中文, 日本語).

Shared HTTP types live in packages/contracts. Web, Extension, API and future CLI code imports the contract package and does not import application internals.

Contributing

Bug reports, features, and docs are all welcome. You can contribute without a development environment through Web 开发与参与指南 or Extension development. Please follow our Code of Conduct.

License

Apache License 2.0. Copyright is held by The Slax Reader Contributors — see NOTICE for details.

Releases

Packages

Contributors

Languages