Skip to content
Registry StackDocsDevelopment (unreleased)

Document Store configuration reference

View as Markdown

The Registry Document Store reads two files: the documents.yaml project that declares access profiles, document policies, and hooks, and the runtime.yaml an operator deploys.

FileKindStatusSource
documents.yamlDocumentsProjectPre-1.0, may changeproducts/documents/generated/project/project.schema.json
runtime.yamlDocumentsRuntimeConfigPre-1.0, may changeproducts/documents/generated/runtime/runtime.schema.json

Every mapping is closed: an unknown key is refused with its path. JSON Schema is not the acceptance path: a document these schemas accept still has to pass documentsctl check, which resolves the access profiles each policy names and checks each profile’s role against the policy that uses it. The check also refuses:

  • an OAuth client listed in requesterClients of two profiles (documents.project.shared-requester-client);
  • a profile whose principalClaim differs from another profile’s with the same actorKind (documents.project.mixed-principal-claim): every profile of one actor kind reads the subject from one claim;
  • a hook whose handler.destinationId the runtime configuration does not bind under destinations.hooks (documents.runtime.unbound-hook-destination, at /destinations/hooks), when the check is given both --project and --runtime-config. The runtime refuses to start with the same diagnostic at the same position, before it connects to the database, and documentsctl verification replay, which activates the same hooks, refuses with it too.

A profile’s requesterClients, requiredScopes, actorKind, and principalClaim are what an access token must match, beside the runtime’s authentication.oidc block. Access tokens lists every header and claim a token must carry.

A key path writes a property as name, an array item as name[], and a map entry whose name you choose as name.*, as in documentPolicies.*.mandatoryRestrictions.cleanupGraceHours or destinations.hooks.*.url.

documents.yaml

Source preview, pre-1.0

Generated from products/documents/generated/project/project.schema.json. 48 key paths. Explained in docs/site/src/content/docs/reference/documents-configuration.mdx.

Key pathTypeRequiredAccepted valuesConstraints
accessProfilesThe caller profiles a document policy names, by id.objectYesNot specifiedNone specified
accessProfiles.*Map valueOne declared caller profile.objectNoNot specified
  • propertyNames.pattern: ^[a-z][a-z0-9_-]{0,63}$
accessProfiles.*.actorKindThe actor kind the token must claim.stringYes
  • human
  • service
None specified
accessProfiles.*.institutionThe institution this profile acts for. The Document Store records it as the issuing institution of every document version a caller under this profile reserves; a profile that names none records none.stringNoNot specified
  • maxLength: 512
  • minLength: 1
  • pattern: ^[^\u0000-\u001F\u007F-\u009F]+$
accessProfiles.*.principalClaimsub, or the name of another string claim identifying the principal. Every profile of one actor kind names the same claim.stringYesNot specified
  • maxLength: 512
  • minLength: 1
  • pattern: ^[^\u0000-\u001F\u007F-\u009F]+$
accessProfiles.*.requesterClientsThe OAuth clients whose tokens resolve to this profile; at least one.arrayYesNot specified
  • minItems: 1
  • uniqueItems: true
accessProfiles.*.requesterClients[]Array itemAn identifier another system issues, written exactly as its issuer gives it.stringNoNot specified
  • maxLength: 512
  • minLength: 1
  • pattern: ^[^\u0000-\u001F\u007F-\u009F]+$
accessProfiles.*.requiredScopesThe scopes a token must carry; at least one.arrayYesNot specified
  • minItems: 1
  • uniqueItems: true
accessProfiles.*.requiredScopes[]Array itemAn identifier another system issues, written exactly as its issuer gives it.stringNoNot specified
  • maxLength: 512
  • minLength: 1
  • pattern: ^[^\u0000-\u001F\u007F-\u009F]+$
accessProfiles.*.roleWhat a caller resolved to this profile is to a document.stringYes
  • custodian
  • recipient
  • represented-principal
None specified
apiVersionstringYes
  • id.registrystack.org/formats/documents/project/v1alpha1
None specified
documentPoliciesThe policies a document is held under, by id.objectYesNot specifiedNone specified
documentPolicies.*Map valueOne document policy: who may hold, grant, and receive a document held under it, and the restrictions every such document carries.objectNoNot specified
  • propertyNames.pattern: ^[a-z][a-z0-9_-]{0,63}$
documentPolicies.*.custodianWho holds a document a service places for a named person: the reserving system for its institution, or that person.stringYes
  • institution
  • represented-principal
None specified
documentPolicies.*.custodyProfilesProfiles that may place a document in custody under this policy.arrayYesNot specified
  • uniqueItems: true
documentPolicies.*.custodyProfiles[]Array itemA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringNoNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
documentPolicies.*.grantingProfilesProfiles that may issue a document grant on a document they hold in custody under this policy. A system that only reserved a document for another custodian never grants on it.arrayYesNot specified
  • uniqueItems: true
documentPolicies.*.grantingProfiles[]Array itemA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringNoNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
documentPolicies.*.labelHuman-readable display text. Bidirectional embedding, override, and isolate controls, byte-order marks, line and paragraph separators, and Unicode noncharacters are refused; multilingual joiners and direction marks remain valid.stringYesNot specifiedNone specified
documentPolicies.*.mandatoryRestrictionsThe restrictions every document held under a policy carries.objectYesNot specifiedNone specified
documentPolicies.*.mandatoryRestrictions.allowedContentTypesThe media types a document may be declared as, matched exactly.arrayYesNot specified
  • maxItems: 16
  • minItems: 1
  • uniqueItems: true
documentPolicies.*.mandatoryRestrictions.allowedContentTypes[]Array itemA lowercase concrete media type type/subtype without parameters or wildcards, matched exactly.stringNoNot specified
  • pattern: ^[a-z0-9][a-z0-9!#$&^_.+-]{0,126}/[a-z0-9][a-z0-9!#$&^_.+-]{0,126}$
documentPolicies.*.mandatoryRestrictions.cleanupGraceHoursTime between the custodian's removal request, or a rejection, and erasure of the bytes, and the length of a reservation's upload window. At least one hour, so an operator always has a window to restore from a mistaken request. Grant expiry and revocation erase nothing: they only stop a grant releasing.integerYesNot specified
  • format: uint32
  • maximum: 8760
  • minimum: 1
documentPolicies.*.mandatoryRestrictions.grantExpiryHoursintegerYesNot specified
  • format: uint32
  • maximum: 8760
  • minimum: 1
documentPolicies.*.mandatoryRestrictions.maximumCustodianBytesThe bytes one custodian may hold under this policy, counted over every reserved or stored version not yet erased and checked at reservation.integerYesNot specified
  • format: uint64
  • maximum: 1099511627776
  • minimum: 1
documentPolicies.*.mandatoryRestrictions.maximumDocumentBytesThe largest document a reservation may declare. It may not exceed the deployment ceiling storage.maximumDocumentBytes; the runtime refuses to start otherwise.integerYesNot specified
  • format: uint64
  • maximum: 1073741824
  • minimum: 1
documentPolicies.*.mandatoryRestrictions.maximumGrantExpiryHoursintegerYesNot specified
  • format: uint32
  • maximum: 8760
  • minimum: 1
documentPolicies.*.recipientProfilesProfiles a document grant may name as its recipient.arrayYesNot specified
  • uniqueItems: true
documentPolicies.*.recipientProfiles[]Array itemA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringNoNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
documentPolicies.*.representedPrincipalGrantsWhether the represented principal may issue document grants itself.stringYes
  • permitted
  • refused
None specified
documentPolicies.*.representedPrincipalProfileThe profile a represented principal authenticates under.stringYesNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
documentPolicies.*.versionstringYesNot specifiedNone specified
hooksAfter-commit observer hooks. A project with none omits the member.arrayNoNot specifiedNone specified
hooks[]Array itemOne after-commit observer hook.objectNoNot specifiedNone specified
hooks[].handlerWhere an observer hook delivers, chosen by its type member: a URL destination the runtime configuration binds under destinations.hooks.objectYesNot specifiedNone specified
hooks[].handler.destinationIdA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringYesNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
hooks[].handler.typestringYes
  • url
None specified
hooks[].idA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringYesNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
hooks[].phaseWhen an observer hook runs relative to the triggering transaction.stringYes
  • after
None specified
hooks[].policiesThe document policies whose documents the observer hears about: a change to a document held under any other policy captures nothing for it. Listing them is the operator's declaration of who may receive which documents' events.arrayYesNot specified
  • minItems: 1
  • uniqueItems: true
hooks[].policies[]Array itemA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringNoNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
hooks[].projectionThe fields of the trigger's projection the observer receives.arrayYesNot specified
  • uniqueItems: true
hooks[].projection[]Array itemAn identifier another system issues, written exactly as its issuer gives it.stringNoNot specified
  • maxLength: 512
  • minLength: 1
  • pattern: ^[^\u0000-\u001F\u007F-\u009F]+$
hooks[].triggerThe committed change an observer hook follows.stringYes
  • document-grant.changed
  • document-version.ready
  • document-version.rejected
None specified
kindstringYes
  • DocumentsProject
None specified
projectThe members that name a project (CFG-ENV-6): a project's project block holds these, and may add project-wide members of the product's own. Schema name ProjectIdentity.objectYesNot specifiedNone specified
project.idA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringYesNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
project.versionstringYesNot specifiedNone specified

runtime.yaml

Source preview, pre-1.0

Generated from products/documents/generated/runtime/runtime.schema.json. 74 key paths. Explained in docs/site/src/content/docs/reference/documents-configuration.mdx.

Key pathTypeRequiredAccepted valuesConstraints
apiVersionstringYes
  • id.registrystack.org/formats/documents/runtime/v1alpha1
None specified
auditWhere the audit journal is written and the key its hashes are made with.objectYesNot specifiedNone specified
audit.destinationWhere audit entries go: a rotated file (the default) or stdout.stringNo
  • file
  • stdout
Schema default, where declared: "file"
None specified
audit.hashKeyRefSecret reference to the audit hash key.stringYesNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
audit.pathThe absolute path of the active audit file, for destination: file.stringNoNot specified
  • pattern: ^/
audit.retentionDaysHow many days a sealed audit file is kept, for destination: file; 90 when omitted.integerNoNot specified
  • format: uint32
  • maximum: 36500
  • minimum: 1
audit.rotateBytesThe size at which the active file is sealed and a new one begun, for destination: file; 100 MiB when omitted.integerNoNot specified
  • format: uint64
  • maximum: 4294967295
  • minimum: 1048576
authenticationobjectYesNot specifiedNone specified
authentication.oidcThe OIDC issuer whose access tokens this runtime accepts, the clients it admits, and the claim carrying their scopes.objectYesNot specifiedNone specified
authentication.oidc.allowInsecureHttpPermit plain HTTP beyond loopback to the configured issuer and to a JWKS URI declared in configuration. TLS remains required unless the operator explicitly accepts this transport risk.booleanNoNot specifiedSchema default, where declared: falseNone specified
authentication.oidc.allowedClientsClient identifiers whose access tokens are admitted. Required in every file; an omitted or empty list, an empty or repeated client, and unrestricted are refused.arrayYesNot specified
  • minItems: 1
  • uniqueItems: true
authentication.oidc.allowedClients[]Array itemstringNoNot specified
  • minLength: 1
authentication.oidc.assertionIssuersAssertion authorities each client may exchange a subject token from, keyed by client identifier. Omitted, no assertion-issuer rule applies; written, it lists at least one client, each with at least one authority. Once a client is listed, a token it exchanged is accepted only for one of that client's declared authorities, and a client that is not listed may exchange from no authority.objectNoNot specified
  • maxProperties: 64
  • minProperties: 1
authentication.oidc.assertionIssuers.*Map valuearrayNoNot specified
  • maxItems: 16
  • minItems: 1
  • propertyNames.maxLength: 128
  • propertyNames.minLength: 1
  • propertyNames.pattern: ^[^\u0000-\u001F\u007F-\u009F]+$
  • uniqueItems: true
authentication.oidc.assertionIssuers.*[]Array itemstringNoNot specified
  • maxLength: 512
  • minLength: 1
authentication.oidc.audienceThe audience every accepted access token must carry in aud.stringYesNot specified
  • maxLength: 512
  • minLength: 1
authentication.oidc.issuerExact issuer accepted in access-token iss claims, an absolute https URL, or a plain http URL when allowInsecureHttp is set.stringYesNot specified
  • format: uri
  • maxLength: 2048
  • pattern: ^[Hh][Tt][Tt][Pp][Ss]?://[^/?#@\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+([/?#][^\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]*)?$
authentication.oidc.jwksSourceWhere the issuer's signing keys come from. Absent reads the issuer's OpenID Connect discovery document.objectNoNot specifiedSchema default, where declared: {"type":"discovery"}None specified
authentication.oidc.jwksSource.documentRefAn exact secret reference: secret:file/name, resolved under secretProviders.file.root, or secret:env/NAME, resolved only when secretProviders.environment is declared.stringConditionalNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
authentication.oidc.jwksSource.typestringYes
  • discovery
  • static
  • uri
None specified
authentication.oidc.jwksSource.uriAn absolute http or https URL with a host preserved as written, no user information, and no backslash, whitespace or control character. DNS case and equivalent IPv6 literals are permitted.stringConditionalNot specified
  • format: uri
  • maxLength: 2048
  • pattern: ^[Hh][Tt][Tt][Pp][Ss]?://[^/?#@\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+([/?#][^\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]*)?$
authentication.oidc.scopeClaimAn identifier another system issues, written exactly as its issuer gives it.stringNoNot specifiedSchema default, where declared: "scope"
  • maxLength: 512
  • minLength: 1
  • pattern: ^[^\u0000-\u001F\u007F-\u009F]+$
cleanupErasure of the bytes of documents whose custodian asked for their removal.objectYesNot specifiedNone specified
cleanup.erasureWhether erasure work runs. paused stops every erasure and the sweep of orphaned objects; a removal request still stops release at once, and lapsed uploads are still expired.stringYes
  • active
  • paused
None specified
contentVerificationThe content verifier every document version passes before it becomes releasable.objectYesNot specifiedNone specified
contentVerification.attemptTimeoutMillisecondsThe longest one verification attempt may run, body included. Omitted, 10000.integerConditionalNot specifiedSchema default, where declared: 10000
  • format: uint64
  • maximum: 60000
  • minimum: 100
contentVerification.authorizationRefAn exact secret reference: secret:file/name, resolved under secretProviders.file.root, or secret:env/NAME, resolved only when secretProviders.environment is declared.stringConditionalNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
contentVerification.policyIdNon-secret identity of the external scanner and its rules generation.stringConditionalNot specified
  • maxLength: 128
  • minLength: 1
  • pattern: ^[\x21-\x7E]+$
contentVerification.typestringYes
  • disabled
  • http
None specified
contentVerification.urlThe URL the content is posted to. It is https; http is accepted only for a loopback host, for local development.stringConditionalNot specified
  • format: uri
  • maxLength: 2048
  • pattern: ^[Hh][Tt][Tt][Pp][Ss]?://[^/?#@\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+([/?#][^\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]*)?$
databaseThe PostgreSQL connection a stateful runtime uses. Both URLs are secret references and may name the same secret.objectYesNot specifiedNone specified
database.migrationUrlRefSecret reference to the migration connection URL.stringYesNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
database.runtimeUrlRefSecret reference to the least-privileged runtime connection URL.stringYesNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
database.testOnlyPlaintextAllow a plaintext connection. Refused outside test builds.booleanNoNot specifiedSchema default, where declared: falseNone specified
database.trustedRootCertificateRefSecret reference to a PEM root certificate the connection trusts. Absent, the connection trusts the platform's root certificates.stringNoNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
destinationsWhere the project's hooks deliver, by destination id.objectNoNot specifiedNone specified
destinations.hooksLogical URL hook destinations. The project names only these ids; the URL, signing key, and delivery budget stay deployment-owned. At most 128 are bound, each keyed by a local identifier.objectNoNot specifiedSchema default, where declared: {}
  • maxProperties: 128
destinations.hooks.*Map valueOne URL hook destination a runtime signs and sends hook deliveries to: the URL, the HMAC-SHA256 key reference, and the delivery budget. The outbound policy is fixed: registry-platform-hooks activates it with no private address range and no client certificate. A runtime whose destinations need either configures its own full outbound policy instead.objectNoNot specified
  • propertyNames.pattern: ^[a-z][a-z0-9_-]{0,63}$
destinations.hooks.*.attemptTimeoutMillisecondsHow long one delivery attempt may take, from 100 through 10000 milliseconds.integerNoNot specifiedSchema default, where declared: 5000
  • format: uint32
  • maximum: 10000
  • minimum: 100
destinations.hooks.*.hmacSha256KeyRefAn exact secret reference: secret:file/name, resolved under secretProviders.file.root, or secret:env/NAME, resolved only when secretProviders.environment is declared.stringYesNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
destinations.hooks.*.maximumAttemptsHow many delivery attempts one event gets, from 1 through 20.integerNoNot specifiedSchema default, where declared: 8
  • format: uint8
  • maximum: 20
  • minimum: 1
destinations.hooks.*.urlAn https URL, or http on 127.0.0.1, localhost, or [::1], without a query or fragment.stringYesNot specified
  • format: uri
  • maxLength: 2048
  • pattern: ^[Hh][Tt][Tt][Pp][Ss]?://[^/?#@\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+([/?#][^\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]*)?$
identityOptional in the type so a missing block gets a refusal naming the key to add; the document requires it.objectYesNot specifiedNone specified
identity.databaseIdA local identifier: a lowercase letter, then up to 63 lowercase letters, digits, _, or -.stringYesNot specified
  • pattern: ^[a-z][a-z0-9_-]{0,63}$
kindstringYes
  • DocumentsRuntimeConfig
None specified
listenerThe listener of a runtime that declares its TLS termination and network exposure.objectYesNot specifiedNone specified
listener.bindSocket address the runtime listens on, written host:port with an IP address host ([addr]:port for IPv6).stringYesNot specified
  • maxLength: 128
  • minLength: 1
listener.networkExposureThe operator-declared private network placement of an HTTP listener.stringNo
  • container-private
  • private-address
Schema default, where declared: "private-address"
None specified
listener.tlsTerminationDeclares the trusted transport boundary for a runtime's plaintext HTTP listener. Production listeners require operator-controlled upstream TLS termination; direct plaintext is limited to the explicit loopback-only development mode.stringYes
  • development-loopback
  • operator-controlled-upstream
None specified
packageThe package a runtime serves: root is the absolute package directory, and expectedDigest, when set, pins the package digest the runtime must find there. The package digest is the digest of the package's SHA256SUMS file; see [crate::package].objectYesNot specifiedNone specified
package.expectedDigestsha256: label of the package digest, the digest of the package's SHA256SUMS file. When set, the runtime refuses to start on any other package.stringNoNot specified
  • pattern: ^sha256:[0-9a-f]{64}$
package.rootAbsolute path of the package directory.stringYesNot specified
  • pattern: ^/
retentionRetention periods, in days. A jurisdiction's retention schedule approves the deployed values; the bounds only keep a typo from becoming a policy.objectNoNot specifiedNone specified
retention.hookPayloadRetentionDaysintegerNoNot specifiedSchema default, where declared: 7
  • format: uint32
  • maximum: 30
  • minimum: 1
retention.receiptRetentionDaysintegerNoNot specifiedSchema default, where declared: 7
  • format: uint32
  • maximum: 365
  • minimum: 1
secretProvidersThe secret providers a runtime enables. A reference is resolved only by a provider declared here: secret:file/name under file.root, and secret:env/NAME only when environment: {} is present.objectYesNot specifiedNone specified
secretProviders.environmentEnables secret:env/NAME references, read from the process environment. Declared as an empty mapping: environment: {}.objectConditionalNot specifiedNone specified
secretProviders.fileEnables secret:file/name references, read from files under root.objectConditionalNot specifiedNone specified
secretProviders.file.rootAbsolute directory holding one file per secret. Each file must be a regular file owned by the runtime user, mode 0400 or 0600, with exactly one hard link.stringConditionalNot specified
  • pattern: ^/

and, where a rule elsewhere applies

  • pattern: ^/
storageWhere document version bytes are held.objectYesNot specifiedNone specified
storage.accessKeyIdRefAn exact secret reference: secret:file/name, resolved under secretProviders.file.root, or secret:env/NAME, resolved only when secretProviders.environment is declared.stringConditionalNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
storage.attemptTimeoutMillisecondsThe longest one request may run, body included. Omitted, 10000.integerConditionalNot specifiedSchema default, where declared: 10000
  • format: uint64
  • maximum: 60000
  • minimum: 100
storage.bucketThe bucket name: lowercase letters, digits, - and ..stringConditionalNot specified
  • maxLength: 63
  • minLength: 3
storage.caBundleRefPEM CA bundle for the service. Omitted, the platform's trusted roots verify it.stringConditionalNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
storage.maximumDocumentBytesThe deployment ceiling on one document version; a policy's mandatory restriction may only be lower. Omitted, 16 MiB.integerNoNot specifiedSchema default, where declared: 16777216
  • format: uint64
  • maximum: 16777216
  • minimum: 1

or

  • format: uint64
  • maximum: 67108864
  • minimum: 1
storage.pathStyleAddress the bucket as a path under url rather than as a host name. Omitted, true.booleanConditionalNot specifiedSchema default, where declared: trueNone specified
storage.regionThe signing region: lowercase letters, digits and -.stringConditionalNot specified
  • maxLength: 64
  • minLength: 1
storage.secretAccessKeyRefAn exact secret reference: secret:file/name, resolved under secretProviders.file.root, or secret:env/NAME, resolved only when secretProviders.environment is declared.stringConditionalNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
storage.sessionTokenRefAn exact secret reference: secret:file/name, resolved under secretProviders.file.root, or secret:env/NAME, resolved only when secretProviders.environment is declared.stringConditionalNot specified
  • pattern: ^(?:secret:env/[A-Z][A-Z0-9_]{0,127}|secret:file/[a-z][a-z0-9._-]{0,127})$
storage.typestringYes
  • database
  • s3
None specified
storage.urlThe service's base URL, with no path. It is https; http is accepted only for a loopback host, for local development.stringConditionalNot specified
  • format: uri
  • maxLength: 2048
  • pattern: ^[Hh][Tt][Tt][Pp][Ss]?://[^/?#@\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+([/?#][^\u005C\u0000-\u0020\u007F-\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]*)?$
transfersHow long one upload or download may take: a floor, plus an allowance for every mebibyte the document carries. A transfer still running at its deadline is cut off and lets go of its bytes.objectNoNot specifiedNone specified
transfers.mebibyteAllowanceSecondsThe time added for every started mebibyte of the document.integerNoNot specifiedSchema default, where declared: 8
  • format: uint32
  • maximum: 600
  • minimum: 1
transfers.minimumDeadlineSecondsThe deadline of the smallest transfer.integerNoNot specifiedSchema default, where declared: 60
  • format: uint32
  • maximum: 3600
  • minimum: 1

Both files have a command that checks them offline, with no service, database, or secret. Each prints the diagnostics, JSON output, and exit codes that Check a file before you deploy it describes.

Format and filesCheck command
Document Store project
  • documents.yaml
documentsctl check --project <project>
Document Store runtime configuration
  • runtime.yaml
  • runtime.example.yaml
documentsctl check --project <project> --runtime-config <file>

Document Store API