{"id":13626254,"url":"https://github.com/ninegua/ic-utils","last_synced_at":"2025-08-31T20:40:09.262Z","repository":{"id":148224985,"uuid":"382188408","full_name":"ninegua/ic-utils","owner":"ninegua","description":"Unofficial software development kit for the Internet Computer","archived":false,"fork":false,"pushed_at":"2022-02-27T06:39:47.000Z","size":56,"stargazers_count":13,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-13T20:31:57.905Z","etag":null,"topics":["blockchain","canister","internetcomputer","motoko","sdk"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/ninegua.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}},"created_at":"2021-07-02T00:27:03.000Z","updated_at":"2023-08-15T00:07:18.000Z","dependencies_parsed_at":"2023-05-03T03:00:55.955Z","dependency_job_id":null,"html_url":"https://github.com/ninegua/ic-utils","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ninegua/ic-utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninegua%2Fic-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninegua%2Fic-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninegua%2Fic-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninegua%2Fic-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ninegua","download_url":"https://codeload.github.com/ninegua/ic-utils/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninegua%2Fic-utils/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270385467,"owners_count":24574556,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-14T02:00:10.309Z","response_time":75,"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":["blockchain","canister","internetcomputer","motoko","sdk"],"created_at":"2024-08-01T21:02:14.040Z","updated_at":"2025-08-14T08:06:36.685Z","avatar_url":"https://github.com/ninegua.png","language":"Shell","readme":"# Internet Computer Utilities for Canister Development\n\nWe provide a collection of utilities for developing [Canisters] for the [Internet Computer] (IC) blockchain, all without using [dfx].\n\n**WARNING: Very experimental at the moment, try at your own risk!**\n\n### Objectives\n\nExcept the testing and deployment part, canister development is largely the same as ordinary software development.\nTo better cope with the growing complexity, we should:\n\n- Allow projects to use familiar build tools, most notably, the [Makefile].\n- Prefer the composition of a variety of tools instead of one monolithic binary.\n\n### Features\n\n- [x] Tools for interacting with system canisters on the IC including the ledger.\n- [x] Makefile based command line workflow including\n  - [x] Create, top-up, install, and call canisters (without using cycles wallets).\n  - [ ] Uninstall canisters after collecting remaining cycles.\n- [x] Interacting with IC.\n- [ ] Running a local replica for testing.\n- [x] Project setup for [Motoko] backend.\n- [ ] Project setup for JS frontend.\n- [ ] Project setup for C and Rust backends.\n- [x] Linux support.\n- [ ] Darwin (OS X) support.\n- [ ] WSL (Windows) support.\n\n### Get started\n\nDownload a binary release package and unpack it somewhere on the system.\nIt includes a few other IC tools and binaries: [quill], [keysmith], `moc` from [Motoko], `icx` from [agent-rs].\nPlease feel free to include the unpacked `bin` sub-directory in your `PATH` environment, but this is not required.\n\nOne of the command in the unpacked `bin` sub-directory is `ic-init-project`.\nAs an example, you can setup a `Makefile` in a new or existing directory like this:\n\n```\nic-init-project .\n```\n\nIt will first check the existence of a few system tools (`make` from [GNU Make], `protoc` from [protobuf], [jq] and [xxd]) in `PATH`.\nMost likely you can have all of them installed via the preferred package installation of your distro.\n\nTo use the `Makefile` once it is setup, you also need to set the `PEM_FILE` environment variable.\nIt has to point to a file holding the private key of the principal you want to use for development.\nIf you have used `dfx`, it usually is `~/.config/dfx/identity/default/identity.pem`.\nOr create a new one using [keysmith].\nThis is required for creating and installing canisters on the IC, and you will need some ICPs on this account to pay for cycles too.\n\nYou can try it out by playing with a sample \"hello\" project:\n```\nmake init-hello\n```\n\nTo learn about what else can be done, there is `make help`:\n\n```\n$ make help\n\nThe following are examples of using this Makefile, assuming you have a\nproject called 'hello' written in 'src/hello.mo'.\n\nInstall to IC, and initialize it with cycles converted from 0.02 ICPs:\n\n    make install/hello ICP=0.02 MODE=install\n\nCall its method 'greet' with an argument:\n\n    make call/hello METHOD=greet ARG='(\"world\")'\n\nCommonly used make targets are in the form of '\u003caction\u003e/\u003ccanister\u003e'.\nThe \u003caction\u003e is one of: 'install', 'topup', 'status', 'update_settings',\n'call' and 'query'.\n\nCommonly used variable settings:\n\n  METHOD    method name to call on the canister\n  ARG       argument list encoded in Candid text format.\n  MODE      one of 'install', 'reinstall' and 'upgrade' (default)\n  IC        network URI, e.g. 'http://localhost:8000' for a local setup.\n\nAll canisters installed in IC will have their canister ids created in\nfile 'canister_ids.json'. Make sure you don't lose this file, otherwise\nyou may lose access to your canisters if you don't have their ids.\n```\n\nWhat is nice of using `Makefile` is that a command like `make call/...` will perform all prerequisite steps before calling the canister.\nThis may include compiling Wasm, creating, installing or updating canisters, and so on.\nIt is a big time saver when it comes to source code editing and testing loops.\n\nStart build now by editing the `Makefile`!\n\nBuilt products like Wasm and Candid files are put in `dist` sub-directory, and network installation status are put in the `run` sub-directory.\nBut permanent canister IDs on IC are recorded in `canister_ids.json` file.\nYou are advised to make backups of this file or track it in your git repository.\n\n### Development\n\nIf you want to contribute to this project, the fastest way to develop is to install [nix] and run `nix-shell`, which will launch you in a shell with all required dependencies ready to use.\n\n[Motoko]: https://github.com/dfinity/motoko\n[Canisters]: https://sdk.dfinity.org/docs/developers-guide/concepts/canisters-code.html\n[Internet Computer]: https://sdk.dfinity.org/docs/developers-guide/concepts/what-is-ic\n[dfx]: https://sdk.dfinity.org/docs/developers-guide/install-upgrade-remove.html\n[Makefile]: https://www.gnu.org/software/make/manual/make.html\n[nix]: https://nixos.org/nix\n[GNU Make]: https://www.gnu.org/software/make\n[protobuf]: https://developers.google.com/protocol-buffers/docs/downloads\n[jq]: https://stedolan.github.io/jq/download\n[xxd]: https://github.com/ConorOG/xxd\n[keysmith]: https://github.com/dfinity/keysmith\n[quill]: https://github.com/dfinity/quill\n[agent-rs]: https://github.com/dfinity/agent-rs\n[vessel]: https://github.com/dfinity/vessel\n","funding_links":[],"categories":["Shell"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fninegua%2Fic-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fninegua%2Fic-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fninegua%2Fic-utils/lists"}