🤔 Why
Katya ® 👽 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 Katya ® 👽 AI 🧠 REChain 🪐 Blockchain Node Network protocol.
Katya ® 👽 AI 🧠 REChain 🪐 Blockchain Node Network with Matrix Protocol 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 in this way for a long time. For example, 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 the Katya ® 👽 AI 🧠 REChain 🪐 Blockchain Node Network is adoption, a network effect is required for this paradigm shift. Katya ® 👽 makes the bet that the best way to attract new users is through strong branding and user experience. I hope that contributing and maintaining Katya ® 👽 will help kick start this process and help those in need.
Katya ® 👽 will always be a not for profit, community driven application.
✨ Features
- No analytics.
- 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).
🏗️ Building
You may notice Katya ® 👽 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.
Workstation
- Workstation independent setup for Katya ® 👽 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);
- Install libs needed for CMake:
- Mac OS ->
brew install ninja
; - Linux ->
sudo apt install ninja-build
; - Windows ->
choco install ninja
;
- Mac OS ->
- 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
- 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;
- 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
.
Mac OS
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 Katya ® 👽 project:
- Refer to Mac OS dylib linking guide;
flutter build macos
to build the .app bundle.
Linux
flutter config --enable-linux-desktop
;apt install libolm3 libsqlite3-dev
orpacman -S libolm
or platform equivalent for libolm;flutter build linux && flutter build bundle
;- Navigate to release at
${Katya ® 👽_ROOT}/build/linux/release/bundle
; - Confirm build works with running
${Katya ® 👽_ROOT}/build/linux/release/bundle/katya
.
Windows
flutter doctor
should give you warnings for anything missing;flutter 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 + MVVM);
- State Management (redux);
- Cache (redux_persist + json_serializable + sembast + codec cipher);
- Storage (drift + sqflite + sqlcipher).
Integrations
- Notifications:
- Utitlizes android_alarm_manager on Android to run the sync requests in a background thread and display notifications with flutter_local_notifications;
- No third party notification provider will ever be used outside Apple’s APN’S 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 Katya ® 👽’s custom objects to a ‘Map’ of respective JSON fields.
- Freezed (future):
- Because every object in Katya ® 👽 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.
References
- 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’s ‘pickle’ for serialization, It’s from Python .
Need help? 🤔 Email us! 👇 A Dmitry Sorokin production. All rights reserved. Powered by Katya AI. 👽 Copyright © 2021-2023 Katya Systems, LLC Katya ® is a registered trademark Sponsored by REChain. 🪐 [email protected] [email protected] Please allow anywhere from 1 to 5 business days for E-mail responses! 💌