Spacedrive is an open source cross-platform file explorer, powered by a virtual distributed filesystem written in Rust.

Overview

Logo

Spacedrive

A file explorer from the future.
spacedrive.com »

Download for macOS · Windows · Linux · iOS · watchOS · Android
~ Links will be added once a release is available. ~

Spacedrive is an open source cross-platform file manager, powered by a virtual distributed filesystem (VDFS) written in Rust.

NOTE: Spacedrive is under active development, most of the listed features are still experimental and subject to change.

Organize files across many devices in one place. From cloud services to offline hard drives, Spacedrive combines the storage capacity and processing power of your devices into one personal distributed cloud, that is both secure and intuitive to use.

For independent creatives, hoarders and those that want to own their digital footprint. Spacedrive provides a file management experience like no other, and it's completely free.

Logo


What is a VDFS?

A VDFS (virtual distributed filesystem) is a filesystem designed to work atop a variety of storage layers. It is not restricted to a single machine, with a uniform API to manipulate and access content across many devices. It achieves this by maintaining a virtual index of all storage locations, synchronizing the database between clients in realtime. This implementation also uses CAS (Content-addressable storage) to uniquely identify files, while keeping record of logical file paths relative to the storage locations.

The first implementation of a VDFS can be found in this UC Berkeley paper by Haoyuan Li. This paper describes its use for cloud computing, however the underlying concepts can be translated to open consumer software.

Motivation

Many of us have multiple cloud accounts, drives that aren’t backed up and data at risk of loss. We depend on cloud services like Google Photos and iCloud, but are locked in with limited capacity and almost zero interoperability between services and operating systems. Photo albums shouldn’t be stuck in a device ecosystem, or harvested for advertising data. They should be OS agnostic, permanent and personally owned. Data we create is our legacy, that will long outlive us—open source technology is the only way to ensure we retain absolute control over the data that defines our lives, at unlimited scale.

Features

Note: Links are for highlight purposes only until feature specific documentation is complete.

Complete: (in testing)

  • File discovery - Scan devices, drives and cloud accounts to build a directory of all files with metadata.
  • Preview generation - Auto generate lower resolution stand-ins for image and video.
  • Statistics - Total capacity, index size, preview media size, free space etc.

In progress:

  • File Explorer - Browse online/offline storage locations, view files with metadata, perform basic CRUD.
  • Realtime synchronization - Data index synchronized in realtime between devices, prioritizing peer-to-peer LAN connections (WiFi sync).

To be developed (MVP):

  • Photos - Photo and video albums similar to Apple/Google photos.
  • Search - Deep search into your filesystem with a keybind, including offline locations.
  • Tags - Define routines on custom tags to automate workflows, easily tag files individually, in bulk and automatically via rules.
  • Extensions - Build tools on top of Spacedrive, extend functionality and integrate third party services. Extension directory on spacedrive.com/extensions.

To be developed (Post-MVP):

  • Cloud integration - Index & backup to Apple Photos, Google Drive, Dropbox, OneDrive & Mega + easy API for the community to add more.
  • Encrypted vault(s) - Effortlessly manage & encrypt sensitive files, built on top of VeraCrypt. Encrypt individual files or create flexible-size vaults.
  • Key manager - View, mount, dismount and hide keys. Mounted keys automatically unlock respective areas of your filesystem.
  • Redundancy Goal - Ensure a specific amount of copies exist for your important data, discover at-risk files and monitor device/drive health.
  • Timeline - View a linear timeline of content, travel to any time and see media represented visually.
  • Media encoder - Encode video and audio into various formats, use Tags to automate. Built with FFMPEG.
  • Workers - Utilize the compute power of your devices in unison to encode and perform tasks at increased speeds.
  • Spacedrive Cloud - We'll host an always-on cloud device for you, with pay-as-you-go plans for storage.
  • Self hosted - Spacedrive can be deployed as a service, behaving as just another device powering your personal cloud.

Developer Guide

Please refer to the contributing guide for how to install Spacedrive from sources.

Architecture

This project is using what I'm calling the "PRRTT" stack (Prisma, Rust, React, TypeScript, Tauri).

  • Prisma on the front-end? 🤯 Made possible thanks to prisma-client-rust, developed by Brendonovich. Gives us access to the powerful migration CLI in development, along with the Prisma syntax for our schema. The application bundles with the Prisma query engine and codegen for a beautiful Rust API. Our lightweight migration runner is custom built for a desktop app context.
  • Tauri allows us to create a pure Rust native OS webview, without the overhead of your average Electron app. This brings the bundle size and average memory usage down dramatically. It also contributes to a more native feel, especially on macOS due to Safari's close integration with the OS.
  • The core (sdcore) is written in pure Rust.

Monorepo structure:

Apps:

Core:

  • core: The Rust core, referred to internally as sdcore. Contains filesystem, database and networking logic. Can be deployed in a variety of host applications.

Packages:

  • client: A TypeScript client library to handle dataflow via RPC between UI and the Rust core.
  • ui: A React Shared component library.
  • interface: The complete user interface in React (used by apps desktop, web and landing)
  • config: eslint configurations (includes eslint-config-next, eslint-config-prettier and all tsconfig.json configs used throughout the monorepo.
  • macos: A Swift Native binary for MacOS system extensions.
  • ios: A Swift Native binary (planned).
  • windows: A C# Native binary (planned).
  • android: A Kotlin Native binary (planned).
Comments
  • Switch license to AGPL

    Switch license to AGPL

    Unlike GPL, the AGPL triggers when software is accessed over a network. This would stop Spacedrive and its libraries from being forked, modified and served as a SaaS platform without the modifications being made public. This does not prevent Spacedrive and its libraries from being used inside commercial projects, but it does extend the boundary of the original GPL license.

    For all of Spacedrive's code to be relicensed we must get consent from all contributors. If you are a contributor, please comment on this PR indicating that you accept the license change. If you do not accept this change or fail to accept it by 27 June 8:00PM PST then your changes will be removed.

    • [x] @jamiepine
    • [x] @Brendonovich
    • [x] @maxichrome
    • [x] @oscartbeaumont
    • [x] @benja
    • [x] @xPolar
    • [x] @LayZeeDK
    • [x] @KodingDev
    • [x] @sr2echa
    • [x] @CreatingBytes
    • [x] @FahimFBA
    • [x] @mmattbtw
    • [x] @Harry-Hopkinson
    • [x] @XSPGMike
    • [x] @he1d1
    • [x] @IllusionMan1212
    • [x] @ecwyne
    • [x] @krumware
    • [x] @stevharve
    • [x] @mark-strudwick
    • [x] @chroxify
    • [x] @TheUltDev
    • [ ] @̶i̶l̶k̶k̶a̶ (Edit: Only commit fixed a broken link in the readme, not a code change. No response, not waiting.)
    • [x] @CodePurble
    • [x] @abhnva
    • [x] @cnrad
    • [x] @MarquesCoding
    • [x] @alsonick
    • [x] @CodeWithBryan
    • [x] @̶f̶i̶v̶e̶s̶t̶o̶n̶e̶s̶ (Edit: Added a single apostrophe to the readme. No response, not waiting.)
    • [ ] @̶y̶k̶a̶b̶u̶s̶a̶l̶a̶h̶ (Edit: The only commit by this user was already overwritten. No response, not waiting.)
    • [x] @kor-pixel
    • [x] @̶r̶y̶a̶n̶h̶a̶t̶i̶c̶u̶s̶ (Edit: Can not be found on the contributor list. No response, not waiting.)

    No external contributions should be accepted into this repository until this pull request has been merged, which will not happen until all contributors have agreed to the license change.

    I accept this license change.

    opened by Brendonovich 34
  • Library manager

    Library manager

    This is the PR for ENG-132 (Support for Multiple Libraries). I would like to get this merged in before ENG-42 (P2P Communication) which will hopefully be ready later this week.

    This PR is a draft as it requires UI changes so it can be merged into main without breaking the functionality of the app. The UI pages required are documented in ENG-132.

    opened by oscartbeaumont 13
  • Fixing Clippy warnings

    Fixing Clippy warnings

    • Using tokio on all filesystem operations
    • Some minor tweaks to be more consistent on paths between &str, AsRef and PathBuf
    • Using logging instead of println
    • Updating uuid crate
    opened by fogodev 11
  • Rewrite of setup-system.ps1 for Windows development setup

    Rewrite of setup-system.ps1 for Windows development setup

    This is a full rewrite of setup-system.ps1 that sets up a user's machine for Spacedrive development.

    It currently:

    1. Checks for Rust and Cargo
    2. Installs pnpm (if not installed)
    3. Installs the latest version of Node.js using pnpm
    4. Installs LLVM (compiler for ffmpeg-rust)
    5. Downloads ffmpeg and set as an environment variable

    The CONTRIBUTING.md has also been updated to include info on running the script.

    This PR helps close issue #77 by creating a working Windows setup script.

    opened by voletro 10
  • [macOS] native sidebar blur effect

    [macOS] native sidebar blur effect

    After a metric ton of trial-and-error, by way of this PR, the Spacedrive app shows macOS' native frosted-glass blur effect behind the sidebar. Took some Objective-C binding magic, but to see it working as expected is so great!

    Closes ENG-81

    opened by maxichrome 10
  • Use native shortcuts

    Use native shortcuts

    This changes keyboard-shortcut functionality to properly use the Tauri (Rust-side) shortcuts engine. This allows, for instance, macOS' app-specific shortcut remapping — which is particularly important for power users — among other benefits (such as macOS' highlighting of shortcut position in the Menu Bar when pressed, which is absent in the current main build).

    A macOS System Settings window. In the Keyboard Shortcuts section, the user has set a custom shortcut for the Search action; changing it to shift-command-L. Implicit knowledge is that the default shortcut for Search is command-L without a shift command.
    opened by maxichrome 9
  • Fixes Tauri dependencies for Debian Buster (stable), fixes warning fo…

    Fixes Tauri dependencies for Debian Buster (stable), fixes warning fo…

    …r users without cargo or pnpm installed

    set -e prevents the if statements from running when which exits with non-zero status are never informed about installing cargo or pnpm, removing it fixes that.

    Updates Tauri dependencies for Debian in setup-system.sh

    This PR completes the Linux - Debian task of issue #77

    Fixes #77 Linux - Debian task

    opened by ned-park 7
  • Eng 125 implement waitlist on landing page

    Eng 125 implement waitlist on landing page

    Implemented waitlist functionality on the landing page. See the video for a demonstration and feel free to submit any feedback in regards to the behavior and UI! 🙌🏼

    https://user-images.githubusercontent.com/16625915/171994972-380dc718-9d79-4a62-9205-48f60e1ba4d3.mov

    kind/feature landing 
    opened by benja 7
  • Eslint, Updated Storage Settings and Tweaked some website features.

    Eslint, Updated Storage Settings and Tweaked some website features.

    1. Incorporated eslint into the codebase in order to introduce styling rules.
    2. Updated the storage settings to show the values shown on the website.
    3. Tweaked some names for example Loading... to Private Library
    opened by Harry-Hopkinson 7
  • Accessibility improvements

    Accessibility improvements

    This pull request introduces one vast improvement for Spacedrive's landing pages in regards to accessibility.

    Typically, those with screen readers and other assistive devices take advantage of the tab functionality to navigate through a webpage. As the site stands now, users are required to tab through the entire navigation bar before they can reach the main content.

    This pull request introduces a "Skip to content" button which is placed before the navigation bar and is initially hidden. The functionality will appear when the button enters a focused state (as a result of hitting tab).

    Skip to content button

    By design, users with these devices can skip to the main content of the page instead of having to strenuously navigate the header each time they visit a page.

    opened by ryanhaticus 7
  • [ENG-138] Blur effect causes sidescroll

    [ENG-138] Blur effect causes sidescroll

    Most noticeable on careers and team page; the <div /> elements we're using to create the blurry blob effect in the background cause the page to scroll to the right because of how they're positioned.

    I investigated this a bit yesterday and didn't get incredibly far… not sure if it's worth spending too much time on, and surely there's a way to fix it even if it's a bit hacky 🙁 maxichrome on Linear

    kind/bug good first issue landing 
    opened by spacedrive-bot 6
  • [ENG-222] libavresample-dev fails to install

    [ENG-222] libavresample-dev fails to install

    Describe the bug

    When we execute ./.github/scripts/setup-system.sh the follwing error comes up

    Package libavresample-dev is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source

    E: Package 'libavresample-dev' has no installation candidate An error occurred while performing the task on line 78 Setup for Spacedrive development failed

    Reproduction

    1. Execute ./.github/scripts/setup-system.sh

    Expected behavior

    Must be successful installation.

    Platform and versions

    7.9.5
    cargo 1.63.0 (fd9c4297c 2022-07-01)
    rustc 1.63.0 (4b91a6ea7 2022-08-08)
    
    OS: Ubuntu 22.04
    Processor: AMD® Ryzen 7 5800h with radeon graphics × 16
    Memory: 16GB
    

    Stack trace

    [email protected]:~/spacedrive$ ./.github/scripts/setup-system.sh
    Setting up your system for Spacedrive development!
    Detected 'apt' based distro!
    Hit:1 https://apt.releases.hashicorp.com jammy InRelease
    Hit:2 https://download.docker.com/linux/ubuntu jammy InRelease                                                                                                                       
    Hit:3 https://dl.google.com/linux/chrome/deb stable InRelease                                                                                                                        
    Hit:4 http://packages.microsoft.com/repos/code stable InRelease                                                                                                                      
    Hit:5 http://security.ubuntu.com/ubuntu jammy-security InRelease                                                                                                                     
    Hit:6 https://deb.nodesource.com/node_16.x jammy InRelease                                                                                                               
    Hit:7 http://bd.archive.ubuntu.com/ubuntu jammy InRelease                                                                              
    Hit:8 https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease                                    
    Hit:9 http://bd.archive.ubuntu.com/ubuntu jammy-updates InRelease                 
    Hit:10 http://bd.archive.ubuntu.com/ubuntu jammy-backports InRelease              
    Hit:11 https://ppa.launchpadcontent.net/git-core/ppa/ubuntu jammy InRelease       
    Reading package lists... Done                              
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    Package libavresample-dev is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source
    
    E: Package 'libavresample-dev' has no installation candidate
    An error occurred while performing the task on line 78
    Setup for Spacedrive development failed
    

    Additional context

    No response

    kind/bug status/needs-repro-confirmation 
    opened by Mamun-Developer 2
  • [ENG-210] Sidebar is transparent with no blur on Linux

    [ENG-210] Sidebar is transparent with no blur on Linux

    Describe the bug

    The sidebar for Spacedrive is transparent and not blurred like it's supposed to be (specifically on macOS).

    Reproduction

    1. git pull && pnpm i && pnpm prep && pnpm desktop dev
    2. Observe sidebar

    Expected behavior

    I'd assume that the sidebar background would just be a solid color because I don't think blur can be native on Linux (or Windows).

    Platform and versions

    ➜  spacedrive git:(main) pnpm --version && cargo --version && rustc --version
    7.5.2
    cargo 1.61.0 (a028ae4 2022-04-29)
    rustc 1.61.0 (fe5b13d68 2022-05-18)
    
    ➜  spacedrive git:(main) neofetch
                 /////////////                [email protected] 
             /////////////////////            ----------- 
          ///////*767////////////////            MS-7B98 1.0 
        //////7676767676*//////////////          Pop!_OS 22.04 LTS 
       /////76767//7676767//////////////         6 hours, 34 mins 
      /////767676///*76767///////////////        kitty 
     ///////767676///76767.///7676*///////       Catppuccin-Macchiato-Dark-BL 
    /////////767676//76767///767676////////      12.32GiB / 31.29GiB (39%) 
    //////////76767676767////76767/////////      Lil B - The Frozen Tape - Patrick Star 
    ///////////76767676//////7676//////////
    ////////////,7676,///////767///////////                           
    /////////////*7676///////76////////////                           
    ///////////////7676////////////////////
     ///////////////7676///767////////////
      //////////////////////'////////////
       //////.7676767676767676767,//////
        /////767676767676767676767/////
          ///////////////////////////
             /////////////////////
                 /////////////
    
    
    
    
    ### Stack trace
    
    _No response_
    
    ### Additional context
    
    _No response_
    kind/bug status/needs-triage 
    opened by mmattbtw 2
  • [ENG-200] Enter on keyboard doesn't cause modal to submit

    [ENG-200] Enter on keyboard doesn't cause modal to submit

    For example in the modal for adding a new device (trigged from "Add device" on Overview page), when pressing the enter key inside the text field the modal does not get submitted. Oscar Beaumont on Linear

    good first issue kind/improvement client/desktop client/web 
    opened by spacedrive-bot 10
Owner
Spacedrive
The universal file manager.
Spacedrive
A virtual filesystem layer for WASI

wasi-vfs A virtual filesystem layer for WASI. NOTICE: This project currently supports only WASI applications on the top of wasi-libc This project prov

Yuta Saito 46 Sep 18, 2022
Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS

Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS. It provides a tag-based view of your files by removing the hierarchy constraints typically imposed on files and folders. In other words, it allows you to think about your files not as objects stored in folders, but as objects that can be filtered by folders.

Andrew Moffat 516 Sep 19, 2022
The reference implementation of the Linux FUSE (Filesystem in Userspace) interface

libfuse About FUSE (Filesystem in Userspace) is an interface for userspace programs to export a filesystem to the Linux kernel. The FUSE project consi

null 4.1k Sep 19, 2022
A Tauri Plugin to watch the filesystem for changes

Tauri Plugin FSWatch This plugin provides a "classical" Tauri Plugin Interface to watch changes on files and directories through notify. Architecture

Tauri 26 Sep 11, 2022
Open your operating system's file browser from Garry's Mod.

Open your operating system's file browser from Garry's Mod.

Earu 5 Apr 13, 2022
Minty is an amazingly fast file deduplication app built in rust with a rust user interface.

minty Project Minty has a new look and feel!!! Minty is an amazingly fast file deduplication app built in rust with a rust user interface. I say super

null 27 Sep 21, 2022
Temporary file library for rust

tempfile A secure, cross-platform, temporary file library for Rust. In addition to creating temporary files, this library also allows users to securel

Steven Allen 700 Sep 17, 2022
Zero-details, privacy-focused in-app file system.

ZboxFS ZboxFS is a zero-details, privacy-focused in-app file system. Its goal is to help application store files securely, privately and reliably. By

Zbox 1.3k Sep 15, 2022
⚡ Garry's Mod module that boosts performance by moving -condebug file I/O to a separate thread

This is a Garry's Mod server module that moves -condebug file I/O out of the main thread, which should significantly improve performance for noisy servers.

William 29 Sep 16, 2022
fftp is the "Fast File Transport Protocol". It transfers files quickly between computers on a network with low overhead.

fftp fftp is the "Fast File Transport Protocol". It transfers files quickly between computers on a network with low overhead. Motivation FTP uses two

leo 4 May 12, 2022
rswatch 🔎 is simple, efficient and reliable file watcher.

rswatch File watcher rswatch is a simple, reliable and efficient file watcher, it can watch a single file or a directory and run arbitrary commands wh

Eugene 2 Aug 5, 2022
Rustronomy-fits - a Rustronomy tool for FITS file I/O

Rustronomy-fits - a Rustronomy tool for FITS file I/O Rustronomy-fits provides I/O tools for reading, writing and parsing FITS files. It is currently

Raúl 1 Apr 7, 2022
Dufs is a distinctive utility file server that supports static serving, uploading, searching, accessing control, webdav...

Dufs (Old Name: Duf) Dufs is a distinctive utility file server that supports static serving, uploading, searching, accessing control, webdav... Featur

null 1.5k Sep 23, 2022
High level FFI binding around the sys mount & umount2 calls, for Rust

sys-mount High level FFI bindings to the mount and umount2 system calls, for Rust. Examples Mount This is how the mount command could be written with

Pop!_OS 28 Sep 25, 2022
ergonomic paths and files in rust

path_abs: ergonomic paths and files in rust. This library aims to provide ergonomic path and file operations to rust with reasonable performance. See

Rett Berg 46 Aug 29, 2022
Temporary directory management for Rust

tempdir A Rust library for creating a temporary directory and deleting its entire contents when the directory is dropped. Documentation Deprecation No

null 133 Jun 1, 2022
Extended attribute library for rust.

xattr A small library for setting, getting, and listing extended attributes. Supported Platforms: Linux, MacOS, FreeBSD, and NetBSD. API Documentation

Steven Allen 30 Jun 23, 2022
Rust implemention of Ascon

Ascon Pure Rust implementation of the lightweight Authenticated Encryption and Associated Data (AEAD) Ascon-128 and Ascon-128a. Security Notes This cr

Sebastian Ramacher 4 May 28, 2022