Skip to content
/ mops Public

Package manager for the Motoko programming language

License

Notifications You must be signed in to change notification settings

ZenVoich/mops

Repository files navigation

Mops

Mops is a package manager for the Motoko programming language.

Setup

1. Check system requirements

2. Install CLI tool

npm i -g ic-mops

Install Packages

1. Configure dfx.json

Add mops as a packtool to your dfx.json

{
  "defaults": {
    "build": {
      "packtool": "mops sources"
    }
  }
}

2. Initialize

Run this command in the root directory of your project (where is dfx.json placed)

If there are Vessel config files, mops will migrate packages from vessel.dhall to mops.toml

mops init

3. Install Motoko Packages

Use mops add <package_name> to install a specific package and save it to mops.toml

mops add base

You can also add packages from GitHub like this

mops add https://github.com/dfinity/motoko-base

For GitHub-packages you can specify branch, tag, or commit hash by adding #<branch/tag/hash>

mops add https://github.com/dfinity/motoko-base#moc-0.9.1

You can also add local packages like this (put source files inside src directory)

mops add ./shared

Use mops install to install all packages specified in mops.toml

mops install

4. Import Package

Now you can import installed packages in your Motoko code

import PackageName "mo:<package_name>";

for example

import Itertools "mo:itertools/Iter";

Publish a Package

1. Import Identity

Create new identity to publish packages

dfx identity new mops

Import identity into mops

mops user import -- "$(dfx identity export mops)"

2. Initialize

Run this command in your package root and select type "Package"

mops init

Edit description and repository fields in mops.toml file.

Write your package code in *.mo source files in the src/ directory.

Create README.md file with information on how to use your package.

3. Publish

Publish package to the mops registry!

mops publish

Local Development

npm start - starts local replica and dev server

To be able to install/publish packages locally:

  1. Make the following changes to the cli/package.json
{
-	"name": "ic-mops",
+	"name": "ic-mops-local",
	"version": "0.1.14",
	"type": "module",
	"bin": {
-		"mops": "cli.js"
+		"mops-local": "cli.js"
	},
...
  1. Inside cli folder run
npm link
  1. Switch network to local
mops-local set-network local
  1. Revert changes made to cli/package.json

Now you can install/publish packages locally like this mops-local add <pkg>


Built for the Supernova Hackathon