A privacy centric matrix client

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 clients to the matrix protocol.

We need to decentralize the web, but also provide a means of freedom within that system. Matrix has the potential to be a standardized peer-to-peer chat protocol, and in a way already is, that will allow people to communicate and transfer their data at will. Email has been standardized this way for a long time, as you can always email someone regardless of their provider. Most popular proprietary chat clients do not adhere to a publically available protocol and have too much control over users data.

Additionally, if the goal for Matrix is adoption to make instant messaging communication go the way of email, a network effect is required for this paradigm shift. Syphon makes the bet that 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
    • group chats will be supported in the coming weeks
  • 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)

getting started

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.

environment

  • you’ll to do several things to setup the environment for Syphon
    • install flutter (stable channel - mobile / dev channel - desktop)
    • install android studio
    • install cmake version 3.10.2 - (for olm/megolm)
    • install libs needed for cmake
      • macos
        • brew install ninja
      • linux
        • sudo apt install ninja-build
    • clone repo and init submodules
      • git submodule update --init --recursive
    • run the following prebuild commands
      • flutter pub get
      • flutter pub run build_runner build

building

  • ios and android should follow normal flutter building instructions
  • linux:
  1. add dependency overrides before running flutter pub get
dependency_overrides:
    dartx: ^0.3.0
    characters: ^0.3.0
  1. run flutter pub run build_runner build to generate the hive mappings for state caches
  2. comment out whats necessary to make the dependences appear like below
dev_dependencies:
  build_runner: ^1.0.0
  # flutter_test:
  #   sdk: flutter
  # hive_generator: 0.7.0

dependency_overrides:
  # dartx: ^0.3.0
  # characters: ^0.3.0
  1. run flutter build linux && flutter build bundle
  2. navigate to release at $SYPHON_ROOT/build/linux/release/bundle
  3. Confirm build works with running $SYPHON_ROOT/build/linux/release/bundle/syphon

store (current)

  • state (redux)
  • state cache (redux_persist + hive)
  • cold storage (hive)

store (future)

  • state (redux)
  • state cache (redux_persist + json_serializable + sembast)
  • cold storage (sqlcipher)

store references

local notifications (android only)

  • 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

quirks

  • fastlane is not used, it’s there for f-droid

assets

generic references

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

contributing

  • email contact@syphon.org if you’d like to get involved. there’s a lot to do.
  • donations are welcome, but not required. Syphon will always be a not for profit, community driven application not owned or sold by a corporation.

from those who made it possible

lub youu

Download Details:

Author: syphon-org

Demo: https://syphon.org/

Source Code: https://github.com/syphon-org/syphon

#flutter #dart #mobile-apps

A privacy centric matrix client
7.10 GEEK