Top Related Projects
Cross-platform AirDrop. File transfer between Android, iOS, Linux, macOS, and Windows over ad hoc WiFi. No network infrastructure required, just two devices with WiFi chips in close range.
Open Source Continuous File Synchronization
Peer-to-peer hypermedia protocol
Ceph is a distributed object, block, and file storage platform
☁️ Nextcloud server, a safe home for all your data
:cloud: ownCloud web server core (Files, DAV, etc.)
Quick Overview
Keybase File System (KBFS) is an encrypted, distributed filesystem built on top of the Keybase platform. It provides secure file storage and sharing capabilities, integrating with Keybase's identity and encryption features to offer end-to-end encrypted file synchronization across devices and users.
Pros
- End-to-end encryption for all files and folders
- Seamless integration with Keybase's identity and key management system
- Cross-platform support (Windows, macOS, Linux, iOS, Android)
- Decentralized architecture enhancing privacy and security
Cons
- Requires a Keybase account to use
- Limited storage space compared to some other cloud storage solutions
- May have a steeper learning curve for users unfamiliar with encryption concepts
- Slower sync speeds compared to traditional cloud storage services due to encryption overhead
Code Examples
As KBFS is primarily a filesystem and not a code library, there are no direct code examples. However, users can interact with KBFS through the Keybase command-line interface or GUI applications.
Getting Started
To get started with KBFS:
- Install Keybase from https://keybase.io/download
- Create a Keybase account or log in to an existing one
- Open the Keybase app and navigate to the "Files" section
- You can now start using KBFS to store and share encrypted files
For command-line usage:
# Mount KBFS
keybase fs mount
# List files in your private directory
ls /keybase/private/username
# Create a shared folder with another user
keybase fs mkdir /keybase/private/username,otherusername/shared_folder
# Copy a file to KBFS
cp /path/to/local/file /keybase/private/username/destination
Note: Replace "username" with your Keybase username and "otherusername" with the Keybase username of the person you want to share with.
Competitor Comparisons
Cross-platform AirDrop. File transfer between Android, iOS, Linux, macOS, and Windows over ad hoc WiFi. No network infrastructure required, just two devices with WiFi chips in close range.
Pros of FlyingCarpet
- Lightweight and focused on peer-to-peer file transfer
- Cross-platform support (Windows, macOS, Linux)
- Simple user interface for easy file sharing
Cons of FlyingCarpet
- Limited features compared to KBFS's comprehensive file system
- Smaller community and less frequent updates
- Lacks advanced security features present in KBFS
Code Comparison
KBFS (Go):
func (fs *FS) SyncFromServer(ctx context.Context, folderBranch data.FolderBranch) (err error) {
fs.log.CDebugf(ctx, "SyncFromServer")
defer func() { fs.deferLog.CDebugf(ctx, "SyncFromServer done: %+v", err) }()
if !fs.config.IsSyncedTlf(folderBranch.Tlf) {
return nil
}
FlyingCarpet (Go):
func (t *Transfer) Send() error {
t.Ctx, t.Cancel = context.WithCancel(context.Background())
defer t.Cancel()
if err := t.getAddresses(); err != nil {
return err
}
Both projects use Go, but KBFS focuses on syncing with a server, while FlyingCarpet emphasizes direct file transfer. KBFS has more complex logic for handling synchronized folders, whereas FlyingCarpet's code is more straightforward, reflecting its simpler peer-to-peer approach.
Open Source Continuous File Synchronization
Pros of Syncthing
- Open-source and decentralized, allowing for greater privacy and control
- Supports a wide range of platforms and devices
- Highly customizable with extensive configuration options
Cons of Syncthing
- Requires more technical knowledge to set up and configure
- May have higher resource usage on devices compared to KBFS
- Lacks built-in encryption for data at rest
Code Comparison
KBFS (Go):
func (fs *FS) SyncFromServer(ctx context.Context, folderBranch data.FolderBranch) (err error) {
// Implementation details
}
Syncthing (Go):
func (m *Model) ScanFolder(folder string) error {
// Implementation details
}
Both projects use Go and implement file synchronization functions, but KBFS focuses on server-client synchronization, while Syncthing emphasizes peer-to-peer syncing.
Key Differences
- KBFS is part of the Keybase ecosystem, offering integrated encryption and identity management
- Syncthing is a standalone file synchronization tool with a focus on decentralization
- KBFS provides a virtual filesystem, while Syncthing works directly with the local filesystem
- Syncthing offers more granular control over sync behavior and device management
Peer-to-peer hypermedia protocol
Pros of IPFS
- Decentralized and distributed architecture, allowing for better scalability and resilience
- Content-addressed storage system, enhancing data integrity and retrieval efficiency
- Broader adoption and larger community support, leading to more resources and integrations
Cons of IPFS
- Higher complexity in implementation and usage compared to KBFS
- Potential performance issues with large-scale data retrieval in some scenarios
- Less focus on end-user applications and more on infrastructure-level functionality
Code Comparison
IPFS (Go implementation):
node, err := core.NewNode(ctx, &core.BuildCfg{})
if err != nil {
return err
}
cid, err := node.Add(strings.NewReader("Hello, IPFS!"))
KBFS:
fs, err := libfs.NewFS(ctx, config, logger)
if err != nil {
return err
}
err = fs.Write(ctx, "/keybase/private/user/file.txt", []byte("Hello, KBFS!"))
Both examples demonstrate basic file operations, but IPFS focuses on content-addressed storage, while KBFS emphasizes a more traditional filesystem approach within its encrypted environment.
Ceph is a distributed object, block, and file storage platform
Pros of Ceph
- Highly scalable and distributed storage system
- Supports object, block, and file storage in a unified platform
- Active community and wide industry adoption
Cons of Ceph
- More complex setup and configuration
- Higher resource requirements for optimal performance
- Steeper learning curve for management and troubleshooting
Code Comparison
KBFS (Go):
func (fs *FS) openAsync(ctx context.Context, node Node, flags openFlags) (f *File, err error) {
// Implementation details
}
Ceph (C++):
int FileStore::_open_collections() {
// Implementation details
}
Key Differences
- KBFS focuses on secure, encrypted file sharing for Keybase users
- Ceph is a comprehensive distributed storage solution for large-scale deployments
- KBFS is primarily written in Go, while Ceph is mainly implemented in C++
- Ceph offers more diverse storage options and greater scalability
- KBFS provides stronger built-in encryption and privacy features
Use Cases
- KBFS: Personal and small team file sharing with end-to-end encryption
- Ceph: Enterprise-level storage infrastructure, cloud storage, and data centers
☁️ Nextcloud server, a safe home for all your data
Pros of Nextcloud
- More comprehensive file sharing and collaboration features
- Larger and more active community, with frequent updates and contributions
- Extensive plugin ecosystem for extending functionality
Cons of Nextcloud
- Higher resource requirements and potentially more complex setup
- Less focus on end-to-end encryption compared to KBFS
Code Comparison
KBFS (Go):
func (fs *FS) SyncFromServer(ctx context.Context, folderBranch data.FolderBranch) (err error) {
fs.log.CDebugf(ctx, "SyncFromServer")
defer func() { fs.deferLog.CDebugf(ctx, "SyncFromServer done: %+v", err) }()
if fs.config.KBFSOps() == nil {
return errors.New("KBFS is not running")
}
Nextcloud (PHP):
public function getUserFolder($userId = '') {
$userId = $userId ? $userId : \OC_User::getUser();
if (!$userId) {
return null;
}
$root = $this->getRootFolder();
return $root->getUserFolder($userId);
}
The code snippets show different approaches to file system operations. KBFS focuses on syncing from a server, while Nextcloud retrieves user folders. KBFS uses Go with error handling and logging, while Nextcloud uses PHP with a more straightforward approach to folder retrieval.
:cloud: ownCloud web server core (Files, DAV, etc.)
Pros of ownCloud Core
- More extensive file management features, including versioning and sharing controls
- Larger and more active community, with frequent updates and contributions
- Self-hosted solution, offering greater control over data and infrastructure
Cons of ownCloud Core
- More complex setup and maintenance compared to KBFS
- Requires dedicated server infrastructure, potentially increasing costs
- Less focus on end-to-end encryption and security features
Code Comparison
ownCloud Core (PHP):
public function getPath() {
$path = $this->getInternalPath();
return $path === '' ? '/' : $path;
}
KBFS (Go):
func (n *Node) GetPath() string {
return n.path
}
Both repositories implement file system operations, but ownCloud Core is written primarily in PHP and focuses on a broader range of features, while KBFS is written in Go and emphasizes secure, distributed file storage. ownCloud Core's codebase is larger and more complex, reflecting its wider feature set, while KBFS maintains a more streamlined approach centered around Keybase's security-focused ecosystem.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Keybase Filesystem (KBFS) MOVED
The Keybase Filesystem is now located at https://github.com/keybase/client/tree/master/go/kbfs.
This repository is archived. We will not be monitoring issues or PRs against it, and it will soon be disabled.
Top Related Projects
Cross-platform AirDrop. File transfer between Android, iOS, Linux, macOS, and Windows over ad hoc WiFi. No network infrastructure required, just two devices with WiFi chips in close range.
Open Source Continuous File Synchronization
Peer-to-peer hypermedia protocol
Ceph is a distributed object, block, and file storage platform
☁️ Nextcloud server, a safe home for all your data
:cloud: ownCloud web server core (Files, DAV, etc.)
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot