A good README is the difference between a project that gets used and one that gets ignored. Most READMEs either say too little ("A cool project") or too much (walls of text nobody reads). Here's how to hit the sweet spot.
The Essential Sections (In Order)
- Project name and one-line description
- What it does (2-3 sentences or a screenshot)
- Quick start / Installation
- Basic usage example
- Configuration (if applicable)
- Contributing (if open source)
- License
Section 1: Project Name and Description
The first thing people see. Make it count:
# Project Name
One-sentence description of what this project does and who it's for.

Bad example: "A JavaScript library"
Good example: "A lightweight JavaScript date picker that works without dependencies. 3KB gzipped."
Section 2: Installation
Get people running your project in under 60 seconds:
## Installation
```bash
npm install your-package
```
Or with yarn:
```bash
yarn add your-package
```
Rules for installation sections:
- Copy-pasteable commands (not instructions like "install it with npm")
- Include all prerequisites (Node version, system dependencies)
- Show the simplest path first, mention alternatives second
- Test your instructions on a clean machine
Section 3: Usage
Show the most common use case with working code:
## Usage
```javascript
import { DatePicker } from 'your-package';
const picker = new DatePicker('#my-input', {
format: 'YYYY-MM-DD',
minDate: new Date()
});
```
Include:
- A minimal working example (the "hello world" of your project)
- Expected output or result
- Link to full API docs if they exist elsewhere
Section 4: Configuration / API
Use a table for options:
## Options
| Option | Type | Default | Description |
|-----------|----------|----------|--------------------------|
| format | string | 'YYYY-MM-DD' | Date format string |
| minDate | Date | null | Earliest selectable date |
| maxDate | Date | null | Latest selectable date |
| disabled | boolean | false | Disable the picker |
Section 5: Contributing
## Contributing
Contributions are welcome! Please:
1. Fork the repository
2. Create a 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
Section 6: License
## License
MIT License - see [LICENSE](LICENSE) for details.
Badges (Optional but Professional)
Add badges at the top for quick status information:



Common README Mistakes
- No installation instructions — people won't guess how to install
- Outdated examples — test your README examples regularly
- Assuming knowledge — spell out prerequisites
- Giant wall of text — use headers, lists, and code blocks
- No quick start — people want results in under 2 minutes
- Missing license — companies can't use your code without one
README Template
Copy this template for your next project:
# Project Name
Brief description of what it does.
## Installation
```bash
npm install project-name
```
## Quick Start
```javascript
// Minimal working example
```
## Documentation
[Full documentation](link-to-docs)
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md)
## License
MIT
Pro Tips
- Add a GIF or screenshot — visual proof that it works builds trust instantly
- Link to a live demo if possible
- Keep the README updated when APIs change
- Write for someone who found your project via Google and has 30 seconds to decide if it's useful