JSON Résumé is a specification that was created as a way to structure résumé data. By using this specification, you can essentially write your résumé in a structured format and then export it into other formats. PHP Résumé, created by Steve McDougall, is a library that provides a type-safe way to build and work with résumés following the JSON Résumé schema.
Features
- Type-Safe Builder Pattern: Fluent interface for building résumés
- Data Validation: Built-in validation for emails, URLs, and other fields
- JSON Resume Schema Compliance: Ensures output follows the JSON Resume standard
- Comprehensive Data Objects: Structured classes for all resume components
- Enums for Common Values: Pre-defined enums for skill levels, education types, and social networks
- Performance Optimized: Efficiently handles large résumés with many entries
- Summary Generation: Generate summaries of resume content
Example of the JSON Résumé Specification
{ "basics": { "name": "Luke Skywalker", "label": "Jedi Knight", "image": "", "email": "luke.skywalker@rebellion.org", "phone": "(555) FORCE-1", "url": "https://jediarchives.org/luke-skywalker", "summary": "Farm boy turned Jedi Knight who played a pivotal role in the defeat of the Galactic Empire. Experienced pilot, Force-sensitive individual, and leader in the Rebel Alliance. Committed to restoring peace and justice to the galaxy.", "location": { "address": "Lars Homestead", "postalCode": "N/A", "city": "Anchorhead", "countryCode": "N/A", "region": "Tatooine" }, "profiles": [{ "network": "HoloNet", "username": "farmboy_jedi", "url": "https://holonet.gov/luke-skywalker" }] }, "work": [{ "name": "Rebel Alliance", "position": "Commander", "url": "https://rebellion.org", "startDate": "0000-05-25", "endDate": "0004-05-04", "summary": "Key military leader in the fight against the Galactic Empire, specializing in starfighter operations and special missions.", "highlights": [ "Destroyed the first Death Star", "Led Rogue Squadron", "Helped defeat Emperor Palpatine" ] }], "education": [{ "institution": "Dagobah Jedi Training Academy", "url": "https://jediarchives.org/dagobah", "area": "Force Studies and Lightsaber Combat", "studyType": "Jedi Training", "startDate": "0003-01-01", "endDate": "0004-01-01", "score": "Jedi Knight", "courses": [ "Force Sensitivity Development", "Lightsaber Combat Forms", "Jedi Philosophy and Ethics" ] }], "certificates": [{ "name": "Jedi Knight Certification", "date": "0004-05-04", "issuer": "Master Yoda", "url": "https://jediarchives.org/certifications" }], "skills": [{ "name": "Force Abilities", "level": "Master", "keywords": [ "Telekinesis", "Mind Trick", "Precognition", "Lightsaber Combat" ] }], "references": [{ "name": "Master Yoda", "reference": "Strong with the Force, young Skywalker is. Patient and wise he has become. A true Jedi Knight, restored balance to the Force he has. Proud of him, I am." }]}
There are also keys to represent interests, publications, awards, volunteer, languages, and projects. View a full example of the schema.
Basic Example using PHP Résumé
You can install the package via Composer:
composer require juststeveking/resume-php
And then to build a basic résumé:
use JustSteveKing\Resume\Builders\ResumeBuilder;use JustSteveKing\Resume\DataObjects\Basics;use JustSteveKing\Resume\DataObjects\Location;use JustSteveKing\Resume\DataObjects\Profile;use JustSteveKing\Resume\DataObjects\Work;use JustSteveKing\Resume\Enums\Network; // Create the basics section$basics = new Basics( name: 'Luke Skywalker', label: 'Jedi Knight', email: 'luke.skywalker@rebellion.org', url: 'https://jediarchives.org/luke-skywalker', summary: 'Farm boy turned Jedi Knight who played a pivotal role in the defeat of the Galactic Empire. Experienced pilot, Force-sensitive individual, and leader in the Rebel Alliance. Committed to restoring peace and justice to the galaxy.', location: new Location( address: 'Lars Homestead', postalCode: 'N/A', city: 'Anchorhead', countryCode: 'N/A', region: 'Tatooine', ), profiles: [ new Profile(Network::GitHub, 'luke_skywalker', 'https://github.com/luke_skywalker'), new Profile(Network::LinkedIn, 'luke_skywalker', 'https://linkedin.com/in/luke_skywalker'), ],); // Build the résumé$resume = (new ResumeBuilder()) ->basics($basics) ->addWork(new Work( name: 'Rebel Alliance', position: 'Commander', startDate: '0000-05-25', endDate: '0004-05-04', summary: 'Key military leader in the fight against the Galactic Empire, specializing in starfighter operations and special missions.', highlights: ['Destroyed the first Death Star', 'Led Rogue Squadron', 'Helped defeat Emperor Palpatine'], )) ->build(); // Convert to JSON$json = json_encode($resume, JSON_PRETTY_PRINT);
This package also provides a method to transform your résumé data into JSON-LD format using the toJsonLd() method, which is ideal for structuring data that is easily understood by search engines and web services. You can also export to Markdown using toMarkdown().
$resume->toJsonLd();$resume->toMarkdown();
There is also a JobDescriptionBuilder for creating structured job descriptions following the JSON Job Description schema.
Learn more about this package and view the source code on GitHub.