Convert Figma logo to code with AI

keybase logokbfs

Keybase Filesystem (KBFS)

1,212
135
1,212
54

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.

66,967

Open Source Continuous File Synchronization

22,775

Peer-to-peer hypermedia protocol

14,456

Ceph is a distributed object, block, and file storage platform

28,312

☁️ Nextcloud server, a safe home for all your data

8,444

: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:

  1. Install Keybase from https://keybase.io/download
  2. Create a Keybase account or log in to an existing one
  3. Open the Keybase app and navigate to the "Files" section
  4. 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.

66,967

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
22,775

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.

14,456

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
28,312

☁️ 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.

8,444

: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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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.