sabre/dav
sabre/dav is the most popular WebDAV framework for PHP, letting you build WebDAV, CalDAV and CardDAV servers. Well-documented, actively maintained, and trusted for calendar and contact sync.
Architecture fit
Server object owns routing, HTTP method handling, XML (PROPFIND/REPORT) parsing, and the auth/lock layers; plugins extend behavior; a Tree + node/backend abstraction isolates storage. This is a framework, not a Laravel package — there is no service provider, facade, config file, or artisan command.Sabre\DAV\Server inside a Laravel route group.sabre/http request/response objects; Laravel ships Symfony HTTP Foundation. You must convert inbound requests and stream DAV bodies back without Laravel rewriting, buffering, or decorating them.BackendInterface that resolves to your users/principals model.Collection/File nodes backed by Eloquent. The custom-node path gives you tenancy and auditability at the cost of performance engineering.Integration feasibility
Content-Length/chunked handling for large PUTs.Technical risk
Key questions
Stack fit
acme/laravel-dav) rather than inline code: one service provider, one config file, one route registration, one auth backend, one storage backend. This keeps the third-party surface auditable and swappable.Migration path
Collection/File/CalendarObject nodes backed by existing models, with a repository layer. This avoids a second database schema and keeps tenancy in one place.Compatibility
sabre/dav to a caret range on the 4.x line and lock it in composer.lock; track upstream 4.x patch releases only.sabre/vobject for iCalendar/vCard correctness (timezone handling is the usual bug source), and psr/log v2/v3 compatibility already resolved upstream in 4.2.2.Authenticate redirect-to-login, response encryption/transform middleware, and any global output buffering or compression that breaks streaming.Sequencing
SimpleCollection. Prove streaming and auth. Exit criteria: a real client (DAVx5 or macOS Finder) mounts and lists.PUT/GET/DELETE, transactional writes, and litmus in CI.Maintenance
Support
Scaling
lastmodified/etag. Existing release notes call out SQLite index additions and PDO sync fixes — evidence this is a known hot spot.Failure modes
PUTs on the same resource cause lost updates or corrupted calendar objects. Enforce locking or last-writer-wins semantics explicitly, per protocol.Content-Length and checksums server-side.Ramp-up
TPM recommendation
How can I help you explore Laravel packages today?