Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
A LaTeX resume and cover letter template pair that uses declarative commands to produce clean, ATS-friendly PDFs.

A full-stack Next.js TypeScript template focused on functionality over UI, featuring Zustand, TanStack Query, and ESLint 9 support.
Expressive Resume is an open-source LaTeX2e resume and cover letter template pair by software engineer Joseph Hale that accepts declarative content commands and outputs a typeset, ATS-friendly PDF. You write a plain .tex file using either the ExpressiveResume or ExpressiveCoverLetter documentclass, and the class handles layout, spacing, and typography without a long preamble.
Expressive Resume is a LaTeX class and template set for producing resumes and matching cover letters from high-level commands. It includes two documentclasses — ExpressiveResume and ExpressiveCoverLetter — provided as .cls files in the src folder, and it runs on any LaTeX2e-compatible typesetting engine. Input is a .tex file that calls commands like \experience, \role, \achievement, \degree, \award, and \tech; the output is a compiled PDF. The project was created by Joseph Hale, an engineer with experience building automated resume parsers for Applicant Tracking Systems.
\experience, \role, and \achievement; the class handles bullet formatting, indentation, and spacing.ExpressiveCoverLetter mirrors the resume header and accepts inline \tech highlights for skills.\documentclass{ExpressiveResume} and content, skipping the 100–200 lines of formatting code typical of other LaTeX templates.\resumeheader accepts optional parameters for contact details plus a QR code image, and city only appears when state is also provided.\role can include \equivalent to show a renamed title that better matches actual duties.\objective, one or more \experience blocks, \project, \degree, and \award into a single compiled document.\role entries inside one \experience to list promotions at the same organization.\equivalent to display a title that matches responsibilities rather than the official one.\coverletterheader, separate paragraphs with blank lines, and call \tech to bold or highlight relevant skills.Use the GitHub "Use this template" button or fork the repository, then clone it and open the folder in VS Code with Docker and the Remote Containers extension installed. VS Code will prompt "Reopen in Container," which builds a sandboxed LaTeX environment on first run. Create a .tex file in src that declares \documentclass{ExpressiveResume} or \documentclass{ExpressiveCoverLetter}, fill in the provided commands, and compile to produce the PDF. If LaTeX is already installed locally, you can clone the repo and skip the container entirely.
Yes — the repository is public on GitHub and includes a license file. The author also has a GitHub Sponsors page for optional support, but there is no paid tier or watermark mentioned.
Not if you use the included VS Code devcontainer, which has LaTeX pre-installed in a sandbox. If you already have a LaTeX distribution, you can clone the repository and start writing immediately.
Two: ExpressiveResume and ExpressiveCoverLetter. Both are .cls files placed in the src folder and referenced with \documentclass in your .tex source.
Yes. The \resumeheader command accepts a qrcode parameter for the path to an image file, and the image appears in the top-right corner of the resume.
Yes — ExpressiveCoverLetter uses the same header style and the \tech command for inline skill highlights, so the two documents present a consistent visual identity.