Convert Figma logo to code with AI

syphon-org logosyphon

⚗️ a privacy centric matrix client

1,036
71
1,036
164

Top Related Projects

A glossy Matrix collaboration client for iOS

A glossy Matrix collaboration client for the web.

1,887

Desktop client for Matrix using Qt and C++20.

Quick Overview

Syphon is an open-source, privacy-focused matrix chat client for Android and iOS. It aims to provide a secure and user-friendly messaging experience while respecting user privacy and data ownership. Syphon is built using Flutter and adheres to the Matrix protocol.

Pros

  • Strong focus on privacy and data protection
  • Cross-platform support for both Android and iOS
  • Open-source, allowing for community contributions and audits
  • Utilizes the decentralized Matrix protocol for secure communication

Cons

  • Still in early development stages, may lack some advanced features
  • Smaller user base compared to mainstream messaging apps
  • Limited documentation for contributors and developers
  • May require more technical knowledge for self-hosting and advanced usage

Getting Started

To get started with Syphon:

  1. Download the app from the GitHub releases page or build it from source.
  2. Install the app on your Android or iOS device.
  3. Open the app and create a new account or log in to an existing Matrix account.
  4. Start chatting securely with other Matrix users.

For developers interested in contributing:

  1. Clone the repository: git clone https://github.com/syphon-org/syphon.git
  2. Install Flutter and set up your development environment.
  3. Run flutter pub get to install dependencies.
  4. Build and run the app using flutter run.

Competitor Comparisons

A glossy Matrix collaboration client for iOS

Pros of Element iOS

  • More mature and feature-rich, with a longer development history
  • Larger community and more active development
  • Better documentation and support for developers

Cons of Element iOS

  • Larger codebase, potentially more complex to navigate
  • Specific to iOS, limiting cross-platform development
  • May have a steeper learning curve for new contributors

Code Comparison

Element iOS (Swift):

class RoomViewController: SlidingModalPresentable {
    private let viewModel: RoomViewModelType
    private let mediaManager: MXMediaManager
    private let session: MXSession
    
    // ... more code ...
}

Syphon (Dart):

class RoomScreen extends StatefulWidget {
  final String roomId;
  final Room room;
  
  const RoomScreen({Key key, this.roomId, this.room}) : super(key: key);
  
  // ... more code ...
}

Both repositories focus on Matrix client development, but Element iOS is specifically for iOS devices, while Syphon aims for cross-platform compatibility using Flutter. Element iOS has a more extensive feature set and community support, but Syphon's cross-platform approach may be more appealing for developers targeting multiple platforms. The code snippets show the different languages used (Swift vs. Dart) and the basic structure of room-related components in each project.

A glossy Matrix collaboration client for the web.

Pros of Element

  • More mature and feature-rich client with a larger user base
  • Supports multiple platforms (web, desktop, mobile) with a consistent experience
  • Extensive documentation and community support

Cons of Element

  • Larger codebase, potentially more complex to contribute to or customize
  • May include features that some users find unnecessary, leading to a heavier client

Code Comparison

Element (TypeScript):

export function getHomeserverUrl(state: MatrixClientPeg.MatrixClientCreds): string {
    return state.hsUrl;
}

Syphon (Dart):

String getHomeserverUrl(MatrixClientCreds state) {
  return state.hsUrl;
}

Additional Notes

  • Element is built primarily with TypeScript and React, while Syphon uses Dart and Flutter
  • Syphon focuses on privacy and minimalism, potentially offering a lighter and more focused experience
  • Element has a longer development history and is more widely adopted in the Matrix ecosystem
  • Syphon is still in early development but aims to provide a streamlined, privacy-centric alternative

Both projects contribute to the Matrix ecosystem, offering users different options based on their preferences for features, privacy, and platform support.

1,887

Desktop client for Matrix using Qt and C++20.

Pros of Nheko

  • More mature project with a larger community and longer development history
  • Supports a wider range of Matrix features, including end-to-end encryption
  • Cross-platform support for Windows, macOS, and Linux

Cons of Nheko

  • Larger codebase and potentially more complex to contribute to
  • Written in C++, which may have a steeper learning curve for some developers
  • Heavier resource usage compared to Syphon's Flutter-based approach

Code Comparison

Nheko (C++):

void ChatPage::sendMessage() {
    auto text = input()->toPlainText().trimmed();
    if (text.isEmpty())
        return;

    TimelineModel::instance()->sendMessage(text);
    input()->clear();
}

Syphon (Dart):

Future<void> sendMessage(String text) async {
  if (text.isEmpty) return;

  await MatrixApi.sendMessage(
    roomId: currentRoomId,
    content: text,
  );
  messageController.clear();
}

Both repositories aim to create Matrix clients, but they differ in their approach and target platforms. Nheko is a desktop-focused client with a more extensive feature set, while Syphon is primarily designed for mobile devices using Flutter. Nheko's C++ codebase may offer better performance for desktop environments, while Syphon's Dart code provides easier cross-platform mobile development.

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


a privacy centric matrix client - now in open alpha*

Get it on Google Play Download on the App Store Download on Flathub


Translation status

Syphon is still in alpha and we do not recommend
using it where proven and independently verified security is required.


🤔 Why

Syphon aims to be built on the foundations of privacy, branding, and user experience
in an effort to pull others away from proprietary chat platforms to the matrix protocol.

Matrix has the potential to be a standardized peer-to-peer chat protocol, and in a way already is, that allows people to communicate and control their conversation data. Email has been standardized this way for a long while. Someone using Outlook can still email someone using Gmail. Most popular proprietary chat platforms do not adhere to a federated or decentralized protocol, and as a result have too much control over users data.

If the goal for Matrix is adoption, a network effect is required for this paradigm shift. Syphon bets the best way to attract new users is through strong branding and user experience. I hope that contributing and maintaining Syphon will help kick start this process and help those in need.

Syphon will always be a not for profit, community driven application.

✨ Features

  • no analytics. period.
  • no proprietary third party services
    • iOS will have APNS support, but will be made clear to the user
  • all data is AES-256 encrypted at rest
  • E2EE for direct chats using Olm/Megolm
  • all indicators of presence are opt-in only (typing indicators, read receipts, etc)
  • customize themes and colors throughout the app

🚀 Goals

  • desktop clients meet parity with mobile
  • screen lock and pin protected cache features
  • P2P messaging through a locally run server on the client
  • allow transfering user data from one homeserver to another, or from local to remote servers
  • cli client using ncurses and the same redux store contained here (common)

🌙 Nightlies

  • Nightly dev builds - and feature branch builds - can be found under our Gitea Releases
  • Unofficial "community" Windows x64 releases can be found under @EdGeraghty's fork

📝 Contributing

  • Instructions can be found under our contributing.md. Please fully read the document before beginning to write code or produce any material contribution for Syphon.
  • Donations are always welcome! The best way to donate is through the Syphon creator's Patreon.
  • Coming soon, we'll have a merch store! If you'd like to support the project but want a little something in return, this is the way to do it!

🏗️ Building

You may notice Syphon does not look very dart-y (for example, no _private variable declarations, or using redux instead of provider) in an effort to reduce the learning curve from other languages or platforms. The faster one can get people contributing, the easier it will be for others to maintain or oversee a tool that does not exploit the user.

continuous integration

See our CI script if you wish to set up automated builds. It should also contain the most up-to-date build steps in case you are having trouble with those below.

workstation

  • workstation independent setup for Syphon development
    • install flutter (stable channel for all platforms)
    • install necessary third party sdks and tooling
      • ios -> xcode
      • android -> android studio
    • install cmake from cli through android studio platform tools (for olm/megolm) - sdkmanager --install "cmake;3.10.2.4988404"
    • (alternate) install cmake version from download per workstation platform
    • install libs needed for cmake
      • macos -> brew install ninja
      • linux -> sudo apt install ninja-build
      • windows -> choco install ninja
    • clone repo and init submodules
      • git submodule update --init --recursive
    • run the following prebuild commands
      • flutter pub get
      • flutter pub run build_runner build

ios/android

only android

  1. install android studio
  2. install latest commandline tools through android studio gui
  3. confirm sdkmanager is available in your path
  4. pull the latest cmake, NDK, and other dependencies
    • sdkmanager --install "ndk;21.4.7075529"
    • sdkmanager --install "cmake;3.10.2.4988404"
  5. run the script scripts/init-android.sh
  6. continue with next section ios & android

ios & android

  1. pull dependencies needed
  • flutter pub get
  1. generate json conversion for models
  • flutter pub run build_runner build --delete-conflicting-outputs
  1. generate json conversion for models
  • flutter run

macos

  1. flutter config --enable-macos-desktop
  2. brew install libolm to install native olm dependencies
  3. copy the dylib - not the soft links - to the macos folder
  • cp /opt/homebrew/Cellar/libolm/libolm.3.x.x.dylib ./macos/libolm.3.x.x.dylib
  1. follow instructions for linking the dylib generated from brew to the Syphon project
  1. flutter build macos to build the .app bundle

linux

  1. flutter config --enable-linux-desktop
  2. apt install libgtk-3-dev liblzma-dev libblkid-dev libsecret-1-dev libolm-dev libolm3 libsqlite3-dev libjsoncpp-dev libsqlcipher-dev or distribution equivalent
  3. flutter build linux && flutter build bundle
  4. navigate to release at $SYPHON_ROOT/build/linux/release/bundle
  5. Confirm build works with running $SYPHON_ROOT/build/linux/release/bundle/syphon

windows

  1. flutter doctor should give you warnings for anything missing
  2. flutter config --enable-windows-desktop
  3. Compile olm & move olm.dll to libolm.dll in the executable directory
  4. Fetch sqlite's Precompiled Binaries for Windows dll from the website

📐 Architecture

store

  • views (flutter + hooks)
  • state management (redux)
  • cache (redux_persist + json_serializable + sembast + codec cipher)
  • storage (drift + sqlite + sqlcipher)

assets

  • Looking for branding or design files? They can all be found here, in the top level assets folder.

integrations

  • Notifications
    • utitlizes android_alarm_manager on Android to run the matrix /sync requests in a background thread and display notifications with flutter_local_notifications
    • no third party notification provider will ever be used outside Apples APNS for iOS only
  • Equatable
    • This library allows comparisons of objects within Flutter to tell if they have changed.
  • JsonSerializable
    • Unfortunately, Json is not integrated directly in Dart/Flutter for your own objects. Code generation is required, for now, and will convert Syphon's custom objects to a 'Map' of respective json fields
  • Freezed (future)
    • Because every object in Syphon is immutable, freezed will help create objects doing the same thing all the 'copyWith' helper functions do today, with the improvement of allowing 'null' values to overwrite non-null values
  • Fastline Directory
    • fastline is not used as tool, but is there to provide a schema of metadata to FDroid

references

decoration: BoxDecoration(
   border: Border.all(width: 1, color: Colors.white),
),
  • understanding why olm chose the world 'pickle' for serialization, its from python