# Open dataset: visual editor and page builder libraries

*Source: https://www.editorstack.cc/data — last updated 2026-09-17. Licensed CC BY 4.0 with attribution to EditorStack.*

- The full dataset is available at /api/libraries.json and /api/libraries.csv with no key, no rate limit and CORS open to any origin.
- It is licensed CC BY 4.0: use it commercially, build products on it, republish it — attribute EditorStack and link back.
- The dataset includes our own measurement runs, so the bundle-size and time-to-editor numbers come with the versions, method and dates that produced them.

## Downloads

| File | Format | Contents |
|---|---|---|
| [/api/libraries.json](/api/libraries.json) | JSON | Every product record in full, plus both measurement runs |
| [/api/libraries.csv](/api/libraries.csv) | CSV | One row per product, flattened for spreadsheets |
| [/api/schema.json](/api/schema.json) | JSON Schema | Field definitions and allowed values |
| [/llms-full.txt](/llms-full.txt) | Markdown | Every page on the site as one document |

Every page also has a markdown twin: append `.md` to any URL. There is no key, no quota and no
sign-up, and the CORS policy allows any origin.

```bash
curl -s https://www.editorstack.cc/api/libraries.json | jq '.libraries[] | select(.pricing.model == "open-source") | {name, bundle: .tech.bundle_size_min_gzip_kb}'
```

## Licence

The dataset is published under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/).
You may copy, redistribute, transform and build upon it, including commercially, provided you give
credit. A link to `editorstack.cc` alongside the data satisfies that.

## What is in a record

Each product record carries identity fields (slug, name, type, categories), licensing and pricing,
technical facts (language, framework support, SSR, measured bundle size), a capability matrix, an
extensibility block, repository and registry metrics, an argued best-for and worst-for list,
optional scores with their written rationale, and a source list with access dates.

Two conventions matter when you consume it:

**`null` means unverified, never zero.** We leave a field empty rather than estimate it. If you
aggregate this data, treat null as missing rather than as a false or a 0.

**`metrics.status` tells you the freshness of the count fields.** `pending` means the automated sync
has not run against that record yet; `not-applicable` means the product has no npm package or public
repository for those numbers to exist.

## Measurements included

The JSON download embeds both measurement runs in full, not just the summary numbers:

- `measurements.bundles` — per package: resolved version, raw and gzipped size, which modules were
  treated as external, and the bundler and Node versions used.
- `measurements.time_to_editor` — per application: lines of code, direct dependency count, median
  time to a rendered editor, the number of runs, and any bundler workaround required.

The scripts that produced them are `scripts/measure-bundles.mjs` and
`scripts/measure-time-to-editor.mjs` in [the repository](https://github.com/GoodPHP/gjs-comparison),
and the benchmark applications are in `benchmarks/`. Running `node scripts/measure-bundles.mjs --verify`
re-measures everything and exits non-zero if any published number has drifted.

## Citing it

See [how to cite](/cite) for BibTeX and plain-text formats. If you publish something built on this
data we would like to see it — open an issue on the repository.


## Frequently asked questions

### Do I need an API key?

No. Both endpoints are static files served with Access-Control-Allow-Origin set to *, so you can fetch them from a browser, a notebook or a server without registering.

### How should I attribute the dataset?

Any clear credit works. 'Data from EditorStack (editorstack.cc), CC BY 4.0' with a link to the page you used satisfies the licence.

### How often does the data change?

Facts change when products change; each record carries its own last_verified date. Repository and download metrics are refreshed by a daily automated job, and every substantive change is listed in the changelog.

### What does null mean in the data?

Unverified. It never means zero. If we could not confirm a fact from a source we trust, the field is null and the site displays 'Unverified' rather than an estimate.
