siyuan-note/siyuan · error
Conf.Language(194)
Error message
Conf.Language(194)
What it means
SetSyncProviderWebDAV rejects endpoints containing 'dav.jianguoyun.com' with Conf.Language(194), which links to Nutstore's API restrictions. SiYuan's sync engine hits Nutstore's rate/interface limits and breaks, so the kernel explicitly blocks configuring Nutstore WebDAV as a sync provider (issue #7657).
Source
Thrown at kernel/model/sync.go:590
s3.SecretKey = strings.TrimSpace(s3.SecretKey)
s3.Bucket = strings.TrimSpace(s3.Bucket)
s3.Region = strings.TrimSpace(s3.Region)
s3.Timeout = util.NormalizeTimeout(s3.Timeout)
s3.ConcurrentReqs = util.NormalizeConcurrentReqs(s3.ConcurrentReqs, conf.ProviderS3)
Conf.Sync.S3 = s3
Conf.Save()
refreshLANSyncManager()
return
}
func SetSyncProviderWebDAV(webdav *conf.WebDAV) (err error) {
webdav.Endpoint = strings.TrimSpace(webdav.Endpoint)
webdav.Endpoint = util.NormalizeEndpoint(webdav.Endpoint)
// 不支持配置坚果云 WebDAV 进行同步 https://github.com/siyuan-note/siyuan/issues/7657
if strings.Contains(strings.ToLower(webdav.Endpoint), "dav.jianguoyun.com") {
err = errors.New(Conf.Language(194))
return
}
webdav.Username = strings.TrimSpace(webdav.Username)
webdav.Password = strings.TrimSpace(webdav.Password)
webdav.Timeout = util.NormalizeTimeout(webdav.Timeout)
webdav.ConcurrentReqs = util.NormalizeConcurrentReqs(webdav.ConcurrentReqs, conf.ProviderWebDAV)
Conf.Sync.WebDAV = webdav
Conf.Save()
refreshLANSyncManager()
return
}
func SetSyncProviderLocal(local *conf.Local) (err error) {
local.Endpoint = strings.TrimSpace(local.Endpoint)
local.Endpoint = util.NormalizeLocalPath(local.Endpoint)
View on GitHub (pinned to 251596fc0d)
Solutions
- Use a different WebDAV provider (Nextcloud, ownCloud, a self-hosted server, etc.).
- If you must use Nutstore, switch the sync provider to S3 or Local (Nutstore also offers an S3-compatible interface in some plans) - but WebDAV is intentionally blocked.
- Re-read the linked Nutstore restriction doc to understand why WebDAV sync is unsupported.
Example fix
// before webdav.Endpoint = "https://dav.jianguoyun.com/dav/" // -> error 194 // after: use a supported WebDAV server webdav.Endpoint = "https://my.nextcloud.example/remote.php/dav/files/me/"
Defensive patterns
Strategy: validation
Validate before calling
// TypeScript: block Nutstore WebDAV in the UI before submit
if (/dav\.jianguoyun\.com/i.test(endpoint)) {
throw new Error('Nutstore WebDAV is not supported for sync; choose another WebDAV server');
} Type guard
// TypeScript const isSupportedWebDAV = (url: string): boolean => !/dav\.jianguoyun\.com/i.test(url);
Prevention
- Show a UI warning the moment the user types a Nutstore WebDAV URL.
- Offer alternative WebDAV providers in the setup docs.
- Keep the check case-insensitive on both client and server.
When it happens
Trigger: POST /api/sync/setSyncProviderWebDAV (Settings - Cloud - WebDAV) with an endpoint URL containing dav.jianguoyun.com in any case. The check is case-insensitive substring match on the endpoint.
Common situations: User pastes their Nutstore WebDAV URL expecting it to work like other WebDAV providers. Migrating from a tool that supported Nutstore. Subdomain variants like https://dav.jianguoyun.com/dav/.
Related errors
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/96b6cb87e12407eb.
Report an issue: GitHub.