A free, private resume builder that typesets real PDFs in your browser. No account, no paywall on the download, and your data never leaves your device.
Most online resume builders let you write for free and then charge for the PDF, or keep your data on their servers. This one doesn't:
- Private by design: everything runs and is saved in your browser. There is no backend and no account.
- Real typesetting: resumes are compiled with Typst running as WebAssembly, so the PDF has proper typography and embedded fonts, and looks the same on every device.
- No lock-in: your resume is a standard JSON Resume file. Import one from any JSON Resume tool, or export yours and take it elsewhere.
- Free and open source: MIT licensed. Use the hosted version or self-host it with Docker.
Five layouts, each with any accent color and font pairing:
- 🎨 Five layouts: Sidebar, Classic, Minimal (ATS friendly), Banner and Timeline
- 🖌️ Simple design choices: an accent color (every other color is derived from it so text stays readable), five font pairings, text size and density
- 📝 Live preview: the real pages update as you type, with zoom, fit-to-width and a page count
- 🔄 Flexible sections: add, remove, reorder and hide any JSON Resume section, and place it in the main column or the sidebar
- ✋ Drag and drop: reorder sections and entries, and edit entries inline
- 💾 Export: PDF, JSON Resume or plain text (for pasting into application forms)
- 🤖 AI import: turn an existing CV file into an editable resume with a model of your choice via OpenRouter, using your own API key
- 📱 Works on mobile: usable on desktop and phones
- 📚 CV writing guide: built-in tips on writing a good resume
If this saved you from a paywalled resume site, a ⭐ on GitHub helps other people find it. Bug reports, ideas and pull requests are welcome too: see CONTRIBUTING.md and the open issues.
The resume is a JSON Resume document; src/resume/ holds the section definitions (which drive the editor forms, the renderer and the AI output schema) and the app settings stored under meta.resumeBuilder. Text fields use Markdown.
Templates live in src/typst/templates as Typst files. src/typst/document.js turns the resume into JSON that the templates read, and src/typst/TypstService.js runs the compiler in the browser to produce the SVG preview and the PDF. Fonts are bundled as TTF files in public/fonts (Typst cannot use system fonts in the browser); to change the set, edit src/typst/fonts.js and run node scripts/fetch-fonts.mjs.
- Node.js (v20 or higher) and npm/yarn, OR
- Docker and Docker Compose (v2.22.0 or later)
-
Clone the repository:
git clone https://github.com/gianfrancodemarco/resume-builder.git cd resume-builder -
Install dependencies:
npm install # or yarn install -
Start the development server:
npm run dev # or yarn dev -
Open your browser and navigate to
http://localhost:5173
-
Clone the repository:
git clone https://github.com/gianfrancodemarco/resume-builder.git cd resume-builder -
Start with Docker Compose Watch:
docker compose up --build --watch
-
Open your browser and navigate to
http://localhost:5173
- Vue 3 - Progressive JavaScript framework
- Vuetify 3 - Material Design component framework
- Typst via typst.ts - Typesetting compiled to WebAssembly, for the preview and the PDF
- JSON Resume - Open resume data format, validated with jsonschema
- TipTap with tiptap-markdown - Rich text editor for the Markdown fields
- marked - Markdown parsing for the Typst templates
- vue-draggable-plus - Drag and drop for sections and entries
- OpenRouter - LLM access for AI generation and CV import
- Phosphor Icons - Icon library
- Vite and Vitest - Build tool and test runner
- Docker - Containerization platform
- Docker Compose - File watching and hot reload
This project is a work in progress, provided "as is" without warranties. Much of the code was written with AI assistance. Please report any bugs you find.
This project is licensed under the MIT License - see the LICENSE file for details.
- Icons by Phosphor Icons
- CV Writing Guide by Guido Penta
- Inspiration from modern resume templates


