Top Related Projects
Fluent UI web represents a collection of utilities, React components, and web components for building web applications.
A framework for building native applications using React
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
A private messenger for Windows, macOS, and Linux.
Matrix SDK for React Javascript
Quick Overview
Keybase/client is the official client repository for Keybase, a secure messaging and file-sharing platform. It provides end-to-end encryption for chats, files, and git repositories, with a focus on user-friendly key management and identity verification.
Pros
- Strong security features with end-to-end encryption
- Cross-platform support (desktop and mobile)
- Integration with popular services like GitHub and Twitter for identity verification
- User-friendly interface for complex cryptographic operations
Cons
- Learning curve for users unfamiliar with cryptography concepts
- Requires trust in Keybase's implementation of cryptographic protocols
- Limited adoption compared to mainstream messaging apps
- Some features may be overkill for casual users
Getting Started
To get started with Keybase:
- Download and install the Keybase client from https://keybase.io/download
- Create an account or sign in
- Verify your identity by linking social media accounts or websites
- Start using Keybase for secure messaging, file sharing, or git repositories
# Install Keybase on macOS using Homebrew
brew install --cask keybase
# Install Keybase on Ubuntu
sudo apt install keybase
# Run Keybase
keybase login
Note: Keybase/client is not a code library, so code examples are not applicable in this context.
Competitor Comparisons
Fluent UI web represents a collection of utilities, React components, and web components for building web applications.
Pros of FluentUI
- Larger community and more active development (15.5k stars, 1.8k forks vs. 8.1k stars, 1k forks for Keybase)
- Comprehensive UI component library for React applications
- Extensive documentation and design guidelines
Cons of FluentUI
- More complex and potentially steeper learning curve
- Focused solely on UI components, unlike Keybase's full-featured client
- May require more setup and configuration for non-Microsoft ecosystems
Code Comparison
FluentUI (React component example):
import { DefaultButton } from '@fluentui/react/lib/Button';
const MyComponent = () => (
<DefaultButton text="Click me" onClick={() => console.log('Clicked')} />
);
Keybase (Go code example):
import "github.com/keybase/client/go/libkb"
func main() {
g := libkb.NewGlobalContext()
g.Init()
// Additional Keybase client initialization
}
The code snippets highlight the different focus areas of these projects. FluentUI provides React UI components, while Keybase offers a full-featured client with various functionalities implemented in Go.
A framework for building native applications using React
Pros of React Native
- Larger community and ecosystem, with more third-party libraries and resources
- Cross-platform development for iOS and Android from a single codebase
- Faster development cycles with hot reloading
Cons of React Native
- Steeper learning curve for developers new to React or mobile development
- Performance can be slower than native apps for complex, graphics-intensive applications
- Requires additional effort to achieve a truly native look and feel on both platforms
Code Comparison
React Native (JavaScript):
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
const App = () => (
<View style={styles.container}>
<Text>Hello, React Native!</Text>
</View>
);
Keybase Client (Go):
package main
import (
"fmt"
"github.com/keybase/client/go/libkb"
)
func main() {
fmt.Println("Hello, Keybase!")
}
The React Native code showcases its declarative UI approach, while the Keybase Client code demonstrates its use of Go and project-specific libraries. React Native's syntax is more focused on UI components, whereas Keybase Client's code is more backend-oriented.
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Pros of Electron
- Larger community and ecosystem, with more resources and third-party tools available
- Cross-platform development for desktop applications using web technologies
- Extensive documentation and examples for developers
Cons of Electron
- Generally larger application size due to bundled Chromium and Node.js
- Higher memory usage compared to native applications
- Potential security concerns due to the broad access granted to web content
Code Comparison
Electron (main process):
const { app, BrowserWindow } = require('electron')
function createWindow () {
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadFile('index.html')
}
app.whenReady().then(createWindow)
Keybase (Go backend):
package main
import (
"github.com/keybase/client/go/libkb"
"github.com/keybase/client/go/service"
)
func main() {
d := libkb.NewContext(nil, nil)
svc := service.NewService(d, false)
svc.StartLooping()
}
The code snippets highlight the different approaches: Electron uses JavaScript for creating desktop applications, while Keybase uses Go for its backend services. Electron's code focuses on creating a window and loading HTML, whereas Keybase's code initializes the service and starts the main loop.
A private messenger for Windows, macOS, and Linux.
Pros of Signal-Desktop
- More focused on secure messaging, with a simpler user interface
- Larger user base and more widespread adoption
- Regular security audits and transparent development process
Cons of Signal-Desktop
- Limited features compared to Keybase's multi-purpose platform
- Lacks built-in file storage and sharing capabilities
- No support for cryptocurrency transactions or team management
Code Comparison
Signal-Desktop (TypeScript):
export async function sendMessage(
conversationId: string,
messageText: string
): Promise<void> {
const conversation = await getConversation(conversationId);
await conversation.sendMessage(messageText);
}
Keybase (Go):
func SendMessage(ctx context.Context, arg chat1.SendMessageArg) (chat1.SendMessageResult, error) {
client, err := GetChatClient(ctx)
if err != nil {
return chat1.SendMessageResult{}, err
}
return client.SendMessage(ctx, arg)
}
Both repositories use different programming languages and architectures, reflecting their distinct focuses. Signal-Desktop emphasizes simplicity in its messaging functionality, while Keybase's codebase demonstrates its broader feature set and more complex infrastructure.
Matrix SDK for React Javascript
Pros of matrix-react-sdk
- More focused on UI components, making it easier to build custom Matrix clients
- Better documentation and examples for developers
- More active community contributions and frequent updates
Cons of matrix-react-sdk
- Limited to Matrix protocol, while client supports multiple communication methods
- Steeper learning curve for developers not familiar with React
- Less comprehensive end-to-end encryption implementation compared to client
Code Comparison
matrix-react-sdk:
import React from 'react';
import { MatrixClientPeg } from 'matrix-js-sdk';
const RoomList = () => {
const rooms = MatrixClientPeg.get().getRooms();
return (
<ul>
{rooms.map(room => <li key={room.roomId}>{room.name}</li>)}
</ul>
);
};
client:
package main
import (
"github.com/keybase/client/go/libkb"
"github.com/keybase/client/go/protocol/chat1"
)
func GetConversations(g *libkb.GlobalContext) ([]chat1.ConversationLocal, error) {
cli, err := GetChatLocalClient(g)
if err != nil {
return nil, err
}
return cli.GetInboxAndUnboxLocal(ctx, chat1.GetInboxAndUnboxLocalArg{})
}
The matrix-react-sdk code snippet demonstrates its focus on React components for building user interfaces, while the client code shows a more low-level approach to retrieving conversations using Go.
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
Hi, and welcome to the Keybase client repo. All our client apps (macOS, Windows, Linux, iOS, and Android) are being actively developed in this repository. Please, dig around.
Warnings
We'd love you to read our source code.
But - some of the things in this repo are explorations, and the app you build from source just might not do what it says it's doing. So, if you just want to install Keybase on your computer, you should monitor our releases for macOS, Linux, or Windows.
If you're interested in our Docker image releases, please check out the Docker README.
Code Layout
- go: Core crypto libraries; the Keybase service; the command line client. Learn More
- shared/{android,ios}: Android and iOS apps developed with React Native.
- shared/desktop: Desktop application for macOS, Linux, and Windows, made with the Electron framework, sharing React code with react-native.
- packaging: Scripts for releasing packages across the various platforms.
- protocol: Defines the protocol for communication for clients to the Keybase services. Uses Avro. Learn More
- media: Icons, graphics, media for Keybase apps.
- osx: The macOS Keybase.app, development parallel to an Electron-based application above. Learn More
Problems?
Report any issues with client software on this GitHub issue tracker. Internally, we track our progress using Jira, but all PRs come through GitHub for your review!
If you're having problems with the command line keybase
client, take a
look at the troubleshooting doc.
If you're having problems with our Website, try the keybase-issues issue tracker.
We check and update both frequently.
License
Most code is released under the New BSD (3 Clause) License. If subdirectories include a different license, that license applies instead.
Development Guidelines
We check all git commits with pre-commit hooks generated via pre-commit.com pre-commit hooks. To enable use of these pre-commit hooks:
- Install the
pre-commit
utility. For some common cases:pip install pre-commit
brew install pre-commit
- Remove any existing pre-commit hooks via
rm .git/hooks/pre-commit
- Configure via
pre-commit install
Then proceed as normal.
External Contributors
If you forked this repository on GitHub and made a PR, then it'll show up as having failed Jenkins CI. We do not build external PRs because it's a security risk to do so without a review first. If your PR is successfully reviewed by a member of the Keybase team, then we will merge your commits to a branch on our primary fork and build from there.
Cryptography Notice
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.
The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.
Top Related Projects
Fluent UI web represents a collection of utilities, React components, and web components for building web applications.
A framework for building native applications using React
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
A private messenger for Windows, macOS, and Linux.
Matrix SDK for React Javascript
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