JSON Resume Docs
Guides

Schema

Sections and fields of resume.json, and validating in code.

The schema is published as @jsonresume/schema (JSON Schema draft-07). Source: packages/schema/schema.json.

Sections

SectionContents
basicsname, label, pronouns, image, email, phone, url, summary, location, profiles
objectivea single string: the role or direction you're seeking (distinct from basics.summary, which describes your background)
workname, position, location, description, url, startDate, endDate, summary, highlights, keywords
volunteerorganization, position, url, startDate, endDate, summary, highlights
educationinstitution, url, area, studyType, startDate, endDate, score, courses, summary
awardstitle, date, awarder, summary
certificatesname, date, expiryDate, issuer, url, credentialId, summary
publicationsname, type, authors, publisher (the event name for talks), releaseDate, volume, issue, pages, identifiers (doi, isbn, arxiv, ...), url, summary
skillsname, level, keywords
languageslanguage, fluency
interestsname, keywords
referencesname, reference, relationship, organization, date, availableOnRequest (no contact fields, by design)
projectsname, summary (preferred; description is a deprecated alias), highlights, keywords, startDate, endDate, url, roles, entity, type
metacanonical, version, lastModified, plus tool settings such as theme

Rules worth knowing:

  • Every field is optional.
  • Dates are ISO 8601 strings: YYYY, YYYY-MM or YYYY-MM-DD. Leave out endDate for a current position.
  • Unknown properties are allowed (additionalProperties: true), so tools can store their own data alongside the standard fields.
  • For data with no standard field, use the optional custom object, allowed at the root, in basics and on every entry. Namespace keys by tool, e.g. "custom": { "myTool": { "teamSize": 12 } }. Themes don't render it.

Validating in code

npm install @jsonresume/schema

validate(resume, callback) calls back with (errors, valid):

const { validate } = require('@jsonresume/schema');
const resume = require('./resume.json');

validate(resume, (errors, valid) => {
  if (!valid) {
    console.error(errors);
    process.exit(1);
  }
  console.log('resume.json is valid');
});

The raw schema is exported as schema, for use with any JSON Schema validator (for example Ajv with strict: false and ajv-formats).

Proposing changes

Schema changes are discussed in the schema roadmap issue. Open a PR against packages/schema with a changeset once a proposal has consensus.

On this page