siyuan-note/siyuan · error
unknown cloud provider [%d]
Error message
unknown cloud provider [%d]
What it means
newRepository() builds the cloud-backed dejavu repo client from a switch on Conf.Sync.Provider. Valid values are 0 (official SiYuan cloud), 2 (S3), 3 (WebDAV), 4 (local directory); anything else hits the default branch and returns fmt.Errorf("unknown cloud provider [%d]", ...). This indicates a corrupted or out-of-range provider value in conf.json.
Source
Thrown at kernel/model/repository.go:2711
cloudRepo = cloud.NewSiYuan(&cloud.BaseCloud{Conf: cloudConf})
case conf.ProviderS3:
// 显式注入 SiYuan UA,覆盖 aws SDK 默认 UA(含架构、Go 版本、SDK 版本等冗余信息),便于 S3 服务端按 SiYuan/ 前缀识别加白名单
s3HTTPClient := httpclient.NewUserAgentClient(httpclient.NewTransport(cloudConf.S3.SkipTlsVerify))
s3HTTPClient.Timeout = time.Duration(cloudConf.S3.Timeout) * time.Second
cloudRepo = cloud.NewS3(&cloud.BaseCloud{Conf: cloudConf}, s3HTTPClient)
case conf.ProviderWebDAV:
webdavClient := gowebdav.NewClient(cloudConf.WebDAV.Endpoint, cloudConf.WebDAV.Username, cloudConf.WebDAV.Password)
a := cloudConf.WebDAV.Username + ":" + cloudConf.WebDAV.Password
auth := "Basic " + base64.StdEncoding.EncodeToString([]byte(a))
webdavClient.SetHeader("Authorization", auth)
webdavClient.SetHeader("User-Agent", util.UserAgent)
webdavClient.SetTimeout(time.Duration(cloudConf.WebDAV.Timeout) * time.Second)
webdavClient.SetTransport(httpclient.NewTransport(cloudConf.WebDAV.SkipTlsVerify))
cloudRepo = cloud.NewWebDAV(&cloud.BaseCloud{Conf: cloudConf}, webdavClient)
case conf.ProviderLocal:
cloudRepo = cloud.NewLocal(&cloud.BaseCloud{Conf: cloudConf})
default:
err = fmt.Errorf("unknown cloud provider [%d]", Conf.Sync.Provider)
return
}
ignoreLines := getSyncIgnoreLines()
ignoreLines = append(ignoreLines, "/.siyuan/conf.json") // 忽略旧版同步配置
ret, err = dejavu.NewRepo(util.DataDir, util.RepoDir, util.HistoryDir, util.TempDir, Conf.System.ID, Conf.System.Name, Conf.System.OS, Conf.Repo.Key, ignoreLines, cloudRepo)
if err != nil {
logging.LogErrorf("init data repo failed: %s", err)
return
}
return
}
func init() {
subscribeRepoEvents()
}
func subscribeRepoEvents() {View on GitHub (pinned to afa823b6b4)
Solutions
- Open Settings - Account & Sync and re-select a valid cloud provider (SiYuan/S3/WebDAV/Local), which rewrites conf.sync.provider
- Or edit workspace/conf.json and set sync.provider to 0, 2, 3, or 4, then restart the kernel
- Avoid third-party tools that write sync config; after restoring backups, re-validate provider settings in the UI
Example fix
// before: conf.json has "provider": 7 inside "sync"
// after
{
"sync": {
"provider": 4,
"local": { "endpoint": "D:/siyuan-sync" }
}
} Defensive patterns
Strategy: validation
Validate before calling
validProviders := map[int]bool{conf.ProviderSiYuan: true, conf.ProviderS3: true, conf.ProviderWebDAV: true, conf.ProviderLocal: true}
if !validProviders[model.Conf.Sync.Provider] {
return errors.New("sync.provider in conf.json is invalid; re-select the provider in Settings")
}
repo, err := model.NewRepository() Type guard
func isValidSyncProvider(p int) bool {
return p == 0 || p == 2 || p == 3 || p == 4
} Prevention
- Never hand-edit sync.provider in conf.json; change providers via Settings
- After restoring a workspace backup, revalidate sync settings in the UI before syncing
- Watch for enum changes when downgrading SiYuan versions
When it happens
Trigger: Conf.Sync.Provider holds a value not in {0,2,3,4} when newRepository() runs — e.g. hand-edited workspace conf.json, a config written by a different SiYuan version or fork, or value 1 (a removed legacy provider id) carried over from an old config (kernel/model/repository.go:2711).
Common situations: Manual conf.json edits; syncing a workspace between versions whose provider enum changed; third-party tools writing sync settings; restored config from an incompatible backup.
Related errors
- invalid provider [%d]
- provider not found
- provider base URL is required
- invalid provider config
- load tree failed: %s
AI-assisted analysis of siyuan-note/siyuan@afa823b6b4 (2026-08-18).
Data as JSON: /api/errors/ed2ca83b20c85685.
Report an issue: GitHub.