Carbide is a decentralized file storage app for iOS, powered by the Carbide Network. Upload, manage, and sync files across Carbide's provider network with end-to-end encryption.
- Decentralized Storage: Files stored across Carbide network providers, not centralized servers.
- End-to-End Encryption: Files are encrypted before upload via CarbideSDK.
- Full File Management: Create folders, upload photos, rename, delete, star, and share files.
- Real-Time Storage Dashboard: See actual storage usage computed from your files.
- Smart Categorization: Quick-access filters for Images, Videos, Documents, and Audio.
- SwiftData Persistence: All metadata saved locally with SwiftData.
- SwiftUI — declarative UI
- SwiftData — local persistence
- CarbideSDK — decentralized storage network client (
carbide-ios-sdk)
- Xcode 16.0+
- iOS 18.1+
- Swift 5.9+
- CarbideSDK (local Swift package dependency)
For day-to-day development you typically run against either the production discovery service (default) or a local one.
- Clone and open:
git clone <repository-url> cd Carbide open Carbide.xcodeproj
- Add the CarbideSDK local package (only needed once):
- In Xcode: File → Add Package Dependencies → Add Local…
- Pick the sibling
carbide-ios-sdkdirectory.
- Pick a destination (Simulator or attached device) and Cmd+R.
To run against a local discovery + provider:
-
Start
carbide-discovery-serviceon your dev machine (defaults to:9090). -
Run a
carbide-providerand point itsdiscovery_endpointat the local discovery service. -
In the Carbide app, override the discovery URL — by default the app constructs
CarbideClient()(production endpoint). For local work, swap that toCarbideClient(discoveryServiceURL: URL(string: "http://<your-laptop-ip>:9090")!). iOS Simulator can usehttp://localhost:9090; a physical device needs the LAN IP.Note iOS App Transport Security: hitting plain
http://from a device requires anNSAppTransportSecurityexception inInfo.plist(allow arbitrary loads for local development only).
xcodebuild test \
-project Carbide.xcodeproj \
-scheme Carbide \
-destination 'platform=iOS Simulator,name=iPhone 15'The app ships through the Apple App Store / TestFlight. There is no separate "deploy" step — every build is an Xcode archive signed with the production team certificate.
- Bump the version in the Xcode target (
MARKETING_VERSIONandCURRENT_PROJECT_VERSION). - Archive (Xcode → Product → Archive) with the Generic iOS Device destination.
- Validate & upload to App Store Connect from the Organizer window.
- Distribute via TestFlight for internal/external testing, or submit for App Store review when ready.
Production builds use the SDK's default discovery endpoint (https://discovery.carbidenetwork.xyz); double-check CarbideClient() is constructed without a custom URL before archiving.
- Signing & capabilities: production team selected, push/keychain entitlements present.
- Discovery endpoint: production (no localhost overrides).
- App Transport Security: no permissive exceptions in
Info.plist(noNSAllowsArbitraryLoads). - Build configuration: archive uses
Release(notDebug).
Carbide/— main application sourceCarbideApp.swift— app entry pointStorageManager.swift— Carbide network operationsFileItem.swift— SwiftData model- Views:
HomeView,FilesView,SharedView,SettingsView,FileDetailView - Components:
FileComponents,StorageHeaderView,Theme
CarbideTests/— unit testsCarbideUITests/— UI tests