((p "Most applications should configure the memory box explicitly." " " "Configure the memory box by appending query parameters to the base box URI " (kbd "mem:") ".") (p "The following parameters are supported:") (table (thead (tr (th "Parameter") (th "Description") (th ((class . "right")) "Default value") (th ((class . "right")) "Maximum value"))) (tbody (tr (td "max-bytes") (td "Maximum storage size of the box (in bytes)") (td ((class . "right")) "65535") (td ((class . "right")) "1073741824 (1 GiB)")) (tr (td "max-zettel") (td "Maximum number of zettel") (td ((class . "right")) "127") (td ((class . "right")) "65535")) (tr (td "readonly") (td "Allow only read operations") (td ((class . "right")) "false") (td ((class . "right")) "n/a")) (tr (td "name") (td "Unique name of the box") (td ((class . "right")) "n/a") (td ((class . "right")) "n/a")))) (p "The default values provide reasonable limits for many applications.") (p "The number of zettel is usually easy to estimate.") (p "The number of bytes is usually more difficult to determine." " " "A zettel requires 6 bytes for its identifier." " " "Each metadata entry additionally requires the lengths of its key and value, plus a one-byte separator." " " "Content contributes its size in bytes." " " "For text content, this is the size of its UTF-8 encoding.") (p "If one of the limits is exceeded, Zettelstore returns HTTP status code 507 (Insufficient Storage).") (p "The " (kbd "readonly") " parameter exists primarily to support the " (a ((href . "00001004010000#read-only-mode")) (kbd "read-only-mode")) " startup configuration." " " "Since a memory box is initially empty, enabling " (kbd "readonly") " effectively prevents the creation or modification of zettel."))