# Excalidraw Libraries: a community repository of shareable Excalidraw drawings

> excalidraw-libraries is the data behind libraries.excalidraw.com, a public collection of Excalidraw drawing libraries that anyone can publish into through a review process, with the catalogue itself kept as JSON in a static site repository. It suits Excalidraw users looking for reusable components, and it is not a code library in the sense most developers mean, so it is the wrong thing to reach for when you need an API to draw with.

**excalidraw/excalidraw-libraries** — Collection of publicly available libraries

- Repository: https://github.com/excalidraw/excalidraw-libraries
- Website: https://libraries.excalidraw.com
- Stars: 1,260 · Forks: 305
- Language: JavaScript
- License: MIT
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/excalidraw-excalidraw-libraries

## The repository is the catalogue, not a drawing engine

The first thing to understand is what this project is. The repository description calls it a collection of publicly available libraries, and the README opens by pointing at libraries.excalidraw.com. The repository root makes the same point structurally. There is a libraries/ directory holding the library files themselves, alongside libraries.json as an index, excalidraw.json and authors.json as metadata, index.html and index.js and script.js as the site itself, style.css for presentation, a public/ directory for assets, top-level stats.json, total.json and stats.py files alongside a stats/ directory, and a scripts/ directory holding a validator. There is no rendering engine, no scene manipulation library and no API for creating drawings. Everything here is data and a static site that displays it, and the drawing happens in the Excalidraw application that hosts the library browser.

## Publishing is a five-step process inside the Excalidraw app

The README documents how a contributor adds their own library, and the process runs entirely inside Excalidraw rather than through a pull request against this repository. You open Excalidraw and draw the objects, optionally making sure each object is its own group by selecting it and clicking Group selection or using Ctrl+G. Then you select the object, open the library menu through the library button or by typing 9, and click the object in the square so it appears with a plus sign on hover. Next you select the libraries you want to publish, which shows a checkbox on hover, and finally you hit the blue publish button and fill out the details. For testing before submission, the Load button in the library menu reimports your library file.

## Seven review guidelines decide what gets published

The Guidelines section is the part that shapes the collection, and it is stricter than a typical open-source contribution. A library for personal use only is not accepted, and neither are items that are easy to create directly, with a single arrow or a square given as examples. Republishing items copied from other libraries without significant changes is out. Only English is accepted, covering texts, labels, descriptions and titles, though the README says other languages may be accepted in future. Each item should be usable and stand on its own, at least three items per library, related to each other and in a single category. Multi-element items should be grouped so they insert as a single unit, with templates as the stated exception. After submission, changes may be requested if the guidelines are not followed or the quality does not meet the standard of the published libraries.

## The site is a plain Node static server with a small dependency set

The package.json describes a deliberately minimal setup. The dependencies are a Prettier config from the Excalidraw organisation, http-server, node-static and Prettier itself, and the scripts are start, which runs node index.js, dev, which runs http-server on the current directory, build, which runs prettier with --write, and validate:libraries, which runs the validator script in scripts/.

```json
"scripts": {
  "start": "node index.js",
  "dev": "http-server .",
  "build": "prettier . --write",
  "validate:libraries": "node ./scripts/validate-libraries.js"
}
```

The build script is a formatter rather than a bundler, which tells you the deployment model. There is a vercel.json for hosting, and the site is served as static files, so there is no compile step to slow down iteration on a catalogue change.

## A validator script guards the catalogue on disk

The validate:libraries script points at scripts/validate-libraries.js, and its existence tells you the repository enforces the guidelines mechanically rather than relying only on human review. That matters for a collection where the published rules are specific and checkable, such as a minimum of three items per library, a consistent language, and item metadata that the site needs to render. The stats directory follows the same pattern, with stats.py and key.py at the root and generated JSON alongside them, which suggests the catalogue statistics are computed from the library files by a Python script and committed as output. The yarn.lock file at the root confirms yarn as the package manager, and the .prettierignore file keeps the formatter from touching generated content.

## The library catalogue is browsable, with light and dark views

The site exists to be looked at. The README links to the existing libraries page with theme=light and sort=default in the query string, which tells you the viewer accepts a theme parameter and a sort order, and the repository carries both a favicon.ico and a style.css, so the presentation is hand-written rather than pulled from a component framework. There is no mention in the README of an API, a search endpoint or a programmatic export, and the only link out is to the site and to Excalidraw itself. The public directory holds the media referenced by the entries, and the .github directory suggests the usual pull request and issue templates for a project that takes outside contributions.

## MIT licensed, actively updated, and open to outside contributors

The package.json declares an MIT licence, which applies to the site's own code rather than to the artwork in the libraries, and the repository root carries a matching LICENSE file. The topic list contains only hacktoberfest, which is a clue about how the project is staffed: contributions arrive through seasonal events rather than a dedicated team. The last push was on 2026-10-18, two days before this review, and the repository publishes no GitHub releases, so the deploy is continuous and the versions of the individual library files are tracked by commit rather than by tag. For anyone considering a fork, the useful property is that the whole thing is a static site over JSON, which means you can host your own instance of a library catalogue with a different curation policy without touching the Excalidraw application.

## Conclusion

Excalidraw Libraries is worth using if you draw in Excalidraw and want reusable component sets, since the catalogue is browsable, the submission rules are explicit, and the repository is a plain static site you can fork. It is not worth adopting if you need programmatic drawing, because nothing here is an API for generating scenes, and the entries are Excalidraw scene fragments rather than a documented data model. Verify first that the library you want exists in the published collection and opens in the Excalidraw app, and read the guidelines before submitting, because the review step can send your library back for changes.

## FAQ

### How do I publish a library to Excalidraw Libraries?

You draw the objects in Excalidraw, optionally grouping each one, then add them through the library menu, select the libraries to publish and press the blue publish button to fill in the details. The Load button in the library menu reimports your file for testing.

### What are the rules for a library to be accepted?

The README lists seven guidelines: no personal-use libraries, no items that are trivial to draw such as a single arrow, no republishing other libraries unchanged, English only, each item usable on its own, at least three related items per library, and multi-element items grouped so they insert as one unit.

### Can I run a local copy of the Excalidraw Libraries site?

Yes. The package.json provides a start script that runs node index.js and a dev script that runs http-server on the current directory, so the site can be served locally from the repository.

### What is the validate:libraries script for?

The package.json defines it as node ./scripts/validate-libraries.js. It exists so the contents of the libraries directory can be checked against the catalogue rules rather than relying only on the manual review the README describes.

## Sources

- [excalidraw/excalidraw-libraries on GitHub](https://github.com/excalidraw/excalidraw-libraries)
- [Issues](https://github.com/excalidraw/excalidraw-libraries/issues)
- [License: MIT](https://github.com/excalidraw/excalidraw-libraries/blob/main/LICENSE)
- [Project website](https://libraries.excalidraw.com)
- [README](https://github.com/excalidraw/excalidraw-libraries/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/excalidraw-excalidraw-libraries
