MNE-Python 0.23 released!

Hello everyone, we are very pleased to announce the new 0.23 release of MNE-Python! :balloon::balloon::balloon:

This release includes 72 pull requests merged as part of our New Developers Code Sprint in March, and more than a dozen additional contributions from those new developers after the code sprint.

Big thanks to all who participated! :heart_eyes::pray::woman_technologist:t4:

A few highlights

General infos

  • The MNE team has started offering regular fortnightly “office ours” on Discord to answer user questions. The next office hour will take place this Friday at 16:00 UTC. Come say “Hi!” at
  • The community has now moved to a new forum to answer users’ questions and make announcements (e.g., when office hours will be) at
  • The documentation at now features a new theme . We are continuously working to improve layout, usability, and accessibility of our documentation. If you discover anything you don’t like, that just doesn’t work for you, or that might present a barrier to some users, please do reach out to us! We’re looking forward to receiving your feedback.


  • Gone is the 15-character limitation for channel names when writing FIFF files.
  • Raw, Epochs, and Info objects now have a beautiful tabular representation in Jupyter Notebooks.
  • Ever wanted to add Annotations to individual channels? This is now possible with the new ch_names parameter.
  • Annotations can now be exported to a pandas DataFramevia Annotations.to_data_frame() .
  • Interested in summary descriptive statistics for all your channels? Have a look at the new Raw.describe() .
  • Epochs and Evoked now allow you to easily apply transformations to their data using the brand-new apply_function() method.
  • Epochs metadata can now be generated automatically from events using mne.epochs.make_metadata() .
  • Raw.get_data() now has a units parameter to return data in the desired unit.


  • Dark mode! :owl: Source estimate plots can now detect the operating system theme preferences and will apply a dark theme automatically if the OS is currently in dark mode. Dark mode can also be activated manually via the theme parameter of mne.viz.Brain .
  • Much improved interactive 3D plots in Jupyter Notebooks. (We’re still trying to get Jupyter Lab to work nicely as well – it currently behaves rather erratically, though!)
  • The new silhouette parameter of mne.viz.Brain can be used to display sharp edges and to improve perception.

Source imaging

  • New method mne.Dipole.to_mni() for more convenient conversion from Dipole.pos to MNI.
  • We have a new infant template MRI dataset downloader, mne.datasets.fetch_infant_template() .
  • Add digitizer information to .
  • We now allow reading digitization from files other than *.fif in the coregistration GUI.
  • We managed to speed up mne.inverse_sparse.tf_mixed_norm() using STFT/ISTFT linearity.

Data reading and writing

  • Moving over from EEGLAB? No problem! We’ve added support for reading new (2021) EEGLAB file format.
  • Moving back to EEGLAB? No problem either! You can now export Raw and Epochs to the EEGLAB format, thanks to the new export() methods and the eeglabio package.
  • mne.channels.read_custom_montage() got more versatile! It now supports CSV, TSV, and XYZ support formats.
  • StarStim / enobio NEDF files can now be read via .

Channel types

  • There is now a new dbs channel type for deep brain stimulation recordings.

Notable API changes

  • mne.beamformer.tf_dics() has been deprecated
  • The default of real_filter=False in mne.beamformer.make_dics() will change to True in the next version of MNE-Python.
  • now also anonymizes the sex and hand fields when keep_his=False .
  • Evoked objects have gained a new baseline attribute that is automatically assembled based on the baseline of the averaged Epochs.
  • mne.read_selection() has been deprecated in favor of mne.read_vectorview_selection() .
  • Fitting ICA on baseline-corrected Epochs, and / or applying it on baseline-corrected Epochs or Evoked data will now display a warning.

Full changelog

For a full list of improvements and API changes, see:

Find the full documentation at

Installing the new release

Since quite a few things – including dependencies – have changed, we recommend creating a new environment with a “fresh” installation. Please follow the installation instructions on our website:


As usual, we welcome your bug reports, feature requests, critiques, and contributions. Development takes place on GitHub. If you would like to contribute, star the project, or just take a peek at the code, visit GitHub - mne-tools/mne-python: MNE: Magnetoencephalography (MEG) and Electroencephalography (EEG) in Python.

You may follow us on Twitter:

We hope you will enjoy the new features and many, many small improvements we have added, and are looking forward to receiving your feedback.

Stay safe and take care!

The MNE-Python developers


MNE-Python is a community-driven project. We are always very happy to welcome new contributors of code and documentation! 41 people contributed to this release, and 11 of them contributed for the very first time – thank you so much for your time and effort, we truly appreciate it!

This is the list of contributors in alphabetical order (first-time contributors marked with a “+”):

  • Adam Li
  • Alex Rockhill
  • Alexandre Gramfort
  • Ana Radanovic
  • Andres Rodriguez +
  • Anna Padee +
  • Apoorva Karekal +
  • Britta Westner
  • Catalina Magalvan
  • Christian Brodbeck
  • Christian Mista
  • Christian O’Reilly
  • Christina Zhao
  • Christopher J. Bailey
  • Clemens Brunner
  • Cora Kim +
  • Daniel McCloy
  • Denis A. Engemann
  • Dominik Welke +
  • Eduard Ort
  • Enrico Varano +
  • Eric Larson
  • Erica Peterson +
  • Evgenii Kalenkovich
  • Felix Klotzsche +
  • Giorgio Marinato
  • Guillaume Favelier
  • Jack Zhang+
  • Jean-Remi King
  • Johann Benerradi
  • Joris Van den Bossche
  • Judy D Zhu +
  • Liberty Hamilton
  • Luke Bloy
  • Maggie Clarke +
  • Mainak Jas
  • Manorama Kadwani
  • Marijn van Vliet
  • Martin Schulz
  • Matt Sanderson +
  • Matteo Anelli +
  • Nicolas Gensollen
  • Ram Pari +
  • Richard Höchenberger
  • Richard Koehler +
  • Robert Luke
  • Rotem Falach +
  • Sebastien Treguer
  • Silvia Cotroneo +
  • Stefan Appelhoff
  • Steven Bierer
  • Sumalyo Datta +
  • Timon Merk
  • Tristan Stenner
  • Valerii Chirkov+
  • Victoria Peterson
  • Yu-Han Luo
  • Zhi Zhang +