Spacedrive is an open source cross-platform file explorer, powered by a virtual distributed filesystem written in Rust.
Go to file
Aditya 1b6b8973d4
[ENG 946] Added zooming for image preview (#2368)
* added buttons for zoom in and out

* currently added only English translation

* added magnification prop

* added a `div` Wrapper for Scrolling

* Update Original.tsx

* Update de/common.json

* Update es/common.json

* Update fr/common.json

* Update it/common.json

* Update js/common.json

* Update nl/common.json

* Update ru/common.json

* Update tr/common.json

* Update by/common.json

* Update zh-CN/common.json

* Update zh-TW/common.json

* Reset Zoom

* Squashed commit of the following:

commit 36ae94c998874b5aaf79be0b87d1c05c605b1ff0
Merge: df0201729 9126332df
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Sat Apr 27 21:35:22 2024 +0530

    Merge branch 'spacedriveapp:main' into main

commit 9126332df1
Author: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Date:   Sat Apr 27 18:08:07 2024 +0300

    [MOB-89] Separate headers (#2408)

    * separate headers

    improvements to headers

    cleanup

    missed cleanup

    documentation

    * Update SearchStack.tsx

commit a61a7bee65
Author: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Date:   Fri Apr 26 20:36:21 2024 +0300

    Windows mouse resize fix (#2407)

    Update useMouseItemResize.ts

commit 9384bade61
Author: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
Date:   Thu Apr 25 21:29:55 2024 -0300

    Revert OpenDAL for ephemeral location (#2399)

    * Revert "OpenDAL - Ephemeral Locations (#2283)"

    This reverts commit 2848782e8e.

    * Format

    * Fix some diff problems

commit e76ff78f3c
Author: Arnab Chakraborty <11457760+Rocky43007@users.noreply.github.com>
Date:   Thu Apr 25 20:29:55 2024 -0400

    Alpha 0.2.13 (#2394)

    bump

commit 476447ab70
Author: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
Date:   Thu Apr 25 21:20:36 2024 -0300

    Fix server release again (#2403)

    * Fix server release again

    * small improvement to regex

commit ab46cffa11
Author: Jamie Pine <32987599+jamiepine@users.noreply.github.com>
Date:   Thu Apr 25 14:37:25 2024 -0700

    Reactive file identification (#2396)

    * yes

    * Explain mysterious if

    * Use id alias just for consistency reasons

    * yes

    * Rust fmt

    * fix ts

    ---------

    Co-authored-by: Ericson "Fogo" Soares <ericson.ds999@gmail.com>
    Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>

commit 64bbce32e9
Author: Utku <74243531+utkubakir@users.noreply.github.com>
Date:   Thu Apr 25 16:06:35 2024 -0400

    Fix title (#2398)

    * fix task manager title

    * 2 more config item

commit 310eb28e63
Author: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
Date:   Thu Apr 25 14:58:50 2024 -0300

    Fix `cargo test`  & improve `pnpm prep` native deps download (#2393)

    Couple of fixes
     - Increase `pnpm prep` connection timeout to 5min, to better handle downloading native deps under flaky network conditions
     - Fix `cargo test` and cache-factory CI
     - Clippy and fmt

commit b86d3d27cb
Author: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Date:   Thu Apr 25 20:29:46 2024 +0300

    [ENG-1762] Reverse mouse resize direction (#2395)

    Update useMouseItemResize.ts

commit 449337285d
Author: Artsiom Voitas <artsiom.voitas@gmail.com>
Date:   Thu Apr 25 19:26:36 2024 +0300

    Improved translation into Belarusian and Russian (#2391)

    * feat: improved translation on belarusian and russian

    * updated keys related to vacuum

    * updated keys related to vacuum

commit b1ffbee9b1
Author: Jamie Pine <32987599+jamiepine@users.noreply.github.com>
Date:   Thu Apr 25 09:14:43 2024 -0700

    Fix thumbnail generation reactivity  (#2392)

    fix

commit 73f521a3b8
Author: Ericson "Fogo" Soares <ericson.ds999@gmail.com>
Date:   Thu Apr 25 01:06:11 2024 -0300

    [ENG-1629] Write new file identifier with the task system (#2334)

    * Introduce deep vs shallow for indexer tasks with different priorities

    * Make job wait to dispatch if it's paused

    * Extract file metadata task on file identifier job

    * Some initial drafts on object processor task

    * Object processor task for file identifier

    * File Identifier job and shallow

commit 463babe1d4
Author: Heavysnowjakarta <54460050+HeavySnowJakarta@users.noreply.github.com>
Date:   Thu Apr 25 07:38:34 2024 +0800

    I18n polish (zh-cn) (#2337)

    * i18n some polishes

    * reviewed 1st-100th strings of zh-cn i18n

    * change the indent to 2 space characters

commit 2c777e53f1
Author: Vítor Vasconcellos <vasconcellos.dev@gmail.com>
Date:   Wed Apr 24 20:37:38 2024 -0300

    Fix core test (#2386)

    * Fix core test

    * Import CompressedCRDTOperations

    ---------

    Co-authored-by: Ericson "Fogo" Soares <ericson.ds999@gmail.com>

commit 57b0139240
Author: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Date:   Thu Apr 25 02:34:24 2024 +0300

    [MOB-90] Visual adjustments (#2383)

    * Visual adjustments

    * Update Tags.tsx

    * cleanup

    * remove prop

    * remove hitslop

    * sectionlist

commit e0f540a1be
Author: Arnab Chakraborty <11457760+Rocky43007@users.noreply.github.com>
Date:   Wed Apr 24 14:20:51 2024 -0400

    Small Trash UI fixes (#2385)

    * Update index.tsx

    * More ui fixes + toast

    * Update index.tsx

    * Add Translations

commit 279aaf2c50
Author: Utku <74243531+utkubakir@users.noreply.github.com>
Date:   Wed Apr 24 12:48:14 2024 -0400

    hide placeholders (#2384)

commit 3bed56d4d9
Author: Utku <74243531+utkubakir@users.noreply.github.com>
Date:   Wed Apr 24 10:25:22 2024 -0400

    Alpha 0.2.12 (#2382)

    * pnpm

    * alpha 0.2.12

    * make pnpm version non strict

commit 0b6bd050a0
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Wed Apr 24 18:09:18 2024 +0800

    Fix main (#2381)

    * fix

    * fix

commit ae6c49b0ba
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Wed Apr 24 16:43:30 2024 +0800

    Improved p2p settings (#2379)

    improved p2p settings

commit 918c2a987d
Author: Brendan Allan <brendonovich@outlook.com>
Date:   Wed Apr 24 16:26:50 2024 +0800

    Batch ingest sync operations (#2378)

    batch ingest sync operations

commit 643bd3a142
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Wed Apr 24 16:27:31 2024 +0800

    Block size (#2377)

    Block size + some Clippy

commit e009a0478c
Author: Utku <74243531+utkubakir@users.noreply.github.com>
Date:   Tue Apr 23 19:20:59 2024 -0400

    Revert "[MOB-85] Better headers" (#2376)

    Revert "[MOB-85] Better headers (#2375)"

    This reverts commit 6a556a457d.

commit 6a556a457d
Author: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Date:   Wed Apr 24 01:21:31 2024 +0300

    [MOB-85] Better headers (#2375)

    * wip

    * improve headers

    * cleanup

commit b4037d6537
Author: Arnab Chakraborty <11457760+Rocky43007@users.noreply.github.com>
Date:   Mon Apr 22 15:46:10 2024 -0400

    Open Trash from the application (#2338)

    * Open Trash from the application

    * Working Trash Sidebar Button

    * Small UI fixes

    * Update common.json

    * Move openTrash to Tauri Command instead of RSPC

    * format and remove type assertion

    ---------

    Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>

commit 745399ecab
Author: nikec <43032218+niikeec@users.noreply.github.com>
Date:   Mon Apr 22 20:54:42 2024 +0200

    [ENG-1751] Improve active item handling (#2367)

    base

commit 959ccdfd98
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Mon Apr 22 20:43:44 2024 +0800

    Reintroduce P2P Settings (#2365)

    * redo backend to be less cringe

    * fixed up

commit ef969f1ada
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Mon Apr 22 19:47:47 2024 +0800

    Remove indexer rules from ephemeral indexer (#2319)

    remove indexer rules from ephemeral indexer

commit 548fff1e96
Author: Brendan Allan <brendonovich@outlook.com>
Date:   Mon Apr 22 18:29:54 2024 +0800

    Ignore empty object/filepath search filters (#2371)

commit 52c5c2bfe7
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Mon Apr 22 18:28:35 2024 +0800

    Show errors creating P2P listeners on startup (#2372)

    * do it

    * fix accuracy

    * `useRef` as god intended

commit 20e5430eaf
Author: nikec <43032218+niikeec@users.noreply.github.com>
Date:   Mon Apr 22 12:27:30 2024 +0200

    [ENG-1753] Only open quick preview when items are selected (#2374)

    only toggle when items are selected

commit 13e4ff6107
Author: nikec <43032218+niikeec@users.noreply.github.com>
Date:   Mon Apr 22 12:25:53 2024 +0200

    [ENG-1752] Fix explorer selection reset when closing quick preview via keybind (#2373)

    prevent selection reset

commit 51c94c88e3
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Mon Apr 22 18:12:06 2024 +0800

    Fix Docker start command (#2370)

commit d689e7e58a
Author: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Date:   Sun Apr 21 17:28:27 2024 +0300

    [ENG-1750] Update context menu colors (#2369)

    update context menu colors

commit df0201729278dfa11126b41922e404146c151a35
Merge: 5624054f1 619a4c8b6
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Sat Apr 20 13:14:52 2024 +0530

    Merge branch 'main' of https://github.com/Raghav-45/spacedrive

commit 947354f6c0
Author: Oscar Beaumont <oscar@otbeaumont.me>
Date:   Sat Apr 20 11:21:20 2024 +0800

    Remove files over p2p feature (#2364)

    * goodbye

    * types

    * a

commit f97a761346
Author: ameer2468 <33054370+ameer2468@users.noreply.github.com>
Date:   Sat Apr 20 02:18:54 2024 +0300

    [ENG-1745] Mouse wheel resize (#2366)

    * Resize layout items with mouse wheel

    icon/item size using mouse wheel

    Update useMouseItemResize.ts

    Update useMouseItemResize.ts

    * improve comment

    * fb

    * Update useMouseItemResize.ts

    * Update IconSize.tsx

commit 619a4c8b6dfe7239bce1b54b528a3176aa7350da
Merge: df4f6279b 795bb18d1
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Tue Aug 29 16:59:18 2023 +0530

    Merge branch 'spacedriveapp:main' into main

commit df4f6279bfbd7bdaa120212b19db72cfae0d17c7
Merge: dfb519206 e4b03619d
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Tue Aug 22 20:44:09 2023 +0530

    Merge branch 'spacedriveapp:main' into main

commit dfb51920667c24ff05b16ebc63bf4aea33225002
Merge: c1bfc3296 a0a1c6766
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Thu Aug 17 21:22:49 2023 +0530

    Merge branch 'spacedriveapp:main' into main

commit c1bfc3296ee7686a6a142d74a91cf13cf4bd7677
Merge: de274c331 9c0aec816
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Tue Aug 15 19:43:43 2023 +0530

    Merge branch 'spacedriveapp:main' into main

commit de274c3317cff942e9c3a4f2c8c08819a897d251
Merge: 14faf0bce c86a728a1
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Sun Aug 13 21:54:16 2023 +0530

    Merge branch 'spacedriveapp:main' into main

commit 14faf0bce2ee9123bf66706812357d6aefc44dea
Merge: 3e013d8bd baf032883
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Thu Aug 10 06:54:01 2023 -0400

    Merge branch 'spacedriveapp:main' into main

commit 3e013d8bdef2ba59536c90044be4312336b6cd8a
Merge: 2e702f2eb 7708ba585
Author: Aditya <raghavbhai4545@gmail.com>
Date:   Tue Aug 8 11:21:07 2023 -0400

    Merge branch 'spacedriveapp:main' into main

commit 2e702f2eba
Author: Brendan Allan <brendonovich@outlook.com>
Date:   Tue Aug 8 07:58:58 2023 -0700

    Mention pnpm dev:web in CONTRIBUTING.md

commit a1c5c55a37
Author: Raghav-45 <77260113+Raghav-45@users.noreply.github.com>
Date:   Tue Aug 8 18:49:50 2023 +0530

    Update command to run server

    I encountered an issue where the cargo run -p server command was not functioning properly. It took me nearly an hour to pinpoint the problem, which turned out to be related to a modification in the Cargo.toml file. This change was made by @Brendonovich during their work on issue #1181, which pertained to *syncing ingestion*.

    Initially, I believed that re-cloning the repository from GitHub would resolve the issue. However, after attempting this solution exactly 5 times, I realized my assumption was incorrect. Despite the time and effort spent, I was able to successfully identify and rectify the problem.

* conflicts

* Revert "conflicts"

This reverts commit 2f1066a0a3.

* Revert "Squashed commit of the following:"

This reverts commit cd2435edaf.

* change in line endings from 'LF' to 'CRLF'.

* Update common.json

* Update common.json

* Update common.json

* fixed indent

---------

Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com>
2024-04-30 00:53:40 +00:00
.cargo Update github actions due to nodejs 16 deprecation (#2107) 2024-02-21 09:27:40 +00:00
.cspell Roadmap updates (#2209) 2024-03-16 01:34:11 +00:00
.github Fix potential github action smells (#2412) 2024-04-29 20:48:16 +00:00
.vscode I18n polish (zh-cn) (#2337) 2024-04-24 23:38:34 +00:00
apps Remove normalised cache (#2390) 2024-04-30 00:36:39 +00:00
core Remove normalised cache (#2390) 2024-04-30 00:36:39 +00:00
crates Remove normalised cache (#2390) 2024-04-30 00:36:39 +00:00
docs Remove normalised cache (#2390) 2024-04-30 00:36:39 +00:00
extensions Linted Files according to the .prettierrc. 2022-04-24 21:16:55 +01:00
interface [ENG 946] Added zooming for image preview (#2368) 2024-04-30 00:53:40 +00:00
packages Remove normalised cache (#2390) 2024-04-30 00:36:39 +00:00
patches [ENG-1472] Frontend bug fixes and dependencies update (#2137) 2024-02-28 23:52:24 +00:00
scripts Fix cargo test & improve pnpm prep native deps download (#2393) 2024-04-25 17:58:50 +00:00
.clippy.toml [ENG-835] Duplicating an empty directory doesn't duplicate nested empty directories (#1213) 2023-08-13 18:34:46 +00:00
.editorconfig [ENG-1479] AI Prototype (#1845) 2023-12-19 09:28:57 +00:00
.eslintignore Fix Windows CI + format (#767) 2023-04-27 07:32:15 +00:00
.gitattributes [ENG-469] Make Prettier and ESLint work together (#706) 2023-04-14 21:21:21 +00:00
.gitignore OpenDAL - Ephemeral Locations (#2283) 2024-04-12 06:51:51 +00:00
.npmrc Remove normalised cache (#2390) 2024-04-30 00:36:39 +00:00
.nvmrc Update npmrc (#2227) 2024-03-21 15:37:43 +00:00
.prettierignore Fix pnpm prep fails to download native-deps on some specific network env (#2275) 2024-04-04 14:19:49 +00:00
.prettierrc.js [ENG-1067] Update phosphor to new package & update sort imports (#1330) 2023-09-11 15:26:44 +00:00
.rustfmt.toml Added crates folder (#389) 2022-09-29 21:02:29 -07:00
Cargo.lock Remove normalised cache (#2390) 2024-04-30 00:36:39 +00:00
Cargo.toml [ENG-1629] Write new file identifier with the task system (#2334) 2024-04-25 04:06:11 +00:00
CODE_OF_CONDUCT.md New team page (#229) 2022-06-14 13:13:09 -07:00
CONTRIBUTING.md Alpha 0.2.12 (#2382) 2024-04-24 14:25:22 +00:00
cspell.config.yaml cleanup(don't hate me): prettier format everything 2023-01-19 19:32:35 -08:00
LICENSE Switch license to AGPL (#307) 2022-07-02 14:26:00 -07:00
package.json Alpha 0.2.12 (#2382) 2024-04-24 14:25:22 +00:00
pnpm-lock.yaml Alpha 0.2.12 (#2382) 2024-04-24 14:25:22 +00:00
pnpm-workspace.yaml Tauri 1.5.2 + normalize and update frontend dev deps (#1579) 2023-10-14 04:27:09 +00:00
README.md Update readme & contributing guide & language stuff (#2071) 2024-02-09 15:42:42 +00:00
rust-toolchain.toml [ENG-1513] Better integration between Jobs and processing Actors (#1974) 2024-02-26 19:45:58 +00:00
SECURITY.md [ENG-1165] Add a security policy and notices to the appropriate READMEs (#1409) 2023-09-30 08:31:38 +00:00
tsconfig.json [ENG-380] Interface code structure improvement (#581) 2023-02-27 21:29:48 -08:00
turbo.json [ENG-927, ENG-735, ENG-766] Fix Updater & Tauri 1.5 (#1361) 2023-10-10 07:30:56 +00:00

Logo

Spacedrive

A file explorer from the future.
spacedrive.com »

Download for macOS (Apple Silicon | Intel) · Windows · Linux · iOS · Android
~ Links for iOS & Android 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.

UPDATE: Spacedrive is under active development, we are in the alpha stage and some features might be missing or disabled in the official release downloads.

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 free file management experience like no other.

App screenshot


What is a VDFS?

A VDFS (virtual distributed filesystem) is a filesystem designed to work across a variety of storage layers. With a uniform API to manipulate and access content across many devices, VDFS is not restricted to a single machine. 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 arent 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 shouldnt 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.

Roadmap

View a list of our planned features here: spacedrive.com/roadmap

Developer Guide

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

Security Policy

Please refer to the security policy for details and information on how to responsibly report a security vulnerability or issue.

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.
  • We also use rspc which allows us to define functions in Rust and call them on the Typescript frontend in a completely typesafe manner, so no unnecessary bugs make it into production!
  • The core (sdcore) is written in pure Rust.

Monorepo structure:

Apps:

  • desktop: A Tauri app.
  • mobile: A React Native app.
  • web: A React webapp.
  • landing: A React app using Next.js.
  • server: A Rust server for the webapp. (planned)
  • cli: A Rust command line interface. (planned)
  • storybook: A React storybook for the UI components.

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.
  • crates: Shared Rust libraries used by the core and other Rust applications.

Interface:

  • interface: The complete user interface in React (used by apps desktop, web)

Packages:

  • assets: Shared assets (images, fonts, etc).

  • client: A TypeScript client library to handle dataflow via RPC between UI and the Rust core.

  • config: eslint configurations (includes eslint-config-next, eslint-config-prettier and all tsconfig.json configs used throughout the monorepo).

  • ui: A React Shared component library.

  • macos: A Swift Native binary for MacOS system extensions (planned).

  • ios: A Swift Native binary (planned).

  • windows: A C# Native binary (planned).

  • android: A Kotlin Native binary (planned).