[HN Gopher] Show HN: RenderCV - Open-source CV/resume generator,...
___________________________________________________________________
Show HN: RenderCV - Open-source CV/resume generator, YAML to PDF
I built RenderCV because Word kept breaking my layout and LaTeX was
overkill. I wanted my CV as a single YAML file (content, design,
margins, everything) that I could render with one command. Run
_rendercv render cv.yaml_ - get a perfectly typeset PDF.
Highlights: 1. _Version-controllable:_ Your CV is just text. Diff
it, tag it. 2. _LLM-friendly:_ Paste into ChatGPT, tailor to a job
description, paste back, render. Batch-produce variants with
terminal AI agents. 3. _Perfect typography:_ Typst under the hood
handles pixel-perfect alignment and spacing. 4. _Full design
control:_ Margins, fonts, colors, and more; tweak everything in
YAML. 5. _Comes with JSON Schema:_ Autocompletion and inline docs
in your editor. Battle-tested for 2+ years, thousands of users,
120k+ total PyPI downloads, 100% test coverage, actively
maintained. GitHub: https://github.com/rendercv/rendercv Docs:
https://docs.rendercv.com Overview on RenderCV's software design
(Pydantic + Jinja2 + Typst):
https://docs.rendercv.com/developer_guide/understanding_rend... I
also wrote up the internals as an educational resource on
maintaining Python projects (GitHub Actions, packaging, Docker,
JSON Schema, deploying docs, etc.):
https://docs.rendercv.com/developer_guide/
Author : sinaatalay
Score : 62 points
Date : 2025-12-21 13:15 UTC (9 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| scythmic_waves wrote:
| I used this recently for my resume and I recommend it.
|
| I have the technical background to write Latex and Typst
| documents but I honestly didn't want the headache. Plus I'm the
| type to futz with styling all day long instead of putting down
| actual content. RenderCV was simple to use and did exactly what I
| wanted.
| pietz wrote:
| A bit of a missed opportunity not to use the JSON Resume schema
| for this.
|
| https://jsonresume.org/schema
| sinaatalay wrote:
| We deliberately chose not to use JSON Resume because we wanted
| greater flexibility. For example, in RenderCV, you can use any
| section title you want and place any of the 9 available entry
| types under any section. In contrast, JSON Resume has
| predefined section titles, and each section is restricted to a
| predefined entry type. For instance, you must use the
| experience entry schema under the experience section.
| pietz wrote:
| I hear you. This boils town to personal opinion. I would have
| preferred to use an existing standard than introducing yet
| another one. The custom sections aren't something I've ever
| seen or needed anyway.
| catapart wrote:
| Oh awesome! This is a great solution to resumes. The only thing
| I'd like more is a web app to run it in.
| sinaatalay wrote:
| We do have that, but it's a bit outdated. We'll update it at
| some point: https://app.rendercv.com
| varun_ch wrote:
| This looks really interesting, but I'm wondering what this adds
| that someone can't already do with Typst+a resume template. The
| basic-resume template already abstracts enough that you only need
| to care about content rather than formatting:
|
| https://typst.app/universe/package/basic-resume/
|
| Does anyone have examples of how they're using the YAML?
| sinaatalay wrote:
| RenderCV actually relies on its own Typst package:
| https://typst.app/universe/package/rendercv
|
| Here are a couple of reasons, just a few that come to mind, why
| using YAML + RenderCV can be more appealing than working
| directly in Typst:
|
| - Reusing the same content across multiple themes. YAML +
| RenderCV allows you to experiment with different themes and
| design options to the exact same content with no changes to the
| data itself. This is difficult to achieve in pure Typst, where
| switching templates typically means adapting your content to a
| different set of Typst commands.
|
| - Centralized control over entry layouts. You can adjust how
| entire classes of entries are rendered from a single place--for
| example, changing the layout of all education entries at once,
| rather than editing each entry individually.
| subdavis wrote:
| I'd love to know if this performs better than your average resume
| in OCR or scanning tools. I think if you could advertise that you
| follow some kind of arcane best practices, that would be super
| attractive to a lot of people.
|
| I have a lot of anxiety about missing opportunities because of
| shitty OCR.
| sinaatalay wrote:
| Thank you. We will add an analysis of how RenderCV PDFs perform
| with applicant tracking systems in docs at some point, but
| users have been reporting positive results. We generate the
| PDFs using Typst, which adheres to modern PDF standards.
| NewsaHackO wrote:
| Wish I had seen this before making my resume in latex. One
| question, though to add publications, is it possible to use
| bibtex, or do you have to manually convert each publication to
| YAML?
| sinaatalay wrote:
| Yes, unfortunately, you will need to convert them to YAML. I
| think an LLM can easily do that for you, though. This has been
| requested before, but we haven't implemented it in order to
| keep our schema robust and simple. Maybe we should add it.
| joshdavham wrote:
| Favorited for next time I make a resume - thanks for making this!
| Hopefully I'll never have to touch LaTeX ever again.
| Cloudly wrote:
| I have been through a huge over supply of AI generated CVs using
| similar tools this year. I am sure this will help people so not
| bashing the tool per se, but bare in mind that you will be
| joining the robots.
|
| I don't know what the solution really is, but as much as I hate
| it, a verified Linkedin Profile is a huge signal now. Otherwise a
| real personal site with care and history. I am guilty of being
| bad with the second so - no easy answers. Maybe even a wacky
| looking CV would make me notice a candidate more. Powerpoint 90s
| style.
| mkozak wrote:
| AI generated (and quite often fake) CVs are a fucking joke.
| I've spent many hours over the last 2 years going through the
| pile of them
| browningstreet wrote:
| Lots of people apply to places other than startups, and for
| positions other than developer.
| uniqueuid wrote:
| I get the motivation, but it honestly feels a bit weird to use
| tens of thousands of lines of python code to do something that
| you can just directly do in typst.
|
| I mean, a CV is not really rocket science and there are quite a
| few great typst templates out there.
| browningstreet wrote:
| As someone who's done a lot of hiring over the years and
| read/scanned thousands of resumes, I can attest: CVs are indeed
| rocket science.
| uniqueuid wrote:
| Point taken, but I'd prefer 200 lines of rocket science that
| I understand and control over 60k lines of (cleanly written
| and documented) rocket science.
|
| (Although admittedly both plain typst and this project are
| still way less complex than LaTeX.)
| dfajgljsldkjag wrote:
| This is clearly a real project that was built over several years
| with human effort (not vibe coded). Which makes it all the more
| depressing that the author decided to take a massive dump over
| the entire README.md with AI slop.
|
| Sadly, it appears the project was heavily sloppified a mere 2
| weeks ago:
| https://github.com/rendercv/rendercv/commit/5cc5fbdf9ec1a742...
| sinaatalay wrote:
| You're absolutely right!
| opengrass wrote:
| Yaml itself can be a resume.
| mkozak wrote:
| Looks nice! I do, however, see an issue with such tools, as they
| require people to maintain their CV. I don't want to hijack the
| thread so I won't link here unless asked to do so, but I've build
| something to keep developers' profiles up to date
| Dansvidania wrote:
| please share?
| thangalin wrote:
| In tough job markets, submitting 100 resumes before getting hired
| is not uncommon. Of possible interest is my Creating Catchy Cover
| Letters blog post, which uses my Markdown editor, KeenWrite
| (https://keenwrite.com), to create PDF files styled to match a
| company's branding:
|
| https://keenwrite.com/blog/2025/10/15/creating-catchy-cover-...
|
| A handful of prospective managers told me that my cover letter
| stood out among hundreds of applicants.
|
| Here's the full shell script I used to build cover letters
| (you'll need to point "theme dir" to the directory where the
| cover letter theme---aspiros---is found). With this script,
| creating a cover letter went from about 20 minutes down to 5. If
| you have any troubles getting it to work, contact me via
| https://whitemagicsoftware.com/. #!/usr/bin/env
| bash # This script builds a cover letter based on a
| company's branding. The # parameters include: #
| # $1 -- The company name as a directory, containing colours and
| logo. # $2 -- The company name (normal case). #
| $3 -- The company role (job title). # $4 -- The relative
| path to the cover letter to typeset. # # Example:
| # # ./build.sh corp Corporation 'Job Title'
| template/cover-letter.md readonly
| SCRIPT_SRC="$(dirname "${BASH_SOURCE[${#BASH_SOURCE[@]} - 1]}")"
| readonly SCRIPT_DIR="$(cd "${SCRIPT_SRC}" >/dev/null 2>&1 &&
| pwd)" readonly COMPANY_DIR="${1:-template}"
| readonly COMPANY_NAME="${2:-Template}" readonly
| COMPANY_ROLE="${3:-Job Title}" readonly
| PATH_COVER_LETTER="${4:-climate/cover-letter.md}"
| readonly EMPLOYEE_NAME="${5:-Your Name}" readonly
| EMPLOYEE_ROLE="${6:-Your Role}" read -r COLOUR_FG
| COLOUR_BG COLOUR_AC < "$COMPANY_DIR/colours.txt" readonly
| COLOUR_FG COLOUR_BG COLOUR_AC magick \
| signature-black.png \ -alpha extract \
| -background "#${COLOUR_AC}" \ -alpha shape \
| -define png:color-type=6 \ signature.png
| rm -f ${HOME}/.local/share/keenwrite/logo_svg_*.pdf
| keenwrite.bin \ -i "${PATH_COVER_LETTER}" \
| -o cover-letter.pdf \
| --set=employer.company.name="${COMPANY_NAME}" \
| --set=employer.position.role="${COMPANY_ROLE}" \
| --set=employee.name="${EMPLOYEE_NAME}" \
| --set=employee.role="${EMPLOYEE_ROLE}" \
| --set=employee.contact.phone="555-1212" \
| --set=employee.contact.email="email@hostname" \
| --set=employee.portfolio.url="gitlab.com/YourName" \
| --set=employee.address.line.1="address 1" \
| --set=employee.address.line.2="city, province" \
| --set=employee.address.line.3="postal code" \
| --metadata="foreground=${COLOUR_FG}" \
| --metadata="background=${COLOUR_BG}" \
| --metadata="accent=${COLOUR_AC}" \ --image-
| dir="${SCRIPT_DIR}/${COMPANY_DIR}" \ --theme-
| dir="${HOME}/dev/java/keenwrite/themes/aspiros"
| exiftool \ -overwrite_original_in_place \
| -Title="${EMPLOYEE_NAME}" \ -Author="${EMPLOYEE_NAME}"
| \ cover-letter.pdf
|
| This saved me about 19 hours of work; hopefully it will save you
| time, as well. See also: https://xkcd.com/1205/
| michidk wrote:
| Why invent a new file format when there is
| https://jsonresume.org/? Its also quite easy to customize and add
| more things as it does not prohibit extra values
| sinaatalay wrote:
| The JSON Resume schema did not support what we needed, so we
| deliberately created our own.
|
| We wanted to define 9 different entry schemas that could be
| used under any section title. In our schema, each section,
| regardless of its title, contains a list composed of one of
| these nine entry types. This is different from the JSON Resume
| approach, where specific entry schemas are tied to specific
| sections (work schema for work section, etc.).
|
| In RenderCV, users can choose any section title they want and
| use any of the 9 entry types within it. Each entry type is
| rendered differently in the generated PDF.
| zpusmani wrote:
| I really love tools that treat documents as code. I have been
| trying to move my workflows away from binary formats (like PPT &
| Word) to text based ones I can more easily version control.
|
| Does this support custom CSS for the layout or is it bound to the
| YAML templates?
| sinaatalay wrote:
| It's completely flexible. However, it's not done through CSS.
| We use Typst to generate PDFs, and we template Typst files
| using Jinja2 from YAML. You can override the built-in Typst
| templates; see the guide here:
| https://docs.rendercv.com/user_guide/how_to/override_default...
| zpusmani wrote:
| Ah makes sense, using Typst under the hood for strict layout
| control compared to CSS. Thanks for the link to the override
| guide and I'll check it out.
| smnrchrds wrote:
| First of all, thank you for making this. I used it in my recent
| job search and it was fantastic.
|
| Second, if I may make a request, could you please follow SemVer?
| I tried rendering my resume again last week, only 3 or 4 months
| after having made it originally with RenderCV version 2 point
| something I cannot recall, and it would not work. The design
| schema and perhaps also the CLI options have changes so much that
| I expect I would need to spend 2 to 4 hours getting it to work
| again, and there is no guarantee that it would not break again in
| another month. I would have appreciated if the versioning scheme
| followed SemVer, so I would know that any v2 engine would work
| and v3 engine would not.
|
| I also would appreciate it if you could write detailed migration
| docs between versions and/or recommendations in error messages.
| The reason I think migrating my CV would take so long is that I
| have to go by trial and error, searching for similar-sounding
| parameter names and replacing them one-by-one. I gave up after an
| hour of this as I was nowhere near done.
|
| Third, is markdown render supposed to miss information or is it a
| bug? Some sections of the resume would not end up in the markdown
| version, only showing section title and nothing else. If this is
| not expected behaviour, please let me know.
|
| Again, thank you for making this. I look forward to using it
| again in the future.
| dfajgljsldkjag wrote:
| The author discovered AI coding 2 weeks ago and completely went
| to town on the entire project. If you use any version before
| this (2.2) it will probably work fine.
|
| https://github.com/rendercv/rendercv/commit/5cc5fbdf9ec1a742...
| sinaatalay wrote:
| Just to clarify, that commit was the result of about a month
| of careful development, and involved significant manual
| effort beyond AI coding.
|
| See the PR: https://github.com/rendercv/rendercv/pull/528
| sinaatalay wrote:
| Thank you so much for the kind words, and I'm sorry for the
| trouble the changes caused you.
|
| To give some context: I hadn't worked on RenderCV for about six
| months, and when I came back, I had grown technically and my
| design taste had changed. I decided to do a significant
| overhaul rather than preserve backwards compatibility. It felt
| necessary to maintain my enthusiasm for this project long-term.
|
| You're right about semantic versioning. I used a two-number
| scheme (MAJOR.MINOR) back in 2023 when I didn't know much about
| releasing software. By the time I understood the benefits of
| MAJOR.MINOR.PATCH, I didn't want to change it mid-stream. I'm
| planning to switch after v3. It will give me more flexibility
| to tag updates appropriately.
|
| I'm also adding migration documentation to my list. You're
| right that I should have done this. Going forward, there will
| be clear migration guides.
|
| Regarding the Markdown issue where sections show only titles,
| that sounds like a bug. If you could open an issue with
| details, I'd appreciate it.
|
| Thank you for using RenderCV!
___________________________________________________________________
(page generated 2025-12-21 23:00 UTC)