jdx/mise · error
archive does not contain registry entries
Error message
archive does not contain registry entries
What it means
mise builds its tool registry from archives that must contain at least one registry source file. After extracting candidate files into the sources map, mise requires it to be non-empty; an archive with no registry entries provides nothing to parse and is rejected with this error.
Solutions
- Verify you are using the correct registry archive and that it contains the expected registry entry files at the expected paths
- Check for upstream renames of the registry file layout and update the extraction glob/pattern accordingly
- Re-download the archive — a truncated or partial download may have yielded zero entries
- If the archive is genuinely empty, obtain a valid release from the upstream source
Example fix
// before (empty/mismatched archive) mise registry-load --archive ./docs.tar.gz // after mise registry-load --archive ./registry-full.tar.gz # contains registry/*.toml entries
Defensive patterns
Strategy: validation
Validate before calling
const entries = await listArchiveFilesMatching(archivePath, registryEntryPattern);
if (entries.length === 0) throw new Error('archive has no registry entries; wrong archive or layout changed?'); Try / catch
try { await loadRegistryArchive(path); } catch (e) {
if (String(e).includes('does not contain registry entries')) {
console.error(`No registry entries found in ${path}; verify the archive and expected layout.`);
return null;
}
throw e;
} Prevention
- Confirm the archive URL points at the registry release, not docs/source
- Pin and review upstream layout changes that rename registry files
- Check archive size before loading; 0-entry/1KB archives are usually wrong
When it happens
Trigger: Calling the registry-loading path (e.g. during mise's registry refresh / build tooling) with an archive whose files do not match the expected registry entry patterns, or an archive that contains only non-entry files (READMEs, dotfiles, nested non-matching paths).
Common situations: Pointing mise at the wrong archive (an empty or unrelated tarball); an upstream restructuring that moved/renamed registry files so the extractor no longer finds them; a truncated archive that extracted nothing.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- registry archive contains too many entries
- additional asset ' ' is not an archive
- backend min_version requires version_order = "semver"
- backend must be a string or table
- backends must not be empty
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/76d3e1d7dc29ae7f.
Report an issue: GitHub.
Appendix: source
Thrown at src/registry.rs:360
}
let file_path = PathBuf::from(components[1]);
if file_path
.extension()
.is_none_or(|extension| extension != "toml")
{
continue;
}
let short = file_path
.file_stem()
.and_then(|stem| stem.to_str())
.ok_or_else(|| eyre::eyre!("invalid registry filename: {}", path.display()))?
.to_string();
let mut source = String::new();
entry.read_to_string(&mut source)?;
sources.insert(short, source);
}
ensure!(
!sources.is_empty(),
"archive does not contain registry entries"
);
registry_from_sources(sources)
}
fn track_registry_archive_entry(
index: usize,
entry_size: u64,
archive_size: &mut u64,
) -> Result<()> {
ensure!(
index < MAX_REGISTRY_ARCHIVE_ENTRIES,
"registry archive contains too many entries"
);
ensure!(
entry_size <= MAX_REGISTRY_ARCHIVE_ENTRY_SIZE,
"registry archive entry is too large"View on GitHub (pinned to 533346cc37)