Theme-ify your Jupyter Notebooks!

    Author Version Status Demo
    Kyle Dunovan image image Binder


    Scaling Back Support:

    As anyone who has opened a bug report or feature request in the last several years can attest, I have begun scaling back support for the jupyter-themes package - mostly due to my personal preference for using Jupyter Lab over Jupyter Notebook classic (see update below for two of my JupyterLab theme repos). Thank you to everyone who contributed to jupyter-themes.

    JupyterLab Themes:

    JupyterLab themes with similar style/design conventions to jupyter-themes:

    JT Customizable Features

    plotting style




    pandas dataframes


    command palette




    • Python 3.4, 3.5, 3.6, 3.7 and 3.8
    • Jupyter (Anaconda recommended)
    • matplotlib

    Install with pip

    # install jupyterthemes
    pip install jupyterthemes
    # upgrade to latest version
    pip install --upgrade jupyterthemes

    Install with conda

    # install jupyterthemes
    conda install -c conda-forge jupyterthemes
    # update to latest version
    conda update jupyterthemes

    Known issues

    • for best results: use notebook>=5.6.0 (pip install --upgrade notebook)
    • refreshing / removing / resetting: depending on your system, browser, etc., you may need to empty your browser cache after installing a new theme (-t) or attempting to restore the default (-r) in order for those changes to take effect. (see discussion here). At the very least you'll need to refresh your browser window (usually cmd+r or ctrl+r).
    • install issue: if you get an error saying jt is not recognized, try this fix.
    • slow render when scrolling: fix available here

    Command Line Usage

    jt  [-h] [-l] [-t THEME] [-f MONOFONT] [-fs MONOSIZE] [-nf NBFONT]
        [-nfs NBFONTSIZE] [-tf TCFONT] [-tfs TCFONTSIZE] [-dfs DFFONTSIZE]
        [-m MARGINS] [-cursw CURSORWIDTH] [-cursc CURSORCOLOR] [-vim]
        [-cellw CELLWIDTH] [-lineh LINEHEIGHT] [-altp] [-altmd] [-altout]
        [-P] [-T] [-N] [-r] [-dfonts]

    Description of Command Line options

    cl options arg default
    Usage help -h --
    List Themes -l --
    Theme Name to Install -t --
    Code Font -f --
    Code Font-Size -fs 11
    Notebook Font -nf --
    Notebook Font Size -nfs 13
    Text/MD Cell Font -tf --
    Text/MD Cell Fontsize -tfs 13
    Pandas DF Fontsize -dfs 9
    Output Area Fontsize -ofs 8.5
    Mathjax Fontsize (%) -mathfs 100
    Intro Page Margins -m auto
    Cell Width -cellw 980
    Line Height -lineh 170
    Cursor Width -cursw 2
    Cursor Color -cursc --
    Alt Prompt Layout -altp --
    Alt Markdown BG Color -altmd --
    Alt Output BG Color -altout --
    Style Vim NBExt* -vim --
    Toolbar Visible -T --
    Name & Logo Visible -N --
    Kernel Logo Visible -kl --
    Reset Default Theme -r --
    Force Default Fonts -dfonts --

    Command Line Examples

    # list available themes
    # onedork | grade3 | oceans16 | chesterish | monokai | solarizedl | solarizedd
    jt -l
    # select theme...
    jt -t chesterish
    # restore default theme
    # NOTE: Need to delete browser cache after running jt -r
    # If this doesn't work, try starting a new notebook session.
    jt -r
    # toggle toolbar ON and notebook name ON
    jt -t grade3 -T -N
    # toggle kernel logo.  kernel logo is in same container as name
    # toggled with -N.  That means that making the kernel logo visible is
    # pointless without also making the name visible
    jt -t grade3 -N -kl
    # set code font to 'Roboto Mono' 12pt
    # (see monospace font table below)
    jt -t onedork -f roboto -fs 12
    # set code font to Fira Mono, 11.5pt
    # 3digit font-sizes get converted into float (115-->11.5)
    # 2digit font-sizes > 25 get converted into float (85-->8.5)
    jt -t solarizedd -f fira -fs 115
    # set font/font-size of markdown (text cells) and notebook (interface)
    # see sans-serif & serif font tables below
    jt -t oceans16 -tf merriserif -tfs 10 -nf ptsans -nfs 13
    # adjust cell width (% screen width) and line height
    jt -t chesterish -cellw 90% -lineh 170
    # or set the cell width in pixels by leaving off the '%' sign
    jt -t solarizedl -cellw 860
    # fix the container-margins on the intro page (defaults to 'auto')
    jt -t monokai -m 200
    # adjust cursor width (in px) and make cursor red
    # options: b (blue), o (orange), r (red), p (purple), g (green), x (font color)
    jt -t oceans16 -cursc r -cursw 5
    # choose alternate prompt layout (narrower/no numbers)
    jt -t grade3 -altp
    # my two go-to styles
    # dark
    jt -t onedork -fs 95 -altp -tfs 11 -nfs 115 -cellw 88% -T
    # light
    jt -t grade3 -fs 95 -altp -tfs 11 -nfs 115 -cellw 88% -T

    Set Plotting Style (from within notebook) makes changes to matplotlib's rcParams dictionary so that figure aesthetics match those of a chosen jupyterthemes style. In addition to setting the color scheme, allows you to control various figure properties (spines, grid, font scale, etc.) as well as the plotting "context" (borrowed from seaborn).

    Note, these commands do not need to be re-run every time you generate a new plot, just once at the beginning of your notebook or whenever style changes are desired after that.

    Pro-tip: Include the following two lines in ~/.ipython/profile_default/startup/startup.ipy file to set plotting style automatically whenever you start a notebook:

    # import jtplot submodule from jupyterthemes
    from jupyterthemes import jtplot
    # currently installed theme will be used to
    # set plot style if no arguments provided Examples

    # import jtplot module in notebook
    from jupyterthemes import jtplot
    # choose which theme to inherit plotting style from
    # onedork | grade3 | oceans16 | chesterish | monokai | solarizedl | solarizedd'onedork')
    # set "context" (paper, notebook, talk, poster)
    # scale font-size of ticklabels, legend, etc.
    # remove spines from x and y axes and make grid dashed'talk', fscale=1.4, spines=False, gridlines='--')
    # turn on X- and Y-axis tick marks (default=False)
    # turn off the axis grid lines (default=True)
    # and set the default figure size, grid=False, figsize=(6, 4.5))
    # reset default matplotlib rcParams

    Monospace Fonts (code cells)

    -f arg Monospace Font
    anka Anka/Coder
    anonymous Anonymous Pro
    aurulent Aurulent Sans Mono
    bitstream Bitstream Vera Sans Mono
    bpmono BPmono
    code Code New Roman
    consolamono Consolamono
    cousine Cousine
    dejavu DejaVu Sans Mono
    droidmono Droid Sans Mono
    fira Fira Mono
    firacode Fira Code
    generic Generic Mono
    hack Hack
    hasklig Hasklig
    inconsolata Inconsolata-g
    inputmono Input Mono
    iosevka Iosevka
    liberation Liberation Mono
    meslo Meslo
    office Office Code Pro
    oxygen Oxygen Mono
    roboto Roboto Mono
    saxmono saxMono
    source Source Code Pro
    sourcemed Source Code Pro Medium
    sudovar Sudo Variable
    ptmono PT Mono
    ubuntu Ubuntu Mono

    Sans-Serif Fonts

    -nf/-tf arg Sans-Serif Font
    opensans Open Sans
    droidsans Droid Sans
    exosans Exo_2
    latosans Lato
    ptsans PT Sans
    robotosans Roboto
    sourcesans Source Sans Pro

    Serif Fonts

    -nf/-tf arg Serif Font
    loraserif Lora
    ptserif PT Serif
    georgiaserif Georgia
    cardoserif Cardo
    crimsonserif Crimson Text
    ebserif EB Garamond
    merriserif Merriweather
    neutonserif Neuton
    goudyserif Sorts Mill Goudy


    Custom Jupyter Notebook Themes

    🚀 Github 镜像仓库 🚀




    贡献者 43



    • CSS 66.8 %
    • Less 14.9 %
    • Jupyter Notebook 10.3 %
    • Python 4.2 %
    • HTML 3.5 %