GenesisL1 in-house · Open-source topic-map engine

Broccoli

Any search, as a map.

Broccoli is a GenesisL1 in-house open-source search results clustering engine. It turns the results of any search into a zoomable map of named topics, clustered in your own browser in seconds: eleven sources are built in, from PubMed, arXiv and ClinicalTrials.gov to DataCite and Wikipedia, and any other search plugs in with a few lines. Click a topic and it opens into subtopics of its own, up to six levels deep.

LingoSTCBisecting k-means11 sourcesAny search APIMIT License
Real Broccoli output
The organic treemap. PubMed: longevity[tiab] AND (aging[tiab] OR ageing[tiab]) · the first 200 records with abstracts · 28 topics found by Lingo
11search sources built in
2,000records clustered a search
3clustering algorithms
4zoomable maps
6levels of subtopics
0servers between you and the source
01Why a map

A search ends in a list. A field has a shape.

A search answers a question with thousands of records, ranked one after another. The list tells you what matches. It does not tell you what the field is made of: which questions dominate, which sit at the edges, where two lines of work meet.

Broccoli reads the titles and abstracts, finds the phrases and concepts they share, names every group in the records' own words and lays the groups out by size. Before you open a single record, you see the landscape.

The list200 PubMed records, one after another
The mapthe same 200 records as 28 named topics
01

Search

Any of eleven sources, in its own syntax, or a search of your own.

02

Fetch

Up to 2,000 records, straight from the source's API and within its rate limits.

03

Cluster

Lingo, STC or bisecting k-means, in a Web Worker on your own device.

04

Explore

Zoom through the topics, read the records, export RIS, BibTeX, CSV or JSON.

02Search sources

Eleven sources. One map.

Each source is a small adapter that turns one API's answers into the same record: title, abstract, authors, venue, identifiers and subject terms. Every one of them answers requests from web pages, so your browser calls it directly.

A tab for each source. With a query on the page, a tab runs the same query on another source, so you can compare what each index holds. Shown: the PubMed search above.
BiomedicineNCBI

PubMed

MEDLINE, PubMed Central and NCBI Bookshelf. PubMed's syntax and filters, MeSH headings, spelling suggestions.

MeSHSpelling
BiomedicineEMBL-EBI

Europe PMC

Life-science literature, patents, theses and preprints, with abstracts, MeSH headings and citation counts.

Citations
BiomedicineNLM

ClinicalTrials.gov

Registered clinical studies: what is tested, in whom, by which sponsor, in which phase, and whether it is recruiting.

Trials
Preprintsvia Europe PMC

Preprints

bioRxiv, medRxiv, Research Square, SSRN, Preprints.org and more, with the server each preprint is on.

bioRxiv · medRxiv
Preprintsvia OpenAlex

arXiv

Physics, mathematics, computer science and more. arXiv's own API does not answer web pages, so this tab reads the OpenAlex index of arXiv.

arXiv IDs
All fieldsOurResearch

OpenAlex

An open index of scholarly works in every field, with abstracts, keywords and citation counts.

Every fieldOpen data
All fieldsCrossref

Crossref

Works with Crossref DOIs from every publisher, with the abstracts publishers deposit, ranked by how well they match.

DOIs
All fieldsOpen access

DOAJ

Articles from the vetted open access journals of the Directory of Open Access Journals, in every field and many languages.

Free to read
Data and codeDataCite

DataCite

Datasets and software with DataCite DOIs, from Zenodo, Dryad, Figshare, institutional repositories and data centres.

DatasetsSoftware
PhysicsINSPIRE

INSPIRE-HEP

High-energy physics, astrophysics, cosmology and gravitation, with collaborations, arXiv links and citation counts.

HEP
GeneralWikimedia

Wikipedia

A general search in eight languages: page titles and the text around each match, with topics labelled in the page's language.

8 languages
YoursAny API

Your search

Any search API becomes a tab of its own: a fetchPage function, or an address template and the names of the fields.

What about Google? Its Custom Search JSON API, the usual way to put Google results into a program, is closed to new customers and due to shut down on 1 January 2027, so the open general search here is Wikipedia. A web search API that needs a secret key plugs in through a small proxy of your own.

03Try it

Try it on your own question.

This is Broccoli itself, running in your browser, with a tab for every source. Pick a source and type a question, or start from one of these searches.

Try
genesisl1.com/broccoli/demo/Full screen ↗

Your searches go from your browser straight to the source you pick. Nothing passes through GenesisL1, no source needs a key or an account, and your settings stay in your browser.

04What it is for

One engine. Many questions.

Broccoli knows nothing about medicine or physics: it finds the topics in whatever text a search returns. These are the workflows its sources open, and the last card is everything else.

01

Literature reviews

See what a field is made of before you read it, and which corners a query reaches that you did not mean.

PubMed · Europe PMC · OpenAlex
02

Preprint watch

The newest preprints on a subject, sorted by date and read as topics, a week or a month at a time.

Preprints · arXiv
03

Trial landscapes

What is being tested for a condition, in which phase, by which sponsors, and what is recruiting now.

ClinicalTrials.gov
04

Data and code

The datasets and software deposited on a subject, grouped, with their repositories and versions.

DataCite
05

Physics literature

High-energy physics and cosmology, with collaborations, arXiv links and the papers cited most.

INSPIRE-HEP · arXiv
06

Open access reading

Articles from vetted open access journals in every field and language, all free to read.

DOAJ · Crossref
07

General knowledge

The meanings and neighbours of a term across Wikipedia, in English and seven other languages.

Wikipedia
08

Beyond science

Support tickets, survey answers, interview notes, patents, news, product reviews, internal documents: give it any text records.

Your own records or search
05For builders

Plug in any search. One file, no build step.

The library is a single script of about 420 KB with no dependencies: the three algorithms, the clustering engine and its Web Worker, the search sources, label highlighting and exports for reference managers. A source of your own is an object with a name and a function that fetches one page of results; Broccoli pages through, keeps to the rate limit, retries, and fills in the record.

  • 01Lingo, STC and bisecting k-means, with every parameter exposed
  • 02Eleven built-in sources, each within its API's limits, with retries and cancellation
  • 03One record shape for every source: citations, abstracts, subject terms, links
  • 04
    registerSource and jsonSource: any search API, as a tab of the search page
  • 05Exports to RIS, BibTeX, CSV and JSON, for records from any source
  • 06Stemmers for eight languages, checked word for word against Snowball's vocabularies
  • 07A browser test suite, with Python tooling and no npm
<script src="https://cdn.jsdelivr.net/gh/GenesisL1/Broccoli@v1.5.0/dist/broccoli.js"></script>
<script>
  // a built-in source: 'pubmed', 'europepmc', 'clinicaltrials',
  // 'preprints', 'arxiv', 'openalex', 'crossref', 'doaj',
  // 'datacite', 'inspire' or 'wikipedia'
  const res = await Broccoli.searchSource('arxiv', 'graph neural networks', {
    limit: 300, sort: 'date', from: 2024,
  });
  const topics = Broccoli.cluster(Broccoli.toDocuments(res.records), {
    preset: 'abstracts', queryHint: res.query,
  });
  for (const t of topics.clusters) console.log(t.label, t.size);
</script>

Or as an ES module: import * as Broccoli from 'https://cdn.jsdelivr.net/gh/GenesisL1/Broccoli@v1.5.0/dist/broccoli.mjs'

06Four maps

One search. Four ways to see it.

Switch between the maps at any time; the place you are in stays. Every shape carries its name and its number of records, so colour is never the only cue.

Organic treemap

DefaultVoronoi treemap

Every topic is a cell of a weighted power diagram whose area is its share of the records, relaxed into rounded, organic shapes. Subtopics grow inside their topic's cell, and shapes morph as you zoom.

Bubbles

Circle packing

Topics as circles packed to fill the map. The beads along a bubble are its subtopics; open one and it becomes the background while its subtopics spread out over the map.

Radial

Sunburst

A sunburst. Topics share the inner ring by size; their subtopics and sub-subtopics fill up to two rings outside, each within its parent's angle.

Florets

Sunflower spiral

A head of broccoli seen from above. Each topic is a floret on a stem from the centre, and every record a bud on Vogel's sunflower spiral.

All four maps show the same PubMed search: longevity[tiab] AND (aging[tiab] OR ageing[tiab]), the first 200 records with abstracts that PubMed returned by Best Match, clustered by Lingo.

07Zoom and cluster again

Every topic opens into its own.

Click a topic and Broccoli zooms into it while it clusters that topic's records again, on the spot. The words of the labels on the way down are set aside, so a subtopic is never just its parent's name again. It goes as deep as the records allow, up to six levels.

All records. Healthy Aging and Longevity holds 61 of the 200.
One level down. Its 61 records, clustered again into 11 subtopics.
Ready before you clickA second worker clusters the topics you are likely to open next, so most zooms are instant.
Shapes that travelCells, bubbles and rings morph from one level to the next; each subtopic grows from its place.
Views you can shareThe address holds the source, the query, its options and the path to the topic, so a link opens the same map anywhere.
08Three algorithms

Three algorithms. Each from its paper.

Broccoli implements three classic methods of search results clustering from their published descriptions, tuned for abstracts and search snippets. Pick one per search; every parameter is open in the settings.

DefaultOverlapping topics

Lingo

Concepts first, names second.

Factorises the term–document matrix into concepts, by partial SVD or non-negative matrix factorisation, then names each concept with the best phrase the records share. Labels are descriptive, and a record can sit in several topics.

Osiński, Stefanowski & Weiss, 2004
PhrasesOverlapping topics

Suffix Tree Clustering

Shared phrases become topics.

Finds every phrase the records repeat, with suffix and LCP arrays in linear time, scores the phrases as base clusters and merges those that share most of their records.

Zamir & Etzioni, 1998
PartitionOne topic a record

Bisecting k-means

Split, and split again.

Spherical k-means splits the largest group in two, keeping the best of five trial bisections, until there are enough groups, and names each group by the terms that set it apart.

Steinbach, Karypis & Kumar, 2000
LingoSTCBisecting k-means
Labelsone phrase, usually very descriptiveup to three phrasesthe top terms of the topic
Topicsoverlappingoverlappinga partition: every record in one
Best for100 to 2,000 abstracts or snippetsfast runs on phrase-rich textwhen every record must land somewhere
Tuned for science: scientific stop words and stop labels keep “Control Group”, “Patients with …” or “95% CI” from naming a topic, and Broccoli's own label generalisation prefers “Breast Cancer” (59 records) to “Breast Cancer Screening” (4) when the two score almost alike.
09Private and reproducible

Nothing to trust. Everything to check.

GenesisL1 is built on the idea that a result should be something anyone can reproduce. Broccoli brings that idea to reading what a search returns.

01

Runs on your device

Clustering happens in a Web Worker in your browser. There is no clustering server, no account and nothing to install.

02

Straight to the source

Queries go from your browser to the source you pick, or to a proxy you host. No source needs a key or an account, and settings stay in your browser.

03

Same input, same map

Every random step draws from a seeded generator. The same records with the same settings always give the same topics and the same map.

04

Words you can trace

Broccoli is lexical: no embeddings and no language model. Every label is made of words from the records, highlighted in each record.

10Made for reading

Made for long reading.

Eight matte hues in a fixed order, computed in the OKLab colour space. Names on every fill at 4.5:1 contrast or better, neighbouring colours checked for colour-blind separation, and light and dark themes from the same palette.

Dark theme. The same map, its fills and inks recomputed for a near-black stage.Light theme. The same map, its fills and inks recomputed for a white page.
Broccoli on a phone: the 🥦 mark, the source tabs, the search box, the map styles and the treemap running edge to edge

On a phone the source tabs scroll sideways and the map runs edge to edge; the page never scrolls sideways, down to 320 pixels.

  • Arrow keys move along the source tabs and between topics; Enter zooms in, Escape zooms out.
  • A screen reader hears each topic's name and size.
  • With reduced motion set, zooms, fades and blooms are off.
  • Records come with citations, structured abstracts and links to their source and to PubMed, PMC, arXiv or the DOI.
  • Retractions, preprints, reviews, trial phases and statuses are flagged.
  • Export the topic you are in to Zotero, EndNote or Mendeley.
11PubMed in the GenesisL1 explorer

Where molecules meet their literature.

PubMed is where GenesisL1 uses Broccoli first. GL1X, the explorer of the GenesisL1 blockchain, runs it for its PubMed search: every molecular structure on the chain links to its literature, by its PDB ID and by the important words of its title, and the papers open as a map of topics.

AI agents connected to GL1X's MCP server reach the same records through its pubmed_search tool, with the MeSH headings they share.

01
A structure on chainA molecular record stored on GenesisL1, opened in GL1X.
02
Its literatureSearched in PubMed by its PDB ID, or by the important words of its title.
03
A map of topicsBroccoli clusters the papers in the reader's browser.
04
For people and agentsThe same records reach AI agents through pubmed_search at gl1x.com/mcp.
12Open source

Open source. Built on published science.

Broccoli is GenesisL1’s in-house engine, released under the MIT License by Decentralized Science Labs LLC. Every method is implemented from its published description, and the notices credit each one, along with every data source. Read it, fork it, run it on your own site.

The symmetric eigensolver is ported from JAMA, released to the public domain by The MathWorks and NIST. The stemmers were written from the Snowball descriptions by Martin Porter and the Snowball project.

  • LingoOsiĹ„ski, Stefanowski & Weiss, 2004
  • Factorisations for LingoOsiĹ„ski, 2006
  • Suffix Tree ClusteringZamir & Etzioni, 1998
  • Bisecting k-meansSteinbach, Karypis & Kumar, 2000
  • Non-negative matrix factorisationLee & Seung, 2001
  • NNDSVD initialisationBoutsidis & Gallopoulos, 2008
  • Spherical k-meansDhillon & Modha, 2001
  • k-means++Arthur & Vassilvitskii, 2007
  • Suffix arrays (SA-IS)Nong, Zhang & Chan, 2009
  • LCP arraysKasai et al., 2001
  • Voronoi treemapsBalzer & Deussen, 2005
  • Power diagramsAurenhammer, 1987
  • Centroidal relaxationLloyd, 1982
  • Squarified treemapsBruls, Huizing & van Wijk, 2000
  • Smooth zoomingvan Wijk & Nuij, 2003
  • The sunflower spiralVogel, 1979
  • OKLab colour spaceOttosson, 2020
  • RecordsThe public APIs of PubMed, Europe PMC, ClinicalTrials.gov, OpenAlex, Crossref, DOAJ, DataCite, INSPIRE-HEP and Wikipedia
13Limits

Know the instrument.

  • Lexical, not semanticRecords that say the same thing in different words fall apart, and a word with two meanings joins them.
  • Titles aloneRecords without an abstract are clustered on their title; most sources here ask for records with one by default.
  • Settings shape topicsAnother source, number of records, order or algorithm gives other topics.
  • The source choosesBroccoli indexes and ranks nothing: each source selects and orders the records it returns.
  • A reading aidNot a systematic review, and nothing it shows is medical advice.
14Questions

Questions, answered.

Short answers to what people ask first.

01What is Broccoli?

Broccoli is a GenesisL1 in-house open-source search results clustering engine. It takes the records a search returns, groups them into topics named in the records’ own words, and draws the topics as a zoomable map, all in your browser.

02How is Broccoli part of GenesisL1?

It is GenesisL1’s own engine, developed in house by Decentralized Science Labs for the GenesisL1 ecosystem and open source. GL1X, the GenesisL1 explorer, runs it for its PubMed search, where every molecular structure on the chain links to its literature.

03Is it only for PubMed and biomedicine?

No. Eleven sources are built in: PubMed, Europe PMC, ClinicalTrials.gov, preprints, arXiv, OpenAlex, Crossref, DOAJ, DataCite, INSPIRE-HEP and Wikipedia. Any other search API plugs in, and the library clusters any text records you give it, from survey answers to support tickets.

04Is Broccoli free? Do I need an account or an API key?

It is free and open source under the MIT License. There is no account, nothing to install and no API key: none of the eleven sources needs one.

05Where do my searches go?

From your browser straight to the source you pick, or to a proxy you host. Nothing passes through GenesisL1, and your settings stay in your browser.

06How does it find and name the topics?

With one of three published algorithms: Lingo, Suffix Tree Clustering or bisecting k-means. Broccoli is lexical, with no embeddings and no language model, so every label is made of words from the records, highlighted in each one.

07How many results can it map?

Up to 2,000 records a search, fetched within each API’s rate limits. Click a topic and Broccoli clusters its records again into subtopics, up to six levels deep.

08Is there a limit on searches?

Each source sets its own pace, and Broccoli keeps to it. OpenAlex, which the OpenAlex and arXiv tabs read, gives every address a daily allowance of about fifty searches of 200 records; it renews the next day, and the other sources keep working.

09Can I use Broccoli on my own site or with my own data?

Yes. The library is one script with no dependencies. Load it from jsDelivr or copy it from GitHub, add your own search with registerSource or jsonSource, or call cluster() on your own records.

10Can it search Google?

Not directly. Google’s Custom Search JSON API is closed to new customers and due to shut down on 1 January 2027, so the open general search here is Wikipedia. A web search API that needs a secret key plugs in through a small proxy of your own.

Broccoli · GenesisL1 ecosystem

See what any search is made of.

Search, cluster, zoom and read, in your own browser, from eleven sources or your own. Open source, made in house for the GenesisL1 ecosystem.