I've been browsing GitHub almost daily for 8 years. In that time, I've noticed something consistent: the repos that get starred, forked, and adopted have great READMEs. Not good — great. The README is the difference between a project that collects dust and one that builds a community.
After studying the READMEs of the top 100 most-starred repos on GitHub, I distilled a template that covers everything a good README needs. Let me walk you through it.
Why Your README Matters
Your README is the landing page of your open source project. It's the first thing a visitor sees, and it determines whether they:
- Star the repo (social proof that compounds)
- Actually try the project (the whole point)
- Contribute (free labor and community)
- Share it with others (organic growth)
- Or click the back button and never return
GitHub's own research shows that repos with detailed READMEs get 50% more contributions than those without. A README is not documentation overhead — it's your project's marketing, onboarding, and documentation rolled into one.
The Template: Section by Section
Here's the full template. I'll explain each section with examples from popular repos.
1. Project Title + Logo
<h1 align="center">
<img src="logo.png" alt="ProjectName" width="200" />
<br />
ProjectName
</h1>
<p align="center">
One-line description of what this does.
</p>
Keep the one-liner to 10 words or fewer. This is your elevator pitch in a single sentence.
Good examples:
- Tailwind CSS: "A utility-first CSS framework for rapid UI development"
- htmx: "High power tools for HTML"
- Zod: "TypeScript-first schema validation with static type inference"
2. Badges
[](https://npmjs.com/package/your-package)
[](https://opensource.org/licenses/MIT)
[](https://github.com/you/repo/actions)
[](https://npmjs.com/package/your-package)
Badges communicate credibility at a glance. The most useful ones:
- Build status — "This project is maintained and tests pass"
- Version — "This is actively released"
- License — "You can legally use this"
- Downloads — Social proof
Don't overdo it. 3-5 badges is plenty. More than 8 starts looking cluttered.
3. Screenshot or Demo GIF
<p align="center">
<img src="demo.gif" alt="Demo" width="600" />
</p>
This is arguably the most important element. A visual immediately communicates what the project does. The top repos almost universally include either:
- A screenshot of the UI (for visual tools)
- A terminal GIF showing usage (for CLI tools)
- A code snippet showing the output (for libraries)
Tools for recording terminal GIFs: Terminalizer, asciinema, or VHS.
4. Features
## Features
- 🔥 Zero configuration required
- ⚡ Builds in under 100ms
- 📦 Tiny bundle size (2KB gzipped)
- 🔌 Plugin system for extensions
- 📱 Works in Node.js and browsers
Keep this to 4-7 bullet points. Each feature should highlight a benefit, not just a capability. "Zero configuration required" (benefit) is better than "Supports configuration files" (capability).
5. Quick Start
## Quick Start
### Installation
bash
npm install your-package
### Usage
javascript
import { something } from 'your-package';
const result = something('hello');
console.log(result); // "Hello!"
markdown
This section should get someone from zero to "it works!" in under 2 minutes. The cardinal rule: if your Quick Start has more than 5 steps, simplify it.
Test your Quick Start on a fresh machine. If it doesn't work out of the box, fix it. A broken Quick Start is the fastest way to lose a potential user forever.
6. Documentation Link
## Documentation
Full documentation is available at [docs.yourproject.com](https://docs.yourproject.com).
- [Getting Started Guide](link)
- [API Reference](link)
- [Configuration Options](link)
- [Migration Guide](link)
For simple projects, documentation can live in the README itself. For anything more complex, link to a dedicated docs site. The README should always contain the minimum needed to start using the project.
7. Examples
## Examples
### Basic Usage
javascript
// Simple example
### Advanced Usage
javascript
// More complex example
### Real-World Example
Check out the [example app](link) for a complete implementation.
markdown
Examples are the most-read section of any README after the Quick Start. Include 2-3 examples that progress from simple to complex.
8. API Reference (for libraries)
## API
### `createClient(options)`
Creates a new client instance.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `host` | `string` | `localhost` | Server hostname |
| `port` | `number` | `3000` | Server port |
| `timeout` | `number` | `5000` | Request timeout in ms |
**Returns:** `Client` instance
For small APIs, include the reference directly in the README. For larger APIs, link to generated docs and just highlight the most common methods here.
9. Contributing
## Contributing
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md)
before submitting a pull request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
Even if you're not actively seeking contributors, include this section. It signals that the project is open and welcoming.
10. License
## License
MIT License — see [LICENSE](LICENSE) for details.
Always include a license. Without one, your code is technically "all rights reserved" by default, meaning nobody can legally use it.
Lessons from the Top Repos
After analyzing the most-starred repos, these patterns stood out:
Keep it scannable. Nobody reads a README top to bottom. People scan for the section they need. Use clear headers, short paragraphs, and visual breaks.
Show, don't tell. The most effective READMEs demonstrate the product within the first screenful — through a GIF, screenshot, or interactive example.
Maintain it. Outdated READMEs with broken badges and dead links erode trust fast. Update your README alongside your code.
Write for beginners. Assume the reader has never seen your project before. The curse of knowledge is the biggest README killer — you know how your project works, so you skip steps that are obvious to you but invisible to newcomers.
One README, one purpose. The README exists to get someone from "What is this?" to "I'm using it" as quickly as possible. Advanced documentation, architecture decisions, and contribution policies belong in separate files.
Generating Your README
If you're staring at a blank README.md, the hardest part is structure. You know your project — you just need to organize that knowledge.
README Generator creates well-structured READMEs from your project details. Input your project name, description, tech stack, and features, and it generates a complete README with all the sections above. It's a great way to get past the blank page and produce something professional in minutes.
The README Checklist
Before your next release, verify:
- [ ] Project name and one-line description are clear
- [ ] At least one visual (screenshot, GIF, or code output)
- [ ] Installation instructions work on a fresh machine
- [ ] Quick start gets to "it works" in under 2 minutes
- [ ] 2-3 code examples are included
- [ ] License is specified
- [ ] Badges are up to date
- [ ] Links and images are not broken
- [ ] Contributing guidelines exist
- [ ] README is written for someone seeing the project for the first time
Your README is your project's first impression, documentation, and marketing — all in one file. Invest 30 minutes in getting it right, and every visitor who lands on your repo will benefit.
Generate a professional README in minutes at readme-generator-coral.vercel.app.
Top comments (0)