mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-03-03 22:26:46 +00:00
Compare commits
No commits in common. "main" and "v0.0.84" have entirely different histories.
680 changed files with 19363 additions and 32467 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -1,8 +1,7 @@
|
|||
|
||||
[submodule "dependencies"]
|
||||
path = dependencies
|
||||
# url = ssh://git@git.twonly.eu:22222/twonly/twonly-app-dependencies.git
|
||||
url = https://git.twonly.eu/twonly/twonly-app-dependencies.git
|
||||
url = https://github.com/twonlyapp/twonly-app-dependencies.git
|
||||
[submodule "lib/src/localization/translations"]
|
||||
path = lib/src/localization/translations
|
||||
# url = ssh://git@git.twonly.eu:22222/twonly/twonly-translations.git
|
||||
|
|
|
|||
58
CHANGELOG.md
58
CHANGELOG.md
|
|
@ -1,63 +1,5 @@
|
|||
# Changelog
|
||||
|
||||
## 0.0.96
|
||||
|
||||
Feature: Show link in chat if the saved media file contains one
|
||||
Improve: Verification badge for groups
|
||||
Improve: Huge reduction in app size
|
||||
Fix: Crash on older devices when compressing a video
|
||||
Fix: Problem with decrypting messages fixed
|
||||
|
||||
## 0.0.93
|
||||
|
||||
- Feature: Verification checkmark for friends
|
||||
- Fix: Added contacts in contact sharing that were not clickable.
|
||||
- Fix: Open chat after the image expires in case a draft message exists
|
||||
- Fix: Restore flames as a plus user
|
||||
- Fix: Route not found when sharing image
|
||||
- Fix: Increase recent limit in emoji keyboard
|
||||
- Fix: Increase show time of the focus indication
|
||||
- Fix: Quoted text message not shown properly
|
||||
- Fix: Push notification in groups when someone saves an image
|
||||
- Fix: Dark mode in diagnostics view
|
||||
|
||||
## 0.0.92
|
||||
|
||||
- Adds the option to share contacts
|
||||
- Adds option to zoom in received images / videos
|
||||
- Fixes issue with "reuploaded requested" not working
|
||||
- Fixes race condition while writing to the log file
|
||||
|
||||
## 0.0.91
|
||||
|
||||
- Fixes link preview on iOS
|
||||
- Fixes sharing images from other apps on iOS
|
||||
|
||||
## 0.0.90
|
||||
|
||||
- Fixes issue that media files where not reuploaded
|
||||
- Fixes iOS zooming issue when switching between .5 and x1
|
||||
- Fixes biometric auth bypass when opening a twonly/reopen send image
|
||||
- Fixes that media files could not be downloaded in case the contact deleted his account
|
||||
- Fixes database issue in case twonly is opened multiple times
|
||||
- Fixes typos in translation
|
||||
|
||||
## 0.0.87
|
||||
|
||||
- Adds link preview to shared links
|
||||
- Adds option to manual focus in the camera
|
||||
- Adds support to switch between front and back cameras during video recording
|
||||
- Adds basic face filters
|
||||
- Improves image editor, like emojis or text under a drawing can be moved
|
||||
- Improves speed after taking a picture
|
||||
- Fixes issue with emojis disappearing in the image editor
|
||||
|
||||
## 0.0.86
|
||||
|
||||
- Allows to reopen send images (if send without time limit or enabled auth)
|
||||
- Added support for front camera zoom
|
||||
- Several bug fixes
|
||||
|
||||
## 0.0.83
|
||||
|
||||
- Improved view of the diagnostic log
|
||||
|
|
|
|||
64
README.md
64
README.md
|
|
@ -2,26 +2,31 @@
|
|||
|
||||
<a href="https://twonly.eu" rel="some text"><img src="docs/header.webp" alt="twonly, a privacy-friendly way to connect with friends through secure, spontaneous image sharing." /></a>
|
||||
|
||||
This repository contains the complete source code of the [twonly](https://twonly.eu) app. twonly is a replacement for Snapchat, but its purpose is not to replace instant messaging apps, as there are already [many fantastic alternatives](https://www.messenger-matrix.de/messenger-matrix-en.html) out there. It was started because I liked the basic features of Snapchat, such as opening with the camera, the easy-to-use image editor, and the focus on sending fun pictures to friends. But I was annoyed by Snapchat's forced AI chat, receiving random messages to follow strangers, and not knowing how my sent images/text messages were encrypted, if at all. I am also very critical of the direction in which the US is currently moving and therefore try to avoid US providers wherever possible.
|
||||
This repository contains the complete source code of the [twonly](https://twonly.eu) apps.
|
||||
|
||||
<div style="margin: 10px 20px 10px 20px">
|
||||
<a href="https://apps.apple.com/de/app/twonly/id6743774441">
|
||||
<img alt="Get it on App Store button" src="https://twonly.eu/assets/buttons/download-on-the-app-store.svg"
|
||||
width="100px" />
|
||||
</a>
|
||||
<a href="https://play.google.com/store/apps/details?id=eu.twonly">
|
||||
<img alt="Get it on Google-Play button" src="https://twonly.eu/assets/buttons/get-it-in-google-play.webp"
|
||||
width="110px" />
|
||||
</a>
|
||||
<a href="https://github.com/twonlyapp/twonly-app/releases">
|
||||
<img alt="Get it on Github button" src="https://twonly.eu/assets/buttons/get-it-on-github.webp" width="110px" />
|
||||
</a>
|
||||
<a href="https://releases.twonly.eu/fdroid/repo/">
|
||||
<img alt="Get it on F-Droid button" src="https://twonly.eu/assets/buttons/get-it-on-f-droid.webp" width="105px" />
|
||||
</a>
|
||||
<!-- <a href="https://testflight.apple.com/join/U9B3v2rk" >
|
||||
<img alt="Get it on Testflight button" src="https://twonly.eu/assets/buttons/get-it-on-testflight.png"
|
||||
width="100px" />
|
||||
</a> -->
|
||||
<div class="my-5 space-x-4">
|
||||
<div class="flex gap-5 items-center justify-center">
|
||||
<a href="https://apps.apple.com/de/app/twonly/id6743774441">
|
||||
<img alt="Get it on App Store button" src="https://twonly.eu/assets/buttons/download-on-the-app-store.svg"
|
||||
width="100px" />
|
||||
</a>
|
||||
<a href="https://play.google.com/store/apps/details?id=eu.twonly">
|
||||
<img alt="Get it on Google-Play button" src="https://twonly.eu/assets/buttons/get-it-in-google-play.webp"
|
||||
width="110px" />
|
||||
</a>
|
||||
<a href="https://github.com/twonlyapp/twonly-app/releases">
|
||||
<img alt="Get it on Github button" src="https://twonly.eu/assets/buttons/get-it-on-github.webp" width="110px" />
|
||||
</a>
|
||||
<a href="https://releases.twonly.eu/fdroid/repo/">
|
||||
<img alt="Get it on F-Droid button" src="https://twonly.eu/assets/buttons/get-it-on-f-droid.webp" width="105px" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
If you decide to give twonly a try, please keep in mind that it is still in its early stages and is currently being developed by a single student. So if you are not satisfied at the moment, please come back later, as it is constantly being improved, and I may one day be able to develop it full-time.
|
||||
|
||||
## Features
|
||||
|
||||
|
|
@ -32,24 +37,11 @@ If you decide to give twonly a try, please keep in mind that it is still in its
|
|||
- Privacy friendly - Everything is stored on the device
|
||||
- The backend is hosted exclusively in Europe
|
||||
|
||||
## Roadmap
|
||||
## Planned
|
||||
|
||||
### Currently
|
||||
|
||||
- Focus on user-friendliness so that people enjoy using the app
|
||||
- User discovery without a phone number
|
||||
- Passwordless recovery without a phone number
|
||||
- Implementation of features so that Snapchat can actually be replaced
|
||||
- E2EE cloud backup of memories
|
||||
- Importing memories from Snapchat
|
||||
|
||||
### Next on the bucket list
|
||||
|
||||
- For Android: Support for [UnifiedPush] (https://unifiedpush.org/)
|
||||
- For Android: Reproducible builds
|
||||
- Implementation of [Sealed Sender](https://signal.org/blog/sealed-sender/) (or a similar protocol) to minimize metadata
|
||||
- Switch from the Signal protocol to [MLS](https://github.com/openmls/openmls) for post-quantum crypto support
|
||||
- Decentralize the server so that anyone can run their own server
|
||||
- For Android: Optional support for [UnifiedPush](https://unifiedpush.org/)
|
||||
- For Android: Reproducible Builds
|
||||
- Implementing [Sealed Sender](https://signal.org/blog/sealed-sender/) to minimize metadata
|
||||
|
||||
## Security Issues
|
||||
|
||||
|
|
@ -57,10 +49,6 @@ If you discover a security issue in twonly, please adhere to the coordinated vul
|
|||
us your report to security@twonly.eu. We also offer for critical security issues a small bug bounties, but we can not
|
||||
guarantee a bounty currently :/
|
||||
|
||||
<!-- ## Contribution
|
||||
|
||||
If you have any questions or feature requests, feel free to start a new discussion. Issues are limited to bugs, and for maintainers only. -->
|
||||
|
||||
## Development
|
||||
|
||||
<details>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ analyzer:
|
|||
avoid_positional_boolean_parameters: ignore
|
||||
inference_failure_on_collection_literal: ignore
|
||||
matching_super_parameters: ignore
|
||||
parameter_assignments: ignore
|
||||
exclude:
|
||||
- "lib/src/model/protobuf/**"
|
||||
- "lib/src/model/protobuf/api/websocket/**"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
android:icon="@mipmap/ic_launcher">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:enableOnBackInvokedCallback="true"
|
||||
android:exported="true"
|
||||
android:launchMode="singleTop"
|
||||
android:taskAffinity=""
|
||||
|
|
@ -32,20 +33,6 @@
|
|||
<data android:scheme="http" android:host="me.twonly.eu" />
|
||||
<data android:scheme="https" />
|
||||
</intent-filter>
|
||||
<!-- Allow other apps to share links -->
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:scheme="http" />
|
||||
<data android:scheme="https" />
|
||||
<data android:host="*" />
|
||||
</intent-filter>
|
||||
<!-- Allow other apps to share links via plain text -->
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="text/plain" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ pluginManagement {
|
|||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version '8.9.1' apply false
|
||||
id "com.android.application" version '8.9.0' apply false
|
||||
// START: FlutterFire Configuration
|
||||
id "com.google.gms.google-services" version "4.3.15" apply false
|
||||
// END: FlutterFire Configuration
|
||||
|
|
|
|||
1
assets/animated_icons/100.json
Normal file
1
assets/animated_icons/100.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/airplane-departure.json
Normal file
1
assets/animated_icons/airplane-departure.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/alarm-clock.json
Normal file
1
assets/animated_icons/alarm-clock.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/alien.json
Normal file
1
assets/animated_icons/alien.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/ant.json
Normal file
1
assets/animated_icons/ant.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/arm-mechanical.json
Normal file
1
assets/animated_icons/arm-mechanical.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/automobile.json
Normal file
1
assets/animated_icons/automobile.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/balloon.json
Normal file
1
assets/animated_icons/balloon.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/bandage-face.json
Normal file
1
assets/animated_icons/bandage-face.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/beating-heart.json
Normal file
1
assets/animated_icons/beating-heart.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/bee.json
Normal file
1
assets/animated_icons/bee.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/bell.json
Normal file
1
assets/animated_icons/bell.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/black-flag.json
Normal file
1
assets/animated_icons/black-flag.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/blowfish.json
Normal file
1
assets/animated_icons/blowfish.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/blue-heart.json
Normal file
1
assets/animated_icons/blue-heart.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/blush.json
Normal file
1
assets/animated_icons/blush.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/bomb.json
Normal file
1
assets/animated_icons/bomb.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/bottle-with-popping-cork.json
Normal file
1
assets/animated_icons/bottle-with-popping-cork.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/broken-heart.json
Normal file
1
assets/animated_icons/broken-heart.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/burrito.json
Normal file
1
assets/animated_icons/burrito.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/call-me-hand.json
Normal file
1
assets/animated_icons/call-me-hand.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/chequered-flag.json
Normal file
1
assets/animated_icons/chequered-flag.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/clap.json
Normal file
1
assets/animated_icons/clap.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/clinking-beer-mugs.json
Normal file
1
assets/animated_icons/clinking-beer-mugs.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/clown.json
Normal file
1
assets/animated_icons/clown.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/cockroach.json
Normal file
1
assets/animated_icons/cockroach.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/cold-face.json
Normal file
1
assets/animated_icons/cold-face.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/collision.json
Normal file
1
assets/animated_icons/collision.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/confetti-ball.json
Normal file
1
assets/animated_icons/confetti-ball.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/cowboy.json
Normal file
1
assets/animated_icons/cowboy.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/crab.json
Normal file
1
assets/animated_icons/crab.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/crocodile.json
Normal file
1
assets/animated_icons/crocodile.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/cross-mark.json
Normal file
1
assets/animated_icons/cross-mark.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/crossed-fingers.json
Normal file
1
assets/animated_icons/crossed-fingers.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/cry.json
Normal file
1
assets/animated_icons/cry.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/crying-cat-face.json
Normal file
1
assets/animated_icons/crying-cat-face.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/cupid.json
Normal file
1
assets/animated_icons/cupid.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/cursing.json
Normal file
1
assets/animated_icons/cursing.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/dancer-woman.json
Normal file
1
assets/animated_icons/dancer-woman.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/dinosaur.json
Normal file
1
assets/animated_icons/dinosaur.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/disguise.json
Normal file
1
assets/animated_icons/disguise.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/dog.json
Normal file
1
assets/animated_icons/dog.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/dolphin.json
Normal file
1
assets/animated_icons/dolphin.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/drool.json
Normal file
1
assets/animated_icons/drool.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/droplet.json
Normal file
1
assets/animated_icons/droplet.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/eagle.json
Normal file
1
assets/animated_icons/eagle.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
1
assets/animated_icons/electricity.json
Normal file
1
assets/animated_icons/electricity.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue