Welcome to the GitHub repository for forc.pub, the official package registry for the Sway programming language.
forc.pub
has a simple multi-threaded Rocket backend server which stores and fetches package metadata in a Postgres database. Packages are stored in a dedicated IPFS network, and package metadata is indexed and stored in forc.pub-index.
The frontend uses React and TypeScript.
For user documentation, including installing release builds, see: https://docs.fuel.network/docs/forc/.
This section is for local development of forc.pub
.
forc.pub
is built in Rust and TypeScript. To begin, install the Rust toolchain following instructions at https://www.rust-lang.org/tools/install. Then configure your Rust toolchain to use Rust stable
:
rustup default stable
If not already done, add the Cargo bin directory to your PATH
by adding the following line to ~/.profile
and restarting the shell session.
export PATH="${HOME}/.cargo/bin:${PATH}"
You will also need to install Node.js.
To run the Postgres database locally, you will need Docker.
To connect to the database, you will need the Diesel CLI.
Diesel is the Rust ORM used to create and run database migrations. It requires a separate C library called libpq
to be installed as well.
# Mac only
brew install libpq
# Ubuntu only
apt-get install libpq5
# Install diesel CLI
cargo install diesel_cli --no-default-features --features postgres
# On macOS-arm64, you may need additional rust flags:
RUSTFLAGS='-L /opt/homebrew/opt/libpq/lib' cargo install diesel_cli --no-default-features --features postgres
It is also recommended to install a Postgres client like DBeaver to connect and inspect the database while developing locally.
Clone the repository and build the Sway toolchain:
git clone [email protected]:FuelLabs/forc.pub.git
cd forc.pub
cargo build
Confirm the server built successfully:
cargo run --bin forc.pub
Before starting the server, the local database must be up and running.
./scripts/start_local_db.sh
Next, set up the environment by filling in the .env
file with your Pinata test gateway details.
Now we can run the server with:
cargo run
Alternatively, the server can be run locally with Docker, as it is in the deployed environment.
./scripts/start_local_server.sh
# Force the server image to be rebuilt
./scripts/start_local_server.sh -f
You can manually trigger the APIs with curl, for example:
curl -X POST "http://localhost:8080/upload_project?forc_version=0.66.5" \
-H "Content-Type: application/gzip" \
--data-binary "@tests/fixtures/sway-project.tgz"
The frontend requires npm and node to be installed.
cd app
npm i
npm start
This will open http://localhost:3000 in your browser. By default, it will use the local server endpoint, so the local server must be running.
We are not currently accepting contributions to forc.pub
as the MVP is still being developed.