Skip to content

vporton/icp-package-manager

Repository files navigation

ICP Package Manager

This software is not yet released.

ICP Package Manager is an analogue of Linux package managers, but for ICP. It allows to install the code of provided packages (in the future they will be provided by DAOs akin Linux distros) into a user's "own" subnet, giving the user sovereignity over his software and greater execution speed thanks to interoperating software installed in the same subnet.

For more information on this project see here.

See TODO.md about yet unimplemented features.

BOOTSTRAP.md describes the proposed algorithm for package manager bootstrapping.

Howto guides to running it

To get started, you might want to explore the project directory structure and the default configuration file. Working with this project in your development environment will not affect any production deployment or identity tokens.

To learn more before you start working with ICP Package Manager, see the following documentation available online:

If you want to start working on your project right away, you might want to try the following commands:

cd ic-package-manager/
dfx help
dfx canister --help

Testing

To run a test/demo of how it uploads a package, then installs and run it, run test.py. Run it in a virtual environment:

dfx start --background
virtualenv -p python3 venv
source venv/bin/activate
pip install ic-py
./test.py

Running the project locally

If you want to test your project locally, you can use the following commands:

# Starts the replica, running in the background
dfx start --background

# Deploys your canisters to the replica and generates your candid interface
dfx deploy

Once the job completes, your application will be available at http://localhost:4943?canisterId={asset_canister_id}.

If you have made changes to your backend canister, you can generate a new candid interface with

npm run generate

at any time. This is recommended before starting the frontend development server, and will be run automatically any time you run dfx deploy.

If you are making frontend changes, you can start a development server with

npm start

Which will start a server at http://localhost:8080, proxying API requests to the replica at port 4943.

Note on frontend environment variables

If you are hosting frontend code somewhere without using DFX, you may need to make one of the following adjustments to ensure your project does not fetch the root key in production:

  • setDFX_NETWORK to ic if you are using Webpack
  • use your own preferred method to replace process.env.DFX_NETWORK in the autogenerated declarations
    • Setting canisters -> {asset_canister_id} -> declarations -> env_override to a string in dfx.json will replace process.env.DFX_NETWORK with the string in the autogenerated declarations
  • Write your own createActor constructor