2a17f9d165
Fix profile page not scrolling when the screen is small |
||
---|---|---|
.github | ||
.idea | ||
app | ||
chat-engine@04178168e2 | ||
core | ||
design-library | ||
domains | ||
features | ||
gradle | ||
screen-state@337a65b27b | ||
tools | ||
.gitignore | ||
.gitmodules | ||
LICENSE | ||
README.md | ||
build.gradle | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
renovate.json | ||
settings.gradle | ||
version.json |
README.md
SmallTalk
SmallTalk
is a minimal, modern, friends and family focused Android messenger. Heavily inspired by Whatsapp and Signal, powered by Matrix.
Project mantra
- Tiny app size - currently 1.80mb~ when provided via app bundle.
- Focused on reliability and stability.
- Bare-bones feature set.
Feature list
- Login with Matrix ID/Password
- Combined Room and DM interface
- End to end encryption
- Message bubbles, supporting text, replies and edits
- Push notifications (DMs always notify, Rooms notify once)
- Importing of E2E room keys from Element clients
- UnifiedPush
- FOSS variant
- Minimal HTML formatting
- Invitations
- Image attachments
Planned
- Device verification (technically supported but has no UI)
- Room history
- Cross signing
- Google drive backups
- Changing user name/avatar
- Room settings and information
- Exporting E2E room keys
- Local search
- Registration
Technical details
- Built on Jetpack compose and kotlin multiplatform libraries ktor and sqldelight (although the project is not currently setup to be multiplatform until needed).
- Greenfield matrix SDK implementation, focus on separation, testability and parallelisation.
- Heavily optimised build script, clean cacheless builds are sub 10 seconds with a warmed up gradle daemon.
- Avoids code generation where possible in favour of build speed, this mainly means manual DI.
- A pure kotlin test harness to allow for critical flow assertions Smoke Tests, currently Linux x86-64 only.
Building
Debug .apk
./gradlew assembleDebug
Release (signed with debug key) .apk
./gradlew assembleRelease
Unsigned release .apk
./gradlew assembleRelease -Punsigned
Unsigned release (FOSS) .apk
./gradlew assembleRelease -Punsigned -Pfoss
Data and Privacy
-
Messages once decrypted are stored as plain text within
SmallTalk's
database. Always encrypted messages comes at the cost of performance and limits features like local search. If maximum security is your number priority,SmallTalk
is not the best option. This database is not easily accessed without rooting or external hardware. -
(Not yet implemented and may be configurable) Images once decrypted are stored in their plain form within the devices media directories, organised by room metadata.
-
Push notifications contain no sensitive data by using the event_id_only configuration. Push notifications are used as a push to sync mechanism, where the on device sync fetches the actual contents.
-
Passwords are NEVER stored within
SmallTalk
. -
SmallTalk
does not explicitly talk to servers other than your home-server or track what you do. *- * There is no
SmallTalk
server capturing data from the application however the Google variant likely includes transitive telemetrics through the use ofFirebase
andGoogle Play Services
integrations.
- * There is no
-
SmallTalk
is completely free and will never feature adverts or paid app features.
SmallTalk
comes in two flavours, Google
and FOSS
- Available through the Google Play Store and Github Releases.
- Automatic crash and non fatal error tracking via Firebase Crashlytics.
- Push notifications provided through Firebase Cloud Messaging.
FOSS
- Available through a self hosted F-Droid Repository and Github Releases.
- No Google or Firebase services (and their transitive telemetrics).
- No crash tracking.
- No push notifications by default, a separate UnifiedPush distributor is required.
Repositories
SmallTalk
is split into multiple repositories through git submodules.
small-talk
- The main repository, responsibile for rendering data into screens and generating the android application artifact.
chat-engine
- All things chat and matrix, where the vast majority of business logic sits.
- Pure kotlin with no UI.
conventions
- Reusable gradle plugins for modular android projects
screen-state
- Reusable state management and generic screen flow components.
- Wrapper around android's
ViewModel
focused on testability.