{"id":34020966,"url":"https://github.com/andyrids/picolynx","last_synced_at":"2026-03-17T20:36:16.431Z","repository":{"id":318729016,"uuid":"1048037625","full_name":"andyrids/picolynx","owner":"andyrids","description":"Attach microcontroller devices to WSL.","archived":false,"fork":false,"pushed_at":"2025-10-18T15:21:58.000Z","size":10483,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T05:27:13.661Z","etag":null,"topics":["microcontroller","pywin32","rpi","textual","tui","usbipd-win","uv","wsl2"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andyrids.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-31T19:21:37.000Z","updated_at":"2025-10-18T15:22:01.000Z","dependencies_parsed_at":"2025-10-13T10:25:43.390Z","dependency_job_id":"e1ebbf4e-971b-44e5-b965-58854a58533f","html_url":"https://github.com/andyrids/picolynx","commit_stats":null,"previous_names":["andyrids/picolynx"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/andyrids/picolynx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andyrids%2Fpicolynx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andyrids%2Fpicolynx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andyrids%2Fpicolynx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andyrids%2Fpicolynx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andyrids","download_url":"https://codeload.github.com/andyrids/picolynx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andyrids%2Fpicolynx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30631383,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T17:32:55.572Z","status":"ssl_error","status_checked_at":"2026-03-17T17:32:38.732Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["microcontroller","pywin32","rpi","textual","tui","usbipd-win","uv","wsl2"],"created_at":"2025-12-13T15:36:28.084Z","updated_at":"2026-03-17T20:36:16.411Z","avatar_url":"https://github.com/andyrids.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PicoLynx - Attach Microcontrollers to WSL\n\nPicoLynx is a Windows-only TUI (Text-based User Interface) application for attaching and detaching microcontroller devices to WSL (Windows Subsystem for Linux) distributions. It monitors Windows [`WM_DEVICECHANGE`](https://learn.microsoft.com/en-us/windows/win32/devio/wm-devicechange) messages with `pywin32` and leverages `usbipd-win` to manage device connections.\n\nThe TUI will react to USB Serial and USB Storage device connections and can run `usbipd-win` commands on any device in its interface.\n\n![PicoLynx TUI](docs/img/picolynx_menu.png)\n\n![PicoLynx TUI](docs/img/picolynx_nord.svg)\n\n![PicoLynx TUI](docs/img/picolynx_persisted.svg)\n\nhttps://github.com/user-attachments/assets/d5382270-cae8-4eb4-90a6-28ccb96e5250\n\n\u003e [!NOTE]\n\u003e If a device is disconnected when attached to WSL or a USB mass storage device is safely removed, it will remain in the connected device table. `WM_DEVICECHANGE` events under these circumstances are not granular enough, but a manual detach ('d' press) or refresh ('r' press) will trigger an update.\n\n## Features\n\n- **Manual control**: Easily attach, bind, detach, or unbind devices using keyboard shortcuts.\n- **Live device table**: View connected and persisted devices in real time.\n- **Windows message monitoring**: Reacts instantly to hardware changes.\n- **Thread-safe**: Ensures safe device operations even with concurrent events.\n- **Beautiful TUI**: Built with `Textual` for a modern terminal experience \u0026 many theme options.\n- **Auto-detect**: Detects devices as they are connected \u0026 disconnected.\n- **Auto-attach (TODO)**: Auto-attachment of persisted devices on connection.\n\n## Requirements\n\nWindows 10/11 is the only supported platform, given the nature of this package. `PicoLynx` requires administrator privileges to interact with USB/Serial devices. If not run as administrator, it will prompt for elevation.\n\n### Install `usbipd-win`\n\nThis tool enables sharing locally connected USB devices to other machines, including Hyper-V guests and WSL 2. Full instructions are available at [usbipd-win Github](https://github.com/dorssel/usbipd-win). Window package manager can be used to install the tool:\n\n```sh\nwinget install usbipd\n```\n\n### Install `WSL`\n\nMicrosoft WSL documentation is available @ [learn.microsoft.com](https://learn.microsoft.com/en-us/windows/wsl/install). The following Windows features are required, which can be enabled by searching for 'Turn Windows features on or off' in the Start Menu:\n\n- Virtual Machine Platform\n- Windows Hypervisor Platform\n- Windows Subsystem for Linux\n\nIts worth updating WSL if newly enabled:\n\n```sh\nwsl --update\n```\n\nTo install a Linux distribution, refer to the guide listed above, or see my Void Linux \u0026 Alpine Linux WSL repo guides for an example of a manual distro installation.\n\n## `PicoLynx` Installation\n\n[Astral uv](https://docs.astral.sh/uv/) package manager is recommended for a fast, isolated, and reliable install. To install `uv`, use the following command:\n\n```sh\npowershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\nYou can install `PicoLynx` globally with the following `uv` command:\n\n```sh\nuv tool install picolynx\n```\n\nOr:\n\n```sh\nuv tool install \"git+https://github.com/andyrids/picolynx.git\"\n```\n\nYou can run `PicoLynx` without installing, by running the following command:\n\n```sh\nuvx picolynx\n```\n\nOr:\n\n```sh\nuvx \"git+https://github.com/andyrids/picolynx.git\"\n```\n\n## Keyboard Shortcuts\n\nThe TUI command palette can be opened with `ctrl + p`, which has options for theme changes and the full command help panel. Tabs can be navigated and switched to with the `tab` key and tables can be traversed with the arrow keys.\n\n| Key | Action  |\n| --- | ------- |\n|  a  | Attach  |\n|  b  | Bind    |\n|  d  | Detach  |\n|  u  | Unbind  |\n|  r  | Refresh |\n\nSelect a device in the table and press the corresponding key to perform the action.\n\n## Development\n\nClone the repository and enter the `picolynx` directory.\n\n```sh\ngit clone git@github.com:andyrids/picolynx.git\n```\n\n```sh\ncd picolynx\n```\n\nThe `just` command runner ([GitHub page](https://github.com/casey/just)) is a handy way to save and run project-specific commands, which are written in a file called `justfile`.\n\nIf you use `just`, you can add use the commands below to run `PicoLynx` in development mode, with the `textual` console integration.\n\nThis command uses `uv` to sync the package dependencies and create a `.venv`:\n\n```sh\njust sync\n```\n\nAlias for:\n\n```sh\nuv sync\n```\n\nRunning the command below in one terminal, will activate the `textual` console, which listens to a running textual app in `--dev` mode:\n\n```sh\njust console\n```\n\nAlias for:\n\n```sh\nuv run textual console -x EVENT -x SYSTEM\n```\n\nRunning this command will run `PicoLynx` in development mode, with a logging level set to 'DEBUG'.\n\n```sh\njust dev\n```\n\nAlias for:\n\n```sh\nuv run textual run --dev src/picolynx/__main__.py --log-level DEBUG\n```\n\nThe logging level can be modified in with a `--log-level` option, which takes the following choices; '*DEBUG*', '*INFO*', '*WARNING*' (default), '*ERROR*' \u0026 '*CRITICAL*'.\n\n```sh\nuv run textual run --dev src/picolynx/__main__.py --log-level INFO\n```\n\n## Acknowledgements\n\n- [`usbipd-win`](https://github.com/dorssel/usbipd-win)\n- [`textual`](https://textual.textualize.io/)\n- [`textual-cookbook`](https://github.com/ttygroup/textual-cookbook)\n- [`transcendent-textual`](https://github.com/Textualize/transcendent-textual)\n- [`Astral uv`](https://docs.astral.sh/uv/)\n- [`just`](https://github.com/casey/just)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandyrids%2Fpicolynx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandyrids%2Fpicolynx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandyrids%2Fpicolynx/lists"}