syphon-org/syphon
⚗️ a privacy centric matrix client
go to github for download
a privacy centric matrix client - now in open alpha*
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
- [x] desktop clients meet parity with mobile
- [x] 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
- macos ->
- 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
- install android studio
- install latest commandline tools through android studio gui
- confirm
sdkmanager
is available in your path - pull the latest cmake, NDK, and other dependencies
sdkmanager --install "ndk;21.4.7075529"
sdkmanager --install "cmake;3.10.2.4988404"
- run the script
scripts/init-android.sh
- continue with next section
ios & android
ios & android
- pull dependencies needed
flutter pub get
- generate json conversion for models
flutter pub run build_runner build --delete-conflicting-outputs
- generate json conversion for models
flutter run
macos
flutter config --enable-macos-desktop
brew install libolm
to install native olm dependencies- 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
- follow instructions for linking the dylib generated from brew to the Syphon project
- refer to macos dylib linking guide
flutter build macos
to build the .app bundle
linux
flutter config --enable-linux-desktop
apt install libgtk-3-dev liblzma-dev libblkid-dev libsecret-1-dev libolm-dev libolm3 libsqlite3-dev libjsoncpp-dev libsqlcipher-dev
or distribution equivalentflutter build linux && flutter build bundle
- navigate to release at
$SYPHON_ROOT/build/linux/release/bundle
- Confirm build works with running
$SYPHON_ROOT/build/linux/release/bundle/syphon
windows
flutter doctor
should give you warnings for anything missingflutter config --enable-windows-desktop
- Compile olm & move
olm.dll
tolibolm.dll
in the executable directory - 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
- Redux vs. Bloc
- Redux Tutorial
- Redux Examples
- End-To-End Encryption implimentation guide from Matrix.org
- iOS file management flutter
- scrolling With Text Inputs
- multi-line text field
- keyboard dismissal
- changing transition styles
- animations
- serialize Uint8List bytes
- adding a border without needing ctrl-p
decoration: BoxDecoration(
border: Border.all(width: 1, color: Colors.white),
),
- understanding why olm chose the world ‘pickle’ for serialization, its from python
![](/images/banner-woo.jpg)
related excellent projects recommendation download
AppFlowy
47859
AppFlowy is an open-source alternative to Notion. You are in charge of your data and customizations. Built with Flutter and Rust.
localsend
33797
An open-source cross-platform alternative to AirDrop
spotube
23772
🎧 Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile!
revanced-manager
15035
💊 Application to use ReVanced on Android
gsy_github_app_flutter
14559
Flutter 超完整的开源项目,功能丰富,适合学习和日常使用。GSYGithubApp系列的优势:我们目前已经拥有Flutter、Weex、ReactNative、kotlin 四个版本。 功能齐全,项目框架内技术涉及面广,完成度高,持续维护,配套文章,适合全面学习,对比参考。跨平台的开源Github客户端App,更好的体验,更丰富的功能,旨在更好的日常管理和维护个人Github,提供更好更方便的驾车体验Σ( ̄。 ̄ノ)ノ。同款Weex版本 : https://github.com/CarGuo/GSYGithubAppWeex 、同款React Native版本 : https://github.com/CarGuo/GSYGithubApp 、原生 kotlin 版本 https://github.com/CarGuo/GSYGithubAppKotlin
dio
12249
A powerful HTTP client for Dart and Flutter, which supports global settings, Interceptors, FormData, aborting and canceling a request, files uploading and downloading, requests timeout, custom adapters, etc.
gopeed
11832
A modern download manager that supports all platforms. Built with Golang and Flutter.
bloc
11441
A predictable state management library that helps implement the BLoC design pattern
getx
9899
Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with Get.
flame
8846
A Flutter based game engine.
flutter_deer
7595
🦌 Flutter 练习项目(包括集成测试、可访问性测试)。内含完整UI设计图,更贴近真实项目的练习。Flutter practice project (including integration testing and accessibility testing). Contains complete UI design drawings for a more realistic practice project.
fish-redux
7343
An assembled flutter application framework.
ente
6686
Fully open source, End to End Encrypted alternative to Google Photos and Apple Photos
fl_chart
6451
FL Chart is a highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, and Radar Chart.
pixez-flutter
6360
一个支持免代理直连及查看动图的第三方Pixiv flutter客户端
Flutter-Responsive-Admin-Panel-or-Dashboard
6355
Responsive Admin Panel or Dashboard using Flutter
aidea
6021
AIdea 是一款支持 GPT 以及国产大语言模型通义千问、文心一言等,支持 Stable Diffusion 文生图、图生图、 SDXL1.0、超分辨率、图片上色的全能型 APP。
riverpod
5828
A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
pikapika
5463
美观易用且无广告的漫画和游戏客户端,同时支持MacOS,Windows,Android,iOS。
provider
5029
InheritedWidgets, but simple