Documentation

Get paperr running
on your own machine.

npx paperr, run two commands, open it from any device on your network. Node 22.5+ is the only hard requirement — everything else, including the local AI, sets itself up.

Prerequisites

  • Node.js 22.5+ — the server uses the built-in node:sqlite module, which needs 22.5 or later.
  • Python 3 (optional) — lets npm install auto-provision paperr's own bundled AI server. Skipped safely if Python isn't found; add it later and re-run npm install in server/ to enable it.
  • Ollama or LM Studio (optional) — external local LLM providers, if you'd rather point dotAi at one of those instead of the bundled server.

Quick start

Fetch paperr and start the dev servers. install:all creates server/.env from the example and auto-generates real random JWT_SECRET / JWT_REFRESH_SECRET values — there's no manual copy/paste step, and it never overwrites secrets you've already set.

$ npx paperr             # fetches paperr into ./paperr
$ cd paperr
$ npm run install:all   # root + server + client deps, writes .env
$ npm run dev           # API :3000 · client :5173
$ git clone https://github.com/biswasprateek/paperr.git
$ cd paperr
$ npm run install:all   # root + server + client deps, writes .env
$ npm run dev           # API :3000 · client :5173
# (re-)generate server/.env only — safe, never overwrites set secrets
$ npm run setup:env

Both options land in the same place — the npm package is just a thin fetcher. paperr is a self-hosted app, not a library, so there's nothing to npm install into an existing project.

On first launch, the Setup Wizard walks you through creating your first space and admin account. Every new space is seeded with type-appropriate starter lists, a starter routine, and a "Welcome to Paperr" onboarding project that tours the app.

Bundled AI server

npm run install:all (which runs npm install inside server/) automatically provisions paperr's own local AI model via litert-lm — a small, efficient AI model that runs on as little as CPU in under 2GB of RAM, uses your iGPU or GPU when available — scaling to the hardware you have — and auto-offloads from memory when idle. It looks for a Python interpreter to build a project-local virtual environment at server/ai/litert/venv:

PlatformLooks for
Windowspy -3, then python
macOSpython3, then python
Linuxpython3, then python

If no Python interpreter is found, this step is skipped with a warning and the rest of the install continues normally. Install Python 3 and re-run npm install in server/ to enable it later, or use Ollama / LM Studio instead. Once installed, manage the server — start/stop, live memory usage, auto-offload, model picker, extra models — from Settings → paperr AI Server.

Production

Recommended for everyday use. Build the client once, then let Express serve the API and app together on port 3000.

# one click — builds the client, then serves on :3000
> ./start-paperr.ps1
> ./start-paperr.ps1 -NoBuild   # skip rebuild if current
# one click on macOS / Linux
$ ./start-paperr.sh
$ npm run build   # bundles the React app
$ npm start       # Express serves API + app on :3000

Then open http://<your-machine-ip>:3000 from any device on your network.

Network access

paperr binds to 0.0.0.0, so it's reachable from every device on your LAN. Find your local IP (ipconfig on Windows, ifconfig / ip a on Linux/macOS) and open:

$ http://192.168.x.x:3000

Tip: Set a static IP or DHCP reservation for the host machine so the URL never changes, and add a desktop/taskbar shortcut to the launcher for one-click startup. Any spare tablet — an old iPad, a Fire tablet, an Android slate — can then be mounted as an always-on shared screen.

Configuration

server/.env is created automatically by npm run install:all, with the JWT secrets pre-generated. Edit it directly to adjust anything else:

VariableDefaultDescription
PORT3000Server port
JWT_SECRETauto-generatedSigns access tokens
JWT_REFRESH_SECRETauto-generatedSigns refresh tokens
DB_PATH./data/databases/paperr.dbSQLite database file path
UPLOADS_PATH./uploadsFile attachment storage
LLM_BASE_URLhttp://localhost:11434Ollama / LM Studio base URL
LLM_MODELllama3Local model name for dotAi
HTTPS_ENABLEDfalseEnable TLS on the LAN (optional)

Keep LLM_BASE_URL pointed at the bundled server or a local Ollama / LM Studio to stay fully private. Pointing it at an endpoint outside your LAN — OpenAI, OpenRouter, or any other hosted API — means the data dotAi reads is transmitted to that third party. See AI privacy.

Demo data

Want paperr pre-populated to explore? The seed script creates a fully-populated demo space — "The Reyes Family", 4 members, realistic tasks, projects, notes and routines across every section.

$ node scripts/seed-demo.cjs   # log in with password: paperrdemo1

Log in as any member with the password paperrdemo1 (maya is admin). Re-running it wipes and recreates just that demo space.

Tech stack

LayerTechnology
RuntimeNode.js 22.5+ (built-in node:sqlite)
APIExpress.js
DatabaseSQLite via node:sqlite — single file, zero config, no native build
AuthJWT (HTTP-only cookies) + bcrypt (bcryptjs)
Real-timeSocket.io
Schedulingnode-cron (backups, proactive agents)
FrontendReact 18 + Vite + React Router v6
StateZustand + React Query
StylingTailwind CSS
Editors / Charts / DnD / Dates@uiw/react-md-editor · Recharts · @dnd-kit · date-fns
Bundled AIlitert-lm server paperr installs and supervises itself (Win / macOS / Linux)
External AIAny OpenAI-compatible local LLM — Ollama, LM Studio, llama.cpp
Imagessharp — downscales curated Frame art to match uploads
LicenseApache 2.0

Project layout

paperr/ ├── server/ Express API — routes, auth, SQLite, AI tools & agents │ ├── routes/ tasks, lists, projects, calendar, notes, routines, spaces, agents, backups… │ ├── ai/ LLM client, tool defs, handler, scheduler, agents, bundled-server supervisor │ ├── services/ backups, notifications, cross-route business logic │ ├── data/ hand-curated starter content (Frame art, Good Thoughts) │ ├── scripts/ postinstall setup — auto-provisions the AI server's Python venv │ └── db/ schema.sql + node:sqlite setup ├── client/ React + Vite app │ └── src/ │ ├── pages/ Tasks, Projects, Calendar, Notebooks, Routines, Frame, Agent Hub… │ ├── modes/ Desktop / Phone / Tablet layouts │ ├── components/ Shared UI — task form, Deep Work overlay, backups, agents… │ ├── store/ Zustand stores (focus, deep work, clock, UI…) │ └── widgets/ Home board & Hub board widgets ├── start-paperr.ps1 One-click Windows launcher └── start-paperr.sh One-click macOS/Linux launcher

Want to contribute? See CONTRIBUTING.md in the repo for setup, PR guidelines, and how to file a bug report.

Back to the overview →