{"id":50960486,"url":"https://github.com/axide-dev/axidev-io-python","last_synced_at":"2026-06-18T13:02:25.031Z","repository":{"id":353527578,"uuid":"1217322739","full_name":"axide-dev/axidev-io-python","owner":"axide-dev","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-24T09:45:55.000Z","size":103,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-24T10:36:35.282Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/axide-dev.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-21T19:15:16.000Z","updated_at":"2026-04-24T09:46:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/axide-dev/axidev-io-python","commit_stats":null,"previous_names":["axide-dev/axidev-io-python"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/axide-dev/axidev-io-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axide-dev%2Faxidev-io-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axide-dev%2Faxidev-io-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axide-dev%2Faxidev-io-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axide-dev%2Faxidev-io-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/axide-dev","download_url":"https://codeload.github.com/axide-dev/axidev-io-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axide-dev%2Faxidev-io-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34491239,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"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":[],"created_at":"2026-06-18T13:02:23.953Z","updated_at":"2026-06-18T13:02:25.006Z","avatar_url":"https://github.com/axide-dev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# axidev-io\n\n`axidev-io` is a Python package for keyboard automation and global keyboard event listening.\n\nIt wraps the native `axidev-io` library and keeps the same high-level shape as the JS bindings:\n\n- `keyboard.initialize(...)`\n- `keyboard.sender.tap(...)`\n- `keyboard.sender.type_text(...)`\n- `keyboard.listener.start(...)`\n- `keyboard.keys.parse(...)`\n- `keyboard.setup_permissions()`\n\nThe PyPI distribution name is `axidev-io`.\nThe Python import name is `axidev_io`.\n\n## Install\n\n```sh\npip install axidev-io\n```\n\nThe source distribution builds the native extension from the checked-out\n`vendor/axidev-io` git submodule.\n\n## Platform Notes\n\nSupported platforms:\n\n- Linux\n- Windows\n\n### Linux\n\nBuild-time requirements:\n\n- `pkg-config`\n- development packages for `libinput`, `libudev`, and `xkbcommon`\n- a working C toolchain\n\nRuntime requirements:\n\n- system shared libraries for `libinput`, `libudev`, and `xkbcommon`\n- access to `/dev/uinput` for key injection\n- access to the relevant `/dev/input/event*` devices for listening\n\nThose Linux backend dependencies are intentionally expected from the system and must remain dynamically linked for legal/compliance reasons.\n\n### Windows\n\nWindows builds use the normal Python extension toolchain and link against system Win32 libraries.\n\n## Simple Example\n\n```python\nfrom axidev_io import keyboard\n\npermissions = keyboard.setup_permissions()\n\nif permissions.requires_logout:\n    print(\"Log out and back in, then run again.\")\n    raise SystemExit(0)\n\nkeyboard.initialize(key_delay_us=2000)\n\nkeyboard.sender.type_text(\"Hello from axidev-io\")\nkeyboard.sender.tap(\"Ctrl+Shift+P\")\n\nstop = keyboard.listener.start(lambda event: print(event.combo, event.pressed, event.text))\n\ntry:\n    ...\nfinally:\n    stop()\n    keyboard.shutdown()\n```\n\n## API Shape\n\nMain entrypoints:\n\n- `keyboard.initialize(...)`\n- `keyboard.shutdown()`\n- `keyboard.setup_permissions()`\n- `keyboard.status()`\n- `keyboard.version()`\n- `keyboard.is_log_enabled(level)`\n- `keyboard.log_message(level, message)`\n\nSender methods:\n\n- `keyboard.sender.tap(input, mods=None)`\n- `keyboard.sender.key_down(input, mods=None, repeat=True)`\n- `keyboard.sender.key_repeat(input, mods=None)`\n- `keyboard.sender.key_up(input, mods=None)`\n- `keyboard.sender.type_text(text)`\n- `keyboard.sender.type_character(input)`\n- `keyboard.sender.hold_modifiers(mods)`\n- `keyboard.sender.release_modifiers(mods)`\n- `keyboard.sender.release_all_modifiers()`\n- `keyboard.sender.flush()`\n\nListener methods:\n\n- `keyboard.listener.start(callback)`\n- `keyboard.listener.stop()`\n\nKey helpers:\n\n- `keyboard.keys.parse(name)`\n- `keyboard.keys.format(key)`\n- `keyboard.keys.parse_combo(text)`\n- `keyboard.keys.format_combo(input, mods=None)`\n- `keyboard.keys.modifiers.resolve(mods)`\n- `keyboard.keys.modifiers.to_names(mask)`\n\n## Shipped Compliance Assets\n\nThe installed package ships the upstream consumer and license material under `axidev_io/vendor/axidev-io/`, including:\n\n- `docs/consumers/README.md`\n- `scripts/setup_uinput_permissions.sh`\n- `LICENSE`\n- `vendor/licenses/stb.txt`\n\n## Development\n\nUseful local commands:\n\n```sh\ngit submodule update --init --recursive\ngit submodule update --remote vendor/axidev-io\npython scripts/sync_upstream.py\npython -m pip install -e .\npython -m build\n```\n\nThe `vendor/axidev-io` submodule tracks the upstream `release` branch. After\nupdating the submodule, run `python scripts/sync_upstream.py` to refresh the\npackage-shipped compliance assets under `src/axidev_io/vendor/axidev-io/`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxide-dev%2Faxidev-io-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxide-dev%2Faxidev-io-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxide-dev%2Faxidev-io-python/lists"}