gtex-expression — Tissue Gene Expression

GTEx 54-tissue median TPM viewer with Bar / Heatmap / Violin — zero external libs, mygene-search bridged, ko/en/ja.

All 54 GTEx tissues, median TPM at a glance
Validation genes:

Median TPM across samples per tissue. TPM = Transcripts Per Million, length-normalized.

z-score = (log10 TPM − mean) / std (per gene).

Tool Guide

Definition

gtex-expression is a free GTEx tissue-expression viewer that wraps GTEx Portal API V2 (https://gtexportal.org/api/v2) behind four Next.js 15 Route Handlers (resolve / median / geneExpression / tissueSiteDetail), rendering the median TPM across all 54 tissues for one or up to five genes in four visualisations — bar / grouped bar / heatmap / violin. Four input types (symbol, Entrez, Ensembl unversioned/versioned) are auto-detected and the BioPlayground in-house mygene-search Route Handler resolves them to a versioned gencodeId in a single user-visible fetch. Server-side GtexQueue (500 ms serial enforcement, 2 RPS cap) honours the GTEx policy verbatim ("do not send queries in parallel"); Vercel Edge ISR (24h, Brotli auto) + raw IndexedDB 30-day wrapper (no idb-keyval) form the multi-layer cache. Zero external libraries: D3.js 873 kB, Chart.js, and ECharts are all replaced by in-house SVG `<rect>` (270 cells), CSS `transition: 350ms`, and a 30-line Epanechnikov KDE.

Purpose

(1) Eliminate the learning curve of GTEx Portal English UI (54 tissue English names + GENCODE version management) with a ko/en/ja unified entry point (2) Unified workflow for drug target validation, off-target tissue safety, and tissue-specificity analysis (3) mygene-search (BL-108) bridge — a single user-visible tool entry (Symbol → Gencode auto-chain inside the Route Handler) (4) Academic-standard ko/ja tissue terminology (KAMJE Medical Terminology 6th edition + Japanese Anatomical Society) (5) Zero external npm libraries (Bundlephobia: D3.js 873 KB / Chart.js / ECharts 300 KB all rejected) — in-house SVG + in-house KDE + in-house IndexedDB wrapper (6) Automated GTEx policy compliance — server-side GtexQueue serial enforcement + Retry-After priority + exponential backoff (2s→4s→8s, max 3 retries)

How to Use

① Type a gene — 4 input formats auto-detected: • Symbol: TP53, GFAP, INS, MYH7, HBB • Entrez ID: 7157 (TP53), 2670 (GFAP) • Ensembl unversioned: ENSG00000141510 • Ensembl versioned: ENSG00000141510.18 ② Pick the dataset — GTEx V8 (2019, GENCODE v26) / V10 (2024-11) / V11 (2026-01, GENCODE v47) ③ Click Search — Route Handler `/api/gtex/resolve` chains (1) mygene → ensembl and (2) GTEx `/reference/gene` → versioned gencodeId in a single user-visible fetch. Alias counts > 3 raise a conflict modal automatically. ④ Bar chart renders — 54 tissues median TPM + 9 category background tints + log10 default (0 TPM handled as log10(max(tpm, 0.01))) ⑤ Category multi-toggle filter (9) / Y-axis toggle (log10 / linear / z-score) / sort (category / TPM↓ / A-Z) ⑥ Click any bar → Violin modal (sample TPM distribution, in-house Epanechnikov KDE + IQR box + median white line) ⑦ "Add to compare" → up to 5 chips. Grouped Bar auto-activated + Heatmap toggle (gene × tissue z-score, 270 cells) ⑧ Export — CSV (per-tissue TPM + category) / SVG (current chart) — zero external libs (Blob + URL.createObjectURL) ⑨ External links — GTEx Portal / Ensembl / OpenTargets / Human Protein Atlas / mygene-search (internal) ⑩ Most-recent 5 queries saved to localStorage

Examples

Example 1) TP53 (symbol input, ubiquitous baseline) → ENSG00000141510.18 / Entrez 7157 / Chr 17 → TPM 1-50 across 54 tissues, normal category-color distribution (log10 default) Example 2) GFAP (brain-specific) → Filter to Brain category → 13 bars only. Brain - Cerebellum / Brain - Cortex z > 1.5 Example 3) INS (pancreas-specific) → Sort TPM↓ → Pancreas #1 (large outlier; log10 recommended) Example 4) MYH7 (heart-specific) → Heart - Left Ventricle / Heart - Atrial Appendage dominate the chart Example 5) Five-gene compare (TP53 + GFAP + INS + MYH7 + HBB) → 5 chips → auto Grouped Bar (270 bars) + Heatmap toggle (z-score 270 cells; tissue-specificity at a glance)