Spacedrive is an open source cross-platform file explorer, powered by a virtual distributed filesystem written in Rust.
401 matches across 11 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | AGENTS.md | 421 | ````rust |
| LOW | crates/crypto/src/protected.rs | 1 | //! This is a basic wrapper for secret/hidden values |
| LOW | crates/crypto/src/protected.rs | 21 | //! use sd_crypto::Protected; |
| LOW | crates/crypto/src/erase.rs | 1 | use crate::{rng::CryptoRng, Error}; |
| LOW | crates/crypto/src/cookie.rs | 101 | } |
| LOW | crates/crypto/src/cookie.rs | 181 | |
| LOW | crates/archive/Cargo.toml | 21 | # Archive-specific dependencies - workspace versions |
| LOW | crates/archive/src/lib.rs | 1 | //! # sd-archive — Spacedrive's Data Archival System |
| LOW | crates/archive/src/lib.rs | 21 | //! |
| LOW | crates/fs-watcher/src/lib.rs | 1 | //! Platform-agnostic filesystem watcher |
| LOW | crates/fs-watcher/src/lib.rs | 21 | //! - **Broadcast Events**: Multiple subscribers can receive events concurrently |
| LOW | crates/fs-watcher/src/lib.rs | 41 | //! while let Ok(event) = rx.recv().await { |
| LOW | crates/fs-watcher/src/event.rs | 1 | //! Filesystem event types |
| LOW | crates/fs-watcher/src/watcher.rs | 161 | /// Platform-agnostic filesystem watcher |
| LOW | crates/fs-watcher/src/platform/macos.rs | 1 | //! macOS-specific event handler |
| LOW | crates/fs-watcher/src/platform/mod.rs | 1 | //! Platform-specific event handlers |
| LOW | crates/fs-watcher/src/platform/mod.rs | 21 | #[cfg(target_os = "windows")] |
| LOW | crates/images/src/consts.rs | 21 | pub const HEIF_EXTENSIONS: [&str; 8] = [ |
| LOW | crates/images/src/error.rs | 21 | // these errors are either: reliant on external (C dependencies), or are extremely niche |
| LOW | crates/job-derive/src/lib.rs | 1 | //! Derive macros for automatic job registration |
| LOW | crates/task-system/src/error.rs | 21 | /// error type. |
| LOW | crates/task-system/src/lib.rs | 1 | //! |
| LOW | crates/task-system/src/lib.rs | 21 | //! use async_trait::async_trait; |
| LOW | crates/task-system/src/lib.rs | 41 | //! async fn run(&mut self, _interrupter: &Interrupter) -> Result<ExecStatus, SampleError> { |
| LOW | crates/sdk/API_REFERENCE.md | 341 | |
| LOW | crates/sdk/src/lib.rs | 1 | //! Spacedrive Extension SDK |
| LOW | crates/sdk/src/models.rs | 1 | //! Extension Data Models - Person, Album, Place, etc. |
| LOW | crates/log-analyzer/src/lib.rs | 1 | //! Log analysis system for Spacedrive. |
| LOW | crates/media-metadata/src/exif/consts.rs | 1 | use exif::Tag; |
| LOW | crates/media-metadata/src/exif/geographic/location.rs | 21 | } |
| LOW | crates/media-metadata/src/exif/geographic/location.rs | 101 | reader |
| LOW | crates/media-metadata/src/exif/geographic/location.rs | 121 | pub const fn coordinates(&self) -> (f64, f64) { |
| LOW | crates/media-metadata/src/exif/geographic/location.rs | 141 | /// This also re-generates the Plus Code for your coordinates |
| LOW | crates/media-metadata/src/exif/geographic/location.rs | 161 | /// ``` |
| LOW | crates/media-metadata/src/exif/geographic/location.rs | 181 | #[inline] |
| LOW | crates/media-metadata/src/exif/geographic/location.rs | 221 | } |
| LOW | crates/sdk-macros/src/lib.rs | 21 | extension::extension_impl(args, input) |
| LOW | core/tests/normalized_cache_fixtures_test.rs | 1 | //! Normalized Cache Fixtures Test |
| LOW | core/tests/file_sync_test.rs | 1 | //! File Sync Integration Test |
| LOW | core/tests/transitive_sync_backfill_test.rs | 1 | //! Transitive Sync Backfill Test |
| LOW | core/tests/file_move_test.rs | 1 | //! Integration tests for file move operations |
| LOW | core/tests/ephemeral_bridge_test.rs | 1 | //! Ephemeral Directory Event Streaming Bridge Test |
| LOW | core/tests/event_system_test.rs | 1 | //! Event System Integration Test |
| LOW | core/tests/sync_backfill_race_test.rs | 1 | //! Backfill + Live Events Race Condition Test |
| LOW | core/tests/sync_realtime_test.rs | 1 | //! Real-Time Sync Integration Test |
| LOW | core/tests/typescript_bridge_test.rs | 1 | //! TypeScript Integration Test Bridge |
| LOW | core/tests/indexing_responder_reindex_test.rs | 1 | //! Watcher integration test for moving folders into managed locations |
| LOW | core/tests/sync_setup_test.rs | 521 | |
| LOW | core/tests/search_test.rs | 1 | //! Integration tests for search functionality |
| LOW | core/tests/proxy_pairing_test.rs | 1 | //! Proxy pairing test using the cargo test subprocess framework |
| LOW | core/tests/folder_rename_test.rs | 1 | //! Integration tests for folder rename operations |
| LOW | core/examples/indexing_demo.rs | 1 | //! Desktop Indexing Demo - Production Indexer Showcase |
| LOW | core/benchmarks/src/cli/commands.rs | 21 | #[arg(short, long)] |
| LOW | core/benchmarks/src/cli/commands.rs | 41 | /// Directory containing recipe YAML files |
| LOW | core/benchmarks/src/cli/commands.rs | 61 | dataset_root: Option<PathBuf>, |
| LOW | core/src/infra/extension/mod.rs | 1 | //! WASM Plugin System |
| LOW | core/src/infra/extension/host_functions.rs | 21 | pub api_dispatcher: Arc<crate::infra::api::ApiDispatcher>, // For creating sessions |
| LOW | core/src/infra/extension/host_functions.rs | 401 | // TODO: Update metrics |
| LOW | core/src/infra/wire/type_extraction.rs | 301 | /// Intermediate struct to hold API function metadata for Swift code generation |
| LOW | core/src/infra/wire/mod.rs | 1 | //! Wire protocol and type system infrastructure |
| 191 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | crates/archive/src/engine.rs | 125 | // ── Public API ────────────────────────────────────────────────────── |
| MEDIUM | adapters/safari-history/adapter.toml | 34 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/macos-contacts/sync.py | 100 | # ── Load groups ────────────────────────────────────────────────── |
| MEDIUM | adapters/macos-contacts/sync.py | 114 | # ── Load group memberships ─────────────────────────────────────── |
| MEDIUM | adapters/macos-contacts/sync.py | 129 | # ── Load contacts ──────────────────────────────────────────────── |
| MEDIUM | adapters/macos-contacts/adapter.toml | 21 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/github/sync.py | 118 | # ── Determine repos to index ───────────────────────────────────────── |
| MEDIUM | adapters/github/sync.py | 138 | # ── Upsert repository ──────────────────────────────────────────── |
| MEDIUM | adapters/github/sync.py | 164 | # ── Fetch issues (and PRs if enabled) ──────────────────────────── |
| MEDIUM | adapters/github/sync.py | 238 | # ── Fetch comments for this issue ──────────────────────────── |
| MEDIUM | adapters/github/adapter.toml | 49 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/slack/sync.py | 70 | # ── Load users for display name lookup ─────────────────────────────── |
| MEDIUM | adapters/slack/sync.py | 88 | # ── Load channels ──────────────────────────────────────────────────── |
| MEDIUM | adapters/slack/sync.py | 129 | # ── Load messages from channel folders ─────────────────────────────── |
| MEDIUM | adapters/slack/adapter.toml | 33 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/obsidian/adapter.toml | 32 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/apple-notes/sync.py | 82 | # ── Sync folders ────────────────────────────────────────────────── |
| MEDIUM | adapters/apple-notes/sync.py | 118 | # ── Sync notes ──────────────────────────────────────────────────── |
| MEDIUM | adapters/apple-notes/adapter.toml | 21 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/chrome-history/adapter.toml | 41 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/chrome-bookmarks/adapter.toml | 25 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/gmail/sync.py | 26 | # ── Constants ──────────────────────────────────────────────────────────────── |
| MEDIUM | adapters/gmail/sync.py | 33 | # ── Helpers ────────────────────────────────────────────────────────────────── |
| MEDIUM | adapters/gmail/sync.py | 174 | # ── Sync Logic ─────────────────────────────────────────────────────────────── |
| MEDIUM | adapters/gmail/sync.py | 431 | # ── Main ───────────────────────────────────────────────────────────────────── |
| MEDIUM | adapters/gmail/adapter.toml | 72 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/opencode/sync.py | 132 | # ── Fetch sessions ────────────────────────────────────────────── |
| MEDIUM | adapters/opencode/sync.py | 164 | # ── Fetch messages for this session ───────────────────────── |
| MEDIUM | adapters/opencode/sync.py | 175 | # ── Fetch parts for all messages in this session ──────────── |
| MEDIUM | adapters/opencode/sync.py | 194 | # ── Aggregate session stats ───────────────────────────────── |
| MEDIUM | adapters/opencode/sync.py | 251 | # ── Emit session ──────────────────────────────────────────── |
| MEDIUM | adapters/opencode/sync.py | 274 | # ── Emit messages ─────────────────────────────────────────── |
| MEDIUM | adapters/opencode/adapter.toml | 41 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | adapters/macos-calendar/sync.py | 96 | # ── Load calendars ─────────────────────────────────────────────── |
| MEDIUM | adapters/macos-calendar/sync.py | 139 | # ── Load events ────────────────────────────────────────────────── |
| MEDIUM | adapters/macos-calendar/adapter.toml | 26 | # ── Data type schema ──────────────────────────────────────────────────── |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 62 | # ┌──────────────┬────────────┬────────┬──────────┬──────────┐ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 64 | # ├──────────────┼────────────┼────────┼──────────┼──────────┤ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 69 | # └──────────────┴────────────┴────────┴──────────┴──────────┘ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 87 | # ┌──────────────┬───────┬──────────┬──────────┐ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 89 | # ├──────────────┼───────┼──────────┼──────────┤ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 95 | # ├──────────────┼───────┼──────────┼──────────┤ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 97 | # └──────────────┴───────┴──────────┴──────────┘ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 114 | # ┌──────────────┬─────────┬─────────┬──────────┐ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 116 | # ├──────────────┼─────────┼─────────┼──────────┤ |
| MEDIUM | .tasks/core/VSS-005-cli-integration.md | 120 | # └──────────────┴─────────┴─────────┴──────────┘ |
| MEDIUM | apps/cli/src/domains/redundancy/mod.rs | 135 | // ─── rendering helpers ──────────────────────────────────────────────────────── |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | core/tests/sync_backfill_race_test.rs | 343 | // Step 1: Alice indexes first location |
| LOW | core/tests/sync_backfill_race_test.rs | 385 | // Step 2: Start backfill on Bob while Alice continues indexing |
| LOW | core/tests/sync_backfill_race_test.rs | 412 | // Step 3: Wait for everything to stabilize |
| LOW | core/tests/sync_backfill_race_test.rs | 419 | // Step 4: Compare results |
| LOW | core/tests/volume_detection_test.rs | 449 | // Step 1: Check if paths are on same physical storage |
| LOW | core/tests/volume_detection_test.rs | 455 | // Step 2: Get volumes for both paths |
| LOW | core/tests/volume_detection_test.rs | 467 | // Step 3: Select copy strategy |
| LOW | core/tests/volume_detection_test.rs | 483 | // Step 4: Verify expected behavior |
| LOW | core/src/infra/daemon/rpc.rs | 452 | // Step 1: Get buffered events BEFORE registering connection |
| LOW | core/src/infra/daemon/rpc.rs | 458 | // Step 2: Register connection for event streaming (starts receiving live events) |
| LOW | core/src/infra/daemon/rpc.rs | 469 | // Step 3: Send buffered events in chronological order |
| LOW | core/src/ops/indexing/database_storage.rs | 732 | // Step 1: Delete all ancestor relationships for the moved subtree, but preserve internal |
| LOW | core/src/ops/indexing/database_storage.rs | 743 | // Step 2: Reconnect the subtree under the new parent by creating closure rows for all |
| LOW | core/src/ops/indexing/verify/action.rs | 60 | // Step 1: Scan filesystem to get current state |
| LOW | core/src/ops/indexing/verify/action.rs | 63 | // Step 2: Query database for existing entries in this path |
| LOW | core/src/ops/indexing/verify/action.rs | 66 | // Step 3: Compare and generate report |
| LOW | core/src/ops/indexing/phases/processing.rs | 715 | // Step 4: Perform the actual database deletion |
| LOW | core/src/volume/fs/mod.rs | 101 | // Step 1: resolve mount point root (e.g. "C:\") |
| LOW | core/src/volume/fs/mod.rs | 109 | // Step 2: get stable volume GUID path |
| LOW | adapters/gmail/sync.py | 462 | # Step 1: Sync labels (always full) |
| LOW | adapters/gmail/sync.py | 465 | # Step 2: Sync messages |
| LOW | …ges/interface/src/components/modals/SyncSetupModal.tsx | 221 | // Step 1: Select Device |
| LOW | …ges/interface/src/components/modals/SyncSetupModal.tsx | 293 | // Step 2: Choose Action |
| LOW | …ges/interface/src/components/modals/SyncSetupModal.tsx | 419 | // Step 3: Confirm |
| LOW | …ges/interface/src/components/modals/SyncSetupModal.tsx | 479 | // Step 4: Executing |
| LOW | …ace/src/routes/explorer/components/AddStorageModal.tsx | 532 | // Step 1: Track the volume |
| LOW | …ace/src/routes/explorer/components/AddStorageModal.tsx | 538 | // Step 2: Create a location for the volume's mount point |
| LOW | …ace/src/routes/explorer/components/AddStorageModal.tsx | 701 | // Step 1: Add the cloud volume and get fingerprint |
| LOW | …ace/src/routes/explorer/components/AddStorageModal.tsx | 727 | // Step 2: Create a location for the cloud volume so it gets indexed |
| LOW | …s-client/tests/integration/ephemeral-streaming.test.ts | 73 | // Step 1: Subscribe FIRST |
| LOW | …s-client/tests/integration/ephemeral-streaming.test.ts | 102 | // Step 2: Query the directory listing (triggers ephemeral indexing) |
| LOW | …s-client/tests/integration/ephemeral-streaming.test.ts | 124 | // Step 3: Wait for events to arrive |
| LOW | …s-client/tests/integration/ephemeral-streaming.test.ts | 137 | // Step 4: Verify events arrived |
| LOW | …s-client/tests/integration/ephemeral-streaming.test.ts | 207 | // Step 1: Query FIRST (triggers indexing, events go to buffer) |
| LOW | …s-client/tests/integration/ephemeral-streaming.test.ts | 228 | // Step 2: Subscribe AFTER query (late subscriber) |
| LOW | apps/cli/src/domains/library/mod.rs | 271 | // Step 1: Select local library |
| LOW | apps/cli/src/domains/library/mod.rs | 298 | // Step 2: Select remote device from paired devices |
| LOW | apps/cli/src/domains/library/mod.rs | 334 | // Step 3: Discover remote libraries |
| LOW | apps/cli/src/domains/library/mod.rs | 346 | // Step 4: Select sync action |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | adapters/safari-history/sync.py | 77 | except Exception as e: |
| MEDIUM | adapters/safari-history/sync.py | 47 | def main(): |
| LOW | adapters/macos-contacts/sync.py | 92 | except Exception as e: |
| MEDIUM | adapters/macos-contacts/sync.py | 66 | def main(): |
| LOW | adapters/github/sync.py | 127 | except Exception as e: |
| LOW | adapters/github/sync.py | 145 | except Exception as e: |
| LOW | adapters/github/sync.py | 175 | except Exception as e: |
| LOW | adapters/github/sync.py | 262 | except Exception as e: |
| LOW | adapters/obsidian/sync.py | 193 | except Exception as e: |
| LOW | adapters/apple-notes/sync.py | 74 | except Exception as e: |
| MEDIUM | adapters/apple-notes/sync.py | 47 | def main(): |
| LOW | adapters/chrome-history/sync.py | 77 | except Exception as e: |
| MEDIUM | adapters/chrome-history/sync.py | 42 | def main(): |
| LOW | adapters/chrome-bookmarks/sync.py | 110 | except Exception as e: |
| MEDIUM | adapters/chrome-bookmarks/sync.py | 87 | def main(): |
| LOW | adapters/gmail/sync.py | 170 | except Exception: |
| LOW | adapters/gmail/sync.py | 336 | except Exception: |
| LOW | adapters/gmail/sync.py | 492 | except Exception as e: |
| LOW | adapters/opencode/sync.py | 124 | except Exception as e: |
| MEDIUM | adapters/opencode/sync.py | 94 | def main(): |
| LOW | adapters/macos-calendar/sync.py | 88 | except Exception as e: |
| MEDIUM | adapters/macos-calendar/sync.py | 60 | def main(): |
| MEDIUM | …s/swift-client/Examples/LibraryManagementExample.swift | 52 | print("Error: \(error)") |
| MEDIUM | …client/Sources/SpacedriveClient/SpacedriveClient.swift | 503 | print("Error details: \(error.localizedDescription)") |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | core/benchmarks/src/cli/commands.rs | 11 | #[command(about = "Spacedrive benchmarking harness", long_about = None)] |
| MEDIUM | core/src/infra/action/mod.rs | 3 | //! This module provides a centralized, robust, and extensible layer for handling |
| MEDIUM | core/src/infra/job/traits.rs | 78 | // Try named first (more robust to field reordering/additions), fallback to non-named for legacy |
| MEDIUM | core/src/infra/event/log_emitter.rs | 168 | // Simple field extraction (this could be more robust) |
| MEDIUM | core/src/ops/indexing/change_detection/detector.rs | 82 | // Create a persistent writer adapter to leverage the unified query logic |
| MEDIUM | core/src/service/network/core/mod.rs | 1756 | /// Enhanced pairing request sending with robust active polling |
| MEDIUM | core/src/service/file_sync/mod.rs | 194 | // In production, this should be more robust |
| MEDIUM | core/src/volume/fs/zfs.rs | 171 | // Use fast copy strategy for ZFS (can leverage clones) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | crates/sd-client/test.sh | 42 | # Check if daemon socket exists |
| LOW | core/scripts/test_daemon.sh | 14 | # Check if daemon is still running |
| LOW | adapters/gmail/sync.py | 482 | # Set cursor to current history ID for next incremental sync |
| LOW | scripts/test-data.sh | 10 | # Check if curl and tar are available |
| LOW | apps/server/build-for-truenas.sh | 15 | # Check if buildx is available |
| LOW | apps/server/docker-run.sh | 9 | # Check if .env exists |
| LOW | apps/server/docker-run.sh | 20 | # Check if docker-compose is available |
| LOW | apps/gpui-photo-grid/run.sh | 47 | # Check if daemon is running |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | adapters/macos-contacts/sync.py | 66 | |
| LOW | adapters/github/sync.py | 30 | |
| LOW | adapters/github/sync.py | 97 | |
| LOW | adapters/slack/sync.py | 49 | |
| LOW | adapters/obsidian/sync.py | 63 | |
| LOW | adapters/gmail/sync.py | 46 | |
| LOW | adapters/gmail/sync.py | 265 | |
| LOW | adapters/opencode/sync.py | 56 | |
| LOW | adapters/opencode/sync.py | 94 | |
| LOW | adapters/macos-calendar/sync.py | 60 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | crates/crypto/src/protected.rs | 3 | //! It's worth noting that this wrapper does not provide additional security that you can't get manually, it just makes |
| MEDIUM | crates/images/src/heif.rs | 66 | // This implementation is **ENTIRELY** untested, as I'm unable to source |
| MEDIUM | apps/tauri/src-tauri/gen/schemas/acl-manifests.json | 1 | {"clipboard-manager":{"default_permission":{"identifier":"default","description":"No features are enabled by default, as |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | core/src/domain/memory/types.rs | 20 | /// AI-generated or user-written summary |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | AGENTS.md | 433 | //! let input = ShareFileInput { file_id: 123, recipient: "user@example.com" }; |
| LOW | crates/archive/README.md | 37 | "email": "user@example.com" |
| LOW | crates/archive/README.md | 156 | {"email": "user@example.com", "cursor": "abc123"} |
| LOW | core/tests/typescript_bridge_test.rs | 294 | "Lorem ipsum dolor sit amet. ".repeat(100) |
| LOW | core/tests/typescript_bridge_test.rs | 294 | "Lorem ipsum dolor sit amet. ".repeat(100) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | adapters/gmail/sync.py | 265 | def sync_messages_incremental(token: str, user: str, history_id: str, max_results: int): |
| LOW | …kages/interface/src/contexts/WebContextMenuContext.tsx | 26 | export function useWebContextMenuController(): WebContextMenuController | null { |
| LOW | …/src/components/overlays/DaemonDisconnectedOverlay.tsx | 35 | export function DaemonDisconnectedOverlay({ |
| LOW | apps/tauri/src/contextMenu.ts | 56 | export function initializeContextMenuHandler() { |
| LOW | apps/tauri/src/updater.example.ts | 279 | export function startPeriodicUpdateChecks( |