Self-hosters, please read before upgrading.
- No more Browserless / Chromium dependency. From v5.1.0 onwards, you do not need to run a
printer, Browserless, or headless Chrome service alongside Reactive Resume. PDF generation is now performed entirely in your browser via@react-pdf/renderer. TheBROWSERLESS_TOKEN,PRINTER_ENDPOINT,PRINTER_APP_URL, andFLAG_DEBUG_PRINTERenvironment variables are no longer read and can be removed from your.env. - Update healthcheck script:
curlhas been removed from the base image, so please update to using the new health check script.
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/api/health').then((r) => { if (!r.ok) process.exit(1); }).catch(() => process.exit(1));"]- Database migrations. This release ships several new schema migrations to bring the resume model up to date. They run automatically on container start, but you should back up your PostgreSQL database before upgrading in case rollback is needed.
- Custom CSS has been removed. Because the resume PDF is no longer produced by a headless browser, raw CSS no longer applies to the exported document. A first-class template-customization story is on the roadmap for a future release.
Highlights
- PDF generation moved fully client-side.
@react-pdf/renderernow produces the exported PDF directly in your browser, and the in-builder live preview is rendered withpdfjs, so what you see in the preview is exactly what you'll download. - All resume templates re-ported. Azurill, Bronzor, Chikorita, Ditgar, Ditto, Gengar, Glalie, Kakuna, Lapras, Leafish, Meowth, Onyx, Pikachu, and Rhyhorn have all been re-implemented on the new renderer with section-by-section parity.
Resume Builder
- Pixel-accurate live preview. The builder preview is now rendered with
pdfjsagainst the same document tree used for export, eliminating the long-standing "looks fine in the preview but breaks in the PDF" class of bugs. - TanStack Form everywhere. All 35 form-bearing surfaces in the app — login, register, forgot-password, resume sections, settings, and dialogs — have been migrated to TanStack Form.
react-hook-formand@hookform/*packages have been removed. - TanStack Query is the single source of truth for resume state. The previous standalone Zustand resume store has been retired; optimistic updates, refetching, and error recovery now flow through one cache, behaving consistently across tabs and reloads.
- Native page format and margins. Page size and margin controls are now expressed directly to
@react-pdf/renderer, replacing the Puppeteer-specificprintMarginTemplatesworkaround.
Self-Hosting
- One-service deployment. Self-hosted Compose files no longer need a
printer:service block. The minimum stack is now just Reactive Resume + PostgreSQL (with optional S3-compatible storage and SMTP). /api/healthsimplified. The health endpoint now reportsdatabaseandstorageonly, returning HTTP503if either dependency is unhealthy. There is no longer aprinterfield to monitor.- Updated documentation. The Self-Hosting, Quickstart, Development, Architecture, and Legal pages have all been refreshed to describe the simplified single-service deployment.
Authentication & AI
- Better Auth retained end-to-end with all nine plugins — passkeys, two-factor authentication, OAuth (Google / GitHub / LinkedIn / custom), API keys, dynamic OAuth client registration, dashboard, sentinel, and admin. Existing sessions and logins carry over after the upgrade.
- AI features carry over (Resume Analysis, AI Chat with JSON Patch tool calls, PDF / DOCX import) with the same provider matrix (OpenAI, Google Gemini, Anthropic, Ollama, OpenRouter). The AI router and service layer have been cleanly decoupled from the jobs / tailor flow for a more modular surface.
Removed
- Custom CSS option in the resume builder. With rendering bound to
@react-pdf/renderer, raw CSS no longer applies to the exported PDF. A structured customization API will return in a future release. PRINTER_*andBROWSERLESS_*environment variables, theprinter/{resumeId}route, thegetByIdForPrinterserver function, and the printer-token signing code are all gone.
Maintenance
- Removed dead printer-token utilities and the legacy public RPC surface for printer-only resume reads.
- Tightened the boundary between server-only and client-only code: server modules (database, storage, auth) are lazy-imported so they no longer leak into the client bundle.
- Reverse-proxy timeout guidance in the nginx example has been simplified now that no long-running PDF generation request flows through the proxy.
Full Changelog: v5.0.20...v5.1.0