Azle helps you to build secure decentralized/replicated servers in TypeScript or JavaScript on ICP. The current replication factor is 13-40 times.
For more documentation please see The Azle Book.
Please remember that Azle is in beta and thus it may have unknown security vulnerabilities due to the following:
- Azle is built with various software packages that have not yet reached maturity
- Azle does not yet have multiple independent security reviews/audits
- Azle does not yet have many live, successful, continuously operating applications deployed to ICP
Windows is only supported through a Linux virtual environment of some kind, such as WSL
On Ubuntu/WSL:
sudo apt-get install podman
On Mac:
brew install podman
It's recommended to use nvm and Node.js 20:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
Restart your terminal and then run:
nvm install 20
Check that the installation went smoothly by looking for clean output from the following command:
node --version
Install the dfx command line tools for managing ICP applications:
DFX_VERSION=0.16.1 sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"
Check that the installation went smoothly by looking for clean output from the following command:
dfx --version
If after trying to run dfx --version
you encounter an error such as dfx: command not found
, you might need to add $HOME/bin
to your path. Here's an example of doing this in your .bashrc
:
echo 'export PATH="$PATH:$HOME/bin"' >> "$HOME/.bashrc"
cd icp-provehance-backend
npm install
dfx start --clean --host 127.0.0.1:8000
In a separate terminal in the icp-provehance-backend
directory:
dfx deploy
If you are building an HTTP-based canister and would like your canister to autoreload on file changes (DO NOT deploy to mainnet with autoreload enabled):
AZLE_AUTORELOAD=true dfx deploy
If you have problems deploying see Common deployment issues.
View your frontend in a web browser at http://[canisterId].localhost:8000
.
To obtain your application's [canisterId]:
dfx canister id backend
Communicate with your canister using any HTTP client library, for example using curl
:
curl http://[canisterId].localhost:8000/db
curl -X POST -H "Content-Type: application/json" -d "{ \"hello\": \"world\" }" http://[canisterId].localhost:8000/db/update
The server is also deployed on the mainnet at:
https://t2dv7-caaaa-aaaak-afopa-cai.raw.icp0.io
However, the "/web2/accounts" and "/web2/transactions" routes that work in localhost don't work in mainnet due to ICP's technical limitations.
An issue have been open by an Azle mentor: https://forum.dfinity.org/t/tcp-connect-error-network-is-unreachable/28041