[ Template ]

Minimalist LaTeX resume template

Minimal strips out everything Classic still keeps: no bold except the name and job titles, small gray uppercase section labels over a 0.3pt hairline instead of a bold rule, and sans-serif (Helvetica) throughout instead of serif. The name itself is set huge but medium-weight — not bold — which is the template's whole thesis: confidence through restraint, not emphasis.

It's a Swiss-design instinct applied to a resume — generous spacing, gray tone instead of black-and-white contrast, nothing fighting for attention. It reads calm rather than plain.

Suits design, product, and other roles where a resume with visible taste is a quiet asset, without going as far as Banner's bold color treatment.

Minimal LaTeX resume template preview

Who it's for

  • You want a resume that looks deliberately restrained, not just plain.
  • You're in design, product, or a field where typographic taste reads as a signal.
  • You'd rather everything stay gray and quiet except your name.

Works with ATS software

Minimal is single-column LaTeX with a full text layer — the gray tone and thin hairlines are pure visual styling (xcolor and titlerule), with no effect on the extracted text. It parses the same as any other Refyn template; the restraint is entirely for the human reader.

View the full LaTeX source
% ---------- Tagged PDF (optional) ----------
% Uncomment the next line for a tagged PDF: real reading order and list
% semantics for screen readers. Works with pdflatex on TeX Live 2023+.
% The LaTeX tagging project still labels this experimental, so it is off
% by default.
% \DocumentMetadata{lang=en-US, testphase={phase-III}}

\documentclass[letterpaper,10pt]{article}

% -------------------- Packages --------------------
\usepackage[letterpaper,margin=0.8in]{geometry}
\usepackage{titlesec}
\usepackage{enumitem}
\usepackage[hidelinks]{hyperref}
\usepackage{xcolor}
\usepackage{helvet}
\usepackage{etoolbox}

\renewcommand{\familydefault}{\sfdefault}

% -------------------- Formatting --------------------
% Swiss/hairline minimalism — sans throughout, only the name and job titles
% ever go bold, everything else stays light and generously spaced.
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt}
\linespread{1.05}
\setlist[itemize]{label=--,itemsep=1pt,topsep=4pt,leftmargin=0.2in}
\sloppy
\raggedbottom

% Section formatting — small gray uppercase label over a 0.3pt gray hairline.
% No letterspacing package is allowlisted, so the "wide tracking" feel comes
% from the small caps-ish uppercase + gray tone instead of true kerning.
\titleformat{\section}
  {\small\bfseries\color{gray!55!black}}
  {}{0em}{}[{\color{gray!40}\titlerule[0.3pt]}]

\titlespacing*{\section}{0pt}{10pt}{5pt}

% -------------------- Semantic macros --------------------
% render.py (app/services/conversion/render.py) only ever emits calls to the 11
% macros below, with data already massaged (dates joined, "Present" resolved,
% link labels derived, etc.) but with ALL visual decisions — bold/italic, hfill
% alignment, icons, separators, list styling, gap sizes — owned here. See the
% macro contract in that module's docstring before changing signatures.
% Every template MUST define all 11, including \closebullets and \entrygap.

\newtoggle{citemnotfirst}
\newtoggle{bulletsopen}
\newtoggle{skilllinenotfirst}

% \closebullets closes the itemize list \rbullet opens. render.py calls it
% right after emitting the \rbullet run for an entry. \AtEndDocument is a
% defensive backstop only, in case a future call site forgets.
\newcommand{\closebullets}{%
  \iftoggle{bulletsopen}{\end{itemize}\togglefalse{bulletsopen}}{}%
}
\AtEndDocument{\closebullets}

% Left-aligned name at \Huge but plain weight (\mdseries — no bold here, the
% whole point of this template is restraint), small gray contact line below.
\newcommand{\resumeheader}[3]{%
  \noindent{\Huge\mdseries #1}\ifblank{#2}{}{\quad{\color{gray!60!black}#2}}\\[4pt]
  \noindent{\small\color{gray!60!black}\togglefalse{citemnotfirst}#3\par}
  \vspace{4pt}
}

% No icons, no color on the punctuation — #1 (kind) is only checked for
% "email" so that case gets a real mailto: link; everything else just
% hyperlinks #2 when present.
\newcommand{\citem}[3]{%
  \iftoggle{citemnotfirst}{ \textperiodcentered\ }{\toggletrue{citemnotfirst}}%
  \ifstrequal{#1}{email}{\href{mailto:#2}{#3}}{\ifblank{#2}{#3}{\href{#2}{#3}}}%
}

\newcommand{\sectionstart}[1]{\togglefalse{skilllinenotfirst}\section*{\MakeUppercase{#1}}}

% The one other place bold survives: the job title itself.
\newcommand{\job}[4]{%
  \textbf{#1}\ifblank{#4}{}{ \hfill {\color{gray!60!black}#4}}\\
  #2\ifblank{#3}{}{, #3}%
}

\newcommand{\rbullet}[1]{%
  \iftoggle{bulletsopen}{}{\begin{itemize}\toggletrue{bulletsopen}}%
  \item #1%
}

\newcommand{\skillline}[2]{%
  \iftoggle{skilllinenotfirst}{\\}{\toggletrue{skilllinenotfirst}}%
  #1: #2%
}

\newcommand{\edu}[4]{%
  #1\ifblank{#3}{}{ \hfill {\color{gray!60!black}#3}}\\
  #2\ifblank{#4}{}{ \hfill GPA: #4}%
}

\newcommand{\cert}[1]{\\ Certification: #1}

\newcommand{\project}[4]{%
  \textbf{#1}\ifblank{#2}{}{ -- #2}\ifblank{#3}{}{ \hfill \href{#3}{[#4]}}%
}

\newcommand{\entrygap}{\vspace{6pt}}

% -------------------- Document --------------------

\begin{document}

\resumeheader{Jordan Rivera}{}{%
\citem{email}{jordan.rivera@example.com}{jordan.rivera@example.com}
\citem{phone}{}{(555) 123-4567}
\citem{location}{}{Austin, TX}}

\sectionstart{PROFESSIONAL SUMMARY}
Product-minded software engineer with 6 years building scalable web applications and leading cross-functional teams.

\sectionstart{PROFESSIONAL EXPERIENCE}
\job{Senior Software Engineer}{Acme Corp}{Austin, TX}{Jan 2022 -- Present}
\rbullet{Led a team of 4 engineers to redesign the checkout flow, increasing conversion by 18\%.}
\rbullet{Built an internal analytics platform now used by 200+ employees.}
\closebullets
\entrygap

\job{Software Engineer}{Beta Systems}{Remote}{Jun 2018 -- Dec 2021}
\rbullet{Shipped a real-time notification service handling 1M+ events per day.}
\closebullets

\sectionstart{SKILLS}
\skillline{Languages}{Python, TypeScript, Go}
\skillline{Tools}{Docker, PostgreSQL, AWS}

\sectionstart{EDUCATION \& CERTIFICATIONS}
\edu{University of Texas at Austin}{B.S. in Computer Science}{Aug 2014 -- May 2018}{3.7}
\cert{AWS Certified Solutions Architect}

\end{document}

Free to download and use anywhere. Compiles with pdflatex.

Common questions

Is a gray, low-contrast resume risky for ATS parsing?

No — the gray coloring is applied to the visual layer only. The underlying text layer that a parser reads is plain, full-contrast text, same as every Refyn template.

Is Minimal too plain for a corporate application?

It's restrained but not informal — it reads as considered rather than unfinished. For a fully conservative, zero-design reader, Harvard is the safer choice; Minimal still carries a visible point of view.

How is Minimal different from Harvard, since both avoid color?

Harvard is serif and traditional — Palatino, small caps, bold rules. Minimal is sans-serif and modern — hairlines, gray tone, no bold outside the name. Both skip color, but they read very differently.

Can I make the name bold in Minimal?

Not from the picker — medium-weight is the template's signature choice. You can edit the .tex source directly if you'd rather have it bold.

Edit it live. Keep the .tex forever.

Start free

No credit card required.