SpawnDev.WebFS
1.0.0
dotnet add package SpawnDev.WebFS --version 1.0.0
NuGet\Install-Package SpawnDev.WebFS -Version 1.0.0
<PackageReference Include="SpawnDev.WebFS" Version="1.0.0" />
<PackageVersion Include="SpawnDev.WebFS" Version="1.0.0" />
<PackageReference Include="SpawnDev.WebFS" />
paket add SpawnDev.WebFS --version 1.0.0
#r "nuget: SpawnDev.WebFS, 1.0.0"
#:package SpawnDev.WebFS@1.0.0
#addin nuget:?package=SpawnDev.WebFS&version=1.0.0
#tool nuget:?package=SpawnDev.WebFS&version=1.0.0
SpawnDev.WebFS
SpawnDev.WebFS lets Blazor WebAssembly web apps host a file system via a domain labeled folder by connecting to the SpawnDev.WebFS.Host app running on the user's PC.
SpawnDev.WebFS.Tray
<img width="48" src="https://github.com/LostBeard/SpawnDev.WebFS/raw/refs/heads/master/SpawnDev.WebFS/wwwroot/webfs-128.png" />
The SpawnDev.WebFS.Tray app runs on the user's PC with an icon in the system tray and can optionally start with Windows. While running, the WebFS host app uses DokanNet to mount a new drive on the user's PC that can be accessed normally by any apps on the user's computer. Websites can request permission to provide a file system via a domain labeled folder on the root of the new drive.
WebFS Tray Download: SpawnDevWebFSSetup
WebFS Providers
Website file system provider links and descriptions.
lostbeard.github.io - Demo WebFS Provider
Demonstrates WebFS by providing read and write access to the browser's Origin private file system.
Use cases
- A website that allows protected access to a remote encrypted file system.
- Team collaboration on shared projects.
- Browser extension that provides access to Google Photos through a folder by automating Google Photos in a browser page.
- Access files and folders on your remote devices anywhere using normal apps.
- Etc.
Using SpawnDev.WebFS in a Blazor WebAssembly app
WebFS tray app
The WebFS tray app is required for both development and production use. In development, it may be more useful to use the source project in this repo instead.
Blazor WebAssembly
- Add a reference to the latest
SpawnDev.WebFSNuget package using your method of choice.
Program.cs - From demo repo
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using SpawnDev.BlazorJS;
using SpawnDev.WebFS;
using SpawnDev.WebFS.Demo;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");
// Add SpawnDev.BlazorJS JS interop
builder.Services.AddBlazorJSRuntime(out var JS);
// Registers WebFSProvider, the demo WebFS provider as WebFSProvider and IAsyncDokanOperations
// Registers WebFSClient which connects to the tray app when its Enabled property is set to true
builder.Services.AddWebFS<WebFSProvider>();
// Startup using BlazorJSRunAsync
await builder.Build().BlazorJSRunAsync();
- Implement the
IAsyncDokanOperationsinterface in your custom provider and set WebFSClient.Enabled = true when ready
WebFSProvider.cs- From demo repo
/// <summary>
/// Demo WebFS filesystem provider.<br/>
/// Provides access the the browsers Origin private file system.<br/>
/// IBackgroundService sets this service to autostart when the Blazor WASM web app loads
/// </summary>
[RemoteCallable]
public class WebFSProvider : IAsyncDokanOperations, IBackgroundService
{
public WebFSProvider(BlazorJSRuntime js, WebFSClient webFSClient)
{
JS = js;
WebFSClient = webFSClient;
// this demo provider uses navigator.storage to provide access to the browser's origin private file system
using var navigator = JS.Get<Navigator>("navigator");
StorageManager = navigator.Storage;
// tell WebFSClient to connect to the tray app when it can
WebFSClient.Enabled = true;
}
WIP
If you are interested in this project, please start an issue to suggest features or areas of interest.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- DokanNet (>= 2.1.0)
- Microsoft.AspNetCore.Components.WebAssembly (>= 8.0.19)
- SpawnDev.BlazorJS (>= 2.41.0)
- SpawnDev.BlazorJS.WebWorkers (>= 2.22.0)
- System.Text.Json (>= 8.0.6)
-
net9.0
- DokanNet (>= 2.1.0)
- Microsoft.AspNetCore.Components.WebAssembly (>= 9.0.8)
- SpawnDev.BlazorJS (>= 2.41.0)
- SpawnDev.BlazorJS.WebWorkers (>= 2.22.0)
- System.Text.Json (>= 9.0.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 16 | 11/6/2025 |