{"id":15645467,"url":"https://github.com/joseluisq/paket","last_synced_at":"2025-06-19T13:37:04.337Z","repository":{"id":40595122,"uuid":"297169363","full_name":"joseluisq/paket","owner":"joseluisq","description":"A simple and fast package manager for the Fish shell written in Rust. 📦","archived":false,"fork":false,"pushed_at":"2025-04-09T23:23:06.000Z","size":245,"stargazers_count":69,"open_issues_count":4,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-28T01:47:51.038Z","etag":null,"topics":["arm64","armv8","docker","fish-shell","freebsd","linux","macos","package-manager","rust-lang","x86-64"],"latest_commit_sha":null,"homepage":"https://github.com/joseluisq/paket","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/joseluisq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"joseluisq","custom":"paypal.me/joseluisqs"}},"created_at":"2020-09-20T21:47:03.000Z","updated_at":"2025-04-21T12:28:27.000Z","dependencies_parsed_at":"2025-04-19T07:35:52.231Z","dependency_job_id":"cc88e4b8-df38-49d7-a927-e831a3be9f2b","html_url":"https://github.com/joseluisq/paket","commit_stats":{"total_commits":114,"total_committers":3,"mean_commits":38.0,"dds":0.02631578947368418,"last_synced_commit":"cb8f131a4bd86ac5cfdbc6b9e46b600e7e7521fe"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fpaket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fpaket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fpaket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fpaket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joseluisq","download_url":"https://codeload.github.com/joseluisq/paket/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251666846,"owners_count":21624381,"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","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":["arm64","armv8","docker","fish-shell","freebsd","linux","macos","package-manager","rust-lang","x86-64"],"created_at":"2024-10-03T12:07:53.030Z","updated_at":"2025-04-30T08:22:39.586Z","avatar_url":"https://github.com/joseluisq.png","language":"Rust","funding_links":["https://github.com/sponsors/joseluisq","paypal.me/joseluisqs"],"categories":[],"sub_categories":[],"readme":"# Paket 📦 [![devel](https://github.com/joseluisq/paket/actions/workflows/devel.yml/badge.svg)](https://github.com/joseluisq/paket/actions/workflows/devel.yml) [![Docker Image Version (tag latest semver)](https://img.shields.io/docker/v/joseluisq/paket/latest)](https://hub.docker.com/r/joseluisq/paket/) [![Docker Image Size (tag)](https://img.shields.io/docker/image-size/joseluisq/paket/latest)](https://hub.docker.com/r/joseluisq/paket/) [![Docker Image](https://img.shields.io/docker/pulls/joseluisq/paket.svg)](https://hub.docker.com/r/joseluisq/paket/)\n\n\u003e A simple and fast package manager for the [Fish Shell](https://fishshell.com/) written in [Rust](https://www.rust-lang.org/). 🐠\n\nThis is a Git-based *\"package manager\"* for [Fish Shell](https://fishshell.com/) which is under **active** development.\n\n**Note:** Some features are missing right now but it covers the most of functionalities needed to be usable. However, feel free to contribute. See [TODO](#todo) list.\n\n## Features\n\n- Rely only on [Git](https://git-scm.com/) binary and its well-known features (clone, fetch, checkout, pull, tag, etc).\n- No registries. Git repositories instead.\n- Just uses the format: `username/package_name@(tag_name|branch_name)`.\n- Install, update or remove packages from local repositories or remote ones.\n- Tiny but ultra-fast static binary powered by [Rust](https://www.rust-lang.org/).\n- Package file support ([`paket.toml`](#package-file)) to describe a package and copy optional non `.fish` files.\n- Trigger [Fish shell events](https://fishshell.com/docs/current/cmds/emit.html) when a package is installed, updated or uninstalled.\n- It runs only on top of a Fish shell session (Fish parent process).\n- First-class Docker support.\n\n## Download/Install\n\n- Docker image using latest Alpine → [hub.docker.com/r/joseluisq/paket](https://hub.docker.com/r/joseluisq/paket)\n- Pre-compiled binaries for Linux, macOS and other targets → [github.com/joseluisq/paket/releases](https://github.com/joseluisq/paket/releases)\n\n### MacOS\n\nVia [Homebrew](https://brew.sh/) (also Linux)\n\n\n```sh\nbrew tap joseluisq/paket\n\n# Just the binary\nbrew install paket-bin\n\n# Or build from source\nbrew install paket-src\n```\n\n## Usage\n\n```sh\n~\u003e paket --help\nA simple and fast package manager for the Fish shell\n\nUsage: paket [COMMAND]\n\nCommands:\n  add   Install a new package from a local or remote repository\n  up    Update an existing package from a local or remote repository\n  rm    Uninstall an existing package from a local or remote repository\n  help  Print this message or the help of the given subcommand(s)\n\nOptions:\n  -h, --help     Print help\n  -V, --version  Print version\n```\n\n### Examples\n\n#### Remote packages\n\n```sh\n~\u003e paket add joseluisq/gitnow@2.4.0\n~\u003e paket up joseluisq/gitnow@2.5.1\n~\u003e paket rm joseluisq/gitnow\n```\n\n#### Local packages\n\n```sh\n~\u003e paket add ~/some-dir/my-pckage-dir\n~\u003e paket up ~/some-dir/my-pckage-dir\n~\u003e paket rm ~/some-dir/my-pckage-dir\n```\n\n## Paket file\n\nPaket supports a `paket.toml` file to describe a package and copy optional non `.fish` files.\nHere is a sample file of [GitNow](https://github.com/joseluisq/gitnow) Fish package.\n\n```toml\n[package]\nname = \"gitnow\"\nversion = \"2.5.1\"\nauthors = [\"Jose Quintana \u003chttps://joseluisq.net\u003e\"]\nlicense = \"MIT OR Apache-2.0\"\ndescription = \"Speed up your Git workflow. 🐠\"\nrepository = \"https://github.com/joseluisq/gitnow\"\nkeywords = [\n    \"git\",\n    \"git-workflow\",\n    \"fish-shell\",\n    \"fish-packages\",\n    \"keybindings\",\n    \"bitbucket\",\n    \"github\"\n]\n\n# Copy extra non Fish files (optional)\ninclude = [\n    \"conf.d/.gitnow\"\n]\n\n# Paket events which can trigger Fish shell events (optional)\n# Use the format `[package_name]_[event_name]` without the brackets and spaces (underscores instead).\n# Also make sure that every value match with your package's Fish shell event (--on-event).\n[events]\nafter-install = \"gitnow_install\"\nafter-update = \"gitnow_update\"\nbefore-uninstall = \"gitnow_uninstall\"\n\n[dependencies]\n```\n\n## Fish shell events\n\nPaket has a few events which can be used to trigger [Fish shell events](https://fishshell.com/docs/current/cmds/emit.html) defined in your package.\n\n- `after-install`: After a package is installed.\n- `after-update`: After a package is updated.\n- `before-uninstall`: Before a package is uninstalled.\n\n### Events definition and format\n\nAppending a `-e` or `--on-event` flag to your function(s) tells Fish to run it when the specified named event is emitted.\n\nUse the format `[package_name]_[event_name]` without the brackets and spaces (underscores instead).\nAlso, make sure that every value matches with your package's Fish Shell event (`--on-event`).\n\n### Package example\n\nDefine a `paket.toml` file for your package:\n\n```toml\n[package]\nname = \"mypackage\"\nversion = \"0.0.0\"\n# ...\n\n# Events (optional)\n[events]\nafter-install = \"mypackage_install\"\nbefore-uninstall = \"mypackage_uninstall\"\n```\n\nOptionally you can sign your corresponding functions with the `--on-event` (`-e`) value defined above.\n\n```fish\n# It will be immediately run after the package is installed\nfunction __my_package_install -e mypackage_install\n    echo \"Installing my package...\"\nend\n\n# It will be immediately run before the package is uninstalled\nfunction __my_package_uninstall -e mypackage_uninstall\n    echo \"Uninstalling my package...\"\nend\n```\n\nFind an example on [GitNow](https://github.com/joseluisq/gitnow/blob/master/conf.d/gitnow.fish) repository.\n\n## TODO\n\n- [x] Add command.\n- [x] Update command.\n- [x] Remove command.\n- [x] Add package file `paket.toml` support which describes a package.\n- [x] Add support for Bitbucket, Gitlab and Github (default).\n- [x] Dispatch Fish shell events when a package is installed, updated or uninstalled.\n- [x] Define Paket events via `paket.toml` file.\n- [x] Ability to install, update and remove packages from local repositories.\n- [ ] Prevent unnecessary clones for the same versions (branches/tags)\n- [ ] Dependencies support.\n- [ ] Add configuration file `~/paket.toml` support.\n- [ ] ?\n\n## Contributions\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in current work by you, as defined in the Apache-2.0 license, shall be dual licensed as described below, without any additional terms or conditions.\n\nFeel free to send some [Pull request](https://github.com/joseluisq/paket/pulls) or [issue](https://github.com/joseluisq/paket/issues).\n\n## License\n\nThis work is primarily distributed under the terms of both the [MIT license](LICENSE-MIT) and the [Apache License (Version 2.0)](LICENSE-APACHE).\n\n© 2020-present [Jose Quintana](https://joseluisq.net)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoseluisq%2Fpaket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoseluisq%2Fpaket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoseluisq%2Fpaket/lists"}