# Eunoia > Eunoia is a Rust library for area-proportional Euler and Venn diagrams: given > the sizes of sets and their intersections, it fits shapes (circles, ellipses, > squares, rectangles) whose areas match those sizes as closely as possible. The > pure-Rust core ships to JavaScript via WebAssembly (`@jolars/eunoia`), to > Python (`eunoia`), and to Julia (`Eunoia.jl`), and is the engine behind a > ground-up rewrite of the R package eulerr. This site is the narrative companion to the API references. It explains what the fitting engine does, what its options mean, and how to read its output. It is aimed at end users of the language wrappers (R, Python, JavaScript, Julia) and at authors of downstream bindings. ## Getting started - [Introduction](https://eunoia.bz/docs/): What eunoia is, who the docs are for, and where to start. - [Quickstart: JavaScript](https://eunoia.bz/docs/quickstart/javascript/): Install `@jolars/eunoia`, fit a diagram, and render SVG. - [Quickstart: Python](https://eunoia.bz/docs/quickstart/python/): Install and use the `eunoia` Python package. - [Quickstart: R](https://eunoia.bz/docs/quickstart/r/): Use `euler()` from R, now backed by the eunoia engine. - [Quickstart: Julia](https://eunoia.bz/docs/quickstart/julia/): Use the `Eunoia.jl` package. - [Quickstart: Rust](https://eunoia.bz/docs/quickstart/rust/): Use the pure-Rust core that backs every other binding. ## Concepts - [Shapes](https://eunoia.bz/docs/concepts/shapes/): The shape types eunoia can fit (circle, ellipse, square, rectangle) and when each is appropriate. - [Fitter pipeline](https://eunoia.bz/docs/concepts/fitter-pipeline/): How region sizes become concrete shapes: spec, preprocess, initial layout, final layout. - [Goodness of fit](https://eunoia.bz/docs/concepts/goodness-of-fit/): The error metrics eunoia reports and how to judge whether a diagram represents the data well. - [Complement (universe/container)](https://eunoia.bz/docs/concepts/complement/): Fitting a bounding container so the leftover area matches a target "outside the sets" region. - [Label placement](https://eunoia.bz/docs/concepts/label-placement/): How labels are positioned within regions using poles of inaccessibility. ## Reference - [Reference overview](https://eunoia.bz/docs/reference/): Where the per-language API references live. - [JavaScript API reference](https://eunoia.bz/docs/reference/javascript/): The public surface of `@jolars/eunoia`. - [Bindings: C ABI contract](https://eunoia.bz/docs/bindings/c-abi/): The C ABI for native hosts that reach the core without wasm-bindgen, PyO3, or extendr. ## Optional - [Interactive app](https://eunoia.bz/app/): Build and preview diagrams in the browser. - [Citation](https://eunoia.bz/cite/): How to cite eunoia. - [Rust API docs (docs.rs)](https://docs.rs/eunoia/): Full rustdoc for the core crate. - [npm package](https://www.npmjs.com/package/@jolars/eunoia): The JavaScript/TypeScript package. - [PyPI package](https://pypi.org/project/eunoia/): The Python package. - [Eunoia.jl](https://github.com/jolars/Eunoia.jl): The Julia package. - [eulerr (R package)](https://github.com/jolars/eulerr): The original R package that eunoia rewrites. - [Source code (GitHub)](https://github.com/jolars/eunoia): The eunoia monorepo.