🚀 I’ve just released the first alpha version of my Laravel WebDAV server:
👉 https://github.com/N3XT0R/laravel-webdav-server/releases/tag/1.0.0-alpha.1
⚠️ Disclaimer
This is an early alpha prototype.
It is:
- not stable
- not production-ready
- subject to breaking changes at any time
The current focus is on architecture and extensibility, not completeness.
The problem
In the Laravel ecosystem, there is currently no truly native WebDAV server solution.
Most existing approaches fall into one of two categories:
- Thin wrappers around SabreDAV with limited Laravel integration
- WebDAV client adapters (e.g. for Storage::disk()), not actual servers
What’s missing is a solution that:
- integrates cleanly into Laravel’s architecture
- respects existing auth and authorization concepts
- works naturally with Laravel’s filesystem abstraction (Flysystem)
The idea
This package aims to bridge the gap between the WebDAV protocol and Laravel’s filesystem abstraction.
Instead of exposing raw filesystem paths, it maps WebDAV nodes directly to Laravel disks.
That means you can expose:
- local storage
- S3 buckets
- or any Flysystem-backed disk
through a WebDAV endpoint.
What makes this different
1. Native Laravel integration
This is not a standalone WebDAV server bolted onto Laravel.
It is designed to feel like a first-class Laravel component.
2. Explicit request pipeline (no magic)
Every request follows a clearly defined flow:
Controller → Factory → Credential Validation → Space Resolution → Authorization → Storage
There is:
- no hidden magic
- no black box
- no implicit behavior
Every step is transparent and replaceable.
3. Clear separation of concerns
The architecture strictly separates:
- WebDAV transport (SabreDAV)
- Application logic (Laravel)
- Storage (Flysystem)
4. Pluggable architecture
Core components are abstracted via interfaces:
- Credential validation
- Storage space resolution
- Path-level authorization
All bindings use bindIf(), so you can override them without modifying package code.
5. Policy-native authorization
Authorization integrates directly with Laravel’s Gate and Policies.
6. Dynamic storage mapping
Storage is resolved at runtime based on:
- user (principal)
- route parameter {space}
What this package is (and is not)
✔ WebDAV server for Laravel (HTTP endpoint)
✖ Not a Storage::disk('webdav') client driver
Current feature set
- WebDAV server powered by SabreDAV
- Mapping of WebDAV nodes to Laravel filesystem disks
- Pluggable authentication (Basic Auth by default)
- Flexible storage space resolution
- Extensible authorization layer
- Clean extension points via interfaces
Supported operations
- PROPFIND
- GET
- PUT
- DELETE
- MKCOL
What’s missing
- Stability
- Edge case handling
- Production readiness
Why release this early?
Because the architecture is the most important part.
Feedback welcome
I’d really appreciate:
- architectural feedback
- edge cases I haven’t considered
- ideas for real-world use
GitHub
👉 https://github.com/N3XT0R/laravel-webdav-server/releases/tag/1.0.0-alpha.1
Top comments (0)