Practical templates — profile README, project README, badges, AI-generated sections.
The best READMEs in 2026 are short, opinionated, and load fast. A good profile README is one screen of text plus one stats widget — anything more is decoration. A good project README opens with what the thing is, who it is for, and a working install command, then earns the right to ask for stars. Badges from shields.io are still useful when they say something real (build status, npm version, license), but rows of vanity badges signal AI-generated filler. Stats widgets, dynamic AI sections, and demo GIFs help only when the underlying repo is worth visiting. Skip animated panda banners.
I have reviewed hundreds of READMEs over the last year. The pattern is consistent: the READMEs that convert visitors into stars, contributors, or hires respect the reader's time. They open with a clear sentence, prove the project works in under thirty seconds, then add the polish. The READMEs that fail do the opposite — three rows of badges, an animated GIF, a long «about me» monologue, and the install instructions buried below the fold.
This guide gives you templates you can copy: a profile README structure, a project README that follows the «what, why, install, use» pattern, badge generators worth using, stats widgets that do not look like AI slop, and dynamic sections done well. I will also walk through how to adapt the template by project type, and end with the common mistakes.
Why READMEs got harder to write in 2026
Two things changed. First, AI assistants made it trivial to generate a polished-looking README in five minutes — and reviewers can spot the patterns instantly. Sections labeled «Features», «Installation», «Usage», «Contributing», «License» in that exact order, written in neutral marketing voice, almost always come from a template prompt. A generic README now reads as «the author did not care enough to write this themselves».
Second, the audiences diverged. A profile README is read by recruiters looking for signal in twenty seconds. A project README is read by developers evaluating whether to use the thing. Most templates treat them the same way, which produces profile READMEs stuffed with project-style sections, and project READMEs that open with a personal bio.
The fix is to stop thinking of the README as a document to fill out, and start thinking of it as a landing page with a job. What does the visitor need to know in the first ten seconds? What action do you want them to take next? The structure follows from the answers.
Profile README anatomy
Your profile README — the special repo named after your username — is read mostly by recruiters, fellow engineers checking your work, and potential collaborators. They want to know what you build, what you have shipped, and how to reach you. Nothing else.
The template that works in 2026 fits on one laptop screen and has four sections: a one-line positioning statement, a «currently building» block with one or two active links, a «selected work» block with three to five projects, and one line about how to reach you. Optionally, a single stats widget at the bottom. That is the entire template.
- Headline: One sentence — «Backend engineer building developer tooling for API teams.» No «passionate», no «full-stack ninja».
- Currently: Two lines max. «Working on [project] — a [one-line description]. Writing about [topic] at [link].»
- Selected work: Three to five repos with a one-line «what + who for» each. Link to the repo.
- Reach: One or two ways to contact — email or X is enough. Skip every social icon you have ever owned.
- Optional: One stats widget. One. Not three. Not a streak counter, a trophies chart, and a most-used-languages bar all stacked.
The mistakes that hurt most are easy to fix. Drop the «Hi, I am [name]» wave emoji opening. Drop the language badge wall — your repos already prove what you write in. A clean, sparse README signals a developer who edits.
Project README structure
A project README has a different job: convince the visitor that the thing is real, works, and is worth their time. The template that converts best follows a strict order — what, who, install, use, then everything else.
The first section above any badge or banner is one sentence describing what the project is. «A TypeScript library for typed environment variables with zero runtime cost.» Not «A modern, blazing-fast, developer-friendly library...» — just the noun, the language, the function. Below that, one line about who it is for: «For Node.js services that want compile-time safety on process.env without giving up Twelve-Factor.»
Then a working install command, copy-pasteable, with the package manager visible. Then a minimal usage example — five to ten lines that show the most common use case. If a developer cannot understand what the project does and how to start within ten seconds, they leave.
| Section | Order | Length |
|---|---|---|
| Headline + one-line description | 1 | 1 sentence |
| Status badges (build, version, license) | 2 | 1 row, 3-4 badges |
| Install command | 3 | 1-2 lines |
| Minimal usage example | 4 | 5-15 lines of code |
| Why this exists / who it is for | 5 | 1-2 paragraphs |
| API or feature reference | 6 | As needed |
| Contributing + license | 7 | Short, link to files |
Notice that «features» and «about» sections are not in the template. Features should be visible from the usage example. About-the-project context belongs in section five, after the reader has seen what the thing does. Front-loading marketing copy before code is the most common mistake in open source READMEs.
Badge generators: shields.io and badgen
Badges still work in 2026 — when they communicate something useful. A green «build passing» badge tells me CI is wired up and the maintainer cares about it. An npm version badge tells me whether the published version matches the README. A license badge saves a click for legal review. Three badges, each with a real signal, take up one line and add credibility.
Vanity badges are different. «Made with love», «PRs welcome», «awesome», «100% pure JavaScript» — these dilute the real ones and signal that the README was assembled from a template. The current trend among serious projects is one row of three to four badges, all functional, all linking to live data sources.
Shields.io remains the default. It generates SVG badges from live endpoints — npm version, GitHub Actions, Codecov, stars, license, weekly downloads. The URL pattern is predictable: https://img.shields.io/npm/v/your-package. For most projects, shields.io covers everything.
Badgen is the lighter alternative. Faster CDN, fewer features, but cleaner badges. Either way, pick one and stick with it — mixing badge styles in the same row looks careless.
Stats widgets without the cringe
The github-readme-stats project from anuraghazra is the dominant stats widget. It generates a card with your contribution count, top languages, streak, and stars, and you embed it as an image. Used well, it adds a small visual anchor to a profile README. Used poorly, it stacks four cards in a 2x2 grid that takes up the whole screen and makes the profile look like a dashboard.
The pattern that works: one card, at the bottom of the profile README, after the text content. Either the «top languages» card (small, quick visual) or the «stats» card (commits, PRs, issues, stars). Not both. Not the streak card — streak culture is dead and pretending otherwise dates the profile.
Customization matters. The default theme reads as generic. Pick one that matches your aesthetic — «tokyonight», «catppuccin_mocha», or a custom palette via URL parameters. Set hide_border=true and hide_title=true for a cleaner look. The widget should feel like part of the README, not a billboard pasted on top.
Alternatives exist — github-profile-trophy, github-readme-streak-stats — but stacking widgets from multiple projects is the fastest way to make a profile look noisy. Pick one source, one card, and let the README breathe.
AI-generated dynamic sections done well
The interesting category in 2026 is dynamic README sections — content that updates automatically via GitHub Actions. The good ones add real signal: a «recent blog posts» section pulled from your RSS feed, a «latest YouTube video» card, a «currently reading» list synced from Goodreads, a «now playing» Spotify widget. The bad ones are AI-generated filler that pretends to be content.
The «good» pattern uses a workflow file (.github/workflows/readme.yml) that runs on a schedule, fetches data from an external source, and rewrites a marked section of the README. Tools like jamesgeorge007/github-activity-readme insert your latest five public events. gautamkrishnar/blog-post-workflow pulls posts from any RSS feed. These add freshness without claiming the author wrote anything they did not.
The «bad» pattern uses an LLM to generate a paragraph «about me» on every push, often producing slightly different but equally bland descriptions of the same person. Recruiters can tell. The same applies to AI-generated weekly «what I learned» summaries — if the post does not survive a human read-through, it does not belong on your profile.
The honest middle ground is using AI as a draft tool, not a publishing pipeline. Generate a first pass, then rewrite every sentence in your own voice, cut the filler, and add the specifics only you know.
Contributing guidelines and code of conduct
For any project that hopes to attract outside contributors, a CONTRIBUTING.md and CODE_OF_CONDUCT.md are not optional. They do not need to be long — half a page each is plenty — but they need to exist and be linked from the README.
The CONTRIBUTING template that works has four parts. How to set up the dev environment (commands, not paragraphs). How to run tests. The branch and PR conventions you actually use. A short section on what kinds of contributions are welcome and what is out of scope. The last point matters most — vague «contributions welcome» messages produce drive-by PRs that drain maintainer time. Saying «I am not accepting feature PRs without a prior issue discussion» up front saves everyone the cycle.
The CODE_OF_CONDUCT.md is usually a copy of the Contributor Covenant — that is fine and expected. The point is to have one, not to write one. GitHub's «Add a code of conduct» button generates the file in two clicks. If your project ever hits a tense situation, having this document already in place is what lets you act on it.
One more file worth adding: SECURITY.md. A short document explaining how to report vulnerabilities (private email, not a public issue). For libraries used in production, this is table stakes.
Demo media: GIFs, videos, and screenshots
If your project has any visual or interactive surface, the README needs a demo. Text descriptions of UIs do not work — readers skim them and bounce. The hierarchy of demo media, from cheapest to most powerful, is screenshot, GIF, video, live demo link.
For CLI tools, an asciinema recording or VHS-generated GIF works best. The viewer sees actual command output, the file is small, and it loops. VHS from charm.sh is the current best-in-class — you write a script, it produces a GIF or MP4 with consistent pacing.
For web UIs, a 5-15 second screen recording converted to GIF (under 5MB) works at the top of the README. Use Kap on Mac, ScreenToGif on Windows. Trim ruthlessly — a 30-second GIF will not load before the visitor leaves.
- GIF under 5MB, ideally under 2MB. Larger files break mobile.
- One demo, not three. Pick the most representative interaction.
- For CLI tools, use VHS or asciinema — not phone screen recordings.
- Host the file in the repo (
/docsor/.githubfolder), not on Imgur. - Add a static fallback image — some readers disable autoplay GIFs.
Templates by project type
The structure above is a starting point, but the optimal README depends on what you are shipping. A library has different needs than a CLI tool, which has different needs than a framework or full app.
Library README. Lead with what it solves and the import statement. The first code block should be the minimal use case — three lines max. Follow with API reference (or a link to it on a docs site if the surface is large). Include a comparison section if there are well-known alternatives — «vs zod», «vs commander» — being explicit about trade-offs builds trust. Skip screenshots; libraries do not have UIs to show.
CLI tool README. Lead with the install command and a single demo GIF or asciinema cast showing the most common command. Then a quick-start with two or three example invocations. Document flags in a table, not a wall of --help output. Add a «common workflows» section showing how the CLI fits into typical use cases — that is what separates a memorable CLI from a forgettable one.
App README. For a deployable application, lead with a screenshot or short video, then deployment instructions. A live demo link, even a read-only one, converts more visitors than any amount of feature copy. Add an «environment variables» section explaining what needs to be configured.
Framework README. For a meta-tool that other developers build on, the README is part of marketing. Lead with the philosophy in one or two sentences. Include a «Hello World» that compiles and runs. Link to a starter template repository so visitors can clone-and-go. Honest comparison sections with established frameworks help.
| Project type | Open with | Must include |
|---|---|---|
| Library | Import statement + 3-line example | API reference, comparison vs alternatives |
| CLI tool | Install command + demo GIF | Flags table, common workflows |
| App / SaaS template | Screenshot + live demo link | Deploy instructions, env vars |
| Framework | Philosophy + Hello World | Starter template link, honest comparison |
Common mistakes
The same patterns show up in nearly every weak README. Once you can name them, they are easy to avoid in your own work and easy to spot when reviewing others.
What strong READMEs do
- Open with one clear sentence about what the thing is.
- Show working code in the first half-page.
- Use three or four functional badges, all with live data.
- Include a real demo (GIF, asciinema, or screenshot) if there is anything to show.
- Match the tone of the project — playful for hobby tools, terse for infrastructure.
- Stay short. A README that fits in two screens beats one that needs a TOC.
What weak READMEs do
- Open with «A modern, blazing-fast, developer-friendly...» — pure filler.
- Stack two rows of vanity badges before the install command.
- Use the exact section order from a generic template — Features, Installation, Usage, Contributing.
- Bury the install command below an «about» section nobody asked for.
- Embed an animated banner GIF that loads before any text renders.
- Mix tones — corporate marketing copy in a hobby project, jokes in a security library.
Two more mistakes worth calling out. The «table of contents» trap — if your README needs a TOC, it is too long. Split documentation into /docs and keep the README to one screen plus links. And treating the README as set-and-forget — a README that documents a 2024 install command for a 2026 version erodes trust faster than no README at all.
FAQ
Should I use a README generator like readme.so? As a starting point, sure. As final output, no. Generators produce the section order reviewers now associate with low-effort templates. Use it for the skeleton, then rewrite every section in your own voice.
Do GitHub stars actually matter for hiring? They are a soft signal, not a hard requirement. A repo with 12 stars and a thoughtful README beats a repo with 200 stars from a viral tweet and an empty README. Recruiters look at whether the project is real, not the number on the star button.
How long should a project README be? Short enough that a developer can decide whether to keep reading within 30 seconds. For most libraries, that is two to three screens. For complex frameworks, it might be longer — but most of that length should live in /docs with the README acting as a portal.
Are emoji headings okay? One or two, used sparingly, fine. A heading for every section («📦 Installation», «🚀 Usage», «🤝 Contributing», «📜 License») is a signature of templated content and reads as low-effort in 2026.
What about animated SVG banners and 3D effects? They worked as novelty in 2022. In 2026 they read as time spent on the wrong thing. The signal a great README sends is «I respect your time», not «look how much I customized GitHub markdown».
Bottom Line
A great README in 2026 is short, honest, and built for the reader's job. For a profile, the job is letting a recruiter or collaborator answer «what does this person build» in twenty seconds. For a project, the job is letting a developer decide «is this worth using» in thirty. Every section that does not move toward those goals is decoration, and decoration now reads as filler. The templates in this guide work because they front-load the content that matters and trust the reader to see it.
The hard part is the editing. Most first drafts are 40% too long and open with a sentence that says nothing. Cut, cut again, and have one developer read it cold. If they cannot tell you what the project is after thirty seconds, the README is not done.
Key takeaways
- A profile README is a one-screen portfolio — positioning, current work, selected projects, contact. Not a Twitter bio with badges.
- A project README opens with what the thing is, who it is for, and a working install command, in that order.
- Three or four functional badges (build, version, license) work; vanity badge walls signal AI-generated filler.
- One stats widget, well themed, is enough — stacking trophies, streaks, and language cards looks like a dashboard.
- AI-generated dynamic sections work when they pull real data (RSS, YouTube, recent activity); they fail when they generate filler prose.
- CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md are baseline expectations for any project soliciting contributors.
- Demo media converts — a sub-5MB GIF, a VHS recording, or a live demo link beats any amount of feature copy.
- The optimal template depends on project type — library, CLI, app, and framework READMEs each lead with different content.
- The most common failure is length. If your README needs a table of contents, it is too long.
One link for every project
If you are shipping multiple projects on GitHub, you are also linking to a personal site, a blog, X, and probably a Sponsors page. UniLink gives you one bio link that ties all of them together, with click analytics so you can see which channels actually send people to your repos.
Build your link in bio →