{"id":34109991,"url":"https://github.com/dhagrow/telepythy","last_synced_at":"2026-04-02T02:08:29.200Z","repository":{"id":43808789,"uuid":"399246117","full_name":"dhagrow/telepythy","owner":"dhagrow","description":"An embeddable, remote-capable Python shell","archived":false,"fork":false,"pushed_at":"2025-03-02T03:38:44.000Z","size":796,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-17T02:21:31.827Z","etag":null,"topics":["interpreter","prototyping","python","remote","shell","ui"],"latest_commit_sha":null,"homepage":"","language":"Python","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/dhagrow.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2021-08-23T20:58:32.000Z","updated_at":"2025-03-02T03:38:47.000Z","dependencies_parsed_at":"2022-08-12T10:50:24.354Z","dependency_job_id":"f8047b46-6b6b-4462-b9ad-75f1f1bf0af9","html_url":"https://github.com/dhagrow/telepythy","commit_stats":{"total_commits":292,"total_committers":1,"mean_commits":292.0,"dds":0.0,"last_synced_commit":"5ed607927819a83de1d021017666d49cce37a1d6"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/dhagrow/telepythy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhagrow%2Ftelepythy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhagrow%2Ftelepythy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhagrow%2Ftelepythy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhagrow%2Ftelepythy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhagrow","download_url":"https://codeload.github.com/dhagrow/telepythy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhagrow%2Ftelepythy/sbom","scorecard":{"id":339902,"data":{"date":"2025-08-11","repo":{"name":"github.com/dhagrow/telepythy","commit":"3f3f40809a10ba43d54371b8de556fd03cd853f5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.5.1 not signed: https://api.github.com/repos/dhagrow/telepythy/releases/75038944","Warn: release artifact 0.5.1 does not have provenance: https://api.github.com/repos/dhagrow/telepythy/releases/75038944"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T05:32:50.815Z","repository_id":43808789,"created_at":"2025-08-18T05:32:50.815Z","updated_at":"2025-08-18T05:32:50.815Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31294399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:43:37.129Z","status":"online","status_checked_at":"2026-04-02T02:00:08.535Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["interpreter","prototyping","python","remote","shell","ui"],"created_at":"2025-12-14T18:41:44.150Z","updated_at":"2026-04-02T02:08:29.192Z","avatar_url":"https://github.com/dhagrow.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Telepythy\n\nTelepythy is a desktop Python shell inspired by [DreamPie][1] with some notable additional features, such as remote interpreters. It is designed to streamline a prototyping workflow.\n\n## Features\n\n* Combines the flow of a REPL with the expressiveness of an editor\n* UI based on [Qt 6][8]\n* Syntax highlighting based on [Pygments][7]\n* Embeddable service with no third-party dependencies\n* Remote connections (as client or server via TCP)\n* Seamless swapping between multiple interpreter profiles\n\n## Requirements\n\n* UI requires Python 3 on Linux/Windows/OSX (tested: 3.6/3.7/3.9 on Linux/Windows)\n* Embeddable service supports Python 2 and 3 on all platforms (tested: 2.7/3.6/3.7/3.9 on Linux/Windows)\n\n## Screenshots\n\n**Windows**\n\n![](https://github.com/dhagrow/telepythy/raw/master/res/screenshot_3.png)\n\u003c!-- ![](res/screenshot_3.png) --\u003e\n\n**Windows**\n(*You can make it look like default IDLE if you want*)\n\n![](https://github.com/dhagrow/telepythy/raw/master/res/screenshot_4.png)\n\u003c!-- ![](res/screenshot_4.png) --\u003e\n\n**Linux/i3**\n\n![](https://github.com/dhagrow/telepythy/raw/master/res/screenshot_6.png)\n\u003c!-- ![](res/screenshot_6.png) --\u003e\n\n## Motivation\n\nThere are many Python shells:\n\n* The standard Python shell\n* [IDLE][12]\n* [IPython/Jupyter][3]\n* [ptpython][11]\n* [bpython][10]\n* [DreamPie][1]\n\nThey are all good in their own ways. I frequently use the standard Python shell, because it is always there. But when I have been able to install my preference for my most common use cases (prototyping and debugging), my choice was always DreamPie.\n\nUnfortunately, it looks as if all development [stopped][2] sometime before 2016, and the last official release was in 2012. I looked into creating a fork to add the features I was interested in, but the effort to modernize (i.e. Python 3) and refactor an unfamiliar and complex code-base was more than I cared to invest in. Starting a new project seemed much more fun.\n\nSo, I decided to start from scratch, and **Telepythy** is the result.\n\n## Installation\n\nThe most reliable way to install `telepythy` across platforms is with [pipx][9]:\n\n```shell\n$ pipx install telepythy\n```\n\nThis will install **Telepythy** in an isolated environment for the current user, and should work on Windows, Linux, and OSX (untested).\n\nFor Windows users, you can download an installer [here][13].\n\n## Usage\n\nOnce **Telepythy** and its dependencies have been installed, you can start the UI with:\n\n```shell\n$ telepythy-gui\n# or\n$ python -m telepythy.gui\n```\n\n**NOTE**: At this early state, it may be helpful to use the `--verbose` (`-v` or `-vv`) flag to track what **Telepythy** is doing (especially if reporting a bug).\n\n### Configuration\n\nStyle and font options can be configured with the UI. Manually editing the config file is currently the only way to persist any other options.\n\nThe config file is located according to the results of `platformdirs.user_config_dir()` (e.g. `~/.config/telepythy/telepythy.cfg` on Linux, `C:\\Users\\\u003cusername\u003e\\AppData\\Local\\telepythy\\telepythy.cfg` on Windows).\n\n### Virtual Environments\n\nAny virtual environments discovered in `~/.virtualenvs` will be accessible automatically in the *Profiles* menu.\n\n### Embedding\n\nTo embed a **Telepythy** service in your code, you can use any of the following functions:\n\n```python\nimport telepythy\n\n# start a server thread\ntelepythy.start_server()\n\n# or start a client thread (with optional arguments)\ntelepythy.start_client(locals={'bar': False}, address='localhost:1337')\n\n# or start a client/server directly (blocking)\ntelepythy.client()\ntelepythy.server()\n```\n\nSee the `\u003ctelepythy\u003e/examples` directory from the repository for examples on how to embed the service into existing code.\n\n### Local Interpreters\n\nTo add a custom local interpreter, you must create a profile referencing the path for the interpreter in the config file:\n\n```ini\n[profiles]\n\u003cprofile-name\u003e.command = \"\u003ccommand-for-interpreter\u003e\"\n```\n\n### Remote Interpreters\n\nThe remote service needs to be accessible by whichever interpreter you intend to use. A minimal, service-only package can be installed from PyPI:\n\n```shell\n$ pip install telepythy-service\n```\n\nIt can then be started using one of the following commands:\n\n```shell\n$ telepythy-svc [-c,--connect] '\u003chost\u003e:\u003cport\u003e'\n$ telepythy-svc [-s,--serve] '\u003cinterface\u003e:\u003cport\u003e'\n# or\n$ python -m telepythy ...\n```\n\nWith no options, a server will start listening on the default interface and port: `localhost:7373`.\n\nTo use **Telepythy** with a remote service, you must create a profile to either connect to a remote port, or serve on a port, in the config file.\n\nTo add a connect profile:\n\n```ini\n[profiles]\n\u003cprofile-name\u003e.connect = \"\u003chost\u003e:\u003cport\u003e\"\n```\n\nTo add a serve profile:\n\n```ini\n[profiles]\n\u003cprofile-name\u003e.serve = \"\u003cinterface\u003e:\u003cport\u003e\"\n```\n\nYou can then use the profile by selecting it in the UI, or with the `--profile` command-line option:\n\n```shell\n$ telepythy-gui [-p,--profile] \u003cprofile-name\u003e\n```\n\n## API\n\n*work in progress*\n\n## Security\n\nThere are no security measures in place within **Telepythy** to secure your source code in transit. The UI controller connects to the embedded service using a regular TCP connection. By default, the UI starts a server listening on *localhost* and executes a Python process that connects to it. In the future, the default may change to use UNIX domain sockets on Linux, and named pipes on Windows. An option for SSL is possible for those willing to manage certificates. However, securing communications in transit will always remain a responsibility of the user.\n\nFor connections across machines, I recommend using [SSH port forwarding][6]. \u003c- (If you're still reading, this is something you should know about.)\n\n## Roadmap\n\n**Telepythy** is very much a work in progress. Here are some features that might be queued up for future releases (in no particular order):\n\n* Better completion (next on the docket)\n* Embedded documentation (i.e. docstring popups)\n* Smart copy/paste\n* Profile configuration UI\n* UNIX domain sockets\n* SSL sockets\n* Session autosave/import/export\n* Localization (at least Spanish)\n\nIf you experience bugs or have additional feature suggestions, please don't hesistate to create an [issue][5]. Note that I work on this project in my free time and I don't expect to work on features that I don't personally find useful. I do prioritize bugs, and welcome pull requests.\n\n[1]: http://www.dreampie.org/\n[2]: https://github.com/noamraph/dreampie/issues/65\n[3]: https://jupyter.org/\n[4]: https://wiki.qt.io/Qt_for_Python\n[5]: https://github.com/dhagrow/telepythy/issues/new\n[6]: https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding\n[7]: https://pygments.org\n[8]: https://www.qt.io\n[9]: https://pypa.github.io/pipx/\n[10]: https://bpython-interpreter.org\n[11]: https://github.com/prompt-toolkit/ptpython\n[12]: https://docs.python.org/3/library/idle.html\n[13]: https://github.com/dhagrow/telepythy/releases/download/0.5.1/telepythy-0.5.1-setup-x64.exe\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhagrow%2Ftelepythy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhagrow%2Ftelepythy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhagrow%2Ftelepythy/lists"}