{
"id": "place.wisp.fs",
"defs": {
"file": {
"type": "object",
"required": [
"type",
"blob"
],
"properties": {
"blob": {
"type": "blob",
"accept": [
"*/*"
],
"maxSize": 1000000000,
"description": "Content blob ref"
},
"type": {
"type": "string",
"const": "file"
},
"base64": {
"type": "boolean",
"description": "True if blob content is base64-encoded (used to bypass PDS content sniffing)"
},
"encoding": {
"enum": [
"gzip"
],
"type": "string",
"description": "Content encoding (e.g., gzip for compressed files)"
},
"mimeType": {
"type": "string",
"description": "Original MIME type before compression"
}
}
},
"main": {
"type": "record",
"record": {
"type": "object",
"required": [
"site",
"root",
"createdAt"
],
"properties": {
"root": {
"ref": "#directory",
"type": "ref"
},
"site": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"fileCount": {
"type": "integer",
"maximum": 1000,
"minimum": 0
}
}
},
"description": "Virtual filesystem manifest for a Wisp site"
},
"entry": {
"type": "object",
"required": [
"name",
"node"
],
"properties": {
"name": {
"type": "string",
"maxLength": 255
},
"node": {
"refs": [
"#file",
"#directory",
"#subfs"
],
"type": "union"
}
}
},
"subfs": {
"type": "object",
"required": [
"type",
"subject"
],
"properties": {
"flat": {
"type": "boolean",
"description": "If true (default), the subfs record's root entries are merged (flattened) into the parent directory, replacing the subfs entry. If false, the subfs entries are placed in a subdirectory with the subfs entry's name. Flat merging is useful for splitting large directories across multiple records while maintaining a flat structure."
},
"type": {
"type": "string",
"const": "subfs"
},
"subject": {
"type": "string",
"format": "at-uri",
"description": "AT-URI pointing to a place.wisp.subfs record containing this subtree."
}
}
},
"directory": {
"type": "object",
"required": [
"type",
"entries"
],
"properties": {
"type": {
"type": "string",
"const": "directory"
},
"entries": {
"type": "array",
"items": {
"ref": "#entry",
"type": "ref"
},
"maxLength": 500
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}