{"id":13524216,"url":"https://github.com/dfinity/vessel","last_synced_at":"2025-09-02T16:56:46.805Z","repository":{"id":37409463,"uuid":"248089583","full_name":"dfinity/vessel","owner":"dfinity","description":"The original package manager for Motoko","archived":false,"fork":false,"pushed_at":"2025-08-25T09:57:22.000Z","size":185,"stargazers_count":112,"open_issues_count":10,"forks_count":18,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-08-25T11:49:02.559Z","etag":null,"topics":["motoko","package-manager"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dfinity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-03-17T22:55:33.000Z","updated_at":"2025-08-25T09:57:24.000Z","dependencies_parsed_at":"2024-01-07T18:05:08.490Z","dependency_job_id":"bce12f7d-6701-43d8-99d7-f1616bb8f6f6","html_url":"https://github.com/dfinity/vessel","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/dfinity/vessel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinity%2Fvessel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinity%2Fvessel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinity%2Fvessel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinity%2Fvessel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfinity","download_url":"https://codeload.github.com/dfinity/vessel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinity%2Fvessel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273317765,"owners_count":25084037,"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-09-02T02:00:09.530Z","response_time":77,"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":["motoko","package-manager"],"created_at":"2024-08-01T06:01:08.110Z","updated_at":"2025-09-02T16:56:46.795Z","avatar_url":"https://github.com/dfinity.png","language":"Rust","readme":"# Vessel\n\nThe original package manager for the Motoko programming language.\n\n## Getting started\n\n1. Download a copy of the `vessel` binary [from the release page](https://github.com/dfinity/vessel/releases) or build one yourself\n   1. For Ubuntu in `$HOME/bin` RUN `wget https://github.com/dfinity/vessel/releases/download/v0.8.0/vessel-linux64`\n\n      For macOS in `/usr/local/bin` RUN: `wget https://github.com/dfinity/vessel/releases/download/v0.8.0/vessel-macos`\n   2. Rename vessel-linux64 to vessel eg: RUN `mv vessel-linux64 vessel`\n   3. Change permissions, `chmod +x vessel`\n2. Run `vessel init` in your project root.\n3. Edit `vessel.dhall` to include your dependencies (potentially also edit\n   `package-set.dhall` to include additional package sources)\n4. In a dfx project: Edit `dfx.json` under defaults-\u003ebuild-\u003epacktool to say `\"vessel sources\"` like so:\n   ```\n   ...\n   \"defaults\": {\n     \"build\": {\n       \"packtool\": \"vessel sources\"\n     }\n   }\n   ...\n   ```\n   Then run `dfx build`\n4. In a non-dfx project: Run `$(vessel bin)/moc $(vessel sources)\n   -wasi-system-api main.mo` to compile the `main.mo` file with the installed\n   packages in scope and using the `wasi` API to let you run the generated WASM\n   with tools like [wasmtime](https://wasmtime.dev).\n\n## How it works\n\nVessel is inspired by the [spago](https://github.com/purescript/spago) package\nmanager for PureScript. Any git repository with a `src/` directory is a valid\npackage to Vessel, which is a flexible and lightweight approach to package\nmanagement, that is easily extended with more guarantees and features as our\ncommunity grows. The two concepts you need to understand to work with Vessel\nare _package sets_ and the _manifest_ file.\n\n### Package sets\n\nVessel uses the idea of a _package set_ to manage where it pulls dependencies\nfrom. A package set is a collection of packages at certain versions that are\nknown to compile together. The package set also specifies the dependencies\nbetween these packages, so that Vessel can find all the transitively needed\npackages to build your project. There will be a community maintained package set of\npublicly available, open source packages. You can then base your projects\npackage set on the public one and extend it with your private and local\npackages. The package set your project uses is stored in the `package-set.dhall`\nfile by default.\n\n### Manifest file\n\nYour `vessel.dhall` file contains the list of packages you need for your project\nto build. Vessel will look at this file, and figure out all the transitive\npackages you need using the package set file. Optionally it also contains a\ncompiler version that Vessel uses to download the compiler binaries for you.\nAny change to this file requires a reload of the language service so your\npackages can be picked up by your editor for now.\n\nAfter Vessel has installed all required packages through cloning or\ndownloading tarballs, it puts them in a project local location (the `.vessel`\ndirectory).\n\n## How Tos\n\n### How do I reset all caches?\n\nRemove the `.vessel` directory in your project\n\n### How do I depend on a git branch of a package?\n\nThe `\"version\"` field in the package set format refers to any git ref so you can\nput a branch name, a commit hash or a tag in there.\n\n**CAREFUL:** Vessel has no way of invalidating \"moving\" references like a\nbranch name. If you push a new commit to the branch you'll need to run `vessel install --force` to bypass your local cache.\n\n### How do I add a local package to my package set?\n\nMake sure your local package is a git repository, then add an entry like so to\nyour `additions` in the `package-set.dhall` file:\n\n```dhall\nlet additions = [\n   { name = \"mypackage\"\n   , repo = \"file:///home/path/to/mypackage\"\n   , version = \"v1.0.0\"\n   , dependencies = [\"base\"]\n   }\n]\n```\n\nNow you can depend on this package by adding `mypackage` to your `vessel.dhall` file.\n\n### How do I integrate Vessel into my custom build?\n\nRunning `vessel sources` will return flags in a format you can pass directly to\nthe various compiler tools. Running `vessel bin` returns the path containing the\ncompiler binaries. Use like so: `$(vessel bin)/mo-doc`.\n\n### How to use `vessel verify` to verify a package\n\n`vessel verify` will verify that the given package set compiles successfully.\n\n`vessel verify --version 0.15.1` will compile the package set with version `0.15.1` of the Motoko compiler\n\n`vessel verify --compile` will compile the given package set and validate the wasm output using wasm-validate.\n\n`vessel verify --package \u003cpackage_name\u003e` will restrict the verification to the given package.\n\n`vessel verify --moc \u003cpath_to_moc\u003e` will use the given `moc` binary to verify the package.\nSkipping the `--moc` flag will use the `moc` binary in the `PATH`.\n\n`vessel verify --moc-args=\"--legacy-persistence --legacy-actors\"` will pass the given arguments to the `moc` binary.\nIn this example, the `--legacy-persistence` and `--legacy-actors` flags are passed to verify packages that were not migrated to the new persistence standard.\n\n## License\nVessel is distributed under the terms of the Apache License (Version 2.0).\n\nSee LICENSE for details.\n","funding_links":[],"categories":["Motoko","Development tools"],"sub_categories":["Package Managers","Build system"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfinity%2Fvessel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfinity%2Fvessel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfinity%2Fvessel/lists"}