|
| 1 | +"$schema": "http://json-schema.org/draft-07/schema" |
| 2 | +"$id": "https://nix.dev/manual/nix/latest/protocols/json/schema/store-object-info-v1.json" |
| 3 | +title: Store Object Info |
| 4 | +description: | |
| 5 | + Information about a [store object](@docroot@/store/store-object.md). |
| 6 | +
|
| 7 | + This schema describes the JSON representation of store object metadata as returned by commands like [`nix path-info --json`](@docroot@/command-ref/new-cli/nix3-path-info.md). |
| 8 | +
|
| 9 | + > **Warning** |
| 10 | + > |
| 11 | + > This JSON format is currently |
| 12 | + > [**experimental**](@docroot@/development/experimental-features.md#xp-feature-nix-command) |
| 13 | + > and subject to change. |
| 14 | +
|
| 15 | + ### Field Categories |
| 16 | +
|
| 17 | + Store object information can come in a few different variations. |
| 18 | +
|
| 19 | + Firstly, "impure" fields, which contain non-intrinsic information about the store object, may or may not be included. |
| 20 | +
|
| 21 | + Second, binary cache stores have extra non-intrinsic infomation about the store objects they contain. |
| 22 | +
|
| 23 | + Thirdly, [`nix path-info --json --closure-size`](@docroot@/command-ref/new-cli/nix3-path-info.html#opt-closure-size) can compute some extra information about not just the single store object in question, but the store object and its [closure](@docroot@/glossary.md#gloss-closure). |
| 24 | +
|
| 25 | + The impure and NAR fields are grouped into separate variants below. |
| 26 | + See their descriptions for additional information. |
| 27 | + The closure fields however as just included as optional fields, to avoid a combinatorial explosion of variants. |
| 28 | +
|
| 29 | +oneOf: |
| 30 | + - $ref: "#/$defs/base" |
| 31 | + |
| 32 | + - $ref: "#/$defs/impure" |
| 33 | + |
| 34 | + - $ref: "#/$defs/narInfo" |
| 35 | + |
| 36 | +$defs: |
| 37 | + base: |
| 38 | + title: Store Object Info |
| 39 | + description: | |
| 40 | + Basic store object metadata containing only intrinsic properties. |
| 41 | + This is the minimal set of fields that describe what a store object contains. |
| 42 | + type: object |
| 43 | + required: |
| 44 | + - narHash |
| 45 | + - narSize |
| 46 | + - references |
| 47 | + - ca |
| 48 | + properties: |
| 49 | + path: |
| 50 | + type: string |
| 51 | + title: Store Path |
| 52 | + description: | |
| 53 | + [Store path](@docroot@/store/store-path.md) to the given store object. |
| 54 | +
|
| 55 | + Note: This field may not be present in all contexts, such as when the path is used as the key and the the store object info the value in map. |
| 56 | +
|
| 57 | + narHash: |
| 58 | + type: string |
| 59 | + title: NAR Hash |
| 60 | + description: | |
| 61 | + Hash of the [file system object](@docroot@/store/file-system-object.md) part of the store object when serialized as a [Nix Archive](@docroot@/store/file-system-object/content-address.md#serial-nix-archive). |
| 62 | +
|
| 63 | + narSize: |
| 64 | + type: integer |
| 65 | + minimum: 0 |
| 66 | + title: NAR Size |
| 67 | + description: | |
| 68 | + Size of the [file system object](@docroot@/store/file-system-object.md) part of the store object when serialized as a [Nix Archive](@docroot@/store/file-system-object/content-address.md#serial-nix-archive). |
| 69 | +
|
| 70 | + references: |
| 71 | + type: array |
| 72 | + title: References |
| 73 | + description: | |
| 74 | + An array of [store paths](@docroot@/store/store-path.md), possibly including this one. |
| 75 | + items: |
| 76 | + type: string |
| 77 | + |
| 78 | + ca: |
| 79 | + type: ["string", "null"] |
| 80 | + title: Content Address |
| 81 | + description: | |
| 82 | + If the store object is [content-addressed](@docroot@/store/store-object/content-address.md), |
| 83 | + this is the content address of this store object's file system object, used to compute its store path. |
| 84 | + Otherwise (i.e. if it is [input-addressed](@docroot@/glossary.md#gloss-input-addressed-store-object)), this is `null`. |
| 85 | + additionalProperties: false |
| 86 | + |
| 87 | + impure: |
| 88 | + title: Store Object Info with Impure Fields |
| 89 | + description: | |
| 90 | + Store object metadata including impure fields that are not *intrinsic* properties. |
| 91 | + In other words, the same store object in different stores could have different values for these impure fields. |
| 92 | + type: object |
| 93 | + required: |
| 94 | + - narHash |
| 95 | + - narSize |
| 96 | + - references |
| 97 | + - ca |
| 98 | + # impure |
| 99 | + - deriver |
| 100 | + - registrationTime |
| 101 | + - ultimate |
| 102 | + - signatures |
| 103 | + properties: |
| 104 | + path: { $ref: "#/$defs/base/properties/path" } |
| 105 | + narHash: { $ref: "#/$defs/base/properties/narHash" } |
| 106 | + narSize: { $ref: "#/$defs/base/properties/narSize" } |
| 107 | + references: { $ref: "#/$defs/base/properties/references" } |
| 108 | + ca: { $ref: "#/$defs/base/properties/ca" } |
| 109 | + deriver: |
| 110 | + type: ["string", "null"] |
| 111 | + title: Deriver |
| 112 | + description: | |
| 113 | + If known, the path to the [store derivation](@docroot@/glossary.md#gloss-store-derivation) from which this store object was produced. |
| 114 | + Otherwise `null`. |
| 115 | +
|
| 116 | + > This is an "impure" field that may not be included in certain contexts. |
| 117 | +
|
| 118 | + registrationTime: |
| 119 | + type: ["integer", "null"] |
| 120 | + title: Registration Time |
| 121 | + description: | |
| 122 | + If known, when this derivation was added to the store (Unix timestamp). |
| 123 | + Otherwise `null`. |
| 124 | +
|
| 125 | + > This is an "impure" field that may not be included in certain contexts. |
| 126 | +
|
| 127 | + ultimate: |
| 128 | + type: boolean |
| 129 | + title: Ultimate |
| 130 | + description: | |
| 131 | + Whether this store object is trusted because we built it ourselves, rather than substituted a build product from elsewhere. |
| 132 | +
|
| 133 | + > This is an "impure" field that may not be included in certain contexts. |
| 134 | +
|
| 135 | + signatures: |
| 136 | + type: array |
| 137 | + title: Signatures |
| 138 | + description: | |
| 139 | + Signatures claiming that this store object is what it claims to be. |
| 140 | + Not relevant for [content-addressed](@docroot@/store/store-object/content-address.md) store objects, |
| 141 | + but useful for [input-addressed](@docroot@/glossary.md#gloss-input-addressed-store-object) store objects. |
| 142 | +
|
| 143 | + > This is an "impure" field that may not be included in certain contexts. |
| 144 | + items: |
| 145 | + type: string |
| 146 | + |
| 147 | + # Computed closure fields |
| 148 | + closureSize: |
| 149 | + type: integer |
| 150 | + minimum: 0 |
| 151 | + title: Closure Size |
| 152 | + description: | |
| 153 | + The total size of this store object and every other object in its [closure](@docroot@/glossary.md#gloss-closure). |
| 154 | +
|
| 155 | + > This field is not stored at all, but computed by traversing the other fields across all the store objects in a closure. |
| 156 | + additionalProperties: false |
| 157 | + |
| 158 | + narInfo: |
| 159 | + title: Store Object Info with Impure fields and NAR Info |
| 160 | + description: | |
| 161 | + The store object info in the "binary cache" family of Nix store type contain extra information pertaining to *downloads* of the store object in question. |
| 162 | + (This store info is called "NAR info", since the downloads take the form of [Nix Archives](@docroot@/store/file-system-object/content-address.md#serial-nix-archive, and the metadata is served in a file with a `.narinfo` extension.) |
| 163 | +
|
| 164 | + This download information, being specific to how the store object happens to be stored and transferred, is also considered to be non-intrinsic / impure. |
| 165 | + type: object |
| 166 | + required: |
| 167 | + - narHash |
| 168 | + - narSize |
| 169 | + - references |
| 170 | + - ca |
| 171 | + # impure |
| 172 | + - deriver |
| 173 | + - registrationTime |
| 174 | + - ultimate |
| 175 | + - signatures |
| 176 | + # nar |
| 177 | + - url |
| 178 | + - compression |
| 179 | + - downloadHash |
| 180 | + - downloadSize |
| 181 | + properties: |
| 182 | + path: { $ref: "#/$defs/base/properties/path" } |
| 183 | + narHash: { $ref: "#/$defs/base/properties/narHash" } |
| 184 | + narSize: { $ref: "#/$defs/base/properties/narSize" } |
| 185 | + references: { $ref: "#/$defs/base/properties/references" } |
| 186 | + ca: { $ref: "#/$defs/base/properties/ca" } |
| 187 | + deriver: { $ref: "#/$defs/impure/properties/deriver" } |
| 188 | + registrationTime: { $ref: "#/$defs/impure/properties/registrationTime" } |
| 189 | + ultimate: { $ref: "#/$defs/impure/properties/ultimate" } |
| 190 | + signatures: { $ref: "#/$defs/impure/properties/signatures" } |
| 191 | + closureSize: { $ref: "#/$defs/impure/properties/closureSize" } |
| 192 | + url: |
| 193 | + type: string |
| 194 | + title: URL |
| 195 | + description: | |
| 196 | + Where to download a compressed archive of the file system objects of this store object. |
| 197 | +
|
| 198 | + > This is an impure "`.narinfo`" field that may not be included in certain contexts. |
| 199 | +
|
| 200 | + compression: |
| 201 | + type: string |
| 202 | + title: Compression |
| 203 | + description: | |
| 204 | + The compression format that the archive is in. |
| 205 | +
|
| 206 | + > This is an impure "`.narinfo`" field that may not be included in certain contexts. |
| 207 | +
|
| 208 | + downloadHash: |
| 209 | + type: string |
| 210 | + title: Download Hash |
| 211 | + description: | |
| 212 | + A digest for the compressed archive itself, as opposed to the data contained within. |
| 213 | +
|
| 214 | + > This is an impure "`.narinfo`" field that may not be included in certain contexts. |
| 215 | +
|
| 216 | + downloadSize: |
| 217 | + type: integer |
| 218 | + minimum: 0 |
| 219 | + title: Download Size |
| 220 | + description: | |
| 221 | + The size of the compressed archive itself. |
| 222 | +
|
| 223 | + > This is an impure "`.narinfo`" field that may not be included in certain contexts. |
| 224 | +
|
| 225 | + closureDownloadSize: |
| 226 | + type: integer |
| 227 | + minimum: 0 |
| 228 | + title: Closure Download Size |
| 229 | + description: | |
| 230 | + The total size of the compressed archive itself for this object, and the compressed archive of every object in this object's [closure](@docroot@/glossary.md#gloss-closure). |
| 231 | +
|
| 232 | + > This is an impure "`.narinfo`" field that may not be included in certain contexts. |
| 233 | +
|
| 234 | + > This field is not stored at all, but computed by traversing the other fields across all the store objects in a closure. |
| 235 | + additionalProperties: false |
0 commit comments