{"id":13532456,"url":"https://github.com/ulinja/hyprpy","last_synced_at":"2026-01-24T14:03:47.821Z","repository":{"id":188189401,"uuid":"676771021","full_name":"ulinja/hyprpy","owner":"ulinja","description":"Python bindings for Hyprland.","archived":false,"fork":false,"pushed_at":"2025-08-09T09:25:08.000Z","size":148,"stargazers_count":33,"open_issues_count":3,"forks_count":12,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-28T03:20:55.033Z","etag":null,"topics":["hyprland","hyprland-bindings","linux","linux-desktop","python","python-library","wayland","wayland-compositor"],"latest_commit_sha":null,"homepage":"https://hyprpy.lobbes.dev","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/ulinja.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-10T01:27:51.000Z","updated_at":"2025-11-24T08:21:42.000Z","dependencies_parsed_at":"2023-08-14T07:31:10.481Z","dependency_job_id":"d9eac8ac-d1f2-4b05-b4f2-9d862ca60559","html_url":"https://github.com/ulinja/hyprpy","commit_stats":null,"previous_names":["ulinja/hyprpy"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/ulinja/hyprpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ulinja%2Fhyprpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ulinja%2Fhyprpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ulinja%2Fhyprpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ulinja%2Fhyprpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ulinja","download_url":"https://codeload.github.com/ulinja/hyprpy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ulinja%2Fhyprpy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28729411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"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":["hyprland","hyprland-bindings","linux","linux-desktop","python","python-library","wayland","wayland-compositor"],"created_at":"2024-08-01T07:01:11.120Z","updated_at":"2026-01-24T14:03:47.759Z","avatar_url":"https://github.com/ulinja.png","language":"Python","readme":"# Hyprpy\n\n[![Python](https://img.shields.io/badge/Python-3776AB?logo=python\u0026logoColor=fff)](#)\n[![GitHub Release](https://img.shields.io/github/v/release/ulinja/hyprpy?logo=GitHub\u0026label=Version\u0026color=green)](https://github.com/ulinja/hyprpy/releases/latest)\n[![PyPI - Version](https://img.shields.io/pypi/v/hyprpy?logo=python\u0026logoColor=white\u0026label=PyPI\u0026color=green)](https://pypi.org/project/hyprpy/)\n[![AUR Version](https://img.shields.io/aur/version/python-hyprpy?logo=Arch%20Linux\u0026label=AUR)](https://aur.archlinux.org/packages/python-hyprpy)\n\n[Hyprpy](https://github.com/ulinja/hyprpy) is a library that provides python bindings for the [Hyprland](https://hyprland.org/) wayland compositor.\n\nWith Hyprpy you can very easily retrieve information about windows, workspaces and monitors\nin a running Hyprland instance.\nIt also offers an event monitor, allowing you to write your own python callback functions which\nexecute in response to Hyprland events.\n\nHyprpy uses unix sockets to communicate with Hyprland, making it **fast** and **efficient**.\n\nPlease [check out the documentation](https://hyprpy.lobbes.dev)!\nHyprpy is fully typed and extensively documented. Happy hacking :sunglasses:\n\n## Quickstart\n\n### Installation\n\n#### Pip\n\nInstall Hyprpy with pip by running:\n\n```bash\npip install hyprpy\n```\n\n#### Arch Linux\n\nHyprpy is available in the AUR as [`python-hyprpy`](https://aur.archlinux.org/packages/python-hyprpy).\n\nIf you are using an AUR helper like paru simply install it by running:\n\n```bash\nparu -S python-hyprpy\n```\n\n### Usage examples\n\n```python\nfrom hyprpy import Hyprland\n\ninstance = Hyprland()\n\n\n# Fetch active window and display information:\nwindow = instance.get_active_window()\nprint(window.wm_class)\nprint(window.width)\nprint(window.position_x)\n\n\n# Print information about the windows on the active workspace\nworkspace = instance.get_active_workspace()\nfor window in workspace.windows:\n    print(f\"{window.address}: {window.title} [{window.wm_class}]\")\n\n\n# Get the resolution of the first monitor\nmonitor = instance.get_monitor_by_id(0)\nif monitor:\n    print(f\"{monitor.width} x {monitor.height}\")\n\n\n# Get all windows currently on the special workspace\nspecial_workspace = instance.get_workspace_by_name(\"special\")\nif special_workspace:\n    special_windows = special_workspace.windows\n    for window in special_windows:\n        print(window.title)\n\n\n# Show a desktop notification every time we switch to workspace 6\nfrom hyprpy.utils.shell import run_or_fail\n\ndef on_workspace_changed(sender, **kwargs):\n    workspace_id = kwargs.get('workspace_id')\n    if workspace_id == 6:\n        run_or_fail([\"notify-send\", \"We are on workspace 6.\"])\n\ninstance.signals.workspacev2.connect(on_workspace_changed)\ninstance.watch()\n```\n\n## Development\n\nHyprpy is in active development! Please file an issue if you find any bugs or have a feature request.\n\nYour contributions are greatly appreciated.\n\n### Roadmap\n\n- [ ] include [dispatchers in components API](https://github.com/ulinja/hyprpy/issues/11)\n","funding_links":[],"categories":["Language Bindings"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fulinja%2Fhyprpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fulinja%2Fhyprpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fulinja%2Fhyprpy/lists"}