{"id":39083187,"url":"https://github.com/mahmoudimus/ida-taskr","last_synced_at":"2026-01-17T18:33:52.228Z","repository":{"id":324952510,"uuid":"992327216","full_name":"mahmoudimus/ida-taskr","owner":"mahmoudimus","description":"IDA Taskr is a pure Python library for IDA Pro related parallel computing. It lets you use the power of Qt (built-in to IDA!) and Python's powerful multiprocessing and asyncio systems to quickly process computationally intensive tasks without freezing IDA Pro. Oh, and it's super fast too.","archived":false,"fork":false,"pushed_at":"2025-11-18T19:27:23.000Z","size":115,"stargazers_count":26,"open_issues_count":1,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-18T20:13:28.441Z","etag":null,"topics":["ida","ida-plugin","ida-pro","ida-python","idapro","idapython","reverse-engineering"],"latest_commit_sha":null,"homepage":"https://mahmoudimus.com","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/mahmoudimus.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":"2025-05-29T01:27:16.000Z","updated_at":"2025-10-12T22:54:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mahmoudimus/ida-taskr","commit_stats":null,"previous_names":["mahmoudimus/ida-taskr"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mahmoudimus/ida-taskr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mahmoudimus%2Fida-taskr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mahmoudimus%2Fida-taskr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mahmoudimus%2Fida-taskr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mahmoudimus%2Fida-taskr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mahmoudimus","download_url":"https://codeload.github.com/mahmoudimus/ida-taskr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mahmoudimus%2Fida-taskr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28516000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T18:28:00.501Z","status":"ssl_error","status_checked_at":"2026-01-17T18:28:00.150Z","response_time":85,"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":["ida","ida-plugin","ida-pro","ida-python","idapro","idapython","reverse-engineering"],"created_at":"2026-01-17T18:33:52.053Z","updated_at":"2026-01-17T18:33:52.177Z","avatar_url":"https://github.com/mahmoudimus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ida-taskr\n\n![CI Status](https://github.com/mahmoudimus/ida-taskr/actions/workflows/python.yml/badge.svg)\n\n## Overview\n\nIDA Taskr is a pure Python library for IDA Pro parallel computing. It lets you use the power of Qt (built-in to IDA!) and Python's multiprocessing to offload computationally intensive tasks to worker processes without freezing IDA Pro's UI.\n\n**Key Features:**\n- 🚀 Offload heavy processing to worker processes\n- 🔄 Bidirectional IPC communication between IDA and workers\n- 📦 Qt-based process management (QProcess)\n- 🎯 Event-driven message handling\n- ⚡ Compatible with IDA Pro 9.1 (PyQt5) and 9.2+ (PySide6)\n\n## Installation\n\n```bash\n# Install from source\npip install -e .\n\n# With Qt support (choose based on your IDA version)\npip install -e .[pyqt5]    # For IDA Pro 9.1\npip install -e .[pyside6]  # For IDA Pro 9.2+\n```\n\n## Quick Start\n\n### Basic Example\n\nHere's a simple example of using `TaskRunner` to offload work to a worker process:\n\n```python\nfrom ida_taskr import TaskRunner\n\n# Create a task runner with your worker script\nrunner = TaskRunner(\n    worker_script=\"path/to/worker.py\",\n    worker_args=[\"arg1\", \"arg2\"]\n)\n\n# Set up message handlers\n@runner.on('worker_message')\ndef handle_message(msg):\n    print(f\"Worker said: {msg}\")\n\n@runner.on('worker_results')\ndef handle_results(results):\n    print(f\"Results: {results}\")\n\n# Start the worker\nrunner.start()\n\n# Send commands to the worker\nrunner.send_command({\"command\": \"process\", \"data\": [1, 2, 3]})\n\n# When done\nrunner.stop()\n```\n\n### Worker Script Example\n\nYour worker script receives commands and sends results back:\n\n```python\n# worker.py\nimport sys\nfrom ida_taskr.worker import WorkerBase\n\nclass MyWorker(WorkerBase):\n    def handle_command(self, command):\n        \"\"\"Process commands from IDA.\"\"\"\n        if command.get(\"command\") == \"process\":\n            data = command.get(\"data\", [])\n\n            # Do heavy computation here\n            result = [x * 2 for x in data]\n\n            # Send results back\n            self.send_message({\n                \"type\": \"result\",\n                \"data\": result\n            })\n\nif __name__ == \"__main__\":\n    worker = MyWorker()\n    worker.run()\n```\n\n### Advanced: Using WorkerLauncher Directly\n\nFor more control, use `WorkerLauncher`:\n\n```python\nfrom ida_taskr.launcher import WorkerLauncher\nfrom ida_taskr.protocols import MessageEmitter\n\n# Create message emitter for event handling\nemitter = MessageEmitter()\n\n@emitter.on('worker_message')\ndef on_message(msg):\n    print(f\"Message: {msg}\")\n\n@emitter.on('worker_connected')\ndef on_connected():\n    print(\"Worker connected!\")\n\n# Create launcher\nlauncher = WorkerLauncher(message_emitter=emitter)\n\n# Launch worker process\nlauncher.launch_worker(\n    script_path=\"worker.py\",\n    worker_args={\"chunk_size\": \"1024\", \"mode\": \"fast\"}\n)\n\n# Send commands\nlauncher.send_command({\"command\": \"analyze\", \"ea\": 0x401000})\n\n# Stop when done\nlauncher.stop_worker()\n```\n\n## Testing\n\n`ida-taskr` is thoroughly tested across multiple Qt frameworks and Python versions.\n\n### Unit Tests\n\nUnit tests don't require IDA Pro and use mocks where needed:\n\n```bash\n# Run all unit tests\n./run_tests.sh\n\n# Or use unittest directly\npython -m unittest discover -s tests/unit -p \"test_*.py\"\n\n# Run a specific test\n./run_tests.sh test_event_emitter\n```\n\n### Integration Tests\n\nIntegration tests verify compatibility with real Qt frameworks:\n\n```bash\n# Install test dependencies\npip install -e .[ci,pyqt5]    # For PyQt5 tests\npip install -e .[ci,pyside6]  # For PySide6 tests\n\n# Run Qt integration tests\npytest tests/integration/test_integration_qt_core.py -v\n\n# Run with coverage\npytest tests/integration/ --cov=src/ida_taskr --cov-report=html\n```\n\n**Supported Qt Frameworks:**\n- ✅ PyQt5 (IDA Pro 9.1)\n- ✅ PySide6 (IDA Pro 9.2+)\n\n## Contributing 🤝\n\nWe welcome contributions to `ida-taskr`! Whether it's bug fixes, new features, or documentation improvements, your help is appreciated. Here's how to contribute:\n\n1. **Fork the Repository** and clone it locally. 🍴\n2. **Make Your Changes** in a new branch. 🌿\n3. **Run Tests** to ensure everything works (`python3 -m unittest discover -s tests/unit/`). 🧪\n4. **Submit a Pull Request** with a clear description of your changes. 📬\n\nPlease follow the coding style and include tests for new functionality. Let's make `ida-taskr` even better together! 💪\n\n## License 📜\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 📄\n\n## Contact 📧\n\nHave questions, suggestions, or need support? Open an issue on GitHub or reach out to [mahmoudimus](https://github.com/mahmoudimus). I'm happy to help! 😊\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmahmoudimus%2Fida-taskr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmahmoudimus%2Fida-taskr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmahmoudimus%2Fida-taskr/lists"}