A cross-platform desktop application for decentralized file storage, built with Tauri v2, React, and TypeScript.
WARNING: Alpha Software - Pilot Program
This software is in alpha stage and is part of the pilot program. Do not use this for mission-critical data or personal files that you cannot afford to lose.
- Data loss may occur due to bugs, incomplete features, or network issues
- There is no guarantee of data persistence or recovery
- Always maintain separate backups of important files
- This software is provided "as-is" without warranty of any kind
By using this software, you acknowledge and accept these risks.
![]() Onboarding |
![]() Wallet |
![]() Folder Sync |
![]() Marketplace |
![]() Settings |
![]() Torrents |
View all screenshots
See the screenshots/ directory for 22 screenshots covering every page of the app.
- Guided Onboarding β first-run wizard to get your first backup in under 30 seconds
- File Management β upload, download, and manage files; paste a CID to auto-trigger download
- Folder Sync β watch folders and automatically sync changes to the network
- Backup Server β automatic continuous backup to designated peers
- Device Management β My Devices overview and step-by-step Add Device wizard
- Storage Marketplace β browse providers offering storage slots, request storage on the network; inline tooltips explain terms like collateral, slots, and proof probability
- My Deals β view completed purchases and active provider slots
- Wallet β Ethereum wallet with generate/import, balance tracking, and network switching (devnet/testnet)
- Media Downloader β download video and audio from 100+ sites via yt-dlp, quality selection, download queue with file path chooser
- Media Player β built-in video player with playlist, accessible from completed downloads
- Torrents β add magnet links and .torrent files, per-file selection, speed limits
- Web Archive β crawl and archive websites (including video, audio, and media assets) to decentralized storage, browse archives in-app, choose output directory
- Discourse Forum Archiver β specialized archiver for Discourse forums that generates full static HTML sites from forum API data
- IRC Chat β embedded IRC chat client on the Dashboard
- P2P Encrypted Chat β direct peer-to-peer messaging with end-to-end encryption, group chat, and safety number verification (TOFU)
- Sensitive Field Toggle β eye icon to show/hide peer IDs, SPR records, ETH addresses, API URLs, and other sensitive data (useful for streaming/screen sharing)
- End-to-End Encryption β chat messages encrypted using double-ratchet sessions with forward secrecy
- Safety Numbers β verify peer identities with safety number comparison
- Peer Network β connect with peers, share SPR records, and monitor network stats
- Node Logs β built-in real-time log viewer with auto-refresh and auto-scroll
- System Tray β runs in the background with quick access from the system tray
- Auto-Update β automatic updates from GitHub releases with
latest.jsonmanifest - Sound Notifications β audio feedback for node startup, peer connections, and downloads
- Manual Announce IP β override UPnP with a manual public IP for NAT traversal
| Layer | Technology |
|---|---|
| Frontend | React 18 + TypeScript + Vite |
| Backend | Rust + Tauri v2 |
| Sidecar | archivist-node (P2P storage daemon) |
| Package Manager | pnpm v10 |
| Node.js | v20 |
| Rust | 1.77.2+ stable |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Archivist Desktop (Tauri App) β
β β
β ββββββββββββββββββββββ ββββββββββββββββββββββββββ β
β β React Frontend β β Rust Backend β β
β β (Webview) βββββββΊβ (Native Process) β β
β β β IPC β β β
β β β’ Dashboard β β β’ Node Management β β
β β β’ Upload/Download β β β’ File Operations β β
β β β’ Marketplace β β β’ Folder Watching β β
β β β’ Wallet/Deals β β β’ Peer Management β β
β β β’ Media Download β β β’ Backup Daemon β β
β β β’ Media Player β β β’ Media Download β β
β β β’ Web Archive β β β’ Torrent Engine β β
β β β’ Torrents β β β’ Web Archiver β β
β β β’ Chat (P2P + IRC) β β β’ Chat (E2E Encrypted) β β
β β β’ Devices β β β’ Wallet & Marketplace β β
β β β’ Settings/Logs β β β’ Configuration β β
β ββββββββββββββββββββββ βββββββββββββ¬βββββββββββββ β
β β β
ββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββ
β
HTTP (localhost:8080)
β
ββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββ
β archivist-node Sidecar (Separate Process) β
β β
β β’ REST API (port 8080) β
β β’ File Storage & CID Management β
β β’ P2P Network (libp2p) β
β β’ Discovery (DHT/mDNS, UDP port 8090) β
β β’ Listen (TCP port 8070) β
β β’ Peer Connections β
β β’ Data Replication β
ββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββββββ
β
P2P (encrypted)
β
ββββββββββββββΌβββββββββββββ
β External Peers β
β (libp2p network) β
βββββββββββββββββββββββββββ
- User Interface: React frontend provides the UI (Dashboard, Upload/Download, Marketplace, Wallet/Deals, Media Download, Media Player, Web Archive, Torrents, Chat, Devices, Settings/Logs)
- Tauri Backend: Rust backend handles:
- Starting/stopping the archivist-node sidecar process
- Managing file system operations (uploads, downloads, folder watching)
- Proxying requests to the node's REST API
- Persisting application configuration
- Running the backup daemon for continuous sync
- Media downloads and streaming via yt-dlp/ffmpeg
- Torrent management (magnet links, .torrent files)
- Web archiving and archive viewing (including Discourse forums)
- Wallet and marketplace interactions
- P2P encrypted chat with E2E encryption and group sessions
- Archivist Node: Standalone sidecar process that:
- Exposes REST API on localhost:8080
- Manages content-addressed storage (CIDs)
- Handles P2P networking via libp2p
- Discovers peers via DHT/mDNS on UDP port 8090
- Accepts peer connections on TCP port 8070
- Replicates data across the network
- P2P Network: Encrypted libp2p connections between peers for file transfer and discovery
- Node.js 20+
- pnpm v10+
- Rust 1.77.2+ stable
- Platform-specific build dependencies (see below)
Tauri requires platform-specific system libraries. Install them before running pnpm setup:
Linux (Fedora/RHEL)
sudo dnf install gcc gcc-c++ gtk3-devel webkit2gtk4.1-devel glib2-devel \
libappindicator-gtk3-devel librsvg2-devel pango-devel openssl-develLinux (Debian/Ubuntu)
sudo apt install build-essential libgtk-3-dev libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev librsvg2-dev libssl-devmacOS
xcode-select --installWindows
- Install Visual Studio Build Tools with "Desktop development with C++" workload
- WebView2 is included with Windows 10 (version 1803+) and Windows 11
For the full list of Tauri system dependencies, see the Tauri Prerequisites docs.
# Quick setup (install deps + download sidecar binary)
pnpm setup
# Or step by step:
pnpm install
pnpm download-sidecar # Downloads archivist-node for your platform
# Run in development mode
pnpm tauri dev
# Build for production
pnpm tauri buildThe sidecar binary must match your target platform. To download for cross-compilation:
# macOS
bash scripts/download-sidecar.sh x86_64-apple-darwin # Intel
bash scripts/download-sidecar.sh aarch64-apple-darwin # Apple Silicon
# Linux
bash scripts/download-sidecar.sh x86_64-unknown-linux-gnu # x64
bash scripts/download-sidecar.sh aarch64-unknown-linux-gnu # ARM64
# Windows
bash scripts/download-sidecar.sh x86_64-pc-windows-msvcNote: Release builds now compile archivist-node from source (main branch) rather than downloading pre-built binaries. See
.github/workflows/release.ymlfor details.
archivist-desktop/
βββ src/ # React frontend
β βββ components/ # Reusable UI components
β β βββ ErrorState.tsx # Error display component
β β βββ InfoTooltip.tsx # Hover tooltip with "?" icon
β β βββ IntroModal.tsx # Intro modal overlay
β β βββ IrcChat.tsx # IRC chat widget (embedded in Dashboard)
β β βββ NavAccordion.tsx # Collapsible navigation sections
β β βββ NextSteps.tsx # Post-onboarding guidance
β β βββ SafetyNumber.tsx # Safety number verification display
β β βββ SensitiveField.tsx # Show/hide toggle for sensitive data
β βββ contexts/ # React Context providers
β β βββ ChatContext.tsx # Global chat state management
β βββ hooks/ # Custom React hooks
β β βββ useNode.ts # Node lifecycle (start/stop/status)
β β βββ useSync.ts # Folder watching + sync queue
β β βββ usePeers.ts # Peer connections
β β βββ useOnboarding.ts # First-run onboarding state
β β βββ useSoundNotifications.ts # Audio feedback
β β βββ useFeatures.ts # Feature flag detection
β β βββ useMediaDownload.ts # yt-dlp download queue + progress
β β βββ useMediaStreaming.ts # Media streaming server control
β β βββ useTorrent.ts # Torrent state management
β β βββ useWebArchive.ts # Web archive crawl + viewer
β β βββ useWallet.ts # Ethereum wallet operations
β β βββ useMarketplace.ts # Storage marketplace state
β β βββ useChat.ts # P2P chat sessions + messages
β β βββ useIrc.ts # IRC connection + messaging
β β βββ useIntroModal.ts # Intro modal display state
β β βββ useBackgroundMusic.ts # Background audio playback
β βββ pages/ # Route components
β β βββ Dashboard.tsx # Main status overview + IRC chat
β β βββ Onboarding.tsx # First-run wizard
β β βββ Files.tsx # Upload/download/restore files
β β βββ Sync.tsx # Watched folder management
β β βββ Devices.tsx # Device management
β β βββ AddDevice.tsx # Device pairing wizard
β β βββ Peers.tsx # P2P network view
β β βββ BackupServer.tsx # Backup daemon dashboard
β β βββ MediaDownload.tsx # yt-dlp media download UI
β β βββ MediaPlayer.tsx # Built-in video player with playlist
β β βββ Torrents.tsx # Torrent management UI
β β βββ WebArchive.tsx # Website archiver and viewer
β β βββ Chat.tsx # P2P encrypted chat (not yet routed)
β β βββ Marketplace.tsx # Storage marketplace browser
β β βββ Deals.tsx # Purchases and provider slots
β β βββ Wallet.tsx # Ethereum wallet UI
β β βββ Logs.tsx # Node logs viewer
β β βββ Settings.tsx # App configuration
β βββ lib/ # Utilities and types
β β βββ api.ts # Node API type definitions
β β βββ archiveTypes.ts # Web archive type definitions
β β βββ chatTypes.ts # Chat protocol type definitions
β β βββ cidValidation.ts # CID format validation
β β βββ contracts.ts # Marketplace contract ABIs
β β βββ features.ts # Feature flag constants
β β βββ sanitizeFilename.ts # Filename sanitization
β β βββ tauri.ts # Tauri invoke helpers
β βββ styles/ # CSS files (terminal aesthetic)
β βββ test/ # Frontend tests (Vitest)
β βββ App.tsx # Router + layout
β βββ main.tsx # Entry point
β
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ main.rs # App entry (delegates to lib.rs)
β β βββ lib.rs # Tauri setup, commands, tray
β β βββ error.rs # ArchivistError enum
β β βββ state.rs # AppState (service container)
β β βββ node_api.rs # HTTP client for sidecar
β β βββ path_utils.rs # Cross-platform path utilities
β β βββ crypto/ # End-to-end encryption
β β β βββ identity.rs # Chat identity management
β β β βββ key_store.rs # Cryptographic key storage
β β β βββ sessions.rs # Double-ratchet sessions
β β β βββ group_sessions.rs # Group chat encryption
β β β βββ safety_numbers.rs # Safety number generation
β β βββ commands/ # Tauri command handlers
β β β βββ node.rs # start/stop/restart/status/logs
β β β βββ files.rs # upload/download/list/delete
β β β βββ sync.rs # watch folders, sync queue, manifests
β β β βββ peers.rs # connect/disconnect/list
β β β βββ system.rs # config, platform info
β β β βββ media.rs # yt-dlp download commands
β β β βββ streaming.rs # media streaming server
β β β βββ archive.rs # web archive commands
β β β βββ torrent.rs # torrent management
β β β βββ marketplace.rs # marketplace commands
β β β βββ wallet.rs # wallet commands
β β β βββ chat.rs # P2P chat commands
β β β βββ irc.rs # IRC connection commands
β β βββ services/ # Business logic
β β βββ node.rs # Sidecar process management
β β βββ sync.rs # File watching (notify crate)
β β βββ config.rs # Settings persistence
β β βββ backup_daemon.rs # Backup daemon (polls source peers)
β β βββ manifest_server.rs # HTTP manifest discovery server
β β βββ binary_manager.rs # yt-dlp/ffmpeg binary management
β β βββ media_download.rs # Media download queue + progress
β β βββ media_streaming.rs # HTTP media streaming server
β β βββ web_archive.rs # Website crawler and archiver
β β βββ archive_viewer.rs # Archive content viewer
β β βββ discourse_scraper.rs # Discourse forum scraper
β β βββ discourse_site_builder.rs # Static site generator for forums
β β βββ torrent.rs # Torrent engine
β β βββ marketplace.rs # Storage marketplace logic
β β βββ wallet.rs # Ethereum wallet management
β β βββ chat_service.rs # Chat message + conversation logic
β β βββ chat_server.rs # WebSocket/TLS chat server
β β βββ chat_message_store.rs # Chat message persistence
β β βββ chat_delivery_queue.rs # Message delivery retry
β β βββ chat_tls.rs # TLS certificate management
β β βββ chat_tofu.rs # Trust-On-First-Use verification
β β βββ chat_types.rs # Chat protocol types
β βββ resources/ # Bundled assets (video files)
β βββ sidecars/ # archivist-node binaries (gitignored)
β βββ Cargo.toml # Rust dependencies
β βββ tauri.conf.json # Tauri configuration
β
βββ e2e/ # End-to-end tests (WebdriverIO)
β βββ tests/ # E2E test specs
β βββ helpers.ts # Test utilities
β
βββ public/ # Static assets
β βββ logos/ # Branding assets
β
βββ scripts/
β βββ download-sidecar.sh # Downloads archivist-node binary
β
βββ .github/workflows/
β βββ ci.yml # Tests, lint, build checks
β βββ release.yml # Multi-platform release (builds archivist-node from source)
β
βββ package.json # npm scripts + dependencies
- Linux:
~/.config/archivist/config.toml - macOS:
~/Library/Application Support/archivist/config.toml - Windows:
%APPDATA%\archivist\config.toml
| Setting | Default | Description |
|---|---|---|
data_dir |
Platform-specific | Node data directory |
api_port |
8080 |
REST API port |
discovery_port |
8090 |
UDP port for DHT/mDNS peer discovery |
listen_port |
8070 |
TCP port for P2P connections |
max_storage_bytes |
10 GB | Storage quota |
auto_start |
false |
Start node on app launch |
auto_restart |
true |
Restart on failure |
Note: Configuration changes require a node restart to take effect.
| Setting | Default | Description |
|---|---|---|
enabled |
false |
Enable backup daemon |
poll_interval_secs |
30 |
Check for new manifests every N seconds |
max_concurrent_downloads |
3 |
Parallel file downloads |
max_retries |
3 |
Retry failed downloads |
auto_delete_tombstones |
true |
Process file deletions |
The application uses multiple ports for P2P networking and backup functionality:
| Port | Protocol | Purpose | Required On |
|---|---|---|---|
| 8070 | TCP | P2P connections and file transfers | Both machines |
| 8090 | UDP | Discovery via DHT/mDNS | Both machines |
| 8085 | TCP | Manifest server (backup source) | Source machine only |
| 8086 | TCP | Backup trigger endpoint | Backup server only |
Minimum required: Open ports 8070 (TCP) and 8090 (UDP) for basic P2P functionality.
For backup system: Also open 8085 on the source machine and 8086 on the backup server.
# Required for P2P
sudo ufw allow 8070/tcp # P2P connections
sudo ufw allow 8090/udp # Discovery
# For backup source (Machine A)
sudo ufw allow 8085/tcp # Manifest server
# For backup server (Machine B)
sudo ufw allow 8086/tcp # Backup triggerThe firewall will prompt you to allow connections when the app first runs. Click "Allow" to enable P2P connectivity.
# Required for P2P
netsh advfirewall firewall add rule name="Archivist P2P" dir=in action=allow protocol=tcp localport=8070
netsh advfirewall firewall add rule name="Archivist Discovery" dir=in action=allow protocol=udp localport=8090
# For backup source (Machine A)
netsh advfirewall firewall add rule name="Archivist Manifest Server" dir=in action=allow protocol=tcp localport=8085
# For backup server (Machine B)
netsh advfirewall firewall add rule name="Archivist Backup Trigger" dir=in action=allow protocol=tcp localport=8086If you change the ports in Settings, update your firewall rules accordingly.
| Issue | Solution |
|---|---|
| Port 8080 in use | Change API port in Settings |
| Sidecar not found | Run pnpm download-sidecar |
| 0 addresses found | Check firewall allows ports 8090 (UDP) and 8070 (TCP) |
| Peer connects then disconnects | Check NAT timeout, try reconnecting with fresh SPR |
| "Check for Updates" shows error | Expected for local builds β only works after a published GitHub release |
Node logs are written to:
- Linux:
~/.local/share/archivist/node.log - macOS:
~/Library/Application Support/archivist/node.log - Windows:
%APPDATA%\archivist\node.log
Use the built-in Logs page for real-time viewing with auto-refresh.
- GitHub Repository: https://github.com/durability-labs/archivist-desktop
- Sidecar Repository: https://github.com/durability-labs/archivist-node
- Developer Documentation: See CLAUDE.md for comprehensive technical docs
Special thanks to our supporters:
papersand, savageyoda24, k123_tupolev, arnaud8803, vrycmyf, moudyellaz, 0xcryptonewbie, lorena96507, giuliano.mega, warfront1, cnanakos, thatben, Oxselo, emdee4570, diegomazro, pepedzekiphen, cskiraly, alisherrr, artsy_detective, johns9729, vpavlin, swahmedjavid, gilles356, netwave, putitarusa, mrorantox, ryangoree, 0xr1st4, deety_56657, hackyguru, morgan0x01, DZEKI, celestial_gul_85001, p1ge0nh8er, lajolly, Kali_Ali, marcin.czenko, corpetty, auhau, ashishkumarnaik, ladib777, wtsupmybro, egonatoura, killfacemd, pale_rider, oxchamel, .trevligt, bkomoves, robogod_42, 0xguylouis, ayoonchain_, iamAy0, sohag_sarkar, mghazwi, magnusss5276, danisharora099, neoanonymous, buray58, godlikexi, Everest, fergulati, rahullenkala, qnou, alexanderm3666, nipsysdev, shelb2830, Timothy, sdf37, alvatarmakes, iamtrev0r, samuel.ing, patrizzz, izikdepth, j_0986, awmacp, a.im, flexsurfer, Oxenosis, kali023236, toored38, .lanski, 0x01, arseniy.eth, crypto_marina, volodymyr4303, johnny.ha, akhilmanga
MIT
This software is provided for evaluation and testing purposes as part of the pilot program. See the warning at the top of this document regarding data safety.






