PHPackages                             juststeveking/resume-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. juststeveking/resume-php

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

juststeveking/resume-php
========================

A PHP library for building and working with the JSON resume schema.

1.0.0(1mo ago)1052189[1 issues](https://github.com/JustSteveKing/resume-php/issues)MITPHPPHP ^8.4CI passing

Since Jul 19Pushed 3mo agoCompare

[ Source](https://github.com/JustSteveKing/resume-php)[ Packagist](https://packagist.org/packages/juststeveking/resume-php)[ Docs](https://github.com/juststeveking/resume-php)[ RSS](/packages/juststeveking-resume-php/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (17)Versions (12)Used By (0)

Resume PHP
==========

[](#resume-php)

A PHP library for building and working with the [JSON Resume](https://jsonresume.org/) schema.

[![Latest Version on Packagist](https://camo.githubusercontent.com/7924be1958261608648c9b87060ec871b9b8dce5d97349076adc3bfb54589a21/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a75737473746576656b696e672f726573756d652d7068702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/juststeveking/resume-php)[![Total Downloads](https://camo.githubusercontent.com/5f68982bf14d5e1a28a814e507e97327f55143ab3e2843a54c10dca157ee2caa/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6a75737473746576656b696e672f726573756d652d7068702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/juststeveking/resume-php)[![License](https://camo.githubusercontent.com/829e0bef044e6df278a6ca864b4e86cbbd7bda5d23d6593152036d7377593560/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6a75737473746576656b696e672f726573756d652d7068702e7376673f7374796c653d666c61742d737175617265)](./LICENSE)[![Tests](https://github.com/juststeveking/resume-php/actions/workflows/tests.yml/badge.svg)](https://github.com/juststeveking/resume-php/actions/workflows/tests.yml)[![Static Analysis](https://github.com/juststeveking/resume-php/actions/workflows/static-analysis.yml/badge.svg)](https://github.com/juststeveking/resume-php/actions/workflows/static-analysis.yml)[![Code Style](https://github.com/juststeveking/resume-php/actions/workflows/code-style.yml/badge.svg)](https://github.com/juststeveking/resume-php/actions/workflows/code-style.yml)

Introduction
------------

[](#introduction)

Resume PHP is a library that provides a type-safe way to build and work with resumes following the [JSON Resume](https://jsonresume.org/) schema. It offers a fluent builder interface, data validation, and easy serialization to JSON.

Requirements
------------

[](#requirements)

- PHP 8.4 or higher
- Composer

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require juststeveking/resume-php
```

Usage
-----

[](#usage)

### Building a Basic Résumé

[](#building-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\Enums\Network;

// Create the basics section
$basics = new Basics(
    name: 'John Doe',
    label: 'Software Engineer',
    email: 'john@example.com',
    url: 'https://johndoe.com',
    summary: 'Experienced software engineer with 5+ years in web development.',
    location: new Location(
        address: '123 Main St',
        postalCode: '94105',
        city: 'San Francisco',
        countryCode: 'US',
        region: 'CA',
    ),
    profiles: [
        new Profile(Network::GitHub, 'johndoe', 'https://github.com/johndoe'),
        new Profile(Network::LinkedIn, 'johndoe', 'https://linkedin.com/in/johndoe'),
    ],
);

// Build the résumé
$resume = (new ResumeBuilder())
    ->basics($basics)
    ->build();

// Convert to JSON
$json = json_encode($resume, JSON_PRETTY_PRINT);
```

### Adding Work Experience

[](#adding-work-experience)

```
use JustSteveKing\Resume\DataObjects\Work;

$resume = (new ResumeBuilder())
    ->basics($basics)
    ->addWork(new Work(
        name: 'Tech Corp',
        position: 'Senior Developer',
        startDate: '2020-01-01',
        endDate: '2023-12-31',
        summary: 'Led development of core platform features',
        highlights: ['Improved performance by 40%', 'Mentored junior developers'],
    ))
    ->addWork(new Work(
        name: 'Startup Inc',
        position: 'Full Stack Developer',
        startDate: '2018-01-01',
        endDate: '2019-12-31',
    ))
    ->build();
```

### Adding Education

[](#adding-education)

```
use JustSteveKing\Resume\DataObjects\Education;
use JustSteveKing\Resume\Enums\EducationLevel;

$resume->addEducation(new Education(
    institution: 'University of Technology',
    area: 'Computer Science',
    studyType: EducationLevel::Bachelor,
    startDate: '2014-09-01',
    endDate: '2018-06-01',
));
```

### Adding Skills

[](#adding-skills)

```
use JustSteveKing\Resume\DataObjects\Skill;
use JustSteveKing\Resume\Enums\SkillLevel;

$resume->addSkill(new Skill(
    name: 'PHP',
    level: SkillLevel::Expert,
    keywords: ['Laravel', 'Symfony', 'API Development'],
));
```

### Complete Example

[](#complete-example)

For a complete example of building a résumé with all available sections, see the [example.resume.json](example.resume.json) file or check the integration tests.

Features
--------

[](#features)

- **Type-Safe Builder Pattern**: Fluent interface for building resumes
- **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 resumes with many entries
- **Summary Generation**: Generate summaries of resume content

Available Components
--------------------

[](#available-components)

- Basics (Personal Information)
- Work Experience
- Volunteer Experience
- Education
- Skills
- Languages
- Interests
- Projects
- Publications
- Awards
- Certificates
- References

JSON-LD Transformation
----------------------

[](#json-ld-transformation)

Resume PHP provides a method to transform resume data into `JSON-LD` format using the `toJsonLd()` method on the `Resume` object.

JSON-LD (JavaScript Object Notation for Linked Data) is a lightweight format for structuring data that is easily understood by search engines and web services.

### How it works:

[](#how-it-works)

The `toJsonLd()` method converts your résumé into a structured array following the `schema.org/Person` specification. It extracts key fields such as:

- name
- job title
- website
- social profiles
- skills

and formats them for semantic web consumption.

### Why it’s important:

[](#why-its-important)

- **SEO &amp; Discoverability**: JSON-LD enables search engines to better understand and index your résumé, improving visibility in search results.
- **Interoperability**: Many platforms and tools support JSON-LD, making it easier to share and integrate your resume data.
- **Standardization**: Using schema.org ensures your résumé follows widely accepted standards for personal data representation.

### Example

[](#example)

```
$jsonLd = $resume->toJsonLd();
echo json_encode($jsonLd, JSON_PRETTY_PRINT);
```

This will output a structured JSON-LD object ready for embedding in web pages or sharing with compatible services.

Exporting a Resume to Markdown
------------------------------

[](#exporting-a-resume-to-markdown)

The Resume object includes a `toMarkdown()` method that allows you to export your resume to a clean, human-readable Markdown format.

This is useful for:

- GitHub READMEs
- Static site content
- Terminal output
- Blog posts
- Generating printable formats via Markdown → PDF

### Basic Usage

[](#basic-usage)

```
echo $resume->toMarkdown();
```

### Optional Configuration

[](#optional-configuration)

You can customize the output using the options:

```
$markdown = $resume->toMarkdown([
    'basics' => true,
    'contact' => true,
    'profiles' => true,
    'work' => true,
    'education' => true,
    'skills' => true,
    'languages' => true,
]);
```

Each section can be enabled/disabled individually:

SectionOption KeyName, title, summary`basics`Email, website, location`contact`Social links`profiles`Work experience`work`Education history`education`Skills list`skills`Spoken languages`languages`### Example Output

[](#example-output)

```
# Steve McDougall
**API Consultant**

Helping dev teams build better APIs.

📧 Email: [steve@example.com](mailto:steve@example.com)
🌍 Website: [https://juststeveking.com](https://juststeveking.com)
📍 Location: Wales, GB

### 🔗 Social Profiles
- [GitHub](https://github.com/JustSteveKing)

## 💼 Work Experience

### API Consultant at Freelance
_2023-01 → Present_
Consulting on large-scale API infrastructure.
- Designed a scalable Laravel API Gateway.
- Reduced API response times by 40%.

## 🛠 Skills
- **PHP**: Laravel, Symfony, Octane
```

Job Description Builder
-----------------------

[](#job-description-builder)

The library also includes a `JobDescriptionBuilder` for creating structured job descriptions following [the in progress JSON Job Description schema](https://jsonresume.org/job-description-schema/).

```
use JustSteveKing\Resume\Builders\JobDescriptionBuilder;

$jobDescription = (new JobDescriptionBuilder())
    ->title('Senior PHP Developer')
    ->company('Tech Corp')
    ->location('Remote')
    ->salary('$100,000 - $130,000')
    ->addRequirement('5+ years of PHP experience')
    ->addRequirement('Experience with Laravel or Symfony')
    ->addBenefit('Remote work')
    ->addBenefit('Flexible hours')
    ->build();
```

Development
-----------

[](#development)

### Testing

[](#testing)

```
composer test
```

### Static Analysis

[](#static-analysis)

```
composer stan
```

### Code Style

[](#code-style)

```
composer pint
```

### Refactoring

[](#refactoring)

```
composer refactor
```

CI/CD Workflows
---------------

[](#cicd-workflows)

This project uses GitHub Actions for continuous integration and continuous deployment. The following workflows are set up:

### Tests

[](#tests)

[![Tests](https://github.com/juststeveking/resume-php/actions/workflows/tests.yml/badge.svg)](https://github.com/juststeveking/resume-php/actions/workflows/tests.yml)

Runs PHPUnit tests on PHP 8.4 to ensure all functionality works as expected.

### Static Analysis

[](#static-analysis-1)

[![Static Analysis](https://github.com/juststeveking/resume-php/actions/workflows/static-analysis.yml/badge.svg)](https://github.com/juststeveking/resume-php/actions/workflows/static-analysis.yml)

Use PHPStan to perform static code analysis and catch potential bugs.

### Code Style

[](#code-style-1)

[![Code Style](https://github.com/juststeveking/resume-php/actions/workflows/code-style.yml/badge.svg)](https://github.com/juststeveking/resume-php/actions/workflows/code-style.yml)

Ensures code follows the defined style rules using Laravel Pint.

### Dependency Updates

[](#dependency-updates)

The project uses GitHub's Dependabot to automatically check for dependency updates and create pull requests when updates are available.

Contributing
------------

[](#contributing)

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE) for more information.

Credits
-------

[](#credits)

- [Steve McDougall](https://github.com/juststeveking)
- [All Contributors](../../contributors)

###  Health Score

50

—

FairBetter than 96% of packages

Maintenance85

Actively maintained with recent releases

Popularity31

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 87.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~125 days

Total

3

Last Release

52d ago

Major Versions

0.0.2 → 1.0.02026-03-27

### Community

Maintainers

![](https://www.gravatar.com/avatar/a87fe82b349821ebd49cf57d65c4cd3e33ae0833222a8438d90fe8921ca899ea?d=identicon)[JustSteveKing](/maintainers/JustSteveKing)

---

Top Contributors

[![JustSteveKing](https://avatars.githubusercontent.com/u/6368379?v=4)](https://github.com/JustSteveKing "JustSteveKing (36 commits)")[![BrookeDot](https://avatars.githubusercontent.com/u/150348?v=4)](https://github.com/BrookeDot "BrookeDot (5 commits)")

---

Tags

phpjsonschemalibraryresume

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/juststeveking-resume-php/health.svg)

```
[![Health](https://phpackages.com/badges/juststeveking-resume-php/health.svg)](https://phpackages.com/packages/juststeveking-resume-php)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[silverstripe/framework

The SilverStripe framework

7213.5M2.5k](/packages/silverstripe-framework)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[contao/core-bundle

Contao Open Source CMS

1231.6M2.4k](/packages/contao-core-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
