Magic Resume: a self-hostable AI resume editor built with TanStack Start
free online AI resume editor,the only official website is https://magicv.art
At a glance
- What is it?
- Magic Resume is a free, browser-based resume editor that stores data locally and can call AI providers for writing help. The Apache 2.0 licence carries a non-commercial restriction, which decides most adoption questions before the code does.
- Who is it for?
- Adopt Magic Resume if you want a personal resume editor you can run yourself, with local storage and pluggable AI providers, and if your use stays non-commercial. Do not adopt it if you plan to offer it as a paid service, bundle it into a commercial product, or resell a modified version, because the README states commercial use is prohibited regardless of modification.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 9 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Magic Resume solves, and who it is aimed at
Most resume builders are hosted services. You paste your work history into someone else's database, and the export button sits behind a paywall or a watermark. Magic Resume takes the opposite position: the README describes it as a modern online resume editor with real-time preview, custom themes and PDF export, and it lists local storage and auto-save as features. The editing surface runs in the browser, so the document you are typing into does not have to leave your machine for the core editing loop.
The intended user is an individual writing their own resume. The README's licence section is explicit that personal, non-commercial use is free, and gives "creating your own resume" as the example. A second audience exists: developers who want a resume editor as a starting point and are willing to read TypeScript. The stack is conventional for that crowd, with TanStack Start, TypeScript, Tailwind CSS, Zustand, Tiptap and shadcn/ui listed in the README, and the repository ships a tests directory, a Dockerfile and a wrangler.toml for Cloudflare Workers.
What it is not is a recruiting tool or a multi-tenant SaaS base. There is no server-side user model described in the README, and the storage story is local. If you need a shared workspace where a career coach edits a client's resume, nothing in the documentation covers that.
How the editor, storage and AI layers fit together
The application is a TanStack Start app. TanStack Start handles routing and server functions, and the repository includes both a server.mjs entry point for Node deployments and a wrangler.toml for Cloudflare Workers, so the same codebase can run in two hosting models. The README's AI networking section spells out the consequence: Cloudflare Workers use the platform's native fetch and need no application-level proxy, while Node.js or Docker deployments in regions that cannot reach OpenAI, Gemini or Anthropic can set AI_PROXY_URL, with HTTPS_PROXY and HTTP_PROXY supported as fallbacks.
Editing is handled by Tiptap, which the README lists in the tech stack and which fits the rich-text nature of resume sections: bold, links, highlights and colors are all Tiptap extensions visible in package.json. Zustand holds editor state, and the README lists auto-save and local storage as separate features, which suggests the document is persisted client-side rather than posted to a backend on every keystroke.
AI assistance is provider-based. The topics list names deepseek and doubao, the README says DeepSeek, Qwen and Doubao continue to use a direct connection, and package.json includes @google/generative-ai alongside @lobehub/icons-static-svg, which is the icon set used for provider pickers. The roadmap marks AI-assisted writing and custom model as done. The important architectural point is that the proxy setting exists for three named providers only, so a self-hoster behind a restrictive network should check reachability per provider rather than assume one environment variable fixes everything.
Installing Magic Resume with pnpm and running it locally
The README's quick start is four steps. Clone the repository, install dependencies with pnpm, start the development server, and open the browser. The package manager is pinned in package.json as pnpm@10.3.0, so an older pnpm may produce lockfile warnings.
git clone git@github.com:JOYCEQL/magic-resume.git
cd magic-resume
pnpm install
pnpm devAfter pnpm dev, the README says to visit http://localhost:3000. You should see the editor with a live preview pane. Note that the dev script is vite dev, so the port comes from the Vite configuration rather than from an environment variable in the README.
For a production build, the README gives a single command, and the repository's start script runs the bundled Node server:
pnpm build
pnpm startThe Dockerfile builds in stages, prunes development dependencies, and runs as a non-root user named nodeapp on port 3000, with PORT and HOSTNAME set to 3000 and 0.0.0.0. The compose file maps that port to the host and sets NODE_ENV=production:
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- NODE_ENV=production
restart: alwaysOne configuration gap is worth flagging before you deploy: the compose file does not pass AI_PROXY_URL into the container, so a Docker deployment behind a restricted network needs that variable added to the environment list by hand.
The licence restriction is the real adoption constraint
The repository's licence field is NOASSERTION, while the README badge and text say Apache 2.0. The README then adds a restriction that Apache 2.0 does not contain: commercial use is prohibited, including providing the software as a paid or profit-generating service such as SaaS or PaaS, enterprise commercial operations, resale, or secondary commercial development, regardless of whether the source code has been modified.
That single sentence rules out the most common reason an engineering team would clone a resume editor. Wrapping it in your own product, hosting it for paying users, or shipping a modified fork inside a commercial offering are all described as prohibited. Personal use, learning, and building your own resume are described as free. The README points to the LICENSE file for detailed terms, and given the mismatch between the machine-readable licence field and the prose, that file is the thing to read rather than the badge.
There is a second-order cost. Because the restriction applies regardless of modification, a fork cannot escape it by rewriting the AI layer or swapping the template engine. Any team that needs a permissive licence for a commercial product should treat this repository as a reference implementation to study, not as a dependency to ship. This is not legal advice; the point is that the constraint is stated in the project's own documentation and is easy to miss if you only look at the badge.
Where Magic Resume is the wrong tool
The README lists online resume hosting as an unchecked roadmap item. That means there is no documented way to publish a resume to a URL from the editor itself; the output path described in the README is PDF export. If your workflow is "send a link to a recruiter," this project does not currently cover it, and the roadmap confirms the gap rather than implying a workaround.
Template choice is the second limitation. The roadmap shows more resume templates as unchecked, so the built-in set is what the repository ships today. A designer who needs a specific two-column layout or a regional CV format may find the custom theme support does not stretch that far, since themes and templates are different things in the feature list.
Scale is the third. Local storage as the persistence layer means the resume lives in one browser profile. Clearing site data, switching machines, or opening the editor in a private window breaks continuity unless you export first. The README does not document an account, sync or backup mechanism, so anyone treating this as a primary document store should export PDFs or keep the source data somewhere else.
Finally, the AI features depend on network reachability to specific providers. In a locked-down corporate network, the proxy variables cover OpenAI, Gemini and Anthropic, but the README states DeepSeek, Qwen and Doubao use a direct connection, so those three may simply fail. A user who needs AI writing help in that environment should verify provider access before relying on the feature.
How it compares with reactive-pdf and JSON Resume tooling
The closest conceptual alternative is reactive-pdf, a React component library that renders a resume from a typed data object and exports a PDF. The difference is where the document lives. Reactive-pdf expects you to own the data and the build; Magic Resume gives you a visual editor with a live preview, Tiptap-based rich text, themes and auto-save, and you export from the UI. If your team already stores resume data in a database and wants a rendering layer, reactive-pdf fits that shape. If you want a person to sit down and type a resume without a build step, Magic Resume is the closer match.
JSON Resume takes a third approach: a schema plus a community theme ecosystem. You write structured JSON and pick a theme to render it. Magic Resume does not expose a documented interchange schema in the README, so round-tripping between the two is not a described workflow, though the roadmap marks import from PDF and Markdown as done. The trade-off is clear. JSON Resume gives you portability and many themes but no editor. Magic Resume gives you an editor and an AI writing assistant but keeps the document in browser storage.
A fourth option is simply using a hosted commercial builder. That avoids the licence question entirely and usually adds hosting and sharing, which Magic Resume's roadmap has not delivered. The reason to pick this project instead is control: you run it, the editing loop is local, and the AI provider is your choice, subject to the non-commercial restriction.
Maintenance, releases and upgrade cost
The repository is not archived, and the last push was on 2026-09-07, which is recent. Release history shows v2.0.8 on 2026-09-01, v2.0.7 on 2026-07-27 and v2.0.6 on 2026-06-01, so the cadence has been roughly monthly to bi-monthly across the visible window. package.json sets the version to 2.0.8 and includes a release script using bumpp, which is a version-bump tool, so releases appear to be cut from the repository rather than published as a package. There is no npm package listed in the repository files; the distribution model is clone or Docker.
That model shapes the upgrade cost. There is no dependency to bump in a lockfile that you do not control, so upgrading means pulling the repository and rebuilding. The Docker path makes this routine: rebuild the image and restart the container. The pnpm path means reinstalling dependencies and running the build again. Either way, local storage means the resume data is not part of the upgrade, which removes the migration risk that a hosted service would carry.
The cost that does not go away is the licence. Because the non-commercial restriction applies to modified versions too, a fork that diverges from upstream still carries the same terms, and there is no path described in the README to obtain different terms. A team that wants to build on this code commercially has to resolve that question before writing any code, not after.
Editorial conclusion
Adopt Magic Resume if you want a personal resume editor you can run yourself, with local storage and pluggable AI providers, and if your use stays non-commercial. Do not adopt it if you plan to offer it as a paid service, bundle it into a commercial product, or resell a modified version, because the README states commercial use is prohibited regardless of modification. Before committing, read the LICENSE file, since the repository is flagged NOASSERTION while the README claims Apache 2.0 with an added restriction, and confirm which AI providers you can reach from your network, because DeepSeek, Qwen and Doubao use a direct connection while OpenAI, Gemini and Anthropic may need AI_PROXY_URL.
Frequently asked questions
Is Magic Resume free to use?
The README states it is free for purely personal, non-commercial use, such as personal learning or creating your own resume. Commercial use, including offering it as a paid or profit-generating service, is prohibited regardless of whether the source code has been modified.
How do I install and run Magic Resume locally?
The README's quick start is to clone the repository, run pnpm install, then pnpm dev, and open http://localhost:3000 in a browser. For production, pnpm build followed by pnpm start runs the bundled Node server.
Does Magic Resume need an API proxy for AI features?
Cloudflare Workers use the platform's native fetch and need no application-level proxy, according to the README. For Node.js or Docker deployments that cannot directly reach OpenAI, Gemini or Anthropic, set AI_PROXY_URL, with HTTPS_PROXY and HTTP_PROXY as fallbacks. DeepSeek, Qwen and Doubao use a direct connection.
Community notes