Note
This repository is a personal project and is not officially affiliated with Thoughtworks
A CLI and complete collection of datasets for the popular Thoughtworks Technology Radar, including all archived volumes
There are a few ways you can use to view the interactive technology radar
- My own hosted radar with enhancements - radar.setchy.io
- via my catalogue - setchy.io/radars
- Thoughtworks hosted radar - radar.thoughtworks.com
- self-hosted BYOR radar - thoughtworks/build-your-own-radar
The technology radar datasets are provided in three formats; CSV, JSON and a combined Google Sheets document.
Important
When using either the CSV or JSON data formats, please make sure to use the the GitHub RAW file URL (eg: Volume 34 CSV)
GitHub - Thoughtworks Volumes (CSV)
GitHub - Thoughtworks Volumes (JSON)Google Sheets - Thoughtworks Technology Radar Volumes
The CSV, JSON and Google Sheets datasets are automatically checked for any updates weekly. See the Data Pipeline section for how they are generated.
Note
Thoughtworks typically publish a new technology radar volume twice per year.
- Canonical ring naming: Thoughtworks renamed the "Hold" ring to "Caution" in Volume 34 (Apr 2026). Across all output formats (CSV, JSON, Google Sheets) the ring is reported using the canonical name
caution, so the same ring is consistently named across the full dataset history. - Missing descriptions: Blips in Volumes 1-14 often have an empty description. This is not a data-processing gap — the source pages genuinely contain no description for those entries. Volumes 15+ always include descriptions.
pnpm i && pnpm start help
The CLI runs directly on Node's native TypeScript support (Node 24+, no build step required). pnpm start is shorthand for node src/index.ts. Additional scripts:
pnpm build— compile todist/withtscpnpm typecheck— runtsc --noEmitwithout emittingpnpm lint/pnpm lint:check— format/lint with Biome
Usage: tech-radar-volumes [options] [command]
A CLI tool to fetch and process ThoughtWorks Tech Radar data
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
fetch group commands for fetching/ingesting data
volumes [type] generate publication volumes in specified format(s).
Inputs: requires `data/master.json`.
Output: generated volumes will be saved in `volumes/*`.
search [options] search master dataset for a keyword (defaults to name and
description)
filter [options] filter master dataset by volume, quadrant, ring or status
stats [options] show statistics for the master dataset
validate [options] check the master dataset for data quality issues
help [command] display help for command
Examples:
$ tech-radar-volumes
$ tech-radar-volumes fetch links
$ tech-radar-volumes fetch data
$ tech-radar-volumes volumes csv
$ tech-radar-volumes stats --by=quadrant -o json
$ tech-radar-volumes search -k react
$ tech-radar-volumes search -k "test cafe" -o json
$ tech-radar-volumes filter -v 10 -q "languages-and-frameworks" -o csv
$ tech-radar-volumes stats --by=volume -o table
$ tech-radar-volumes help volumes
$ tech-radar-volumes help
Note
Commands that operate on existing data (search, filter, stats, volumes) require a populated data/master.json file.
Generate it with tech-radar-volumes fetch data.
volumes
Usage: tech-radar-volumes volumes [options] [type]
generate publication volumes in specified format(s).
Inputs: requires `data/master.json`.
Output: generated volumes will be saved in `volumes/*`.
Arguments:
type type of report to generate (choices: "all", "csv", "json",
"google-sheets", default: "all")
Options:
-h, --help display help for command
fetch
Usage: tech-radar-volumes fetch [options] [command]
group commands for fetching/ingesting data
Options:
-h, --help display help for command
Commands:
links fetch blip page links from sitemap
data fetch detailed blip history and write data/master.json
all run links, data and generate volumes
help [command] display help for command
search
Usage: tech-radar-volumes search [options]
search master dataset for a keyword (defaults to name and description)
Options:
-k, --keyword <keyword> keyword to search for
-f, --field <field> specific field to search (name, quadrant, ring,
description)
-v, --volume <volume> filter by volume number or name
-o, --output <format> output format: text|json|jsonl|csv|table (default:
"text")
-h, --help display help for command
filter
Usage: tech-radar-volumes filter [options]
filter master dataset by volume, quadrant, ring or status
Options:
-v, --volume <volume> filter by volume number or name
-q, --quadrant <quadrant> filter by quadrant
-r, --ring <ring> filter by ring
-s, --status <status> filter by status (new|moved in|moved out|no change)
-o, --output <format> output format: text|json|jsonl|csv|table (default:
"text")
-h, --help display help for command
stats
Usage: tech-radar-volumes stats [options]
show statistics for the master dataset
Options:
-b, --by <group> group stats by: volume|quadrant|ring|all (default:
"all")
-o, --output <format> output format: text|json|jsonl|csv|table (default:
"text")
-h, --help display help for command
The datasets are produced by a single TypeScript CLI that fetches the radar sitemap, scrapes each blip's timeline, and regenerates every volume from the combined dataset:
┌──────────────────────────────────────────────────────────────────────┐
│ DATA PIPELINE OVERVIEW │
│ │
│ thoughtworks.com/radar │
│ │ │
│ ▼ fetch sitemap │
│ ┌──────────────────┐ (regex + sort) ┌──────────────────┐ │
│ │ Radar Sitemap │ ─────────────────▶│ search-links │ │
│ │ .xml │ │ .json │ ~1,938 │
│ └──────────────────┘ └────────┬─────────┘ links │
│ │ │
│ ▼ per blip │
│ ┌───────────────────────┐ │
│ │ extractBlipTimeline │ │
│ │ fetch + parse │ │
│ │ (cheerio DOM scrape) │ │
│ └───────────┬───────────┘ │
│ ▼ │
│ ┌────────────────────────┐ ~3,309 │
│ │ search-data.json │ rows │
│ │ (combined master set) │ 34 volumes │
│ └───────────┬────────────┘ │
│ ▼ │
│ ┌───────────────────┼───────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐│
│ │ CSV × 34 │ │ JSON × 34 │ │Google Sheets ││
│ └──────────────┘ └──────────────┘ └──────────────┘│
│ │
│ Weekly GitHub Action → fetch all → lint → automated PR │
└──────────────────────────────────────────────────────────────────────┘