The original ic-py development team has ceased maintenance of the project. Having maintained a close relationship with the former team—we were jointly supported by the same incubator, now disbanded—I have secured consent from the core developers and the repository owner to continue development. Special thanks to @marc0olo and @eduard-galindo for their ongoing support.
Future maintenance of ic-py will primarily be conducted in my repository. Updates will be submitted to the main repository via pull requests and subsequently released on PyPI.
Current Issues and Approach
Based on feedback gathered from GitHub issues and forum discussions, I have identified and structured existing issues into clear milestones prioritized by urgency and complexity. My immediate focus is addressing known security vulnerabilities and simpler tasks with fewer dependencies or blockers.
This feature will be fixed in an upcoming update. I am currently working to complete this goal and collaborating with the community for testing.
Thank you for your attention — I will post an update here once the fix is released.
Additionally,
candid-py may be split from ic-py in the future to become a standalone repository and dependency. I am currently discussing this possibility with some friends who are interested in ic-py.
The development and testing for upgrading the endpoint to v3 have been completed and are consistent with expectations.
Next, I will optimize the code, and the update is expected to be pushed to the fix branch next week.
This fix will not be released to PyPI individually — instead, the first patched version will be published to PyPI after all issues in milestone 1 have been resolved.
Last week I completed development of milestone1 for ic-py.
This week I plan to add supplemental test cases for milestone1’s functionality and publish a release. (This release will not be pushed to PyPI; developers can reference the GitHub release once it’s published.)
A fully functioning ic-py (or any Python agent) equivalent in functionality to @dfinity/candid will be crucial to bringing Kybra (the Python CDK) to 1.0.
We at Demergent Labs are very grateful to see this work being picked up.
Huge thanks for taking on updating Ic-Py. The Fetch.ai agent framework is in Python. So, not having a functioning agent library in Python has been a stopper.
Endpoint v3 compatibility and return‐value handling: Migrated the call endpoint from v2 to v3 and implemented detailed categorization of v3 return values, referencing the agent-rs implementation. This will allow ic-py to interact with canisters more quickly and cover many cases that the old ic-py versions didn’t handle.
Poll function enhancements: In previous ic-py versions, if a call returned no response, ic-py wouldn’t poll the request_id(This explains why some requests didn’t receive return values.). This has been fixed in my branch.
Remaining tasks before the next release:
Finalize update_raw and query_raw for compatibility with the new version
Conduct more thorough testing of update_raw
I expect these to take 2–3 days. Once complete, I’ll publish a release on my branch and update this thread.
After Milestone 2 is finished, I’ll bundle these changes into a PR against the original ic-py repository and publish to PyPI.
If you have any other ic-py–related questions or feature requests, please let me know here!
I’m happy to announce that Milestone 1 of our ic-py maintenance effort is now complete—and the first release from the fix/issue branch is live! This build addresses every issue raised in Milestone 1 and brings two major improvements:
Migration to BN v3 Replaced all legacy RPC endpoints with the new Boundary Node v3 URLs.
v3 Response Handling & Classification Adapted to the new BN v3 response formats, with detailed classification and handling of each response case—fixing many of the old-version timeouts, exception bursts, and incomplete logic paths.
2. Timeouts & Error Classification
Configurable Timeout Handling You can now set sensible default timeouts—or override them per call—to avoid hanging requests.
Structured Error Types Improved our error layer so every canister response is classified and logged consistently, making debugging much clearer.
I’m excited to begin work on Milestone 2 for ic-py! Starting this Monday and every week thereafter, I’ll share progress updates and maintenance notes right here. Thank you all for your continued interest and support.
Note: Once Milestone 2 is complete, we’ll publish the latest ic-py release to PyPI—so you’ll be able to install it directly with pip install ic-py.
Feel free to upgrade and let us know if you encounter any issues!