---
title: "Generate a GitHub Repo Card Image"
description: "Render a GitHub repository card as an image. Worked code, common dimensions and the social preview template alternative."
url: "https://html2img.com/docs/examples/github-repo-card/"
---

# How to Generate a GitHub Repo Card Image

Render a GitHub repository card as a PNG. Useful for project READMEs, social previews and conference slides.

> **Note**
>
> Want it faster? Use the [GitHub Social Preview template](https://html2img.com/templates/github-social-preview/) and skip the markup. Send repo name, description, language and star count as JSON.

## HTML Content

```html
<div class="repo-card">
    <div class="repo-header">
        <div class="repo-name-container">
            <svg class="repo-icon" viewBox="0 0 16 16" width="16" height="16">
                <path fill="currentColor" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z" />
            </svg>
            <div class="repo-name">
                <a href="https://github.com/laravel/framework" class="repo-link">laravel/framework</a>
                <span class="repo-visibility">Public</span>
            </div>
        </div>
        <button class="star-button">
            <svg viewBox="0 0 16 16" width="16" height="16">
                <path fill="currentColor" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z" />
            </svg>
            Star
        </button>
    </div>
    <div class="repo-description">
        The Laravel Framework.
    </div>
    <div class="repo-meta">
        <div class="meta-item">
            <div class="language-dot"></div>
            PHP
        </div>
        <div class="meta-item">
            <svg viewBox="0 0 16 16" width="16" height="16">
                <path fill="currentColor" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z" />
            </svg>
            33.9k stars
        </div>
        <div class="meta-item">
            <svg viewBox="0 0 16 16" width="16" height="16">
                <path fill="currentColor" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z" />
            </svg>
            11.4k forks
        </div>
        <div class="meta-item">
            <svg viewBox="0 0 16 16" width="16" height="16">
                <path fill="currentColor" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z" />
            </svg>
            1.1k watching
        </div>
        <div class="meta-item">
            Updated 2 days ago
        </div>
    </div>
</div>
```

## CSS Styles

```css
body {
    margin: 0;
    padding: 0;
    background: white;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}

.repo-card {
    width: 450px;
    background: white;
    border: 1px solid #e1e4e8;
    border-radius: 6px;
    padding: 16px;
    font-size: 14px;
}

.repo-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 8px;
}

.repo-name-container {
    display: flex;
    align-items: center;
}

.repo-icon {
    color: #57606a;
    margin-right: 8px;
}

.repo-name {
    display: flex;
    align-items: center;
}

.repo-link {
    color: #0969da;
    text-decoration: none;
    font-weight: 600;
    font-size: 16px;
}

.repo-visibility {
    margin-left: 8px;
    padding: 0 7px;
    font-size: 12px;
    font-weight: 500;
    line-height: 18px;
    border: 1px solid #d0d7de;
    border-radius: 2em;
    color: #57606a;
}

.star-button {
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 3px 12px;
    font-size: 12px;
    font-weight: 500;
    line-height: 20px;
    color: #24292f;
    background-color: #f6f8fa;
    border: 1px solid #1b1f2426;
    border-radius: 6px;
    cursor: pointer;
}

.star-button:hover {
    background-color: #f3f4f6;
    border-color: #1b1f2426;
}

.repo-description {
    color: #57606a;
    margin-bottom: 16px;
    font-size: 14px;
    line-height: 1.5;
}

.repo-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
    color: #57606a;
    font-size: 12px;
}

.meta-item {
    display: flex;
    align-items: center;
    gap: 4px;
}

.language-dot {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background-color: #4F5D95;
}

.meta-item svg {
    color: #57606a;
}
```

## API Request

```bash
POST https://app.html2img.com/api/html
```

```json
{
    "html": "<div class=\"repo-card\"><div class=\"repo-header\"><div class=\"repo-name-container\"><svg class=\"repo-icon\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill=\"currentColor\" d=\"M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z\" /></svg><div class=\"repo-name\"><a href=\"https://github.com/laravel/framework\" class=\"repo-link\">laravel/framework</a><span class=\"repo-visibility\">Public</span></div></div><button class=\"star-button\"><svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill=\"currentColor\" d=\"M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z\" /></svg>Star</button></div><div class=\"repo-description\">The Laravel Framework.</div><div class=\"repo-meta\"><div class=\"meta-item\"><div class=\"language-dot\"></div>PHP</div><div class=\"meta-item\"><svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill=\"currentColor\" d=\"M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z\" /></svg>33.9k stars</div><div class=\"meta-item\"><svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill=\"currentColor\" d=\"M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z\" /></svg>11.4k forks</div><div class=\"meta-item\"><svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill=\"currentColor\" d=\"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z\" /></svg>1.1k watching</div><div class=\"meta-item\">Updated 2 days ago</div></div></div>",
    "width": 484,
    "height": 200,
    "css": "body{margin:0;padding:0;background:white;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif}.repo-card{width:450px;background:white;border:1px solid #e1e4e8;border-radius:6px;padding:16px;font-size:14px}.repo-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:8px}.repo-name-container{display:flex;align-items:center}.repo-icon{color:#57606a;margin-right:8px}.repo-name{display:flex;align-items:center}.repo-link{color:#0969da;text-decoration:none;font-weight:600;font-size:16px}.repo-visibility{margin-left:8px;padding:0 7px;font-size:12px;font-weight:500;line-height:18px;border:1px solid #d0d7de;border-radius:2em;color:#57606a}.star-button{display:flex;align-items:center;gap:4px;padding:3px 12px;font-size:12px;font-weight:500;line-height:20px;color:#24292f;background-color:#f6f8fa;border:1px solid #1b1f2426;border-radius:6px;cursor:pointer}.star-button:hover{background-color:#f3f4f6;border-color:#1b1f2426}.repo-description{color:#57606a;margin-bottom:16px;font-size:14px;line-height:1.5}.repo-meta{display:flex;flex-wrap:wrap;gap:16px;color:#57606a;font-size:12px}.meta-item{display:flex;align-items:center;gap:4px}.language-dot{width:12px;height:12px;border-radius:50%;background-color:#4F5D95}.meta-item svg{color:#57606a}"
}
```

> **Note**
>
> Update the repository details, stats, and description to match your GitHub repository.

## How it Works

1. Accurate recreation of GitHub's repository card design
2. SVG icons for repository actions and metadata
3. Interactive star button with hover state
4. Responsive layout that maintains GitHub's visual style

> **Warning**
>
> Update the repository URL and statistics to match your actual GitHub repository data.

## Code in other languages

The same payload can be sent from any language that can make an HTTP POST.

### Node.js

```javascript
const response = await fetch('https://app.html2img.com/api/html', {
  method: 'POST',
  headers: { 'X-API-Key': process.env.HTML2IMG_API_KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({ html: repoCardHtml, css: repoCardCss, width: 484, height: 200 }),
});
const { url } = await response.json();
```

### Python

```python
import os, requests
response = requests.post(
    'https://app.html2img.com/api/html',
    headers={'X-API-Key': os.environ['HTML2IMG_API_KEY']},
    json={'html': repo_card_html, 'css': repo_card_css, 'width': 484, 'height': 200},
)
url = response.json()['url']
```

### PHP

```php
$response = file_get_contents('https://app.html2img.com/api/html', false, stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => "X-API-Key: " . getenv('HTML2IMG_API_KEY') . "\r\nContent-Type: application/json\r\n",
        'content' => json_encode(['html' => $repoCardHtml, 'css' => $repoCardCss, 'width' => 484, 'height' => 200]),
    ],
]));
$url = json_decode($response, true)['url'];
```

## Common pitfalls

- **Stats go stale.** Star and fork counts in the markup do not update on their own. Refetch the GitHub API and re-render whenever you ship a new release.
- **SVG icons miss their fill colour.** Inline SVGs need an explicit `fill` attribute. The example markup uses `fill="currentColor"` and sets the text colour on the parent.
- **Card looks crushed at retina.** Render at `dpi: 2` (see [dpi parameter](https://html2img.com/docs/parameters/dpi/)) for sharp output on modern displays.

## See also

- [JavaScript integration guide](https://html2img.com/integrations/javascript/), [Python integration guide](https://html2img.com/integrations/python/)
- [html parameter](https://html2img.com/docs/parameters/html/), [dimensions parameter](https://html2img.com/docs/parameters/dimensions/)

<script type="application/ld+json" set:html={JSON.stringify({
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to Generate a GitHub Repo Card Image",
  "step": [
    { "@type": "HowToStep", "name": "Build the card markup", "text": "Recreate GitHub's repo card with the project name, language, stars and forks." },
    { "@type": "HowToStep", "name": "POST to the API", "text": "Send HTML, CSS, width and height to the HTML to Image HTML endpoint." },
    { "@type": "HowToStep", "name": "Embed the result", "text": "Use the i.html2img.com URL in your README or social preview." }
  ]
})}></script>
