Interface Customization#
Multiple elements in the JupyterLab interface are customizable to display new elements or hide default ones.
Layout#
The JupyterLab layout has two modes: the simple mode (or single document mode) and the default
mode (or multiple documents mode). In both modes, the widgets are attached in one of the four
area: the left or right sidebars, the main dock panel area or the down area.
The default positions of widgets can be overridden through the settings based on the type of widgets. The setting to modify is the layout one in section JupyterLab Shell.
The available widget types and their default area is listed below
Type |
multiple |
single |
|---|---|---|
Console |
main |
main |
CSVTable |
main |
main |
TSVTable |
main |
main |
Editor |
main |
main |
HTML Viewer |
main |
main |
Image |
main |
main |
Image (Text) |
main |
main |
JSON |
main |
main |
Markdown Preview |
main |
main |
Notebook |
main |
main |
Cloned Output |
main |
down |
Linked Console |
main |
down |
Inspector |
main |
down |
main |
main |
|
Terminal |
main |
main |
VDOM |
main |
main |
Vega-Lite4 |
main |
main |
Vega5 |
main |
main |
Settings |
main |
main |
Advanced Settings |
main |
main |
Licenses |
main |
main |
Debugger |
right |
right |
Debugger Variables |
main |
main |
Debugger Sources |
main |
main |
Property Inspector |
right |
right |
Extension Manager |
left |
left |
File Browser |
left |
left |
Sessions and Tabs |
left |
left |
Table of Contents |
left |
left |
Log Console |
down |
down |
"layout": {
"single": {
"Linked Console": { "area": "down" },
"Inspector": { "area": "down" },
"Cloned Output": { "area": "down" },
// Add new terminals in the down area in simple mode
"Terminal": { "area": "down" }
},
"multiple": {
// Add new terminals in the right sidebar in default mode
"Terminal": { "area": "right" }
}
}
The above example will result in the following changes:
(Before Change) Default terminal position in āmultipleā (default) mode#
(After Change) Customized terminal position in āmultipleā (default) mode#
Toolbars#
Lots of toolbars are customizable. Here is a mapping of the customizable toolbars and the associated setting.
Cell: Cell Toolbar -> toolbar
CSV Viewer: CSV Viewer -> toolbar
File Browser: File Browser Widget -> toolbar
HTML Viewer: HTML Viewer -> toolbar
Notebook panel: Notebook Panel -> toolbar
Text Editor: Text Editor -> toolbar
TSV Viewer: TSV Viewer -> toolbar
Those settings are accessible through the interactive Settings Editor. But you may find more comfortable to use the Advanced Settings Editor (accessible by clicking on JSON Settings Editor button in the top right corner of the Settings Editor).
Your toolbar customization will be merged with the default menu bar definition (this
is a different behavior as the other settings that are overriding the default settings).
So to remove a default item, you will need to disable it. To do that, you will need
to set the toolbar item disabled attribute to true; an item is uniquely identified
by its name attribute.
"toolbar": [
// Disable the restart and run all button
{
"name": "restart-and-run",
"disabled": true
},
// Add a new button to clear all cell outputs
{
"name": "clear-all-outputs",
"command": "notebook:clear-all-cell-outputs"
}
]
The above example for the notebook panel, will results in the following changes:
Default notebook toolbar#
Customized notebook toolbar#
A toolbar is defined by a list of items. Each item must have an unique name. That
name will create a toolbar item if it is associated with a special widget (e.g. the
cell type toolbar selector). Otherwise it will require a command that will be triggered
when clicking on a toolbar button (see the available Commands list).
The items are sorted by their rank.
Note
If you want to more advanced customization please refer to the Toolbar item definition.
Applying Custom CSS#
To apply custom CSS, you can add a /custom/custom.css file in the
jupyter config directory. You can find the path, ~/.jupyter, to
this directory by running jupyter --paths. There you can create a
folder named custom and create a custom.css file within the
folder.
Custom CSS is not loaded by default. In the jupyter configuration directory, the
~/.jupyter/custom/custom.css file will not be loaded unless the the application is
initialized with the --custom-css flag (LabApp.custom_css config).
Jupyter Styling#
You can use a custom CSS file to modify default Jupyter styling.
/* Modify Jupyter Styles */
.lm-BoxPanel-child,
.jp-FileBrowser-Panel,
.lm-StackedPanel-child,
.jp-FileBrowser-toolbar {
background-color: #aecad4 !important;
}
#top-panel-wrapper,
#jp-top-bar {
background-color: #aecad4 !important;
}
#menu-panel-wrapper,
#jp-MainMenu,
#menu-panel {
background-color: #aecad4 !important;
}
.jp-NotebookPanel-toolbar {
background-color: #aecad4 !important;
}
.lm-MenuBar-content {
color: #02484d;
}
.lm-TabBar-content,
.jp-DirListing-content,
.lm-MenuBar-content {
font-size: small;
}
Markdown Styling#
Another potential application for custom CSS is styling markdown.
/* Styling Markdown */
/* Headings */
h1,
h2 {
font-family: Impact, Charcoal, sans-serif;
font-weight: bold;
text-shadow: 2px 2px 4px #000;
}
h1 {
font-size: 22px;
margin-bottom: 40px;
color: #10929e;
text-decoration: underline;
}
h2 {
font-size: 48px;
margin-bottom: 32px;
color: #76b4be;
text-transform: uppercase;
}
/* Block Quotes */
blockquote {
font-family: Georgia, serif;
font-size: 16px;
color: #19085c;
border-left: 8px solid #effffc;
background-color: #eafcff;
padding: 20px;
}
/* Lists */
ul,
ol {
font-family: Verdana, Geneva, sans-serif;
font-size: 18px;
color: #333;
margin-bottom: 24px;
}
Settings Editor Plugin Filtering#
The Settings Editor supports configurable filtering of plugins to hide specific plugins from the settings interface. This allows administrators and power users to hide complex or sensitive plugins while keeping them fully functional. The hidden plugins will remain accessible in the JSON Settings Editor.
Configuration Options#
Via Settings UI#
Open JupyterLab Settings Editor (Settings > Settings Editor)
Search for āSettings Editor Form UIā
Find the āAdditional plugins to skip in settings editorā field
Add plugin IDs in the format
package:pluginSave the settings
Via overrides.json#
Add the following to your overrides.json file:
{
"@jupyterlab/settingeditor-extension:form-ui": {
"toSkip": ["my-extension:plugin-to-hide", "another-extension:config-plugin"]
}
}
Plugin ID Format#
Plugin IDs usually follow the format: package-name:plugin-name
For a complete list of core plugin IDs, see the Core Plugins documentation.
Alternatives#
If you need to completely disable plugin functionality, consider:
Disabling extensions entirely via the Extension Manager
Using
page_config.jsonto disable specific pluginsUsing the command line:
jupyter labextension disable package-name:plugin-name