{"id":15014476,"url":"https://github.com/ekzhang/jute","last_synced_at":"2025-04-06T03:07:07.030Z","repository":{"id":216242034,"uuid":"740816533","full_name":"ekzhang/jute","owner":"ekzhang","description":"A native Jupyter notebook frontend with local + remote kernels, reactive cells, and IDE features, implemented in Rust","archived":false,"fork":false,"pushed_at":"2025-02-03T02:22:30.000Z","size":1329,"stargazers_count":112,"open_issues_count":8,"forks_count":9,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-30T02:04:56.859Z","etag":null,"topics":["desktop-app","exploration","ipython","jupyter","native","notebook","tauri","visualization"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ekzhang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-09T05:58:53.000Z","updated_at":"2025-03-18T03:22:17.000Z","dependencies_parsed_at":"2024-11-09T20:19:48.133Z","dependency_job_id":"af340f08-788a-4594-89f1-325639298c05","html_url":"https://github.com/ekzhang/jute","commit_stats":{"total_commits":56,"total_committers":1,"mean_commits":56.0,"dds":0.0,"last_synced_commit":"87c71dc66ad682013b41c7d9bc0f3364aabb224f"},"previous_names":["ekzhang/jute"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fjute","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fjute/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fjute/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fjute/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ekzhang","download_url":"https://codeload.github.com/ekzhang/jute/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247427006,"owners_count":20937201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desktop-app","exploration","ipython","jupyter","native","notebook","tauri","visualization"],"created_at":"2024-09-24T19:45:40.671Z","updated_at":"2025-04-06T03:07:07.013Z","avatar_url":"https://github.com/ekzhang.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jute\n\nJute is a native notebook for interactive computing.\n\nDouble-click to open any Jupyter notebook in a beautiful, streamlined desktop\napp. Run code in 40 languages, either locally or on powerful cloud kernels (with\nGPUs). Enable reactivity for selected cells to speed up exploration. Collaborate\neffortlessly with real-time multiplayer.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://i.imgur.com/xYQeE3d.png\" width=\"600\"\u003e\n\u003c/p\u003e\n\nJute is also designed to integrate modern features: code completion, semantic\nhighlighting, simple standalone kernels, automatic formatting, and AI.\n\n(This is a complete rewrite of the Jupyter frontend for speed, simplicity, and\nusability.)\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e Jute is not usable or fully implemented yet; I just feel the need to write\n\u003e down and continuously evolve an aspiration of where I'm going.\n\n## Why?\n\nNotebooks are critical to modern data science, education, and research. They\nshould be a first-class document type that _feels effortless_.\n\nHow effortless? No fiddling around with `pip install`, slow load times, insecure\nbrowser contexts, port-forwarding, setting up kernels, extensions that never\nseem to work, `jupyter lab build`, obscure menus, or notebook checkpoints that\nclog up Git.\n\nI just want to **write code interactively**, and to **share interactive\ndocuments**.\n\n\u003e Jupyter notebooks remain the best option for exploratory data analysis,\n\u003e reproducible documents, sharing of results, tutorials, etc.\n\u003e\n\u003e – [Jake VanderPlas](https://twitter.com/jakevdp/status/1046757277133230080)\n\n\u003e The Notebook system is designed around two central ideas: (a) an openly\n\u003e specified protocol to control an interactive computational engine, and (b) an\n\u003e equally open format to record these interactions between the user and the\n\u003e computational engine, including the results produced by the computations.\n\u003e\n\u003e – [K. Jarrod Millman and Fernando Pérez](https://osf.io/h9gsd)\n\nJute is specifically designed to work as a native app. That means file\nmanagement is left to the operating system; we're not going to embed a\nhalf-functional windowing system, folder viewer, or file editor.\n\nIn exchange, you'll get an application that starts up instantly, with a heavy\nfocus on the developer experience. You and the computer — as a thinking tool.\n\n### Design principles\n\n1. **The kernel as a window.** Every running kernel gets its own notebook\n   window. When you close a notebook, the kernel is terminated. No wasted\n   resources.\n2. **What you need to see.** If a UI element is unnecessary, we're removing it.\n   (Why does Jupyter Lab have those tabs to the left? What's \"Command\" mode? The\n   eternal notification icon at the bottom right? The \"Activate Next Tab Bar\"\n   button?) Meanwhile, we make it easier to access important elements like\n   restarting kernels, CPU and RAM usage, and Markdown.\n3. **Intelligent tools.** Features like autocompletion / go-to-definition (LSP),\n   hover to see docstrings, and real-time collaboration should \"just work\" by\n   default. It's a pain to configure these for Jupyter (so many errors!), and it\n   should really be easier.\n4. **Aesthetic minimalism.** Jute should be beautiful. But it should also be\n   minimal, so you can focus on getting things done without distractions. Think\n   of a new file in a code editor — a blank slate for creativity.\n\n### Related work\n\nThe Jupyter project is in widespread use and has a vibrant open-source\necosystem. Jute does not aim to reproduce _all_ features of Jupyter, only the\nmost frequently used ones. The goal of Jute is to reimagine notebook design, so\nsome elements may be simplified to emphasize more important user flows.\n\nThese existing projects take different approaches, but still may be of interest\nto you:\n\n- [JupyterLab Desktop](https://github.com/jupyterlab/jupyterlab-desktop) —\n  Official Jupyter Lab desktop application, based on Electron.\n- [VS Code Jupyter extension](https://github.com/Microsoft/vscode-jupyter) —\n  Notebook editor inside VS Code.\n- [nbterm](https://github.com/davidbrochart/nbterm) — Terminal user interface\n  for Jupyter.\n- [Juno](https://apps.apple.com/us/app/juno-jupyter-python-ide/id1462586500?platform=ipad)\n  — Python notebook editor for iPhone and iPad.\n\nIn most cases Jute is simpler, more streamlined, and faster than alternatives,\nbut it may be less compatible with the existing Jupyter ecosystem.\n\n## Technical\n\nTauri, React, Rust.\n\nMaking an alternate frontend is only possible due to the monumental engineering\neffort of the Jupyter Project.\n\n## Development\n\nFirst, download external sidecar binaries. These do not come with the\nrepository.\n\n```sh\npython3 src-tauri/binaries/download.py\n```\n\nTo run Jute locally, you must supply it with access to a Jupyter kernel.\nCurrently, this is done by supplying environment variables to tell Jute where to\nfind a Python executable and a\n[Jupyter data directory](https://docs.jupyter.org/en/stable/use/jupyter-directories.html#data-files).\n\nOne isolated way of doing so is to use a virtual environment. Here's how you can\nuse the `experiment/` directory to set up a virtual environment and run Jute:\n\n```sh\ncd experiment/\nuv sync # this will create a venv at experiment/.venv and install jupyter into it\n```\n\nAfter you have a Jupyter kernel available, you can start Jute with:\n\n```sh\nJUPYTER_DATA_DIR=... PYTHON_PATH=... npx tauri dev\n```\n\nNote that if you've installed Jupyter outside of a virtual environment, you\ndon't need to supply the `JUPYTER_DATA_DIR`, as Jute will auto-discover the\ndirectory based on Jupyter's defaults.\n\nIf you've installed Jupyter into the `experiment/` directory as described above,\nyou can start Jute with:\n\n```sh\nJUPYTER_DATA_DIR=~/path/to/jute/experiment/.venv/share/jupyter/ PYTHON_PATH=~/path/to/jute/experiment/.venv/bin/python npx tauri dev\n```\n\n## Author\n\n- [Eric Zhang](https://www.ekzhang.com/)\n  ([@ekzhang1](https://twitter.com/ekzhang1))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekzhang%2Fjute","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fekzhang%2Fjute","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekzhang%2Fjute/lists"}