jdx/mise · error

packslip plugin sources currently require a GitHub repositor

Error message

packslip plugin sources currently require a GitHub repository

What it means

Packslip source parsing (`PackslipSource::parse` in src/plugins/packslip.rs) only supports sources of the form `packslip:github.com/owner/repo[#version]` where the project is a GitHub repository known to the packslip model. If the string after `packslip:` is not a `github.com/...` path or is not a recognized repository, parsing fails with this message.

Source

Thrown at src/plugins/packslip.rs:33

use crate::toolset::{ResolveOptions, ToolRequest, ToolSource, Toolset};
use crate::ui::progress_report::{QuietReport, SingleReport};

const STATE_FILE: &str = ".mise-packslip-plugin.json";

#[derive(Debug, Clone, Serialize, Deserialize)]
pub(crate) struct Source {
    project: String,
    request: String,
}

impl Source {
    pub(crate) fn parse(value: &str) -> Result<Option<Self>> {
        let Some(value) = value.strip_prefix("packslip:") else {
            return Ok(None);
        };
        let (project, request) = value.split_once('#').unwrap_or((value, "latest"));
        let project = project_name(project)?;
        ensure!(
            project.starts_with("github.com/") && packslip::model::repository(&project).is_some(),
            "packslip plugin sources currently require a GitHub repository"
        );
        ensure!(
            !request.is_empty(),
            "packslip plugin version must not be empty"
        );
        Ok(Some(Self {
            project,
            request: request.to_owned(),
        }))
    }

    pub(crate) fn url(&self) -> String {
        format!("packslip:{}#{}", self.project, self.request)
    }

    pub(crate) fn with_version(mut self, version: Option<String>) -> Self {

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Use the full GitHub repository path: `mise use packslip:github.com/owner/repo`.
  2. Verify the repository actually publishes packslip release manifests (`mise ls-remote packslip:github.com/owner/repo`); if not, use `mise use github:owner/repo` or `aqua:owner/repo` instead.
  3. Check for typos or org/rename changes in the repository path.

Example fix

// before
[tools]
mytool = "packslip:mytool"

// after
[tools]
mytool = "packslip:github.com/owner/mytool"
Defensive patterns

Strategy: validation

Validate before calling

// validate before writing the spec
case "$src" in
  packslip:github.com/*/*) mise ls-remote "$src" >/dev/null || echo "unknown packslip repo: $src" ;;
  packslip:*) echo "packslip sources must be github.com/owner/repo: $src"; exit 1 ;;
esac

Type guard

fn is_packslip_github_repo(src: &str) -> bool {
    src.strip_prefix("packslip:")
        .map(|p| p.starts_with("github.com/") && !p.starts_with("github.com//"))
        .unwrap_or(false)
}

Prevention

When it happens

Trigger: A tool source string like `packslip:mytool`, `packslip:gitlab.com/owner/repo`, `packslip:github.com/owner/nonexistent`, or a typo'd/renamed repo passed via `mise use packslip:...`, a mise.toml `[tools]` entry, or the registry.

Common situations: Typing a bare tool name instead of the full github.com path; pointing at a repo that does not publish signed packslip manifests; vendor renamed/transferred the repository; confusing packslip with aqua/github source prefixes.

Understand the failure class

Background: "Invalid URL" errors: why new URL(), URI.parse, and reqwest::Url reject your string — missing scheme, whitespace, and bad path format — this error's family across 39 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/796cdc12a97fa847. Report an issue: GitHub.