https://github.com/jolars/eunoia
A Rust library for Euler and Venn Diagrams
https://github.com/jolars/eunoia
data-visualization euler-diagrams set-visualization venn-diagrams web-app
Last synced: 8 days ago
JSON representation
A Rust library for Euler and Venn Diagrams
- Host: GitHub
- URL: https://github.com/jolars/eunoia
- Owner: jolars
- License: mit
- Created: 2025-11-18T12:50:39.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2026-06-10T21:10:14.000Z (9 days ago)
- Last Synced: 2026-06-10T21:15:40.811Z (9 days ago)
- Topics: data-visualization, euler-diagrams, set-visualization, venn-diagrams, web-app
- Language: Rust
- Homepage: http://eunoia.bz/
- Size: 2.6 MB
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Citation: CITATION.cff
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Eunoia 
[](https://github.com/jolars/eunoia/actions/workflows/build-and-test.yml)
[](https://crates.io/crates/eunoia)
[](https://badge.fury.io/js/@jolars%2Feunoia)
[](https://cran.r-project.org/package=eulerr)
[](https://badge.fury.io/py/eunoia)
[](https://codecov.io/gh/jolars/eunoia)
A Rust library for Euler and Venn Diagrams. This is a rewrite of the eulerr R
package, designed to be more flexible, faster, and support multiple language
bindings.
Narrative documentation lives at [eunoia.bz/docs/](https://eunoia.bz/docs/); the
rustdoc reference is at [docs.rs/eunoia](https://docs.rs/eunoia/).
## JavaScript / TypeScript
WebAssembly bindings are published as
[`@jolars/eunoia`](https://www.npmjs.com/package/@jolars/eunoia):
```sh
npm install @jolars/eunoia
```
```ts
import { euler, venn } from "@jolars/eunoia";
// Fit an Euler diagram from set sizes
const layout = euler({
sets: { A: 5, B: 2, "A&B": 1 },
shape: "circle", // "circle" | "ellipse" | "square"
output: "shapes", // "shapes" | "polygons" | "regions"
inputType: "exclusive", // "exclusive" | "inclusive"
seed: 42,
});
if (layout.mode === "shapes" && layout.shape === "circle") {
for (const c of layout.circles) {
console.log(c.label, c.x, c.y, c.radius);
}
}
console.log(layout.metrics.loss, layout.metrics.fittedAreas);
// Or build a canonical n-set Venn diagram
const v = venn({ n: 3, output: "regions" });
```
The package is built with `wasm-pack --target bundler`, so it works with any
modern bundler (Vite, Webpack, Rollup, esbuild) and Node 20+.