1{
2 lib,
3 buildPythonPackage,
4 fetchPypi,
5 pythonOlder,
6
7 # build-system
8 uv-build,
9
10 # dependencies
11 click,
12 docutils,
13 itsdangerous,
14 jedi,
15 loro,
16 markdown,
17 narwhals,
18 packaging,
19 psutil,
20 pygments,
21 pymdown-extensions,
22 pyyaml,
23 ruff,
24 starlette,
25 tomlkit,
26 typing-extensions,
27 uvicorn,
28 websockets,
29
30 # tests
31 versionCheckHook,
32}:
33
34buildPythonPackage rec {
35 pname = "marimo";
36 version = "0.15.2";
37 pyproject = true;
38
39 # The github archive does not include the static assets
40 src = fetchPypi {
41 inherit pname version;
42 hash = "sha256-cmkz/ZyVYfpz4yOxghsXPF4PhRluwqSXo1CcwvwkXFg=";
43 };
44
45 build-system = [ uv-build ];
46
47 dependencies = [
48 click
49 docutils
50 itsdangerous
51 jedi
52 loro
53 markdown
54 narwhals
55 packaging
56 psutil
57 pygments
58 pymdown-extensions
59 pyyaml
60 ruff
61 starlette
62 tomlkit
63 uvicorn
64 websockets
65 ]
66 ++ lib.optionals (pythonOlder "3.11") [ typing-extensions ];
67
68 pythonImportsCheck = [ "marimo" ];
69
70 # The pypi archive does not contain tests so we do not use `pytestCheckHook`
71 nativeCheckInputs = [
72 versionCheckHook
73 ];
74 versionCheckProgramArg = "--version";
75
76 meta = {
77 description = "Reactive Python notebook that's reproducible, git-friendly, and deployable as scripts or apps";
78 homepage = "https://github.com/marimo-team/marimo";
79 changelog = "https://github.com/marimo-team/marimo/releases/tag/${version}";
80 license = lib.licenses.asl20;
81 mainProgram = "marimo";
82 maintainers = with lib.maintainers; [
83 akshayka
84 dmadisetti
85 ];
86 };
87}