[JMAP] Re: [Jmap] JMAP File Storage extension comments
Bron Gondwana <brong@fastmailteam.com> Thu, 16 October 2025 20:05 UTC
Return-Path: <brong@fastmailteam.com>
X-Original-To: jmap@mail2.ietf.org
Delivered-To: jmap@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id D29A1753EC68 for <jmap@mail2.ietf.org>; Thu, 16 Oct 2025 13:05:27 -0700 (PDT)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.798
X-Spam-Level:
X-Spam-Status: No, score=-2.798 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=fastmailteam.com header.b="lujKMx/z"; dkim=pass (2048-bit key) header.d=messagingengine.com header.b="p+aKxQgD"
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Oc4ui-jAY7u1 for <jmap@mail2.ietf.org>; Thu, 16 Oct 2025 13:05:27 -0700 (PDT)
Received: from fhigh-b1-smtp.messagingengine.com (fhigh-b1-smtp.messagingengine.com [202.12.124.152]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 5AABF753EC5C for <jmap@ietf.org>; Thu, 16 Oct 2025 13:05:27 -0700 (PDT)
Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.stl.internal (Postfix) with ESMTP id 3C0D87A0069 for <jmap@ietf.org>; Thu, 16 Oct 2025 16:05:21 -0400 (EDT)
Received: from phl-imap-15 ([10.202.2.104]) by phl-compute-02.internal (MEProxy); Thu, 16 Oct 2025 16:05:21 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= fastmailteam.com; h=cc:content-type:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm3; t=1760645121; x= 1760731521; bh=FohyUQ+ksO9hx0b526HN/2eKDCzv6c2U/UgJMc724xA=; b=l ujKMx/zG8FogFUTRC9CO1B6u8/b6ZUDZAiV3GrX9e4cCd4A+akj2fhQzR1ex0VG8 xF71tUPtwOPtNLf8GzzTaWdF666qIIcPo9v7JCHuaGuNWXVMPcJG5cB2WQ02b3v+ pb1FsvQ/r61YXL4/hNh9iJRgktkGwx1DT5w6qgt1VgAoiOiDVC5Wjxez57ljvMNa tWnizGm+ebQ89mEN/9ZHCFudxnNyQAiJZqI0GUx2lUSTovJjQzcrBoN4LcvkGl/k RsIksdV+hYM05OAxLoB4KTUGzGSKbUYYjfuqS8yrJo3pJ/ll4NltcLC8jtCWtEmj TgLBssl92rL1LVu3hMJlA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1760645121; x=1760731521; bh=FohyUQ+ksO9hx0b526HN/2eKDCzv6c2U/Ug JMc724xA=; b=p+aKxQgD6VU1QcsL1tFHFtNBDesGeoeVw5+lEIwpLMdsQwLyydI n81naiw9ymlCEzagQfVmwPVoitYjyYvyRf+WNuHK5sNp8OyBGjIX+PT2Z5SFfqpC jgxaw+XFb2h37d8DqL95uYtgMrmkIQhvPehrcokAGRQ13vJoJvyRE3pf11aq3p9d j0CHmN/zB9XnaOGxjpx+0ooev1+sS16lD2S4opHsGRb4C3IJ47WAxztLIXPg/ldu QDF/OVRaCJnPDQrc5+EJD6wuVLtJ8MfBpeFfHmTtuFhkg6hHGUcs9RRl9qBNUdVR 02lqIAVUWkf75vxESu9Em92KiyV9DmnpTXw==
X-ME-Sender: <xms:AFDxaEGCff1pF8ROmUArmcUf5ZO0pNYPYKqkDofNgTNs_CM_hnvjMg> <xme:AFDxaIKv8f5dfXOfviKG2M0O1NlMO3ld32yX2rPAF8dCNxpAGih69OIPXylFopnQ_ gImaeGfmkGmMVBRT-ToQcRMH9vPEsVORjjVxSnzKsUnJT0>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduvdejvddtucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvkfgjfhfutgesrgdtreerre dtjeenucfhrhhomhepfdeurhhonhcuifhonhgufigrnhgrfdcuoegsrhhonhhgsehfrghs thhmrghilhhtvggrmhdrtghomheqnecuggftrfgrthhtvghrnhephfdvjeekffdtieeiud ffheeiieeukeeigfekhfdtueduvedvuddtvddtjeelleeknecuvehluhhsthgvrhfuihii vgeptdenucfrrghrrghmpehmrghilhhfrhhomhepsghrohhnghesfhgrshhtmhgrihhlth gvrghmrdgtohhmpdhnsggprhgtphhtthhopedupdhmohguvgepshhmthhpohhuthdprhgt phhtthhopehjmhgrphesihgvthhfrdhorhhg
X-ME-Proxy: <xmx:AFDxaHr01r8gBPrKuIyxl72lyWFdXWlUFgTnucCS4QzFFy9nXavgIA> <xmx:AFDxaInIQ6F_57XgEPXX-h99UB1rEVGc0UmtuY51lrZxhYJ2RW5oXA> <xmx:AFDxaJ3jdbhDivADaq9zrXJQtZV7FaMe8xXPofaAQOkL3Ot8wWWuBw> <xmx:AFDxaAB54tfa3SRMZD-IVdYnnhaj6VCZM8SvEwNjm8otcOZmzSNEgg> <xmx:AVDxaNAFRL2UIcnndpqjoeRmqWnz5Cats9jtYOI0v6wE673IPh5WRRgi>
Feedback-ID: i2d7042ce:Fastmail
Received: by mailuser.phl.internal (Postfix, from userid 501) id B8EEA7800DA; Thu, 16 Oct 2025 16:05:20 -0400 (EDT)
X-Mailer: MessagingEngine.com Webmail Interface
MIME-Version: 1.0
Date: Thu, 16 Oct 2025 16:03:49 -0400
From: Bron Gondwana <brong@fastmailteam.com>
To: jmap@ietf.org
Message-Id: <0a238b48-fcd4-4048-8086-44e19a411dd2@app.fastmail.com>
In-Reply-To: <F0D63AD9-4AA2-4496-9770-3ABC44292F91@stalw.art>
References: <F0D63AD9-4AA2-4496-9770-3ABC44292F91@stalw.art>
Content-Type: multipart/alternative; boundary="b119c457198d4219905a140697020601"
Message-ID-Hash: XY227EGIMKAIYP6GJNMDMJP3JJTJQQVN
X-Message-ID-Hash: XY227EGIMKAIYP6GJNMDMJP3JJTJQQVN
X-MailFrom: brong@fastmailteam.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-jmap.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [JMAP] Re: [Jmap] JMAP File Storage extension comments
List-Id: JSON Meta Access Protocol <jmap.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/2M3tatDkbzTOzZINxME-QJG0oVk>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Owner: <mailto:jmap-owner@ietf.org>
List-Post: <mailto:jmap@ietf.org>
List-Subscribe: <mailto:jmap-join@ietf.org>
List-Unsubscribe: <mailto:jmap-leave@ietf.org>
On Mon, Apr 28, 2025, at 11:07, Mauro De Gennaro wrote: > Hi Bron, > > I have (partially) implemented the JMAP File Storage draft and wanted to share a few comments and ideas based on my experience so far: (Digging up this old email) > - Section 4.1: I think the mayDelete property should be added to the FilesRights object. Returning to this as I try to update the spec. My understanding of 'mayDelete' on a Node is that it's basically 'mayWrite' on the parent directory. At least, in the "inode" model of filesystems, the directory is a list of names and metadata (including the inode of the data); and when you deferences the last pointer to the underlying data, then it can be garbage collected. So I'm not sure how I would implement "mayDelete" as a separate property. I'd just derive it from the parent, as a read-only piece of metadata. > - Also related to ACLs, it would be helpful if the specification provided some guidance on ACL inheritance when creating a child FileNode. Specifically, should the ACLs of the parent be automatically inherited by the child, or is this entirely left to server implementation? Since we don’t have child specific rights like mayReadItems, mayModifyItems, or mayDeleteItems on the parent object (as we do in other JMAP objects), some clarification on best practices for setting permissions on new child nodes would be nice to have. I answered this back then, but I'll update the text to say "ACLs are copied from parent on create if not explicitly set". > - Invalid Parent Set Error: It would be good to define an explicit error condition for cases where a client attempts to create a FileNode under a parent node that has a blobId property (i.e., when trying to create a folder or file under a file, which should not be allowed). This should, I think, just be an invalidProperties error with parentId as the property; and maybe some description text saying "parentId refers to a non-Directory node". This might be a good example to put in the spec! > - Metadata Storage: This is more of a general idea, it might be valuable to allow storing custom metadata within a FileNode, somewhat akin to WebDAV’s "dead properties”. For example, if the extension is used for photo storage, a client might want to store photo location data or other attributes and be able to search for them later. This could also be defined in a separate extension for searchable object metadata in JMAP objects. This can of worms is still a can of worms. Particularly if we want to store something that's structured and searchable like GEO data, then we'd need to have server support for using GEO algorithms on the data for things like "within 10km of X,Y", which is definitely not something you could do with a generic metadata system. It would be much more powerful to have an extension that defined a geo property, and indexed on it. ... I'd rather not do that in base filenode. I also did analysis of what Fastmail's existing filestorage had in terms of webdav DEAD properties, and they were all variants on created/updated fields. So I'd like to do a base filenode spec which gives a bare bones filesystem, and if we want to have a way to store rich, searchable metadata, make that a separate extension. Bron. -- Bron Gondwana, CEO, Fastmail Pty Ltd / Fastmail US LLC brong@fastmailteam.com
- [Jmap] JMAP File Storage extension comments Mauro De Gennaro
- [Jmap] Re: JMAP File Storage extension comments Bron Gondwana
- [Jmap] Re: JMAP File Storage extension comments Mauro De Gennaro
- [Jmap] Re: JMAP File Storage extension comments Bron Gondwana
- [Jmap] Re: JMAP File Storage extension comments Mauro De Gennaro
- [JMAP] Re: [Jmap] JMAP File Storage extension com… Bron Gondwana