{"id":25765842,"url":"https://github.com/spirali/twinsong","last_synced_at":"2025-02-26T22:28:19.905Z","repository":{"id":278556137,"uuid":"932772851","full_name":"spirali/twinsong","owner":"spirali","description":"Alternative to Jupyter Notebook that separates code and outputs","archived":false,"fork":false,"pushed_at":"2025-02-20T12:02:47.000Z","size":191,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-20T12:32:44.630Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spirali.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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":"2025-02-14T13:50:31.000Z","updated_at":"2025-02-20T12:16:43.000Z","dependencies_parsed_at":"2025-02-20T12:43:54.883Z","dependency_job_id":null,"html_url":"https://github.com/spirali/twinsong","commit_stats":null,"previous_names":["spirali/twinsong"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ftwinsong","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ftwinsong/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ftwinsong/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spirali%2Ftwinsong/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spirali","download_url":"https://codeload.github.com/spirali/twinsong/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240944796,"owners_count":19882623,"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":[],"created_at":"2025-02-26T22:28:19.392Z","updated_at":"2025-02-26T22:28:19.899Z","avatar_url":"https://github.com/spirali.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg width=\"160\" src=\"browser/ui/public/twinsong.jpeg\"\u003e\n\u003c/p\u003e\n\n# TwinSong\n\nTwinSong is an alternative to Jupyter Notebook that separates code and outputs for a cleaner and more efficient workflow.\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"80%\" src=\"docs/screenshot.png\"\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Compact Code** – Code remains uncluttered as outputs are displayed separately.\n- **Preserved Results** – Re-evaluating a cell does not overwrite previous results. TwinSong tracks the code that generated past outputs.\n- **Multiple Kernel Instances** – The separation of code and outputs allows multiple kernel instances to run over the same code at once.\n- **Rust Backend** – The backend is written in Rust. Package is statically linked, no dependencies needed.\n- **Clean Python Kernel** - The Python kernel is a clean Python instance with a Rust module that avoids loading additional Python modules or starting additional Python threads.\n\n## Status\n\nTwinSong is currently in an experimental phase. It provides all essential features for evaluating new ideas, including cell creation and code execution. However, many features required for practical usage are still missing, such as loading and saving notebooks. Addressing these limitations is a priority for future development. TwinSong now supports only Python Kernel.\n\n\n## Getting started\n\nInstall via `pip`:\n\n```commandline\n$ pip install twinsong\n```\n\nStart TwinSong itself:\n\n```\ntwinsong\n```\n\n## Building locally\n\n```\n\n# Building frontend\n\ncd browser/ui\nnpm install\n./build.sh\ncd ../..\n\n# Building Python module\n\npython3 -m venv venv\nsource venv/bin/activate\npip install maturin\ncd pytwinsong\nmaturin develop -r\n\n# Building standalone server\n# (This is optional; python package already contains server)\n\ncargo build --release --package twinsong\n```\n\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspirali%2Ftwinsong","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspirali%2Ftwinsong","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspirali%2Ftwinsong/lists"}