A live, searchable app for discovering and comparing bioinformatics tools. Search by name to instantly aggregate metadata from GitHub, Docker Hub, and scholarly literature (Europe PMC / PubMed) — all in one view.
Live demo:
- Features
- Architecture
- Prerequisites
- Installation
- Running in Development
- Building for Production
- Project Structure
- API Reference
- External APIs Used
- Usage Guide
- Configuration
- Troubleshooting
- Author
- Tool search — Type any bioinformatics tool name (e.g. STAR, HISAT2, Seurat, Samtools, BWA, DESeq2) to fetch live data.
- GitHub metadata — Stars, forks, open/closed issues, latest version, release notes, creation date, last update, language, license, topics, and homepage link.
- Docker Hub images — Container name, namespace, pull count, star count, latest tag, last update date, with direct links to Docker Hub.
- Publications — Scholarly references from Europe PMC (covers PubMed, PMC, and preprints) with title, authors, year, journal, DOI/PMID links, and auto-classified usage summaries (alignment, benchmarking, pipeline, single-cell, etc.).
- Side-by-side comparison — Compare 2+ tools in a sortable/filterable table. Sort by stars, recency, open issues, publication count, or Docker availability. Filter by "has Docker" or "has publications."
- Dark / Light mode — System-aware theme with manual toggle.
- Responsive — Works on mobile, tablet, and desktop.
- No database required — All data is fetched live from public APIs. No sign-up or API keys needed.
┌─────────────────────────────────────────────────┐
│ Browser │
│ React 18 + Tailwind CSS + shadcn/ui + Recharts │
│ Hash routing (wouter) · TanStack React Query │
└────────────────────┬────────────────────────────┘
│ HTTP (fetch)
┌────────────────────▼─────────────────────────────┐
│ Express 5 Server │
│ GET /api/search?q=<tool_name> │
│ │
│ Parallel fan-out to: │
│ ├── GitHub REST API (repos, releases, tags, │
│ │ closed-issues search) │
│ ├── Docker Hub v2 API (search, tags) │
│ └── Europe PMC REST API (literature search) │
└──────────────────────────────────────────────────┘
The server acts as a lightweight proxy/aggregator — it makes parallel requests to three public APIs, normalizes the responses, and returns a unified JSON payload to the frontend. No database, no authentication, no persistent state.
| Requirement | Minimum Version | Check Command |
|---|---|---|
| Node.js | 18.x or higher | node --version |
| npm | 9.x or higher | npm --version |
| Git | 2.x | git --version |
Note: This project uses Node.js
fetch()(available from Node 18+). No Python or other runtimes are required.
git clone https://github.com/bhagesh-h/biotools-dashboard.git
cd biotools-dashboardnpm installThis installs all dependencies listed in package.json — both runtime and development. There is no separate requirements.txt because this is a JavaScript/TypeScript project managed entirely by npm.
npm run devThis starts a single process that serves both the Express backend (API routes) and the Vite frontend (React with hot module replacement) on the same port.
- Open http://localhost:5000 in your browser.
- Frontend changes hot-reload automatically.
- Backend changes require restarting the command.
npm run buildThis compiles:
- Frontend →
dist/public/(static HTML/CSS/JS bundle via Vite) - Backend →
dist/index.cjs(bundled Express server via esbuild)
npm startOr explicitly:
NODE_ENV=production node dist/index.cjsThe production server serves the static frontend and the API on port 5000.
Searches GitHub, Docker Hub, and Europe PMC in parallel for the given tool name.
Query parameters:
| Param | Type | Required | Description |
|---|---|---|---|
q |
string | Yes | Tool name to search (e.g. "STAR", "samtools") |
Response (200 OK):
{
"searchQuery": "STAR",
"github": [
{
"name": "STAR",
"fullName": "alexdobin/STAR",
"description": "RNA-seq aligner",
"url": "https://github.com/alexdobin/STAR",
"homepage": "https://github.com/alexdobin/STAR",
"stars": 1850,
"forks": 520,
"openIssues": 45,
"closedIssues": 890,
"latestVersion": "2.7.11b",
"latestReleaseDate": "2024-01-15T...",
"latestReleaseNotes": "Bug fixes...",
"firstReleaseDate": "2015-03-01T...",
"createdAt": "2013-05-01T...",
"updatedAt": "2024-12-01T...",
"language": "C++",
"license": "MIT",
"topics": ["rna-seq", "aligner", "bioinformatics"]
}
],
"docker": [
{
"name": "star",
"namespace": "alexdobin",
"description": "Docker image for STAR aligner",
"url": "https://hub.docker.com/r/alexdobin/star",
"starCount": 2,
"pullCount": 30987,
"lastUpdated": "2024-06-01T...",
"latestTag": "latest"
}
],
"publications": [
{
"title": "STAR: ultrafast universal RNA-seq aligner.",
"authors": "Dobin A, Davis CA, ...",
"year": "2013",
"journal": "Bioinformatics",
"doi": "10.1093/bioinformatics/bts635",
"pmid": "23104886",
"url": "https://doi.org/10.1093/bioinformatics/bts635",
"usageSummary": "Sequence alignment / read mapping",
"source": "PubMed"
}
],
"fetchedAt": "2026-03-14T06:13:00.000Z"
}Error responses:
400— Missing or emptyqparameter.500— Server-side error during API fetching.
All APIs are public and require no authentication for basic usage.
| API | Purpose | Rate Limits |
|---|---|---|
| GitHub REST API | Repository search, releases, tags, issues | 60 req/hour unauthenticated; 5,000/hour with token |
| Docker Hub API v2 | Image search, tag listing | Varies; generally generous for reads |
| Europe PMC REST API | Literature search (covers PubMed, PMC) | No hard limit; be respectful |
If you hit GitHub's 60-requests-per-hour limit, add a personal access token:
# In your terminal before starting the server:
export GITHUB_TOKEN=ghp_your_token_hereThen update server/routes.ts to include the token in the Authorization header:
headers: {
Accept: "application/vnd.github.v3+json",
"User-Agent": "BioTools-Dashboard",
"Authorization": `Bearer ${process.env.GITHUB_TOKEN}`,
},- Type a tool name (e.g.
STAR,HISAT2,Seurat) in the search bar at the top. - Press Enter or click Search.
- The dashboard fetches data from all three sources in parallel and displays results.
Alternatively, click any of the suggestion buttons on the landing page (STAR, HISAT2, Seurat, Samtools, BWA, DESeq2) for one-click searching.
Search for additional tools — each is added as a badge below the search bar. You can search for as many tools as you want.
For each tool, the Explore tab shows three sections:
-
Repositories — Cards showing the top GitHub matches. Each card includes:
- Stars, forks, open issues, closed issues
- Latest version tag with relative timestamp
- Last update and creation dates
- Language, license, and website badges
- Expandable release notes (click "Release notes")
-
Docker Images — Cards for Docker Hub matches, showing pull count, star count, latest tag, and direct links.
-
Publications — Compact cards for each scholarly paper, showing:
- Title (linked to DOI/PubMed)
- Authors and year
- Journal/source badge
- Auto-classified usage type (e.g. "Sequence alignment / read mapping", "Benchmarking / comparative analysis", "Single-cell analysis", "Part of an analysis pipeline")
- Click "Show all X publications" to expand the full list.
When 2 or more tools are loaded, a Compare tab appears. It shows:
- A sortable table with columns: Tool, Repository, Stars, Forks, Version, Last Update, Created, Open Issues, Closed Issues, Docker availability, Publication count, and Language.
- Sort dropdown — Sort by: Most stars, Recently updated, Most open issues, Most publications, Docker available.
- Filter buttons — Toggle "Has Docker" and "Has Publications" to narrow results.
- The highest-starred tool and most recently updated tool are highlighted.
- A Docker Comparison section below the table shows Docker image details for tools that have container images.
Click the × on any tool badge in the header, or click Remove in the tool's result section.
Click the sun/moon icon in the top-right corner of the header. The theme defaults to your system preference.
| Variable | Default | Description |
|---|---|---|
NODE_ENV |
— | Set to production for production builds |
PORT |
5000 |
Server port (optional; defaults to 5000) |
GITHUB_TOKEN |
— | Optional GitHub personal access token for higher rate limits |
- Add more suggestion buttons — Edit
client/src/components/empty-state.tsx, update thesuggestionsarray. - Change theme colors — Edit
client/src/index.css. The--primaryvariable controls the accent color (currently teal174 72% 32%). - Increase API results — In
server/routes.ts, changeper_page=5(GitHub),page_size=5(Docker), orpageSize=8(Europe PMC) to higher values.
The unauthenticated GitHub API allows 60 requests/hour. Each tool search makes ~3-6 requests (search + releases/tags + closed issues per repo). Solutions:
- Wait for the rate limit to reset (shown in the
X-RateLimit-Resetresponse header). - Add a
GITHUB_TOKENenvironment variable (see Configuration).
Run npm install again. If the error persists, delete node_modules and package-lock.json, then reinstall:
rm -rf node_modules package-lock.json
npm install# Find and kill the process using port 5000:
lsof -i :5000
kill -9 <PID>Or set a different port: PORT=3000 npm run dev
Some tools may not have Docker images or indexed publications. The sections only appear when results are found.
| Command | Description |
|---|---|
npm run dev |
Start development server (Vite HMR + Express) |
npm run build |
Build production frontend + backend bundles |
npm start |
Run the production server from dist/ |
npm run check |
Run TypeScript type checking |