Turn any collection of research papers into an interactive 3D galaxy visualization.
Live Demo (PaperGoat Galaxy) · Live Demo (Apple ML)
![]() |
![]() |
- 3D Interactive Globe — Papers as glowing nodes on a sphere, edges as curved lineage arcs
- Click & Explore — Click any node for details, Shift+Click for multi-select
- Filter & Search — Filter by category, year, score; full-text search
- Dark / Light Mode — Automatic system preference detection
- Bilingual (EN/KR) — Built-in i18n with one-click toggle
- Responsive — Desktop, tablet, and mobile optimized
- Single HTML — No server, no build tools required for basic usage
- GitHub Pages Ready — Deploy in 2 minutes
- Fork this repository — Click the "Fork" button above
- Enable GitHub Pages — Go to Settings > Pages > Source:
main/root - Done! — Your galaxy is live at
https://<your-username>.github.io/paperlink/
The template ships with 20 sample papers. Edit papers.json to add your own.
# Clone
git clone https://github.com/jsonpassion/paperlink.git
cd paperlink
# Copy sample data
cp papers.sample.json papers.json
# Open in browser (any local server works)
python -m http.server 8000
# → http://localhost:8000Each paper needs these fields:
{
"id": "unique-id",
"rank": 1,
"alias": "Short Name",
"title": "Full Paper Title",
"url": "https://arxiv.org/abs/...",
"year": 2024,
"score": 95,
"categories": ["LLM", "Scaling"],
"cluster": "llm",
"reason": "Why this paper matters (shown in detail panel)",
"has_review": false,
"one_liner": "",
"key_discoveries": [],
"review_url": "",
"reason_en": "English version of reason"
}Edges show relationships between papers:
{
"edges": [
{"source": "paper-A", "target": "paper-B", "type": "lineage"}
]
}Clusters define the color-coded categories. Customize them in the clusters section:
{
"clusters": {
"llm": {"label": "LLM", "color": "#3b82f6", "icon": "🧠"},
"vision": {"label": "Vision", "color": "#10b981", "icon": "👁️"},
"generation": {"label": "Generation", "color": "#f59e0b", "icon": "🎨"}
}
}To inline data into a single HTML file for deployment:
python build.py
# → dist/index.html (single file, no external data fetch)Options:
python build.py --input my_custom_data.json
python build.py --output build/index.htmlPapers are sized proportionally to their score (80–100 range). The default scoring criteria:
| Weight | Criterion | Description |
|---|---|---|
| 30% | Paradigm Shift | Did it open a new research direction? |
| 25% | Adoption & Industry | Real-world production usage |
| 20% | Citation & Ecosystem | Downstream research impact |
| 15% | Technical Novelty | Originality and depth |
| 10% | Timeliness | Current relevance and trajectory |
paperlink/
├── index.html ← Visualization engine (Three.js)
├── papers.json ← Your paper data (gitignored in production)
├── papers.sample.json ← Sample data with 20 mock papers
├── build.py ← Inline papers.json into HTML for deployment
├── dist/
│ └── index.html ← Production build (after running build.py)
├── LICENSE ← MIT
└── README.md
| Key | Action |
|---|---|
ESC |
Reset selection & filters |
Shift + Click |
Multi-select nodes |
Scroll |
Zoom in/out |
Drag |
Rotate globe |
These sites are built with the same engine:
- PaperGoat Galaxy — Top 151 AI papers, curated & ranked
- PaperGoat Apple — Top 100 Apple ML research papers
PRs are welcome — bug fixes, new features, UX improvements. Please open an issue first for large changes.
MIT License. See LICENSE for details.
Built by Jason Lee as part of the PaperGoat project.
If you find this useful, a star would be appreciated!

