* Working External Storage Locked Locations We can now add Downloads (A location locked by MANGE_EXTERNAL_STORAGE) on Android. * Navigate to added page Adding location now navigates to the added location explorer. * Way simpler solution Found a way simpler solution, that doesn't require query calls. * Clean up Remove unused import calls. * Attempt to get Location Watcher working Well, Location watcher doesn't want to run. But I wanted to push the `xcrun` command to the README. Also, locations now actually show files, but break on displaying recursive folders (folder content in a folder). * Quick clean up + Working full rescan locations.fullRescan works now on mobile with 0 issues. It can recognize orphan paths and when new files are added. But, Location-Watcher for some reason doesn't want to run automatically when the file system change occurs. * Working iOS Watcher Location Watcher now works for iOS when files are created. However, it can't understand the file delete event yet. * Functional watcher for iOS The watcher system is now fully functional on iOS, with a few bugs to patch regarding the delete function freezing the system up. * Update ios.rs * See Logs on Android Finally figured out how to see the logs from Android. * Update CONTRIBUTING.md * Updated to Stable & Working * Working Android Build + Explorer working again * wip * wip * Squashed commit of the following: commita7bc3b908dMerge:201913a1898a81daAuthor: Arnab Chakraborty <11457760+Rocky43007@users.noreply.github.com> Date: Tue Feb 6 16:18:42 2024 -0500 Merge branch 'main' of https://github.com/Rocky43007/spacedrive commit898a81dae4Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Tue Feb 6 19:30:53 2024 +0300 [ENG-1594] Change online to connected (#2060) : This is a combination of 3 commits. Change online to connected remove offline json commit581cbf6a27Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Tue Feb 6 17:49:16 2024 +0300 [MOB-54] UI Fixes (#2059) * UI fixes - rive animation - SD version in settings - and more * twStyle commitc178b91fb0Author: Jesse Rodrigo <39565615+JSSRDRG@users.noreply.github.com> Date: Tue Feb 6 11:41:05 2024 +0100 Dutch locale (#2054) * nl locale * add nl entry * improve some wording commit18ab7cc1a4Author: Brendan Allan <brendonovich@outlook.com> Date: Tue Feb 6 17:13:47 2024 +0800 [ENG-1548] use in-memory instances when sending messages to cloud (#2057) * use in-memory instances when sending messages to cloud * comments commit8dd7e3586eAuthor: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Tue Feb 6 06:03:33 2024 +0300 [MOB-47] Location screen and header updates (#2056) * Location screen and header updates * use tw sizing * remove un-necessary prop * Nit: change name commita7bffc4a4eAuthor: Arnab Chakraborty <11457760+Rocky43007@users.noreply.github.com> Date: Mon Feb 5 07:06:47 2024 -0500 Update to Expo 50 and Fix to Rive Crashing (#2049) * Update Mobile App to Expo SDK 50 + Fix to Rive Crashing * Added `metro-react-native-babel-transformer` to fix CI commit72c51d5649Author: Utku <74243531+utkubakir@users.noreply.github.com> Date: Sun Feb 4 23:52:26 2024 +0300 Fix Chinese language (#2050) * fix chinese * remove console.log * Squashed commit of the following: commitec55d9f182Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Wed Feb 7 20:25:04 2024 +0300 [MOB-55] Video animation for onboarding on mobile and desktop (#2065) * video animation for onboarding on mobile and desktop run assets gen cleanup declare mp4 type * update metro config to transform video files from sd assets * test ci without native video exclude * casing? * remove to add back again due to github * add videos back * versions * no need to transform --------- Co-authored-by: Utku Bakir <74243531+utkubakir@users.noreply.github.com> commitcd97c73cf4Author: Utku <74243531+utkubakir@users.noreply.github.com> Date: Wed Feb 7 16:47:55 2024 +0300 More translations (#2051) * translations * more translation keys * all the translations * Added Cleaning Script * Prep for PR * Clean up + `cargo fmt` * Update mod.rs * Squashed commit of the following: commitd51773caafAuthor: Utku <74243531+utkubakir@users.noreply.github.com> Date: Fri Feb 9 18:42:42 2024 +0300 Update readme & contributing guide & language stuff (#2071) * updates * keep common errors * fix selector being empty for english * sort by label * update contributing * update ndk and docs * Update CONTRIBUTING.md commit76de9d5fa4Author: Brendan Allan <brendonovich@outlook.com> Date: Fri Feb 9 21:20:51 2024 +0800 sync support for labels (#2070) * more sync support for file paths + saved searches * sync support for labels * update sync prisma generator to support more than tags * workey * don't do illegal db migration * use name as label id in explorer commitd3236ae735Author: Brendan Allan <brendonovich@outlook.com> Date: Fri Feb 9 16:17:04 2024 +0800 More sync support for file paths + saved searches (#2067) more sync support for file paths + saved searches * Update build-rust.sh Fix script so it doesn't build debug apps always now. * Add Tests for iOS * Update android.rs PR 1812 was closed, therefore changing the message to mention the branch instead. * Change `--debug` to `--release` Oops * Remove debug cargo crate for `notify-rs` * Spelling Fix on `android.rs` * Squashed commit of the following: commit8c3462a27aAuthor: Ericson "Fogo" Soares <ericson.ds999@gmail.com> Date: Mon Feb 26 16:45:58 2024 -0300 [ENG-1513] Better integration between Jobs and processing Actors (#1974) * First draft on new task system * Removing save to disk from task system * Bunch of concurrency issues * Solving Future impl issue when pausing tasks * Fix cancel and abort * Bunch of fixes on pause, suspend, resume, cancel and abort Also better error handling on task completion for the user * New capabilities to return an output on a task * Introducing a simple way to linear backoff on failed steal * Sample actor where tasks can dispatch more tasks * Rustfmt * Steal test to make sure * Stale deps cleanup * Removing unused utils * Initial lib docs * Docs ok * Memory cleanup on idle --------- Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com> commit9da5fed74cAuthor: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon Feb 26 18:53:37 2024 +0300 [ENG-1625] Spacedrop UI correct hover condition & spacing (#2127) * improve spacedrop ui with correct hover & spacing * remove commited037df4c1Author: Matteo Galiazzo <50683509+gekoxyz@users.noreply.github.com> Date: Mon Feb 26 16:20:41 2024 +0100 added it locale, added it entry (#2066) * added it locale, added it entry * Apply suggestions from code review Co-authored-by: Matteo Martellini <matteo@mercxry.me> * add missing keys and a readme about the script --------- Co-authored-by: Utku <74243531+utkubakir@users.noreply.github.com> Co-authored-by: Matteo Martellini <matteo@mercxry.me> commit7cae4cb78bAuthor: jake <77554505+brxken128@users.noreply.github.com> Date: Mon Feb 26 15:17:28 2024 +0000 Clean-up MacOS window closing behaviour code (#2124) * fix: delete dead/unused file * refactor: add the window event handler with the rest of them * refactor: formatting commit4ef515d974Author: Oscar Beaumont <oscar@otbeaumont.me> Date: Mon Feb 26 15:23:48 2024 +0800 rspc over P2P (#2112) * wip: rspc over p2p * wip * rspc over P2P * Cleanup + error handling * slight cleanup * Using Hyper for HTTP streaming + websockets commit3eb8cfe4afAuthor: Utku <74243531+utkubakir@users.noreply.github.com> Date: Fri Feb 23 11:26:58 2024 -0500 Fix android thumbs (#2121) * replace react-native-fs with an active fork * time sink * fix commitca10749a9cAuthor: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Fri Feb 23 00:28:35 2024 +0300 Mob: cleanup warning (#2122) Update Categories.tsx commit0e3b4d84e5Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Thu Feb 22 16:08:41 2024 +0300 MOB: Settings paddings (#2120) padding tweaks commite92d96ff05Author: nikec <43032218+niikeec@users.noreply.github.com> Date: Thu Feb 22 13:53:02 2024 +0100 [ENG-1619] Add spacedrop to the context menu (#2119) add spacedrop to context menu commitedfbdeb9d7Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Thu Feb 22 15:47:08 2024 +0300 [ENG-1618] Spacedrop UI (#2118) * spacedrop ui update * i18n and description * glitch: remove ! * already in progress i18n * more i18n commitb4edf5b210Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Thu Feb 22 15:20:31 2024 +0300 [MOB-62] Spacing & padding tweaks (#2117) Spacing & padding tweaks commitf4e68497edAuthor: Vítor Vasconcellos <vasconcellos.dev@gmail.com> Date: Thu Feb 22 03:15:36 2024 -0300 Fix core test and CI breaking (#2116) Fix core test passing inverted arguments to sync_db_entry macro commitf2ce41b9b4Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Wed Feb 21 17:19:40 2024 +0300 Mob: better visually width fitting for categories (#2114) * Visually width fitting for categories * remove padding commita0b7cf21fcAuthor: Vítor Vasconcellos <vasconcellos.dev@gmail.com> Date: Wed Feb 21 11:18:15 2024 -0300 Fix mobile CI + Some small CI improvements (#2113) Fix mobile CI - Use rust envvars in all workflows - Use rust envvars and mold when build sd-server docker commitbadae3c75aAuthor: Utku <74243531+utkubakir@users.noreply.github.com> Date: Wed Feb 21 08:26:05 2024 -0500 [MOB-37, MOB-38, MOB-39] Preview for PDF, Text and Media files (#2098) * version & microphonePermission text & eslint * remove polyfill as hermes supports intl now * why do we have solid on mobile? * cleanup * add solid back =_= * pnpm lock * we hate relative paths here * android config * open file logic * visual tweaks --------- Co-authored-by: ameer2468 <33054370+ameer2468@users.noreply.github.com> commitbfd6e813c0Author: Brendan Allan <brendonovich@outlook.com> Date: Wed Feb 21 22:42:10 2024 +1100 media data sync (#2102) * basic sync operation backfill * media data sync * sync entry helpers * fix sync generator * nicer * re-add key_id commitc1e98dcb0dAuthor: Vítor Vasconcellos <vasconcellos.dev@gmail.com> Date: Wed Feb 21 06:27:40 2024 -0300 Update github actions due to nodejs 16 deprecation (#2107) * Update github actions due to nodejs 16 deprecation - Replace archived actions-rs/clippy-check with maintained fork actions-rs-plus/clippy-check - Replace redhat-actions/push-to-registry with updated fork Eusebiotrigo/push-to-registry - Point redhat-actions/buildah-build and softprops/action-gh-release to current master to fix nodejs deprecation * Build the correct ios core rust arch for CI runs * Build ios app for the same arch as the host in Mobile CI * Some changes to try and make cache-factory faster and avoid failing so much * Add trigger to run cache-factory on pull requests when there are changes to itself * Attempt to fix sed usage on macOS * Don't treat warning as errors * Fix windows * Fix windows 2 * Use target ad cache key for rust to differentiate between macOS x86_64 and arm64 * Use faster/better linkers to compile for macOS, Linux and Windows * Fix missing shell in action * Fix typo * Fix missing shell in action 2 * Fix mold download - Replace bsdtar with plain tar * Fix permission denied when extracting mold * Remove zld * Don't restore cache for rustfmt - Remove target symlink to C:/ in an attempt to speed-up windows CI * Fix typo * Restore target symlink on windows - Removing it didn't make CI faster * Run Mobile on macos-14 commita7d836a922Author: Oscar Beaumont <oscar@otbeaumont.me> Date: Wed Feb 21 16:13:40 2024 +0800 Fix P2P not working for libraries (#2031) * P2P Debug route * Remove legacy peer to peer pairing process * Fix error typo * Sync instances with cloud * Upgrade deps + extended instance data * Create instance with extended metadata * Auto sync instances * Actually `.await` * bruh * sync library info * this isn't gonna work * only sleep cloud receiver when no more messages (#1985) * [ENG-1567] Fix renaming (#1986) fix rename * only sleep cloud receiver when no more messages * use in memory instances during cloud receive (#1995) * use in memory instances during cloud receive * is_empty --------- Co-authored-by: nikec <43032218+niikeec@users.noreply.github.com> * fix type error * wip * make mdns mdns better * rebuild state * Add hooks + listeners + discovered state * Split into crates * wip fixing core + wip merging Spacetime into `sd-p2p2` * `SmartLockGuard` + `Listener` * Make `sd-core` compile * Reenable all operation receivers * Fix all broken code within `sd-core` * minor fixes found in review * Bring in `libp2p` + restructure `sd-p2p` for the gazillion-th time * whoops * Compile no matter the (runtime) cost * fixing merge issues * wip * a * b * C * Handle port betterer * c * Migrate node config * a * no crash on startup * wip * a * jdfhskjfsg * a * fix discovery * a bunch of fixes * getting Spacedrop working * I don't get why it no worky * debug example * a * wip * wip * removing logging from stream impl * wip: shit is fucked * Redo quic integration + Spacedrop working * Fix shutdown - deadlocks + shutdown peers * Add Prisma migrations * Fix shutdown * a * fix * cleanup * The lord clippy hath spoken * disable P2P settings for now --------- Co-authored-by: Brendan Allan <brendonovich@outlook.com> Co-authored-by: nikec <43032218+niikeec@users.noreply.github.com> commit146838d19eAuthor: Julian Braha <julianbraha@gmail.com> Date: Tue Feb 20 20:06:05 2024 +0000 Improve error handling by using decode::Error instead of io::Result (#2078) Use decode::Error instead of io::Result commit145cd20805Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Tue Feb 20 22:59:11 2024 +0300 [MOB-59] Empty UI for locations and tags screen (#2110) Empty UI for locations and tags screen commit704d03a329Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Tue Feb 20 22:47:14 2024 +0300 [MOB-60] locations & tags query invalidation on updates (#2111) Trigger UI updates on location adding/delete and tags lint name commit45b9e35744Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Tue Feb 20 13:05:53 2024 +0300 mousedown fix (#2108) quick mistake fix commit25f9f03010Author: Brendan Allan <brendonovich@outlook.com> Date: Tue Feb 20 20:22:34 2024 +1100 Basic sync operation backfill (#2101) * basic sync operation backfill * no changes commitce0203ff74Author: Arnab Chakraborty <11457760+Rocky43007@users.noreply.github.com> Date: Tue Feb 20 01:33:52 2024 -0500 New Android Build Script (#2096) * New Android Build Script * Clean up + Works for CI now * Simplify android build.sh - Fix /var/home/vitor fallback for Linux systems - Run a single cargo ndk for all targets (not parallel build, but a bit faster) - Fix android target s/x86/x86_64/ - Format setup.sh - Minor improvements to rust mobile targets installation step in setup.sh * Add notice to CONTRIBUTING that only Java <= 17 is supported for building android - Make prettier ignore some mobile build artifacts * When in CI, Fix build android core for host architecture --------- Co-authored-by: Vítor Vasconcellos <vasconcellos.dev@gmail.com> commitd280895d28Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon Feb 19 23:45:29 2024 +0300 [ENG-1615] bg intro video fixed (#2104) * video intro bg * test hsl * test video bg * run tests * comment * mob intro * git glitch * git * webm type commit9742dc7ab4Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon Feb 19 19:12:11 2024 +0300 [MOB-58] Settings routes new design & more (#2103) * wip: redesigning settings pages * Edit location redesign & more * right actions * cleanup commit94008de7f3Author: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon Feb 19 18:23:20 2024 +0300 [ENG-1612] Fix mouse nav forwards and backwards (#2105) Fix mouse nav forwards and backwards * Clean up commented code * Clean up + Remove `LocationOnboarding.tsx`
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.
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 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.
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 assdcore. 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 appsdesktop,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:eslintconfigurations (includeseslint-config-next,eslint-config-prettierand alltsconfig.jsonconfigs 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).

