Skip to content
← All articles
Article

Creating a professional résumé with JSON Resume

Listen to the audio story

Write your résumé once, export it everywhere · 2:14 · AI-written script, synthetic voices

Transcript

Ava: Imagine updating your résumé in one place, and getting a PDF, a web page and a section of your own website out of it. That's the pitch of JSON Resume, and Antoine wrote a walkthrough.

Andrew: I usually have three versions of my CV and none of them match. How does it work?

Ava: It's an open schema, maintained by the community. You keep one plain JSON file called resume dot json. Because it's just data, themes and command-line tools can swap the presentation without you touching the content.

Andrew: So what goes in the file?

Ava: Predictable blocks. Basics, with your name, headline, email and profiles like LinkedIn and GitHub. Then work, education, skills and projects. Work has the company, title, dates and a short summary. Skills can have a level and a few keyword tags.

Andrew: And then you turn it into something people can read.

Ava: Right. You install the resume CLI with npm, pick a theme, and run resume export to get HTML or PDF. The sample grid in the post shows themes like Elegant, Paper, Kendall and Flat. You can also publish to the free JSON Resume Registry for a hosted page.

Andrew: What if you already have a site?

Ava: If it runs on Hugo, a module called hugo-mod-json-resume maps the JSON sections into templates, even in several languages. That's how you go from a standalone export to a CV section inside a personal blog. There are also tools to preview while you edit, and one that bootstraps the file from LinkedIn.

Andrew: Is it good for everyone?

Ava: Antoine's table says it's strong for a developer CV that changes often. For a heavy design portfolio, you'd export the PDF and do the layout elsewhere. And for corporate portals that only take plain text, it still helps you generate that text.

Andrew: Any traps?

Ava: Three. Letting the file rot, so set a reminder after each job change. Theme drift across npm versions, so pin the theme in CI. And stuffing in every project, because interviewers skim.

Andrew: So the point is content versus presentation.

Ava: Yes. One source of truth, themes for layout. The full write-up has the code samples for every section.

Creating a professional résumé with JSON Resume
Table of contents

JSON Resume — sample themes (Elegant, Paper, Kendall, Flat, and others)

Most hiring flows start online. JSON Resume lets you keep one structured resume.json and render it as HTML, PDF, or data inside your own site. covers the same walkthrough.

1. Why JSON?

JSON Resume[1] is an open, community-maintained schema for CVs. Because the file is plain JSON, themes and CLIs can swap the presentation without you rewriting content. The ecosystem ships many visual styles—the grid above shows themes like Elegant, Paper, Kendall, and Flat.

You get portability: update the data once, regenerate exports, or pipe the same file into static site generators. This site’s Hugo week 1 post is the shell; JSON Resume is the structured CV underneath when you want PDF exports without maintaining Word.

2. Main sections

A typical resume.json groups your story into predictable blocks.

2.1. Basics

Name, headline, email, site, short summary, location, and social profiles (LinkedIn, GitHub, etc.).

"basics": {
  "name": "Your Name",
  "label": "Job Title",
  "email": "[email protected]",
  "website": "https://yourwebsite.com",
  "summary": "A brief summary about yourself.",
  "location": {
    "city": "City",
    "region": "Region",
    "countryCode": "Country Code"
  },
  "profiles": [
    {
      "network": "LinkedIn",
      "username": "yourusername",
      "url": "https://www.linkedin.com/in/yourusername/"
    }
  ]
}

2.2. Work

Roles with company, title, dates, and a short summary of what you did.

"work": [
  {
    "name": "Company Name",
    "position": "Your Position",
    "startDate": "YYYY-MM-DD",
    "endDate": "YYYY-MM-DD",
    "summary": "Description of your role."
  }
]

2.3. Education

School, field, degree type, and study dates.

"education": [
  {
    "institution": "University Name",
    "area": "Field of Study",
    "studyType": "Degree Type",
    "startDate": "YYYY-MM-DD",
    "endDate": "YYYY-MM-DD"
  }
]

2.4. Skills

Skill groups with optional level and keyword tags (languages, frameworks, tools).

"skills": [
  {
    "name": "Programming",
    "level": "Intermediate",
    "keywords": ["Python", "JavaScript"]
  }
]

2.5. Projects

Side work or portfolio pieces with dates, description, and URL.

"projects": [
  {
    "name": "Project Name",
    "startDate": "YYYY-MM-DD",
    "endDate": "YYYY-MM-DD",
    "description": "Project description.",
    "url": "https://projecturl.com"
  }
]

3. CLI workflow

Install the command-line tool globally:

npm install -g resume-cli

Author resume.json against the schema[2], pick a theme, then export:

resume export resume.html
resume export resume.pdf

You can also publish to the free JSON Resume Registry[3] for a hosted page.

Same data, multiple outputs—handy when you want a printable PDF and a web version that stay in sync.

4. Hugo and friends

If your site already runs on Hugo, modules like hugo-mod-json-resume[4] map JSON sections into templates (including multilingual variants). That is how you move from a standalone export to a CV section inside a personal blog.

Other tools worth bookmarking:

5. Takeaway

JSON Resume is not magic—it is discipline. You maintain one source of truth, lean on themes for layout, and plug the same file into CLIs or Hugo when you outgrow a static PDF. For a developer portfolio, that separation between content and presentation ages well.

6. When JSON Resume is enough

SituationFit
Developer CV with frequent updatesStrong
Heavy design portfolio (art direction)Export PDF only; custom layout elsewhere
ATS-only corporate portalsStill paste plain text — JSON helps you generate it
Academic CV (publications list)Extend schema or add a custom section

7. Pitfalls

  • Letting resume.json rot — set a calendar reminder after each job change.
  • Theme drift across npm major versions — pin theme package in CI.
  • Stuffing every project — curate; interviewers skim.

References

  1. JSON Resume. (). [Web page] jsonresume.org.
  2. schema. (). [Web page] jsonresume.org.
  3. JSON Resume Registry. (). [Web page] registry.jsonresume.org.
  4. schnerring. (). hugo-mod-json-resume. [Software repository] github.com.
  5. Profile Studio. (). [Web page] profile-studio.netlify.app.
  6. SkillSet. (). [Web page] jac21.github.io.
  7. joshuatz. (). linkedin-to-jsonresume. [Software repository] github.com.

References use this article’s publication date.