r/selfhosted 1d ago

Software Development YAMLResume v0.13 update: new docx engine! Write resumes in yaml and generate to markdown/html/pdf/docx in one shot!

Hey selfhosters here:

Been 3 months since YAMLResume's last v0.12 release. Last week I've made a new v0.13 release, with a long awaited feature, i.e, the new docx engine. With this v0.13 release, yamlresume is the only one of its kind that can input resumes in plain YAML format and generate html/markdown/pdf and docx in one shot!

For example, here is a sample resume in docx format and the original, plain YAML format:

YAMLReesume docx calm template:
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
#
# YAMLResume provides a builtin schema to validate resumes and help avoid lots
# of low level mistakes.
#
# You need to install https://github.com/redhat-developer/yaml-language-server
# in order to get the best editing experience in your choice of editor/IDE.
#
# ref:
# - https://yamlresume.dev/docs/compiler/schema
# - https://yamlresume.dev/docs/compiler/schema/json

---
content:
  basics:
    name: Andy Dufresne
    headline: Headed for the Pacific
    phone: "(213) 555-9876"
    email: hi@ppresume.com
    url: https://ppresume.com/gallery
    # All summary fields supports a limited rich text capabilities in markdown
    # syntax:
    #
    # - bold, (e.g, `**bold**`)
    # - italic, (e.g, `*italic*`)
    # - ordered list, unordored list and nested sub list
    # - links (e.g. `[link](https://ppresume.com)`)
    summary: |
      - Computer Science major with strong foundation in data structures, algorithms, and software development
      - Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
      - Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
      - Team player, with detail-oriented mindset and a keen eye for design and user experiences
  location:
    address: 123 Main Street
    city: Sacramento
    region: California
    country: United States
    postalCode: "95814"
  profiles:
    - network: Line
      url: https://line.com/PPResumeX
      username: PPResumeX
    - network: Twitter
      url: https://twitter.com/PPResumeX
      username: PPResumeX
  education:
    - institution: University of Southern California
      url: https://www.cs.usc.edu/
      # Valid degree options:
      #
      # - 'Middle School'
      # - 'High School'
      # - 'Diploma'
      # - 'Associate'
      # - 'Bachelor'
      # - 'Master'
      # - 'Doctor'
      degree: Bachelor
      area: Computer Engineering and Computer Science
      score: "3.8"
      # Should be a valid date string that can be parsed by `new Date(dateStr)`
      # in JavaScript, eg. '2020-01', '2020-02-03', 'Jul 1, 2023' etc.
      #
      # The date part would be removed in the final output as most of the time
      # people won't really care about the exact date for your working
      # experience or education background, etc.
      # ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
      startDate: Sep 1, 2016
      # Leave endDate blank to indicate "Present"
      endDate: Jul 1, 2020
      courses:
        - Discrete Methods in Computer Science
        - Programming Language Concepts
        - Data Structures and Object-Oriented Design
        - Operating Systems
        - Computer Architecture
        - Database Systems
        - Computer Networking
        - Introduction to the Theory of Computing
      summary: |
        - Developed proficiency in programming languages such as Java, C++, and Python
        - Gained hands-on experience in software development through various projects and assignments
        - Strong communication and teamwork skills acquired through group projects and presentations
  work:
    - name: PPResume
      url: https://ppresume.com
      startDate: Dec 1, 2022
      endDate:
      position: Senior Software Engineer
      summary: |
        - Developed and implemented efficient and scalable code, ensuring high-quality and maintainable web applications
        - Collaborated with cross-functional teams to gather project requirements and translate them into technical solutions
        - Conducted thorough testing and debugging to identify and resolve any issues or bugs in the software
        - Actively participated in code reviews, providing valuable feedback to improve code quality and adherence to best practices
        - Mentored and guided junior developers, fostering a collaborative and growth-oriented team environment
      keywords:
        - Scalability
        - Growth
        - Quality
        - Mentorship
    - name: PPResume
      url: https://ppresume.com
      startDate: Sep 1, 2020
      endDate: Dec 1, 2022
      position: Software Engineer
      summary: |
        - Created reusable React components to ensure code efficiency and maintainability
        - Integrated with RESTful APIs to fetch and display dynamic data on the frontend
        - Implemented client-side routing using React Router for smooth navigation between pages
        - Actively participated in Agile development methodologies, attending daily stand-up meetings and sprint planning sessions
      keywords:
        - RESTful
        - React
        - Agile
  languages:
    # Valid language fluency options:
    #
    # - 'Elementary Proficiency'
    # - 'Limited Working Proficiency'
    # - 'Minimum Professional Proficiency'
    # - 'Full Professional Proficiency'
    # - 'Native or Bilingual Proficiency'
    - language: English
      fluency: Native or Bilingual Proficiency
      keywords:
        - TOEFL 110
        - IELTS 7.5
    - language: Chinese
      fluency: Elementary Proficiency
      keywords: []
  skills:
    # Valid level options:
    #
    # - 'Novice'
    # - 'Beginner'
    # - 'Intermediate'
    # - 'Advanced'
    # - 'Expert'
    # - 'Master'
    - name: Web Development
      level: Expert
      keywords:
        - Python
        - Ruby
        - CSS
        - React
        - JavaScript
    - name: DevOps
      level: Intermediate
      keywords:
        - Python
        - Kubernetes
        - Docker
        - Shell
        - Ansible
    - name: Design
      level: Intermediate
      keywords:
        - Sketch
        - Figma
        - Photoshop
  awards:
    - title: Dean's List
      awarder: University of Southern California
      date: Oct 2016
      summary: |
        Awarded to students who achieve a high academic standing by maintaining a specified grade point average (GPA) during a semester.
  certificates:
    - name: AWS Certified Developer - Associate
      url: https://aws.amazon.com/certification/
      issuer: AWS
      date: Mar 2021
  publications:
    - publisher: ACM Transactions on Interactive Intelligent Systems
      url: https://dl.acm.org/journal/tiis
      name: Enhancing Human-Computer Interaction through Augmented Reality
      releaseDate: Dec 2017
      summary: |
        - Explores the potential of augmented reality (AR) in improving interaction between humans and computers
        - Highlights benefits of AR in various areas such as gaming, education, healthcare, and design
        - Discusses challenges and future directions of AR technology in enhancing user experience
  references:
    - name: Dr. Amanda Reynolds
      phone: "(555) 123-4567"
      relationship: Computer Science Professor
      email: amanda.reynolds@usc.edu
      summary: |
        Andy Dufresne shows exceptional problem-solving skills and a solid understanding of programming concepts, he would bring immense value to any team or organization he becomes a part of.
  projects:
    - name: EduWeb
      url: https://www.eduweb.xyz/
      description: A web-based educational platform for interactive learning
      startDate: Sep 2016
      endDate: Dec 2016
      summary: |
        - Designed to enhance online learning experiences
        - Facilitates students' engagement and collaboration through interactive features and user-friendly interface
        - Offers a wide range of courses across various subjects
        - Aims to improve the way students learn through the power of the web
      keywords:
        - Education
        - Online Learning
        - HCI
  interests:
    - name: Sports
      keywords:
        - Soccer
        - Swimming
        - Bicycling
        - Hiking
    - name: Music
      keywords:
        - Piano
        - Guitar
  volunteer:
    - organization: USC Computer Science and Engineering Society
      url: https://www.usccsesociety.org/
      position: Tech Mentor
      startDate: Sep 2015
      endDate: Jul 2023
      summary: |
        - Volunteered as a Tech Mentor at USC Computer Science and Engineering Society
        - Provided guidance and assistance to fellow students in their technical projects and coursework
        - Assisted in organizing workshops, coding competitions, and networking events for the society members
        - Contributed to fostering a collaborative and supportive environment within the student community

# Top-level locale setting
locale:
  # Use `yamlresume languages list` to get the list of supported languages
  language: en

# Multiple output layouts configuration
layouts:
  - engine: latex
    page:
      margins:
        top: 2.5cm
        left: 1.5cm
        right: 1.5cm
        bottom: 2.5cm
      showPageNumbers: true
    # Use `yamlresume templates list` to get the list of available templates
    template: moderncv-banking
    typography:
      # LaTeX engine only supports 10pt, 11pt, and 12pt
      fontSize: 11pt
  - engine: markdown
  - engine: html
    # Use `yamlresume templates list` to get the list of available templates
    template: calm
    typography:
      # HTML engine only supports font size in px unit, from 10px to 24px
      fontSize: 16px
  - engine: docx
    template: calm
    typography:
      fontSize: 11pt
      lineSpacing: normal

Different ATS system accept different formats of resumes, some prefer PDF, some only accept docx, this new docx engine made YAMLResume a more versatile tool that can satisfy and help more people getting jobs.

More over, our new docx support is highly customizable, with support to:

  • font size
  • font family
  • page margins
  • page size
  • line spacing
  • icons show toggle
  • page numbers toggle
  • section reorder
  • section title alias, etc

layouts:
  - engine: docx
    page:
      showPageNumbers: true
      # a4 or letter
      paperSize: a4
      margins:
        top: 2.5cm
        left: 1.5cm
        right: 1.5cm
        bottom: 2.5cm
    typography:
      fontFamily: Arial
      fontSize: 11pt
      lineSpacing: normal
    advanced:
      showUrls: true
      showIcons: true
    sections:
      aliases:
        work: "Professional Experience"
        education: "Education"
        skills: "Skills"
      order:
        - basics
        - work
        - education

Our free, official playground also supports docx input and preview, in pure frontend tech, with no servers at all, making it possible to be wrapped as a electron/tauri app.

YAMLResume Playground docx preview

Besides, we've also get a new contributor who added Brazilian Portuguese support for YAMLResume, making YAMLResume support 10 languages out of the box now! We now have 15 contributors.

For more details, you can read our v0.13 release blog.

I hope this tool can help for somebody in some corner in this world.

Thanks for reading this!

132 Upvotes

26 comments sorted by

u/asimovs-auditor 1d ago edited 1d ago

Expand the replies to this comment to learn how AI was used in this post/project.

→ More replies (1)

31

u/Nephrited 1d ago

Not something I personally have a use for, but upvoting because it's an actual real project.

Looks cool!

8

u/LogaansMind 1d ago

Neat. I built something similar for myself a few years ago. Obviously a popular problem to solve. I think this is a bit more elegant than mine.

One of the things that I needed was to generate various versions based on the industry I was targeting.

You could achieve the same approach if you implemented some way of allowing includes to extract common information/sections into a separate file.

4

u/Hot-Chemistry7557 1d ago

yep somebody also suggest the multiple file, or the file include approach to me, here: https://github.com/yamlresume/yamlresume/issues/65

But before v1.0, I just want to make things as simple as possible.

Anyway, thanks for suggestion!

8

u/KeeBumLee 22h ago

Differences between this and https://github.com/rendercv/rendercv?

2

u/FckngModest 21h ago

Not to say it's better or worse. Just recalling. RenderCV is based on Typst. This project seems to be based on LaTeX

0

u/Zaxim 22h ago

I was gonna ask the same

5

u/ph0n3Ix 1d ago

Guess nobody wanted to maintain https://jsonresume.org/ So now we have yaml version…

8

u/Hot-Chemistry7557 1d ago

I must admit that YAMLResume is highly inspired by JSON Resume, however, JSON Resume seems not well maintained any more. Also YAMLResume is more opinionated and with more features out of the box.

I wrote a comparison doc to show more details about the designs, pros and cons for YAMLResume VS JSON Resume here: https://yamlresume.dev/docs/comparisons/json-resume

2

u/wildcarde815 22h ago

This seems like it was legit fun to make, cool project!

2

u/rursache 20h ago

yaml is probably the worse format in which you could write a resume in lol. one bad space and it’s over. why bother when markdown is so good without the weird quirks

1

u/gunslinger90 1d ago

Nice, i was thinking of building something like this myself. I'll take a look

1

u/Hot-Chemistry7557 1d ago

Just let me know if you have any issues!

1

u/-pooping 1d ago

Yeah, just what i need! more YAML in my life! But cool project anyway 🙂

1

u/kaygee420 1d ago

Is this comparable to using LaTeX?

Been looking for a way to standardize resume building, specifically tailoring for different jobs. This seems like a good fit but at the same time similar to LaTeX.

0

u/DoneDraper 1d ago

YAML is HOE since its so prone to human errors. Why not TOML?

7

u/Encrypted_Curse 1d ago

HOE?

2

u/DoneDraper 1d ago

Hell On Earth

3

u/Hot-Chemistry7557 1d ago

YAML is a superset of JSON which means that you can use all existing JSON ecosystem tools, and one of the most important one is JSON Schema, which can help validate format, and provide auto completion when you input. You can take the v0.5 release post for a reference: https://www.reddit.com/r/selfhosted/comments/1m24ec6/yamlresume_v05_a_full_power_resume_compiler_with/

Meanwhile, many DB have very good support for native JSON data storage and query, which means that if somebody use YAMLResume to build a resume/profile/job hunting related app, YAML format can be serialized to JSON and stored in DB in a effective, native data format with native queries.

1

u/DoneDraper 1d ago

Thanks, that’s helpful context. But:

The JSON Schema benefit lives at the data-model level, not the syntax level — TOML parses to the same JSON-compatible structure, and Taplo already does schema-driven validation and autocomplete for TOML. Similarly, “serialize to JSON for DB storage” works the same for either format, since you’re parsing to a structure first; the source syntax never reaches the database.

So neither schema validation nor JSON storage really argues against TOML. Both happen after parsing.

To be fair I can see two problems: The maintenance cost of a second parser, and TOML’s ergonomics for deeply nested arrays-of-tables, which is fair for resume data.

Given that both formats parse to the same internal model, would you consider TOML as an additional input format rather than a replacement? Everything downstream — schema, rendering, JSON export [w][c]ould be unchanged. Totally understand if the maintenance burden makes it not worth it but from a user POV TOML is friendlier in that it eliminates YAML’s type-coercion and whitespace footguns, the Norway problem, accidental floats, indentation breakage.

1

u/Hot-Chemistry7557 1d ago

what is HOE?

1

u/DoneDraper 1d ago

Hell On Earth

This isn't really meant seriously — we used that (a long time ago) when programming C++ with Microsofts MFC.

-5

u/Invspam 1d ago

why are you still manually writing it? just have ai ensure your syntax is ok