# Plots.jl: Julia visualization through a modular monorepo

> Plots.jl is a Julia visualization and data analysis package hosted with its core libraries, recipe system, themes, statistical recipes, and graph recipes in one repository. Its shared package structure is useful, but the README leaves installation and independent subpackage deployment undocumented.

**JuliaPlots/Plots.jl** — Powerful convenience for Julia visualizations and data analysis

- Repository: https://github.com/JuliaPlots/Plots.jl
- Website: https://docs.juliaplots.org
- Stars: 1,958 · Forks: 385
- Language: Julia
- License: not declared
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/juliaplots-plots-jl

## Plots.jl bundles five kinds of Julia plotting code

Plots.jl addresses the need to create Julia visualizations while reducing the need to coordinate several separate repositories for related tasks. Its intended users are Julia developers and analysts who want plotting facilities within the same language and package system as their data work. The repository description calls it a convenience for Julia visualizations and data analysis, but the README does not describe a complete application architecture or a particular analysis workflow.

The top-level layout gives a more useful picture. The `Plots/` directory contains the main `Plots` package. `PlotsBase/` contains a lower-level package, while `RecipesBase/` and `RecipesPipeline/` occupy the recipe layer. `StatsPlots/` and `GraphRecipes/` contain tools built on top of `Plots`, and `PlotThemes/` is represented as its own directory. This division matters because it exposes several project roles inside one repository rather than presenting `Plots` as a single source file or a collection of example scripts.

That structure is attractive to contributors who expect related Julia packages to evolve together. It is also a maintenance consideration. A monorepo can centralize CI configuration, documentation, release metadata, and shared changes, but it also requires maintainers to decide how changes cross package boundaries. The repository includes `.github/`, `ci/`, `docs/`, and `Project.toml`, but the README does not explain the release policy or dependency update process.

## The recipe system defines how Plots.jl organizes plot definitions

Based on the repository layout, Plots.jl is organized around a main plotting package, lower-level support in `PlotsBase`, and recipe handling in `RecipesBase` and `RecipesPipeline`. `StatsPlots` and `GraphRecipes` are explicitly described as tools built on top of `Plots`. This supports a layered design: general package infrastructure sits below reusable plot transformations, and specialized packages consume that infrastructure.

The README does not state the exact function calls, attributes, dispatch rules, or data flow used to transform a Julia value into a rendered plot. It also does not explain whether `StatsPlots` extends plotting behavior through recipes, whether `GraphRecipes` accepts graph-shaped inputs, or how recipe priorities resolve conflicts. Those details cannot be inferred responsibly from directory names alone. The official documentation at `https://docs.juliaplots.org` is the appropriate place to verify them.

The arrangement does clarify why this repository is larger than a single Julia package. A change in a recipe can affect a domain-specific package, while a lower-level plotting change may affect both `StatsPlots` and `GraphRecipes`. The CI workflow and package evaluation report shown by the README indicate that the project has automated checks, but badges alone do not document which Julia versions or dependency combinations are covered.

## Installing Plots.jl starts with the official documentation, not the README

The README does not provide an installation command, a compatibility declaration, or a minimal first script. It directs readers to stable documentation at `https://docs.juliaplots.org/stable/` and development documentation at `https://docs.juliaplots.org/dev`. A new user should open the stable documentation and follow its package setup instructions, but this article does not substitute an invented `Pkg.add` command or a version constraint.

The first documented use should also be taken from the stable guide rather than inferred from the repository description. The README names the package `Plots` and shows that `StatsPlots` and `GraphRecipes` depend on it, but it does not provide a callable example. Consequently, there is no verified output, backend name, plot series, or required environment variable that can be reproduced here.

The presence of both stable and development documentation is useful, but it creates a concrete choice for evaluators. Experimental or unreleased documentation may describe behavior that differs from the stable package. The recent release list includes `Plots-v1.41.7`, `Plots-v0.20.0`, and `Plots-v0.19.2`, all dated 2026-08-20. The default branch is `v2`, so a user should confirm which documentation and release line corresponds to the intended branch before copying examples.

## The v2 branch and release numbering need an explicit compatibility check

The repository identifies `v2` as its default branch, while the recent releases include three distinct version labels published on the same date in August 2026. The README does not explain whether these releases belong to separate compatibility lines, whether the older version numbers remain supported, or how a user selects a release appropriate for a Julia installation. This is an important adoption constraint because the default branch name alone does not tell a package manager which release to install.

The repository is not archived, and its last push was on 2026-10-16. Those status facts indicate recent development activity. They do not establish API stability for every package in the monorepo. In particular, users of `StatsPlots`, `GraphRecipes`, `RecipesBase`, or `RecipesPipeline` may face compatibility questions that are separate from the behavior of the main `Plots` package.

The repository also includes a stable documentation link, a development documentation link, and a versioned DOI landing page. The DOI text states that it represents all versions and directs readers to a version-specific DOI. That supports reproducible citation at a broad project level, but it does not resolve package-manager compatibility. Users should compare the stable guide, `NEWS.md`, and the selected release before using an example from the default branch.

## Plots.jl offers internal alternatives to depending only on the top-level package

The repository itself exposes an alternative to treating every use case as a direct `Plots` workflow. A general plotting application may depend on `Plots`, while a project focused on graph-oriented recipes may use `GraphRecipes`, and a statistical plotting workflow may use `StatsPlots`. A consumer interested in themes can use the `PlotThemes` directory, while lower-level integrations may need to understand `PlotsBase` and the recipe packages.

This is different from a conventional single-package project with one installation target. The monorepo provides several package boundaries that can correspond to different responsibilities. However, the README does not say that each directory is independently released, nor does it provide installation instructions for `GraphRecipes`, `StatsPlots`, `PlotThemes`, `RecipesBase`, or `RecipesPipeline`. It would therefore be unsafe to claim that choosing one subpackage removes the need to install the others.

The practical comparison is architectural. A single general-purpose package presents one public dependency, whereas Plots.jl distributes general plotting, recipe processing, domain-specific recipes, and themes across named subpackages. That can help an organization align related packages, but it can also make the required dependency set harder to infer without reading each package's documentation.

## Plots.jl has recent repository changes but undocumented adoption boundaries

Plots.jl is not archived, and its last push was on 2026-10-16. The repository also exposes CI and package evaluation badges, a project chat link, stable and development documentation, and release metadata. These are concrete signs of an active project structure. The README does not provide a support policy, a compatibility matrix, or a migration guide for the `v2` branch, so the operational cost of upgrades cannot be assessed from the README alone.

The license is listed as unknown in the repository record. No MIT, Apache-2.0, BSD, or other license identifier appears in the README excerpt, and no legal interpretation is appropriate. Users must inspect the repository's license file and the license files for each subpackage before redistribution or integration into a commercial codebase.

There are also limits to the documentation shown in the README. It does not describe supported operating systems, graphical backends, headless rendering, interactivity, accessibility, large-data performance, or rollback procedures. Plots.jl should not be selected solely from its package grouping. Confirm the backend and environment requirements for the intended deployment, verify the license, and inspect `NEWS.md` for upgrade-relevant changes.

## Conclusion

Adopt Plots.jl if you want a single Julia repository and package namespace to cover conventional plotting, recipes, themes, graph recipes, and statistical plotting. Do not choose it from this documentation alone if you require a confirmed installation procedure, a known license, or evidence that a specific subpackage can be deployed independently. Before adoption, inspect the package documentation for Julia version requirements, backend selection, installation commands, and licensing for every component you intend to use.

## FAQ

### What is Plots.jl used for?

The repository describes Plots.jl as a convenience for Julia visualizations and data analysis. Its package layout also includes statistical plotting, graph recipes, themes, and lower-level plotting packages.

### How do I install Plots.jl?

The README does not contain an installation command. It directs users to the stable documentation at `https://docs.juliaplots.org/stable/`, where the package setup instructions are maintained.

### Which packages are included in the Plots.jl repository?

The README names `RecipesBase`, `RecipesPipeline`, `PlotsBase`, `GraphRecipes`, and `StatsPlots`. The repository layout also includes a `PlotThemes/` directory.

### Which documentation should I use for Plots.jl?

The README provides separate links for stable documentation at `https://docs.juliaplots.org/stable/` and development documentation at `https://docs.juliaplots.org/dev`. It does not explain when their contents differ.

## Sources

- [Issues](https://github.com/JuliaPlots/Plots.jl/issues)
- [JuliaPlots/Plots.jl on GitHub](https://github.com/JuliaPlots/Plots.jl)
- [Project website](https://docs.juliaplots.org)
- [README](https://github.com/JuliaPlots/Plots.jl/blob/v2/README.md)
- [Releases](https://github.com/JuliaPlots/Plots.jl/releases)

---

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