Spaces:
Running
Running
import marimo | |
__generated_with = "0.9.2" | |
app = marimo.App() | |
def __(): | |
import marimo as mo | |
mo.md("# Welcome to marimo! ππ") | |
return (mo,) | |
def __(mo): | |
slider = mo.ui.slider(1, 22) | |
return (slider,) | |
def __(mo, slider): | |
mo.md( | |
f""" | |
marimo is a **reactive** Python notebook. | |
This means that unlike traditional notebooks, marimo notebooks **run | |
automatically** when you modify them or | |
interact with UI elements, like this slider: {slider}. | |
{"##" + "π" * slider.value} | |
""" | |
) | |
return | |
def __(mo): | |
mo.accordion( | |
{ | |
"Tip: disabling automatic execution": mo.md( | |
rf""" | |
marimo lets you disable automatic execution: just go into the | |
notebook settings and set | |
"Runtime > On Cell Change" to "lazy". | |
When the runtime is lazy, after running a cell, marimo marks its | |
descendants as stale instead of automatically running them. The | |
lazy runtime puts you in control over when cells are run, while | |
still giving guarantees about the notebook state. | |
""" | |
) | |
} | |
) | |
return | |
def __(mo): | |
mo.md( | |
""" | |
Tip: This is a tutorial notebook. You can create your own notebooks | |
by entering `marimo edit` at the command line. | |
""" | |
).callout() | |
return | |
def __(mo): | |
mo.md( | |
""" | |
## 1. Reactive execution | |
A marimo notebook is made up of small blocks of Python code called | |
cells. | |
marimo reads your cells and models the dependencies among them: whenever | |
a cell that defines a global variable is run, marimo | |
**automatically runs** all cells that reference that variable. | |
Reactivity keeps your program state and outputs in sync with your code, | |
making for a dynamic programming environment that prevents bugs before they | |
happen. | |
""" | |
) | |
return | |
def __(changed, mo): | |
( | |
mo.md( | |
f""" | |
**β¨ Nice!** The value of `changed` is now {changed}. | |
When you updated the value of the variable `changed`, marimo | |
**reacted** by running this cell automatically, because this cell | |
references the global variable `changed`. | |
Reactivity ensures that your notebook state is always | |
consistent, which is crucial for doing good science; it's also what | |
enables marimo notebooks to double as tools and apps. | |
""" | |
) | |
if changed | |
else mo.md( | |
""" | |
**π See it in action.** In the next cell, change the value of the | |
variable `changed` to `True`, then click the run button. | |
""" | |
) | |
) | |
return | |
def __(): | |
changed = False | |
return (changed,) | |
def __(mo): | |
mo.accordion( | |
{ | |
"Tip: execution order": ( | |
""" | |
The order of cells on the page has no bearing on | |
the order in which cells are executed: marimo knows that a cell | |
reading a variable must run after the cell that defines it. This | |
frees you to organize your code in the way that makes the most | |
sense for you. | |
""" | |
) | |
} | |
) | |
return | |
def __(mo): | |
mo.md( | |
""" | |
**Global names must be unique.** To enable reactivity, marimo imposes a | |
constraint on how names appear in cells: no two cells may define the same | |
variable. | |
""" | |
) | |
return | |
def __(mo): | |
mo.accordion( | |
{ | |
"Tip: encapsulation": ( | |
""" | |
By encapsulating logic in functions, classes, or Python modules, | |
you can minimize the number of global variables in your notebook. | |
""" | |
) | |
} | |
) | |
return | |
def __(mo): | |
mo.accordion( | |
{ | |
"Tip: private variables": ( | |
""" | |
Variables prefixed with an underscore are "private" to a cell, so | |
they can be defined by multiple cells. | |
""" | |
) | |
} | |
) | |
return | |
def __(mo): | |
mo.md( | |
""" | |
## 2. UI elements | |
Cells can output interactive UI elements. Interacting with a UI | |
element **automatically triggers notebook execution**: when | |
you interact with a UI element, its value is sent back to Python, and | |
every cell that references that element is re-run. | |
marimo provides a library of UI elements to choose from under | |
`marimo.ui`. | |
""" | |
) | |
return | |
def __(mo): | |
mo.md("""**π Some UI elements.** Try interacting with the below elements.""") | |
return | |
def __(mo): | |
icon = mo.ui.dropdown(["π", "π", "β¨"], value="π") | |
return (icon,) | |
def __(icon, mo): | |
repetitions = mo.ui.slider(1, 16, label=f"number of {icon.value}: ") | |
return (repetitions,) | |
def __(icon, repetitions): | |
icon, repetitions | |
return | |
def __(icon, mo, repetitions): | |
mo.md("# " + icon.value * repetitions.value) | |
return | |
def __(mo): | |
mo.md( | |
""" | |
## 3. marimo is just Python | |
marimo cells parse Python (and only Python), and marimo notebooks are | |
stored as pure Python files β outputs are _not_ included. There's no | |
magical syntax. | |
The Python files generated by marimo are: | |
- easily versioned with git, yielding minimal diffs | |
- legible for both humans and machines | |
- formattable using your tool of choice, | |
- usable as Python scripts, with UI elements taking their default | |
values, and | |
- importable by other modules (more on that in the future). | |
""" | |
) | |
return | |
def __(mo): | |
mo.md( | |
""" | |
## 4. Running notebooks as apps | |
marimo notebooks can double as apps. Click the app window icon in the | |
bottom-right to see this notebook in "app view." | |
Serve a notebook as an app with `marimo run` at the command-line. | |
Of course, you can use marimo just to level-up your | |
notebooking, without ever making apps. | |
""" | |
) | |
return | |
def __(mo): | |
mo.md( | |
""" | |
## 5. The `marimo` command-line tool | |
**Creating and editing notebooks.** Use | |
``` | |
marimo edit | |
``` | |
in a terminal to start the marimo notebook server. From here | |
you can create a new notebook or edit existing ones. | |
**Running as apps.** Use | |
``` | |
marimo run notebook.py | |
``` | |
to start a webserver that serves your notebook as an app in read-only mode, | |
with code cells hidden. | |
**Convert a Jupyter notebook.** Convert a Jupyter notebook to a marimo | |
notebook using `marimo convert`: | |
``` | |
marimo convert your_notebook.ipynb > your_app.py | |
``` | |
**Tutorials.** marimo comes packaged with tutorials: | |
- `dataflow`: more on marimo's automatic execution | |
- `ui`: how to use UI elements | |
- `markdown`: how to write markdown, with interpolated values and | |
LaTeX | |
- `plots`: how plotting works in marimo | |
- `sql`: how to use SQL | |
- `layout`: layout elements in marimo | |
- `fileformat`: how marimo's file format works | |
- `markdown-format`: for using `.md` files in marimo | |
- `for-jupyter-users`: if you are coming from Jupyter | |
Start a tutorial with `marimo tutorial`; for example, | |
``` | |
marimo tutorial dataflow | |
``` | |
In addition to tutorials, we have examples in our | |
[our GitHub repo](https://www.github.com/marimo-team/marimo/tree/main/examples). | |
""" | |
) | |
return | |
def __(mo): | |
mo.md( | |
""" | |
## 6. The marimo editor | |
Here are some tips to help you get started with the marimo editor. | |
""" | |
) | |
return | |
def __(mo, tips): | |
mo.accordion(tips) | |
return | |
def __(mo): | |
mo.md("""## Finally, a fun fact""") | |
return | |
def __(mo): | |
mo.md( | |
""" | |
The name "marimo" is a reference to a type of algae that, under | |
the right conditions, clumps together to form a small sphere | |
called a "marimo moss ball". Made of just strands of algae, these | |
beloved assemblages are greater than the sum of their parts. | |
""" | |
) | |
return | |
def __(): | |
tips = { | |
"Saving": ( | |
""" | |
**Saving** | |
- _Name_ your app using the box at the top of the screen, or | |
with `Ctrl/Cmd+s`. You can also create a named app at the | |
command line, e.g., `marimo edit app_name.py`. | |
- _Save_ by clicking the save icon on the bottom right, or by | |
inputting `Ctrl/Cmd+s`. By default marimo is configured | |
to autosave. | |
""" | |
), | |
"Running": ( | |
""" | |
1. _Run a cell_ by clicking the play ( β· ) button on the top | |
right of a cell, or by inputting `Ctrl/Cmd+Enter`. | |
2. _Run a stale cell_ by clicking the yellow run button on the | |
right of the cell, or by inputting `Ctrl/Cmd+Enter`. A cell is | |
stale when its code has been modified but not run. | |
3. _Run all stale cells_ by clicking the play ( β· ) button on | |
the bottom right of the screen, or input `Ctrl/Cmd+Shift+r`. | |
""" | |
), | |
"Console Output": ( | |
""" | |
Console output (e.g., `print()` statements) is shown below a | |
cell. | |
""" | |
), | |
"Creating, Moving, and Deleting Cells": ( | |
""" | |
1. _Create_ a new cell above or below a given one by clicking | |
the plus button to the left of the cell, which appears on | |
mouse hover. | |
2. _Move_ a cell up or down by dragging on the handle to the | |
right of the cell, which appears on mouse hover. | |
3. _Delete_ a cell by clicking the trash bin icon. Bring it | |
back by clicking the undo button on the bottom right of the | |
screen, or with `Ctrl/Cmd+Shift+z`. | |
""" | |
), | |
"Disabling Automatic Execution": ( | |
""" | |
Via the notebook settings (gear icon) or footer panel, you | |
can disable automatic execution. This is helpful when | |
working with expensive notebooks or notebooks that have | |
side-effects like database transactions. | |
""" | |
), | |
"Disabling Cells": ( | |
""" | |
You can disable a cell via the cell context menu. | |
marimo will never run a disabled cell or any cells that depend on it. | |
This can help prevent accidental execution of expensive computations | |
when editing a notebook. | |
""" | |
), | |
"Code Folding": ( | |
""" | |
You can collapse or fold the code in a cell by clicking the arrow | |
icons in the line number column to the left, or by using keyboard | |
shortcuts. | |
Use the command palette (`Ctrl/Cmd+k`) or a keyboard shortcut to | |
quickly fold or unfold all cells. | |
""" | |
), | |
"Code Formatting": ( | |
""" | |
If you have [ruff](https://github.com/astral-sh/ruff) installed, | |
you can format a cell with the keyboard shortcut `Ctrl/Cmd+b`. | |
""" | |
), | |
"Command Palette": ( | |
""" | |
Use `Ctrl/Cmd+k` to open the command palette. | |
""" | |
), | |
"Keyboard Shortcuts": ( | |
""" | |
Open the notebook menu (top-right) or input `Ctrl/Cmd+Shift+h` to | |
view a list of all keyboard shortcuts. | |
""" | |
), | |
"Configuration": ( | |
""" | |
Configure the editor by clicking the gears icon near the top-right | |
of the screen. | |
""" | |
), | |
} | |
return (tips,) | |
if __name__ == "__main__": | |
app.run() | |