Reference · version 1.7.0
The resume schema
14 sections, every one optional. Describe your career once in resume.json and any compatible tool can read it.
Every field is optional
Include what you have. Tools skip what is missing, so a resume can be a name or a career.
Plain JSON Schema
Draft-07 JSON Schema, so any language or editor can validate it. Dates are ISO 8601, URLs are URLs.
Extend without forking
Put anything the schema lacks in a
customobject, at the root, in basics or on any entry.
Check your file
Validate it
From the terminal, in code, or as you type: editors that read $schema check your resume live.
resume validateReference
Every section and field
Each section with its fields and types, and the matching part of the sample resume.
Top-level fields
| Field | Type | Description |
|---|---|---|
objective | text | Forward-looking career goal, e.g. 'Seeking a senior backend role in climate tech'. Distinct from basics.summary, which describes background (#317) |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"objective": "Lead engineering for a compression-first storage platform."
}basics
object| Field | Type | Description |
|---|---|---|
name | text | |
label | text | e.g. Web Developer |
image | text | URL (as per RFC 3986) to a image in JPEG or PNG format |
email | e.g. thomas@gmail.com | |
phone | text | Phone numbers are stored as strings so use any format you like, e.g. 712-117-2923 |
url | URL | URL (as per RFC 3986) to your website, e.g. personal homepage |
summary | text | Write a short 2-3 sentence biography about yourself |
location | location | |
location.address | text | To add multiple address lines, use . For example, 1234 Glücklichkeit Straße Hinterhaus 5. Etage li. |
location.postalCode | text | e.g. 12345 |
location.city | text | e.g. Teststadt |
location.countryCode | text | code as per ISO-3166-1 ALPHA-2, e.g. US, AU, IN |
location.region | text | The general region where you live. Can be a US state, or a province, for instance. |
profiles | list of objects | Specify any number of social networks that you participate in |
profiles[].network | text | e.g. Facebook or Twitter |
profiles[].username | text | e.g. neutralthoughts |
profiles[].url | URL | e.g. http://twitter.example.com/neutralthoughts |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"basics": {
"name": "Richard Hendriks",
"label": "Programmer",
"image": "",
"email": "richard.hendriks@mail.com",
"phone": "(912) 555-4321",
"url": "http://richardhendricks.example.com",
"summary": "Richard hails from Tulsa. He has earned degrees from the University of Oklahoma and Stanford. (Go Sooners and Cardinal!) Before starting Pied Piper, he worked for Hooli as a part time software developer. While his work focuses on applied information theory, mostly optimizing lossless compression schema of both the length-limited and adaptive variants, his non-work interests range widely, everything from quantum computing to chaos theory. He could tell you about it, but THAT would NOT be a “length-limited” conversation!",
"location": {
"address": "2712 Broadway St",
"postalCode": "CA 94115",
"city": "San Francisco",
"countryCode": "US",
"region": "California"
},
"profiles": [
{
"network": "Twitter",
"username": "neutralthoughts",
"url": "https://www.twitter.com"
},
{
"network": "SoundCloud",
"username": "dandymusicnl",
"url": "https://soundcloud.example.com/dandymusicnl"
}
]
}
}work
list of objects| Field | Type | Description |
|---|---|---|
name | text | e.g. Facebook |
location | text or location | |
location.address | text | To add multiple address lines, use . For example, 1234 Glücklichkeit Straße Hinterhaus 5. Etage li. |
location.postalCode | text | e.g. 12345 |
location.city | text | e.g. Teststadt |
location.countryCode | text | code as per ISO-3166-1 ALPHA-2, e.g. US, AU, IN |
location.region | text | The general region where you live. Can be a US state, or a province, for instance. |
description | text | e.g. Social Media Company |
position | text | e.g. Software Engineer |
url | URL | e.g. http://facebook.example.com |
startDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
endDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
summary | text | Give an overview of your responsibilities at the company |
highlights | list of text | Specify multiple accomplishments |
keywords | list of text | Skills, tools or technologies used in this role (#293) |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"work": [
{
"name": "Pied Piper",
"location": "Palo Alto, CA",
"description": "Awesome compression company",
"position": "CEO/President",
"url": "http://piedpiper.example.com",
"startDate": "2013-12-01",
"endDate": "2014-12-01",
"summary": "Pied Piper is a multi-platform technology based on a proprietary universal compression algorithm that has consistently fielded high Weisman Scores™ that are not merely competitive, but approach the theoretical limit of lossless compression.",
"highlights": [
"Build an algorithm for artist to detect if their music was violating copy right infringement laws",
"Successfully won Techcrunch Disrupt",
"Optimized an algorithm that holds the current world record for Weisman Scores"
],
"keywords": [
"Compression",
"C++",
"Distributed Systems"
]
}
]
}volunteer
list of objects| Field | Type | Description |
|---|---|---|
organization | text | e.g. Facebook |
location | text or location | |
location.address | text | To add multiple address lines, use . For example, 1234 Glücklichkeit Straße Hinterhaus 5. Etage li. |
location.postalCode | text | e.g. 12345 |
location.city | text | e.g. Teststadt |
location.countryCode | text | code as per ISO-3166-1 ALPHA-2, e.g. US, AU, IN |
location.region | text | The general region where you live. Can be a US state, or a province, for instance. |
position | text | e.g. Software Engineer |
url | URL | e.g. http://facebook.example.com |
startDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
endDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
summary | text | Give an overview of your responsibilities at the company |
highlights | list of text | Specify accomplishments and achievements |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"volunteer": [
{
"organization": "CoderDojo",
"position": "Teacher",
"url": "http://coderdojo.example.com/",
"startDate": "2012-01-01",
"endDate": "2013-01-01",
"summary": "Global movement of free coding clubs for young people.",
"highlights": [
"Awarded 'Teacher of the Month'"
]
}
]
}education
list of objects| Field | Type | Description |
|---|---|---|
institution | text | e.g. Massachusetts Institute of Technology |
location | text or location | |
location.address | text | To add multiple address lines, use . For example, 1234 Glücklichkeit Straße Hinterhaus 5. Etage li. |
location.postalCode | text | e.g. 12345 |
location.city | text | e.g. Teststadt |
location.countryCode | text | code as per ISO-3166-1 ALPHA-2, e.g. US, AU, IN |
location.region | text | The general region where you live. Can be a US state, or a province, for instance. |
url | URL | e.g. http://facebook.example.com |
area | text | e.g. Arts |
studyType | text | e.g. Bachelor |
startDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
endDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
score | text | grade point average, e.g. 3.67/4.0 |
courses | list of text | List notable courses/subjects |
summary | text | Thesis topic, honours, notable projects or other context (#292) |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"education": [
{
"institution": "University of Oklahoma",
"url": "https://www.ou.edu/",
"area": "Information Technology",
"studyType": "Bachelor",
"startDate": "2011-06-01",
"endDate": "2014-01-01",
"score": "4.0",
"courses": [
"DB1101 - Basic SQL",
"CS2011 - Java Introduction"
],
"summary": "Senior project on lossless compression for streaming media."
}
]
}awards
list of objectsSpecify any awards you have received throughout your professional career
| Field | Type | Description |
|---|---|---|
title | text | e.g. One of the 100 greatest minds of the century |
date | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
awarder | text | e.g. Time Magazine |
summary | text | e.g. Received for my work with Quantum Physics |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"awards": [
{
"title": "Digital Compression Pioneer Award",
"date": "2014-11-01",
"awarder": "Techcrunch",
"summary": "There is no spoon."
}
]
}certificates
list of objectsSpecify any certificates you have received throughout your professional career
| Field | Type | Description |
|---|---|---|
name | text | e.g. Certified Kubernetes Administrator |
date | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
url | URL | e.g. http://example.com |
credentialId | text | Credential or licence number used to verify the certificate, e.g. a licence number or a certification ID (#590) |
issuer | text | e.g. CNCF |
expiryDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
summary | text | What the certificate covers (#590) |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"certificates": [
{
"name": "AWS Certified Solutions Architect – Associate",
"date": "2014-06-01",
"expiryDate": "2017-06-01",
"issuer": "Amazon Web Services",
"url": "https://certificates.example.com/aws/rhendriks",
"credentialId": "AWS-ASA-12345",
"summary": "Designing distributed systems on AWS."
}
]
}publications
list of objectsSpecify your publications through your career
| Field | Type | Description |
|---|---|---|
name | text | e.g. The World Wide Web |
authors | list of text | Authors in published order, including the resume owner. e.g. ['Richard Hendriks', 'Bertram Gilfoyle'] |
publisher | text | e.g. IEEE, Computer Magazine. For talks, the event name |
releaseDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
volume | text | e.g. 12 |
issue | text | e.g. 3 |
pages | text | e.g. 45-67 |
identifiers | object | Persistent identifiers keyed by scheme, e.g. doi, isbn, arxiv, pmid |
identifiers.doi | text | e.g. 10.1000/182 |
identifiers.isbn | text | e.g. 978-3-7502-4718-5 |
identifiers.arxiv | text | e.g. 2101.00001 |
url | URL | e.g. http://www.computer.org.example.com/csdl/mags/co/1996/10/rx069-abs.html |
summary | text | Short summary of publication. e.g. Discussion of the World Wide Web, HTTP, HTML. |
type | text | e.g. 'article', 'book', 'patent', 'thesis', 'talk' (#295) |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"publications": [
{
"name": "Video compression for 3d media",
"authors": [
"Richard Hendriks",
"Bertram Gilfoyle"
],
"publisher": "Hooli",
"releaseDate": "2014-10-01",
"url": "http://en.wikipedia.org/wiki/Silicon_Valley_(TV_series)",
"summary": "Innovative middle-out compression algorithm that changes the way we store data.",
"type": "article"
}
]
}skills
list of objectsList out your professional skill-set
| Field | Type | Description |
|---|---|---|
name | text | e.g. Web Development |
level | text | e.g. Master |
keywords | list of text | List some keywords pertaining to this skill |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"skills": [
{
"name": "Web Development",
"level": "Master",
"keywords": [
"HTML",
"CSS",
"Javascript"
]
}
]
}languages
list of objectsList any other languages you speak
| Field | Type | Description |
|---|---|---|
language | text | e.g. English, Spanish |
fluency | text | e.g. Fluent, Beginner |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"languages": [
{
"language": "English",
"fluency": "Native speaker"
}
]
}interests
list of objects| Field | Type | Description |
|---|---|---|
name | text | e.g. Philosophy |
keywords | list of text | |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"interests": [
{
"name": "Wildlife",
"keywords": [
"Ferrets",
"Unicorns"
]
}
]
}references
list of objectsList references you have received
| Field | Type | Description |
|---|---|---|
name | text | e.g. Timothy Cook |
reference | text | e.g. Joe blogs was a great employee, who turned up to work at least once a week. He exceeded my expectations when it came to doing nothing. |
relationship | text | How the referee knows you. e.g. Manager, Peer, Client, Thesis advisor |
organization | text | Where you worked together. e.g. Pied Piper |
date | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
availableOnRequest | true or false | Show 'available on request' rather than publishing the reference. Contact details are deliberately not part of the schema |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"references": [
{
"name": "Erlich Bachman",
"relationship": "Investor",
"organization": "Aviato",
"date": "2014-09",
"reference": "It is my pleasure to recommend Richard, his performance working as a consultant for Main St. Company proved that he will be a valuable addition to any company."
}
]
}projects
list of objectsSpecify career projects
| Field | Type | Description |
|---|---|---|
name | text | e.g. The World Wide Web |
summary | text | Short summary of the project, consistent with summary in other sections (#296). e.g. Collated works of 2017. |
description | text | Deprecated alias of summary, kept for compatibility; when both are set, summary wins (#296). e.g. Collated works of 2017. |
highlights | list of text | Specify multiple features |
keywords | list of text | Specify special elements involved |
startDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
endDate | date | Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04. Every date is optional; omit endDate for a current position or ongoing entry (#309). |
url | URL | e.g. http://www.computer.org/csdl/mags/co/1996/10/rx069-abs.html |
roles | list of text | Specify your role on this project or in company |
entity | text | Specify the relevant company/entity affiliations e.g. 'greenpeace', 'corporationXYZ' |
type | text | e.g. 'volunteering', 'presentation', 'talk', 'application', 'conference' |
custom | custom | Tool- or author-specific data that has no standard field yet (#316). Keys are free-form; namespace them by tool (e.g. "myTool": { ... }) to avoid collisions. Themes are not expected to render it, and tools should preserve it unchanged when reading and writing resumes. |
Example from resume.json
{
"projects": [
{
"name": "Miss Direction",
"description": "A mapping engine that misguides you",
"highlights": [
"Won award at AIHacks 2016",
"Built by all women team of newbie programmers",
"Using modern technologies such as GoogleMaps, Chrome Extension and Javascript"
],
"keywords": [
"GoogleMaps",
"Chrome Extension",
"Javascript"
],
"startDate": "2016-08-24",
"endDate": "2016-08-24",
"url": "http://missdirection.example.com",
"roles": [
"Team lead",
"Designer"
],
"entity": "Smoogle",
"type": "application"
}
]
}meta
objectThe schema version and any other tooling configuration lives here
| Field | Type | Description |
|---|---|---|
canonical | URL | URL (as per RFC 3986) to latest version of this document |
version | text | A version field which follows semver - e.g. v1.0.0 |
lastModified | text | Using ISO 8601 with YYYY-MM-DDThh:mm:ss |
Example from resume.json
{
"meta": {
"canonical": "https://raw.githubusercontent.com/jsonresume/jsonresume.org/master/packages/schema/sample.resume.json",
"version": "v1.3.1",
"lastModified": "2026-10-22T00:00:00"
}
}