GitHub | Releases Full Topic Exporter
Export complete GitHub release histories with full asset details. One-click download of multi-page releases as HTML or clean TXT format with SHA256 checksums and metadata.
Why You Need This
GitHub's release pages are difficult to archive:
- No native export: No way to save release notes, changelogs, and asset lists in bulk
- Pagination limits: Multi-page releases require manual clicking through each page
- Lazy-loaded assets: Asset lists are truncated or loaded on-demand—copy-paste misses checksums and file details
- Lost context: Manual copying loses release metadata, dates, contributors, and SHA256 hashes
This script fetches all pages of a repository's releases, expands all assets (including lazy-loaded content), and generates a complete archive in your choice of format.
Key Features
Complete Multi-Page Capture
- Auto-pagination: Automatically fetches all pages of releases (no manual clicking)
- Progress indicator: Shows "Fetching 1/5..." as it loads each page
- Delay control: Configurable 300ms delay between requests to avoid rate limits
Full Asset Expansion
- Lazy-load handling: Fetches truncated/collapsed asset lists from GitHub's
expanded_assets endpoint
- SHA256 checksums: Captures complete cryptographic hashes for verification
- File metadata: Extracts filenames, extensions, sizes, and download URLs
- Auto-expand: All
<details> sections expanded automatically
Dual Export Formats
HTML Export
- Styled archive: Preserves GitHub's visual design with all CSS
- Absolute URLs: All links/images converted to full URLs for offline viewing
- Page markers: Visual separators show original pagination
- Clean layout: Hides headers/footers for focused reading
TXT Export
- Clean Markdown-style: Human-readable plain text format
- Structured sections: Clear delimiters between releases
- Asset listings: Indented file trees with sizes and SHA256 hashes
- Metadata preserved: Release titles, tags, authors, dates, and contributors
What Gets Exported
For each release:
- ✅ Release title and tag name
- ✅ Author and publication date
- ✅ Full release notes (markdown body)
- ✅ Code blocks and quotes (preserved formatting)
- ✅ Contributors list
- ✅ Complete asset list with:
- Filenames and extensions
- File sizes
- SHA256 checksums
- Download URLs (HTML only)
Usage
Quick Export
- Navigate to any GitHub repository's Releases page (e.g.,
github.com/user/repo/releases)
- A green "Load All Releases" button appears in the bottom-right corner
- Click to start fetching all pages
- After loading completes, two download buttons appear:
- Download .html: Full visual archive with styling
- Download .txt: Clean text format with metadata
Export Process
1. Click "Load All Releases"
↓
2. Script fetches pages 1, 2, 3... (shows progress)
↓
3. For each page: expands all lazy-loaded assets
↓
4. Choose format: HTML or TXT
↓
5. File downloads instantly
Example Output
TXT Format Sample
==================================================
Moonlight PC v6.1.0 (v6.1.0) by cgutman | 2024-09-17T03:56:03Z
--------------------------------------------------
OS Support Changes:
- Windows 10 (1809), Windows Server 2019, or later is now required
- 32-bit versions of Windows are no longer supported
New Features:
- Experimental YUV 4:4:4 support for improved text clarity
- HDR streaming now supported with software decoding
--- ASSETS (9) ---
Moonlight-6.1.0-x86_64.AppImage (52.8 MB)
SHA256: a3f2d1e9b8c4...
MoonlightSetup-6.1.0.exe (41.3 MB)
SHA256: 7b2e8f4d1a6c...
--- END ASSETS ---
Installation
Requirements
Steps
- Install a userscript manager
- Install this script
- Visit any GitHub repository's Releases page (
/releases)
- The export button appears automatically
Technical Details
How It Works
- Pagination Detection: Parses
.pagination links to determine total page count
- Sequential Fetching: Loads each page with 300ms delay (configurable)
- Asset Expansion: For each release:
- Extracts tag name from release title link
- Fetches
/releases/expanded_assets/{tag} endpoint
- Replaces lazy
<include-fragment> with full asset list
- URL Normalization: Converts all relative URLs to absolute
- Format Generation:
- HTML: Bundles page CSS + processed content
- TXT: Parses DOM to extract structured text + metadata
Architecture
- No external dependencies: Pure JavaScript, no libraries
- Single-page processing: Handles GitHub's SPA navigation
- Error resilience: Failed page loads show error message, don't stop export
- Shadow DOM isolation: Button UI completely isolated from page styles
Configuration
Edit the CONFIG object at the top of the script:
const CONFIG = {
postSelector: 'section[aria-labelledby]', // Release container selector
fetchDelayMs: 300, // Delay between page requests
};
FAQ
Q: Does this work on private repositories?
A: Yes, if you're logged into GitHub. The script uses your browser's existing authentication.
Q: Can I export a single release instead of all pages?
A: Not currently. The script is designed for bulk export. For single releases, use browser "Save As" or copy-paste.
Q: Why does it take so long to load?
A: The script:
- Fetches each page sequentially (respects rate limits)
- Makes additional requests for each release's full asset list
- Waits 300ms between pages to avoid triggering GitHub's rate limiting
Q: What if GitHub changes their HTML structure?
A: The script uses multiple fallback selectors for resilience. If it breaks, report an issue with the repository URL.
Q: Can I customize the TXT format?
A: Yes. Edit the showActionButtons() function's TXT generation section to adjust formatting, add/remove fields, or change delimiters.
Q: Does the HTML export work offline?
A: Mostly. Styles are embedded, but GitHub serves some fonts/icons from CDN. Images and asset downloads still require internet.
Known Limitations
- Rate limiting: Very large repos (100+ pages) may trigger GitHub rate limits
- Memory usage: Exporting repos with 1000+ releases may consume significant RAM
- Asset downloads: The export contains asset metadata only—files themselves are not downloaded
Permissions Explained
| Permission |
Purpose |
@match *://github.com/*/*/releases* |
Activates script only on GitHub release pages |
@run-at document-idle |
Waits for page to fully load before injecting button |