kopia/kopia · critical
unable to open manifests
Error message
unable to open manifests
What it means
This error wraps any failure that occurs while constructing the manifest manager (manifest.NewManager) during repository open (openWithConfig). The manifest manager is the layer that reads/writes manifest blobs (metadata about snapshots, policies, etc.), so if it cannot be initialized, the repository cannot be opened at all and openDirect fails. The underlying cause is preserved in the wrapped error chain.
Solutions
- Inspect the wrapped cause (errors.Wrap chain) printed with the error to find the real failure (storage access vs decryption).
- Verify connectivity and credentials for the configured blob storage backend (kopia repository status, test access with the provider CLI).
- Confirm you are using the correct repository password/config file (kopia repository connect again if needed).
- Check that the Kopia client version is compatible with the repository format version (repository upgraded by a newer client).
- Restore from backup or run repository repair tools if repository blobs are corrupted.
Example fix
// before: opening with unreachable/unauthenticated storage
rep, err := openWithConfig(ctx, st, "repo-password")
// after: pre-check storage availability and retry transient failures
if err := st.ConnectionInfo(); err != nil { return nil, err }
rep, err := openWithConfig(ctx, backoffRetry(st), "repo-password") Defensive patterns
Strategy: try-catch
Validate before calling
// Go: verify storage connectivity before opening
if err := blobStorage.ConnectionInfo().TestAccess(ctx); err != nil {
return fmt.Errorf("storage unreachable: %w", err)
} Type guard
func isOpenError(err error) bool {
return err != nil && strings.Contains(err.Error(), "unable to open manifests")
} Try / catch
rep, err := repo.Open(ctx, cfg, pass, opts)
if err != nil {
if strings.Contains(err.Error(), "unable to open manifests") {
// check storage connectivity / credentials, then retry with backoff
}
return err
} Prevention
- Test blob-storage access and credentials before calling repo.Open.
- Retry open with exponential backoff for transient network failures.
- Pin Kopia client versions across all machines touching the repository.
- Monitor storage provider health/quotas for the backend in use.
When it happens
Trigger: Calling repo.Open/openDirect on a repository whose underlying blob storage is unreachable, corrupted, or returns errors while the manifest manager initializes (e.g. manifest blob reads/encryption setup fail). Any error returned by manifest.NewManager is wrapped with this message.
Common situations: Network interruption to blob storage backend (S3, B2, SFTP) at connect time; corrupted repository blobs; wrong repository password preventing manifest decryption setup; storage credentials revoked; repository partially upgraded by a newer Kopia version.
Understand the failure class
Background: "open() failed", "failed to open file", "cannot create file" — what a file open error means and how to fix it — this error's family across 42 libraries.
Related errors
- can't connect to storage
- can't open storage
- cannot initialize repository
- cannot open storage
- cannot save manifest
AI-assisted analysis of kopia/kopia@82495e54b5 (2026-09-07).
Data as JSON: /api/errors/02d19ddcb085036a.
Report an issue: GitHub.
Appendix: source
Thrown at repo/open.go:362
scm, ferr := content.NewSharedManager(ctx, st, fmgr, cacheOpts, cmOpts, logManager, mr)
if ferr != nil {
return nil, errors.Wrap(ferr, "unable to create shared content manager")
}
cm := content.NewWriteManager(ctx, scm, content.SessionOptions{
SessionUser: cliOpts.Username,
SessionHost: cliOpts.Hostname,
}, "")
om, ferr := object.NewObjectManager(ctx, cm, fmgr.ObjectFormat(), mr)
if ferr != nil {
return nil, errors.Wrap(ferr, "unable to open object manager")
}
manifests, ferr := manifest.NewManager(ctx, cm, manifest.ManagerOptions{TimeNow: cmOpts.TimeNow}, mr)
if ferr != nil {
return nil, errors.Wrap(ferr, "unable to open manifests")
}
closer := newRefCountedCloser(
scm.CloseShared,
dw.Wait,
mr.Close,
st.Close,
)
dr := &directRepository{
cmgr: cm,
omgr: om,
blobs: st,
mmgr: manifests,
sm: scm,
immutableDirectRepositoryParameters: immutableDirectRepositoryParameters{
cachingOptions: *cacheOpts,
fmgr: fmgr,View on GitHub (pinned to 82495e54b5)