• Fix boundingboxes #2184.

  • Fix highclip/lowclip in meshscatter, poly, contourf, barplot #2183.

  • fix gridline updates #2196.

  • fix glDisablei argument order, which crashed some Intel drivers


  • Fix stackoverflow in show #2167


  • rainclouds(!) now supports violin_limits keyword argument, serving the same.

role as datalimits in violin#2137.

  • Fixed a issue where nonzero strokewidth results in a thin outline of the wrong color if color and strokecolor didn't match and weren't transparent. #2096.

  • Improve performance around Axis(3) limits #2115.

  • Cleanup stroke artifacts in scatter and text #2096.

  • Compile time improvements #2153.

  • Mesh and Surface now interpolate between values instead of interpolating between colors for WGLMakie + GLMakie #2097.


  • Bumped compatibility bound of GridLayoutBase.jl to v0.9.0 which fixed a regression with Mixed and Outside alignmodes in nested GridLayouts #2135.


  • Patterns (Makie.AbstractPattern) are now supported by CairoMakie in poly plots that don't involve mesh, such as bar and poly#2106.

  • Fixed regression where Block alignments could not be specified as numbers anymore #2108.

  • Added the option to show mirrored ticks on the other side of an Axis using the attributes xticksmirrored and yticksmirrored#2105.

  • Fixed a bug where a set of Axis wouldn't be correctly linked together if they were only linked in pairs instead of all at the same time #2116.


  • Improved Menu performance, now it should me much harder to reach the boundary of 255 scenes in GLMakie. Menu also takes a default keyword argument now and can be scrolled if there is too little space available.


  • EXPERIMENTAL Added support for multiple windows in GLMakie through display(GLMakie.Screen(), figure_or_scene)#1771.

  • Added support for RGB matrices in heatmap with GLMakie #2036

  • Textbox doesn't defocus anymore on trying to submit invalid input #2041.

  • text now takes the position as the first argument(s) like scatter and most other plotting functions, it is invoked text(x, y, [z], text = "text"). Because it is now of conversion type PointBased, the positions can be given in all the usual different ways which are implemented as conversion methods. All old invocation styles such as text("text", position = Point(x, y)) still work to maintain backwards compatibility #2020.


  • Fixed a regression with linkaxes!#2039.


  • The functions hlines!, vlines!, hspan!, vspan! and abline! were reimplemented as recipes. This allows using them without an Axis argument in first position and also as visuals in AlgebraOfGraphics.jl. Also, abline! is now called ablines! for consistency, abline! is still exported but deprecated and will be removed in the future. #2023.

  • Added rainclouds and rainclouds!#1725.

  • Improve CairoMakie performance #1964#1981.

  • Interpolate colormap correctly #1973.

  • Fix picking #1993.

  • Improve compile time latency #1968#2000.

  • Fix multi poly with rects #1999.

  • Respect scale and nonlinear values in PlotUtils cgrads #1979.

  • Fix CairoMakie heatmap filtering #1828.

  • Remove GLVisualize and MakieLayout module #2007#2008.

  • Add linestyle and default to extrema(z) for contour, remove bitrotten fillrange #2008.


  • Switched to MathTeXEngine v0.4, which improves the look of LaTeXStrings #1952.

  • Added subtitle capability to Axis#1859.

  • Fixed a bug where scaled colormaps constructed using Makie.cgrad were not interpreted correctly.


  • Changed the default font from Dejavu Sans to TeX Gyre Heros Makie which is the same as TeX Gyre Heros with slightly decreased descenders and ascenders. Decreasing those metrics reduced unnecessary whitespace and alignment issues. Four fonts in total were added, the styles Regular, Bold, Italic and Bold Italic. Also changed Axis, Axis3 and Legend attributes titlefont to TeX Gyre Heros Makie Bold in order to separate it better from axis labels in multifacet arrangements #1897.


  • Added word wrapping. In Label, word_wrap = true causes it to use the suggested width and wrap text to fit. In text, word_wrap_width > 0 can be used to set a pixel unit line width. Any word (anything between two spaces without a newline) that goes beyond this width gets a newline inserted before it #1819.

  • Improved Axis3's interactive performance #1835.

  • Fixed errors in GLMakie's scatter implementation when markers are given as images. #1917.

  • Removed some method ambiguities introduced in v0.17 #1922.

  • Add an empty default label, "", to each slider that doesn't have a label in SliderGrid#1888.


  • Breaking Added space as a generic attribute to switch between data, pixel, relative and clip space for positions. space in text has been renamed to markerspace because of this. Pixel and SceneSpace are no longer valid inputs for space or markerspace#1596.

  • Breaking Deprecated mouse_selection(scene) for pick(scene).

  • Breaking Bumped GridLayoutBase version to v0.7, which introduced offset layouts. Now, indexing into row 0 doesn't create a new row 1, but a new row 0, so that all previous content positions stay the same. This makes building complex layouts order-independent #1704.

  • Breaking deprecate to_colormap(cmap, ncolors) in favor of categorical_colors(cmap, ncolors) and resample_cmap(cmap, ncolors)#1901#1723.

  • Added empty!(fig) and changed empty!(scene) to remove all child plots without detaching windows #1818.

  • Switched to erroring instead of warning for deprecated events mousebuttons, keyboardbuttons and mousedrag.

  • Layoutable was renamed to Block and the infrastructure changed such that attributes are fixed fields and each block has its own Scene for better encapsulation #1796.

  • Added SliderGrid block which replaces the deprecated labelslider! and labelslidergrid! functions #1796.

  • The default anti-aliasing method can now be set in CairoMakie.activate! using the antialias keyword. Available options are CairoMakie.Cairo.ANTIALIAS_*#1875.

  • Added ability to rasterize a plots in CairoMakie vector graphics if plt.rasterize = true or plt.rasterize = scale::Int#1872.

  • Fixed segfaults in streamplot_impl on Mac M1 #1830.

  • Set the Cairo miter limit to mimic GLMakie behaviour #1844.

  • Fixed a method ambiguity in rotatedrect#1846.

  • Allow weights in statistical recipes #1816.

  • Fixed manual cycling of plot attributes #1873.

  • Fixed type constraints in ticklabelalign attributes #1882.


  • Fixed WGLMakie performance bug and added option to set fps via WGLMakie.activate!(fps=30).

  • Implemented nan_color, lowclip, highclip for image(::Matrix{Float}) in shader.

  • Cleaned up mesh shader and implemented nan_color, lowclip, highclip for mesh(m; color::Matrix{Float}) on the shader.

  • Allowed GLMakie.BufferGLMakie.Sampler to be used in GeometryBasics.Mesh to partially update parts of a mesh/texture and different interpolation and clamping modes for the texture.


  • Breaking Removed Node alias #1307, #1393. To upgrade, simply replace all occurrences of Node with Observable.

  • Breaking Cleaned up Scene type #1192, #1393. The Scene() constructor doesn't create any axes or limits anymore. All keywords like raw, show_axis have been removed. A scene now always works like it did when using the deprecated raw=true. All the high level functionality like showing an axis and adding a 3d camera has been moved to LScene. See the new Scene tutorial for more info:

  • Breaking Lights got moved to Scene, see the lighting docs and RPRMakie examples.

  • Added ECDF plot #1310.

  • Added Order Independent Transparency to GLMakie #1418, #1506. This type of transparency is now used with transpareny = true. The old transparency handling is available with transparency = false.

  • Fixed blurry text in GLMakie and WGLMakie #1494.

  • Introduced a new experimental backend for ray tracing: RPRMakie.

  • Added the Cycled type, which can be used to select the i-th value from the current cycler for a specific attribute #1248.

  • The plot function scatterlines now uses color as markercolor if markercolor is automatic. Also, cycling of the color attribute is enabled #1463.

  • Added the function resize_to_layout!, which allows to resize a Figure so that it contains its top GridLayout without additional whitespace or clipping #1438.

  • Cleaned up lighting in 3D contours and isosurfaces #1434.

  • Adjusted attributes of volumeslices to follow the normal structure #1404. This allows you to adjust attributes like colormap without going through nested attributes.

  • Added depth to 3D contours and isosurfaces #1395, #1393. This allows them to intersect correctly with other 3D objects.

  • Restricted 3D scene camera to one scene #1394, #1393. This fixes issues with multiple scenes fighting over events consumed by the camera. You can select a scene by cleaning on it.

  • Added depth shift attribute for GLMakie and WGLMakie #1382, #1393. This can be used to adjust render order similar to overdraw.

  • Simplified automatic width computation in barplots #1223, #1393. If no width attribute is passed, the default width is computed as the minimum difference between consecutive x positions. Gap between bars are given by the (multiplicative) gap attribute. The actual bar width equals width * (1 - gap).

  • Added logical expressions for ispressed#1222, #1393. This moves a lot of control over hotkeys towards the user. With these changes one can now set a hotkey to trigger on any or no key, collections of keys and logical combinations of keys (i.e. "A is pressed and B is not pressed").

  • Fixed issues with Menu render order #1411.

  • Added label_rotation to barplot #1401.

  • Fixed issue where pixelcam! does not remove controls from other cameras #1504.

  • Added conversion for OffsetArrays #1260.

  • The qqplotqqline options were changed to :identity, :fit, :fitrobust and :none (the default) #1563. Fixed numeric error due to double computation of quantiles when fitting qqline. Deprecated plot(q::QQPair) method as it does not have enough information for correct qqline fit.

All other changes are collected in this PR and in the release notes.


  • The functions labelslidergrid! and labelslider! now set fixed widths for the value column with a heuristic. It is possible now to pass Formatting.format format strings as format specifiers in addition to the previous functions.

  • Fixed 2D arrow rotations in streamplot#1352.


  • Reenabled Julia 1.3 support.

  • Use MathTexEngine v0.2.

  • Depend on new GeometryBasics, which changes all the Vec/Point/Quaternion/RGB/RGBA - f0 aliases to just f. For example, Vec2f0 is changed to Vec2f. Old aliases are still exported, but deprecated and will be removed in the next breaking release. For more details and an upgrade script, visit GeometryBasics#97.

  • Added hspan! and vspan! functions #1264.


  • Switched documentation framework to Franklin.jl.

  • Added a specialization for volumeslices to DataInspector.

  • Fixed 1 element hist#1238 and make it easier to move hist#1150.


  • LaTeXStrings can now be used as input to text and therefore as labels for Axis, Legend, or other comparable objects. Mathematical expressions are typeset using MathTeXEngine.jl which offers a fast approximation of LaTeX typesetting #1022.

  • Added Symlog10 and pseudolog10 axis scales for log scale approximations that work with zero and negative values #1109.

  • Colorbar limits can now be passed as the attribute colorrange similar to plots #1066.

  • Added the option to pass three vectors to heatmaps and other plots using SurfaceLike conversion #1101.

  • Added stairs plot recipe #1086.

  • Breaking Removed FigurePosition and FigureSubposition types. Indexing into a Figure like fig[1, 1] now returns GridPosition and GridSubposition structs, which can be used in the same way as the types they replace. Because of an underlying change in GridLayoutBase.jl, it is now possible to do Axis(gl[1, 1]) where gl is a GridLayout that is a sublayout of a Figure's top layout #1075.

  • Bar plots and histograms have a new option for adding text labels #1069.

  • It is now possible to specify one linewidth value per segment in linesegments#992.

  • Added a new 3d camera that allows for better camera movements using keyboard and mouse #1024.

  • Fixed the application of scale transformations to surface#1070.

  • Added an option to set a custom callback function for the RectangleZoom axis interaction to enable other use cases than zooming #1104.

  • Fixed rendering of heatmaps with one or more reversed ranges in CairoMakie, as in heatmap(1:10, 10:-1:1, rand(10, 10))#1100.

  • Fixed volume slice recipe and added docs for it #1123.