An experiment in building a better XMPP client. using Flutter

Related tags

Templates moxxyv2
Overview

moxxy

An experimental XMPP client that tries to be as easy, modern and beautiful as possible. This project is the successor of moxxyv1, which was written in React Native and abandoned due to various technical issues.

Screenshots

Conversations Conversation Adding a contact Starting a new chat

License

See ./LICENSE.

Comments
  • Stream Management triggers stream error

    Stream Management triggers stream error

    After letting the client idle for a long time, reconnection is impossible.

    // Resumption fails
    // Resource binding succeeds
    I/flutter (29566): [S] ==> <enable xmlns='urn:xmpp:sm:3' resume='true' />
    I/flutter (29566): [S2F] {type: ConnectionStateEvent, state: notConnected}
    I/flutter (29566): [S] (xml) <== <stream:error ><unsupported-stanza-type xmlns='urn:ietf:params:xml:ns:xmpp-streams' /></stream:error>
    I/flutter (29566): [S] (xml) <== <stream:stream  /
    
    backend/xmpp 
    opened by PapaTutuWawa 4
  • UI Rework

    UI Rework

    Migrate from redux to bloc

    • [x] Port over flutter_redux_navigation to Bloc
    • [x] Make the communication between the background service and the Bloc awaitable
    • [x] Convert all pages to Bloc
    • [x] Improve the code quality of the inline chat widgets
    • [x] Let MessageBubbleBottom handle setting up and tearing down the timers to prevent the entire widget from being redrawn
      • Fixes video media widgets from flickering every minute
    opened by PapaTutuWawa 1
  • Alpha 0.2.0

    Alpha 0.2.0

    • [ ] HTTP File Upload
    • [x] Message Replies (XEP-0461)
      • [x] Swipe to quote messages
      • [x] Parse quotes
        • Requires the stanza handler rework
      • [x] Display received replies in the UI
    • [x] Message Receipts
    • [x] #10
      • [ ] For images use photo_view
      • [x] For other types, let the system handle it
    • [x] Basic PubSub support
    • [ ] Profile Pictures
      • [x] #9
      • [x] Implement XEP-0083
      • [x] Allow setting one's profile picture
      • [x] Fetch own avatar after resumption/connection
      • [ ] Check if other avatar's have changed after login
      • [x] Make the avatar path persist restarts
    • [x] #6, except URL and GIF
    • [x] Rework the StanzaHandler system to use priorities
      • Utilize this for
        • [x] Chat markers
        • [x] SIMS
        • [x] SFS
        • [x] OOB
        • [x] Quotes
    • [x] Chat states
      • [x] Implement XEP-0085
        • [x] Receiving
        • [x] Sending
      • [x] Build the UI for it
      • [x] Make sure that the chat state is known in the service so that it does not disappear when switching chats
        • [x] => ConversationService
    • [x] Implement big rounded buttons
    • [x] Make the conversation list item prettier
    • [x] Implement user blocking
      • [x] Implement XEP-0191
      • [x] Plug into the UI
    • [x] Implement the sent marker in the chat bubbles
    • [x] Somehow deal with subscription requests
    • [x] Delivery receipts appear to not find the messages they are for
      • ~~This could be an issue with gajim as gajim does not advertise urn:xmpp:sid:0 and we ignore their <origin-id /> element~~
      • For some reason isar does not find the message even though it should be commited
    • [x] ~~The download service probably always sets the unread counter to 1 instead of incrementing it~~
    • [x] Look into a possible race condition in the stream management code
      • Lock the state before each commit and discard the current commit if the s2c/c2s counters are bigger or equal
      • There also is the issue of modifying the list while iterating, which is bad
    • [ ] The blocklist desynced once
    • [ ] Cache the blocklist and replace it once we requested it again
    • [x] #8
    • [ ] Steal code from here
      • Also see here for detecting the bottom of the ListView
    • [x] Allow migrations between state versions
    • [x] Rework the communication between the background and UI isolates
      • Use freezed to generate all classes
    • [x] Let the XmppService use an EventHandler
    • [x] Quotes go missing in the UI if the message is updated, e.g. if it is marked as read
    • [ ] Don't run the disco procedure if we resume and have it cached
    • [x] A conversation update does not update the profile page
    • [x] The switch for auto-download on Wifi is inverted
    • [x] The order of the shared media display is wrong
    • [x] If the stream manager cannot send a stanza (due to the map being changed while iterating), then the "queue" will grow indefinetely
    • [x] The alt text of the avatar widget does not scale with the size of the background circle
    • [x] Fix (most) linter warnings
    • [x] Fix a carbon of a sent message appearing as its own chat
    • [x] Sending a message should clear the quoted message
    • [x] Empty messages appear (presumably chat states)
      • Implement a metric that decides if a MessageEvent should be treated as a message or not
    • [ ] Sometimes messages duplicate and persist
    • [x] Setting the chat background does not work
    • [x] Swiping a conversation does nothing
    • [ ] The background service appears to send conversation updates often
    • [x] It looks like closure of the socket is not detected by the code
    • [x] Fix tests
    • [x] Clean the service message handler
    • [x] Remove all caching code from the database service and move them into their own separate services
      • [x] ConversationService
      • [x] MessageService
      • [x] RosterService
    • [x] Background images do not seem to work
    • [ ] When downloading a file, the download will crash if the file already exists
    • [x] Open chat, switch app: Notifications won't be created
    • [ ] ~~Thumbnails should be stored in the cache directory, not in the gallery~~
    • [ ] ~~Generate thumbnails directly after the download in a separate isolate~~
    • [x] Generate video thumbnails in a different isolate
    • [x] Cache video thumbnails
    • [ ] Make all media widgets clickable
    • [ ] The loading spinner does not appear when downloading a file
    • [x] Only send client state updates when we are connected
    • [x] Reset the SM state after disconnecting
    • [ ] The ping timer continues to run after the connection dropped
      • Maybe fixed by the detection of the socket closure
    • [ ] Add transition animations between pages
      • [x] Slide from right for the transition "conversations list <-> conversation view"
      • [x] Hero for the transition "conversations list <-> Self-profile"
      • [x] Hero for the transition "conversation view <-> Profile"
      • [ ] The hero animations are a bit janky as the background around the AvatarWrapper is also shown
        • Move the Hero into the AvatarWrapper and make it wrap only the avatar image
    • [x] Messages do not appear in the chat if the chat was closed or if you are in the chat, close it and reopen it
    • [ ] Implement a cache eviction policy for the caches
      • [x] thumbnail cache
      • [x] conversation cache
      • [ ] message cache
    • [x] Cache images in the chat using the ThumbnailService
    • [ ] Change the avatar strategy from [base]/avatars/[bare JID]_[hash].png to [base]/avatars/[hash].png
      • Allows us to reduce the time avatars have to be requested if people share avatars
    • [x] Add an info page that shows if all recommended XEPs are discovered on the server
    • [ ] Highlight "legacy" quotes in the chat bubble
    • [ ] Add another event to XmppConnection which triggers after the login is done and we finished the initial discovery process to prevent a request for the blocklist failing because we haven't yet discovered that the server supports it
      • [ ] Remove the GetFeaturesCommand and let just the event update the profile bloc
    • [ ] Keep track of roster items' avatar hashes
    • [ ] Replace the cropping library with one that gives more flexibility
    • [ ] The image widget should have a background until the image is loaded into the cache
    • [ ] Add a page that shows all shared media in a conversation
    • [ ] Messages are not marked as acked because they cannot be found
    • [ ] Maybe navigate first to the conversation and then request the messages
    release 
    opened by PapaTutuWawa 1
  • Alpha 0.1.0

    Alpha 0.1.0

    • [x] The basis for a lot of XEPs: XEP-0359
    • [x] Inline media display using OOB data
      • [x] Implement XEP-0066
      • [x] Keep track of downloaded media
      • [x] Tell the UI about the downloaded media
      • [x] Update the notification with the image
      • [x] The last message text should say ":framed_picture: Image" instead of the URL
      • [x] Same for the Notification
    • [x] Add received media to the conversation's shared media
    • [x] Handle other cases of media
      • [x] (UI) Handle files
      • [x] (UI) Handle videos
      • [x] (UI) Handle media from JIDs not in our roster
      • [x] (UI) Show placeholder while downloading file
        • [x] Spinner while downloading
        • [x] Thumbnail behind spinner if available
      • [x] Handle SIMS?
      • [x] Handle Stateless File Sharing instead of SIMS?
        • Maybe actually prefer this since it will be relevant once we implement stickers
    • [x] Place downloaded files according to their mime type
      • [x] Images into the gallery
      • [x] Videos into the gallery (blocked by dependency issue; See TODO in the download service)
      • [x] Files into the download folder
      • [x] Handle permissions
    • [x] Implement download restrictions
      • [x] e.g. Download automatically only when on wifi
      • [x] Maximum file size for automatic downloads
    • [x] Make the chatbubble render a progress bar if we're downloading it currently
      • [x] The bubble should register itself against a DownloadProgressManager that notifies it on progress changes
    • [x] New messages disappear after leaving the conversation and opening it again
    • [x] Roster items still multiply?
      • [x] Maybe just send a diff to the UI
    • [x] Chat markers
    • [x] Make sending of delivery receipts optional
    • [x] ~~Group notifications~~
    • [x] Message Carbons
      • [x] Implement XEP-0297's forwarded element
      • [x] Implement the handling logic for the message carbons
      • [x] Add a test to test for the Message Carbon CVEs
    • [x] ~~Database encryption~~
    • [x] ~~Tapping a message notification should take you to the respective chat~~
    • [x] StartTLS
    • [x] Implement a prefered resumption location in the stream manager
    • [x] Fix the license build script
    • [x] Fix the spacing and padding of images and the general chatbubble
      • ~~The distance to the previous message should always be the same~~
    • [x] The notification shows when receiving an image and the chat is currently opened
    • [x] ~~Images sometimes have their upper left corner not rounded enough~~
    • [x] Fix the stanza Id being "" in the database model when we send a message
    • [x] Change the icon of the background notification
    • [x] Raise the time until we ping the connection to 10, maybe even 15 minutes
    • [x] Cleanup tasks
      • [x] Port S2F events to classes
      • [x] Port F2S commands to classes
    • [x] Fix TLS connections if the SRV record for server.example points to xmpp.server.example (Provide the SecureSocket with onBadCertificate)
    • [x] Add buttons for adding the contact and blocking the contact to the ConversationPage if the contact is not in the roster
    • [x] Close chat, Remove contact from roster, add contact to roster => Chat is gone until you go back and re-open the chat
    • [x] Improve the Stream Management implementation: Keep each Stanza in the queue for ~10 seconds, if it has not been acked until then, until we re-send it
    • [x] Chat backgrounds
    • [x] Make the StreamManagementManager emit an Event whenever a message has been acked
    • [x] The roster still appears to be a bit broken, e.g. adding a contact is sometimes not reflected
    • [x] Tapping a roster item in the "New Chat" page does nothing
    release 
    opened by PapaTutuWawa 1
  • Pre-Alpha 0.0.2 Tasks

    Pre-Alpha 0.0.2 Tasks

    • [x] Replace basic_utils with my own DNS library
    • [x] ~~Work through most TODOs~~
    • [x] When started after booting, the app is stuck on the splash screen (Could be because the PrestartResult is not triggered)
    • [x] ~~Figure out a better logging system (Maybe do something like Monal)~~
    • [x] Move lib/redux/ into lib/ui/
    • [x] Move lib/repositories/ into lib/service/
    • [x] Move lib/db/ into lib/service/
    • [x] Move lib/models/ into lib/shared/
    • [x] Move lib/data/ into lib/ui/
    • [x] Remove lib/backend by moving the account "backend" into XmppRepository
    • [x] ~~Finally fix the sizing of UI elements~~
    • [x] ~~Remove widget specific theming and do it globally~~
    • [x] Put the SplashScreenPage into its own file
    • [x] Have all navigation routes defined as a constant
    • [x] Don't have the data listener for the background service in lib/main.dart
    • [x] Fix a bug that causes us to flood the server with presence data
    • [x] ~~Move the stream buffering into the TCPSocket~~
    • [x] Fix tests not working because of a hard dependency on moxdns
    • [x] Finish the roster code
      • [x] Rework the roster code
    • [x] ~~#4~~
    • [x] ~~Use freezed on all data classes that need to get serialized/deserialized~~
    • [x] Create a DiscoCacheManager
    • [x] Rename all *Repositories to *Service and the root "XmppService" to MainService
    • [x] The xmpp code appears to keep sending a roster bind for some time after login (?)
    • [x] Roster items appear multiple times on the new chat screen
    • [x] The roster is requested after a stream resumption
    release 
    opened by PapaTutuWawa 1
  • Roadmap

    Roadmap

    Pre-Alpha 0.0.1

    • [x] Improve tests
      • [x] Test every XEP implemented
      • [x] Add tests for connection failures/unexpected events
    • [x] Make the linter happy
    • [x] Stub out not implemented features
      • [x] Registration
      • [x] Image sending preview
    • [x] Fix service crashing when the service is started on boot
    • [x] ~~Fix connection failing after boot~~ It's not failing, the notification is just wrongly set to "disconnected"
    • [x] Pull the Moxxy specific bits out of lib/xmpp/xeps/xep_0030.dart and lib/xmpp/xeps/xep_0115.dart

    Pre-Alpha 0.0.2

    See #3

    Alpha 0.1.0

    See #5

    Alpha 0.2.0

    See #7

    Concrete Things To Be Done

    • [x] Figure out a better logging system (Maybe do something like Monal)
    • [ ] Work through most TODOs
    • [ ] Remove widget specific theming and do it globally
    • [x] Finally fix the sizing of UI elements
    • [x] #4
    • [ ] Group notifications
    • [ ] Tapping a message notification should take you to the respective chat
    • [x] Better management of presence subscriptions
      • [x] We should strive to achieve a "both" subscription
    • [ ] Sometimes messages repeat after hot-restarting?
      • It this just a development problem?
    • [x] Every media file updates the last message body to "Image"
    • [x] Send Chat Markers (and make that configurable)
    • [x] ~~Images sometimes have their upper left corner not rounded enough~~
    • [x] Rework the communication of foreground app code and the background services
      • Maybe have a single event class that bundles other classes?
    • [ ] There might still be a reconnection issue
    • [ ] Replace the StanzaHandler system with the EventHandler
    • [ ] Replace the custom awaitable implementation with the AwaitableDataSender
    • [x] Everytime the conversation page is updated, the list gets re-created and thus widgets get recreated => Split up the page into two BlocBuilders

    At Some Point

    • [ ] Message styling
    • [x] OMEMO
    • [x] Message Reactions
    • [ ] Stickers
    • [ ] Optimize startup time
      • Maybe move the XMPP code into it's own thread still
    • [ ] Switch to semver instead of just doing whatever
    • [ ] Make registration possible
      • [ ] IBR
      • [ ] Easy User Onboarding
      • [ ] Allow creating invites?
    • [ ] Groupchats (MUC or MIX?)
    • [ ] MAM
    • [x] Notify the user if the connection is lost after waiting 30 minutes with no reconnection
    • [ ] Push Notifications
    • [x] Chat backgrounds
    • [ ] i18n
    • [x] Animations
    • [x] Extract lib/xmpp into its own library
      • Only after OMEMO is implemented as OMEMO requires a big rework of the StanzaHandler system to allow them to pass data between each other and also intercept stanzas before they are sent
    • [ ] Link Previews

    Perhaps

    • [ ] ~~BoSH and/or~~ WebSockets
    • [ ] iOS
      • [ ] Replace Android specific code with cross-platform code

    Interesting Flutter Packages

    • photo_view: For allowing users to tap an image and see it bigger
    • flutter_blurhash: Maybe "extend" XEP-0385 to allow the usage of blurhash as a thumbnail
    • another_flushbar: To replace our custom snackbar
    • video_thumbnail: To generate a thumbnail after downloading/before uploading a video
    release 
    opened by PapaTutuWawa 1
  • Media Display

    Media Display

    | Media type | Chat bubble | Quote reply | Shared Media list | | --- | --- | --- | --- | | Image | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | Video | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | File | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | Audio | :x: | :x: | :x: | | URL | :x: | :x: | N/A |

    ui 
    opened by PapaTutuWawa 0
  • RFC 9266: Channel Bindings for TLS 1.3 support

    RFC 9266: Channel Bindings for TLS 1.3 support

    Can you add the support of RFC 9266: Channel Bindings for TLS 1.3?

    • https://datatracker.ietf.org/doc/html/rfc9266

    Little details, to know easily:

    • tls-unique for TLS =< 1.2
    • tls-exporter for TLS = 1.3

    Thanks in advance.

    Linked to:

    • https://github.com/PapaTutuWawa/moxxyv2/issues/1
    enhancement backend/xmpp 
    opened by Neustradamus 2
  • [FEATURE REQUEST] JMP.chat features from Soprani.ca's Cheogram app

    [FEATURE REQUEST] JMP.chat features from Soprani.ca's Cheogram app

    This app is everything I've been searching for with XMPP on Android, but I wanted to know if there were 2 features you could copy from Cheogram, which is the recommended app for XMPP-based phone service JMP.chat. Those features being contact integration w/ your local contacts (most clients seem to have this for 1-1 convos but fail to get names for group chats) and integration with the native Android phone dialer app.

    Cheogram is fully open-source so it might be as easy as copying/pasting some code (though I doubt it's that easy). https://git.singpolyma.net/cheogram

    Obviously this is just a request, but I would love it if these could be done some time down the road.

    enhancement 
    opened by ItsRogueRen 9
  • Development Moved

    Development Moved

    Development is currently done at https://codeberg.org/moxxy/moxxyv2. Issues and Pull Requests can be created on Github at the moment, but I do my issue tracking on Codeberg.

    opened by PapaTutuWawa 0
  • SCRAM-SHA-1-PLUS + SCRAM-SHA-256(-PLUS) + SCRAM-SHA-512(-PLUS) supports

    SCRAM-SHA-1-PLUS + SCRAM-SHA-256(-PLUS) + SCRAM-SHA-512(-PLUS) supports

    To have compatibility with XMPP Servers and after:

    • SCRAM-SHA-1

    Can you add supports of :

    • SCRAM-SHA-1-PLUS
    • SCRAM-SHA-224
    • SCRAM-SHA-224-PLUS
    • SCRAM-SHA-256
    • SCRAM-SHA-256-PLUS
    • SCRAM-SHA-384
    • SCRAM-SHA-384-PLUS
    • SCRAM-SHA-512
    • SCRAM-SHA-512-PLUS
    • SCRAM-SHA3-512
    • SCRAM-SHA3-512-PLUS

    "When using the SASL SCRAM mechanism, the SCRAM-SHA-256-PLUS variant SHOULD be preferred over the SCRAM-SHA-256 variant, and SHA-256 variants [RFC7677] SHOULD be preferred over SHA-1 variants [RFC5802]".

    • SCRAM-SHA-1(-PLUS): -- https://tools.ietf.org/html/rfc5802 -- https://tools.ietf.org/html/rfc6120

    • SCRAM-SHA-256(-PLUS): -- https://tools.ietf.org/html/rfc7677 since 2015-11-02 -- https://tools.ietf.org/html/rfc8600 since 2019-06-21: https://mailarchive.ietf.org/arch/msg/ietf-announce/suJMmeMhuAOmGn_PJYgX5Vm8lNA

    • SCRAM-SHA-512(-PLUS): -- https://tools.ietf.org/html/draft-melnikov-scram-sha-512

    • SCRAM-SHA3-512(-PLUS): -- https://tools.ietf.org/html/draft-melnikov-scram-sha3-512

    • SCRAM BIS: Salted Challenge Response Authentication Mechanism (SCRAM) SASL and GSS-API Mechanisms: -- https://tools.ietf.org/html/draft-melnikov-scram-bis

    https://xmpp.org/extensions/inbox/hash-recommendations.html

    -PLUS variants:

    • RFC5056: On the Use of Channel Bindings to Secure Channels: https://tools.ietf.org/html/rfc5056
    • RFC5929: Channel Bindings for TLS: https://tools.ietf.org/html/rfc5929
    • Channel-Binding Types: https://www.iana.org/assignments/channel-binding-types/channel-binding-types.xhtml
    • RFC 9266: Channel Bindings for TLS 1.3: https://tools.ietf.org/html/rfc9266

    IMAP:

    • RFC9051: Internet Message Access Protocol (IMAP) - Version 4rev2: https://tools.ietf.org/html/rfc9051

    LDAP:

    • RFC5803: Lightweight Directory Access Protocol (LDAP) Schema for Storing Salted: Challenge Response Authentication Mechanism (SCRAM) Secrets: https://tools.ietf.org/html/rfc5803

    HTTP:

    • RFC7804: Salted Challenge Response HTTP Authentication Mechanism: https://tools.ietf.org/html/rfc7804

    2FA:

    • Extensions to Salted Challenge Response (SCRAM) for 2 factor authentication: https://datatracker.ietf.org/doc/html/draft-ietf-kitten-scram-2fa

    IANA:

    • Simple Authentication and Security Layer (SASL) Mechanisms: https://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml

    Linked to:

    • https://github.com/scram-xmpp/info/issues/1
    backend/xmpp 
    opened by Neustradamus 8
Releases(v0.4.0)
  • v0.4.0(Jan 2, 2023)

    New year, new release: 0.4.0

    This release includes:

    • Stickers using XEP-0449: See here for documentation on creating sticker packs
    • Reactions using XEP-0444
    • A huge OMEMO refactor
    • Long-press messages for various actions
    • Improve the message quoting UI
    • Fix logins for servers with SCRAM-SHA-256 and SCRAM-SHA-512
    • Fix bug causing avatars to become empty
    • Reduce memory usage when up- and downloading files
    • Implement recording voice messages
    • Implement audio messages
    • Show messages in chat when the OMEMO devices change
    • Show a preview of the last message's media in the overview
    • Support for Last Message Correction

    Note that this update may cause you to get logged out of your account. Data SHOULD not get lost, but I haven't tested that aspect that extensively.

    Source code(tar.gz)
    Source code(zip)
    moxxy-arm64-v8a-release.apk(28.19 MB)
    moxxy-armeabi-v7a-release.apk(24.82 MB)
    moxxy-x86_64-release.apk(29.78 MB)
  • v0.3.0(Nov 13, 2022)

    240 commits later and we have a new version! There are quite some changes in this version:

    • [BREAKING] Migrate from isar to sqlite. This means that all data is lost on this upgrade since I did not deem it necessary to include a migration path here
    • If your server includes a SRV record pointing to something like xmpp.your.domain, while your JID is [email protected], then Moxxy will now connect as long as the certificate is valid
    • The app's primary color is now used more
    • Blurhash calculations for File Upload Notifications are now much much faster
    • Messages can only be swiped in one direction for quoting
    • Implement OMEMO 0.8.3. Note that this feature is highly experimental! The UI is also somewhat clunky at places, but it should (in theory) work. The cryptographic implementation is provided by omemo_dart.
    • Message quotes' fallback body for media files are now more descriptive

    Also something to note: The entire XMPP code for Moxxy is now contained in the standalone library moxxmpp.

    Source code(tar.gz)
    Source code(zip)
    moxxy-arm64-v8a-release.apk(24.63 MB)
    moxxy-armeabi-v7a-release.apk(21.72 MB)
    moxxy-x86_64-release.apk(25.99 MB)
  • v0.2.3(Aug 28, 2022)

    This is another rather small release.

    The changes include:

    • Allow sharing text and files with chats. The implementation is pretty early and needs more love but works.
    • Make links clickable in the chat
    • Implement privacy redirects for Youtube and Twitter links. You can enable them in the privacy settings. They are off by default.
    • (Hopefully) fix a bug that caused the armeabi APK to not run on arm64 devices.
    • Fix all messages being left aligned after login.
    • Change the Android AppID from "me.polynom.moxxyv2" to "org.moxxy.moxxyv2"
    • Make images that are being sent appear earlier in the chat my moving the blurhash calculation further back

    With this, Moxxy should now be available from IzzyOnDroid's F-Droid repository. Thank you for having me 😄

    Source code(tar.gz)
    Source code(zip)
    moxxy-arm64-v8a-release.apk(21.58 MB)
    moxxy-armeabi-v7a-release.apk(19.82 MB)
    moxxy-x86_64-release.apk(22.60 MB)
  • v0.2.2(Aug 25, 2022)

    Another release. This time, a few more bug fixes and features!

    • Fix a bug where the connection would get stuck while reconnecting
    • Add an emoji picker. Due to how Flutter currently works, it may be a bit wonky in combination with the soft keyboard
    • Implement File Upload Notifications
    • The shared media display is now split by date. The way it is done is not optimal, though
    • Fix login with Disroot. This means enabling login using PLAIN
    • Fix getting stuck after login
    • Fix not showing certain negotiation errors on the login page
    • Make copying images and videos for sending much smarter so that it should take less time before the message appears in the message list
    • Add shadows to certain back button icons that may have a bright background
    Source code(tar.gz)
    Source code(zip)
    moxxy-arm64-v8a-release.apk(21.45 MB)
    moxxy-armeabi-v7a-release.apk(19.69 MB)
    moxxy-x86_64-release.apk(22.49 MB)
  • v0.2.1(Aug 14, 2022)

  • v0.2.0(Jul 29, 2022)

    After almost 300 commits since the last release, I am proud to announce the 0.2.0 alpha release of Moxxy. The most notable things in this release are:

    • (Hopefully) fixed connection issues
    • Fixed a bug that would crash the entire app including service
    • Fixed a bug causing avatars to crash the roster retrieval
    • Added support for HTTP File Uploading, though it is not reliable at the moment
    • Added support for chat backgrounds

    While Moxxy definitely has taken steps forward, please keep in mind that this is barely alpha quality software. There are bugs and weird issues left and right. If you, however, want to try Moxxy out, feel free to use the attached release builds. The only real hard requirements for testing are a server that advertises a SASL SCRAM variant - either SHA1, SHA256 or SHA512 non-plus - and a Android device that does not kill foreground services. If that happens, disable any powersaving measures for Moxxy . For more information about that, see here.

    Also, feel free to join the development chat at [email protected].

    Source code(tar.gz)
    Source code(zip)
    moxxy-arm64-v8a-release.apk(20.97 MB)
    moxxy-armeabi-v7a-release.apk(19.09 MB)
    moxxy-x86_64-release.apk(22.01 MB)
  • v.0.1.0(Mar 10, 2022)

    Already a new release? Wow.

    I still wouldn't call Moxxy ready for usage as there are still a ton of problems, but it looks kinda nice.

    This time a lot of new features have been added that are probably not quite ready yet, but here is a list:

    • Added inline media previews for images, videos and files if they are specified using either Out of Band Data, SIMS or SFS
    • Added a write-only implementation of XEP-0461 message replies
    • Fixed a nasty Stream Management bug and also improved the code to prevent excessive retransmissions of stanzas
    • Fixed a lot of bugs in the roster code
    • The background service icon is finally the Moxxy icon
    • You can finally connect to servers even if they don't support direct TLS as specified in XEP-0368. The code will, however, refuse to connect if it cannot enable StartTLS before authenticating. But that is a feature!
    • You can set an image to act as a chat background. However, currently you can only select or remove it.
    • If your server advertises a prefered stream resumption location, Moxxy should in theory honour it and fallback to the regular connection algorithm if that one fails
    Source code(tar.gz)
    Source code(zip)
  • v0.0.2(Feb 23, 2022)

    This pre-alpha release of Moxxy is still unusable as a general instant messenger, though if you don't need anything like images, quotes, profile pictures, etc., it might barely work.

    I mainly worked on the XMPP implementation and fixed a few quite nasty bugs. Mainly:

    • Stream Management SHOULD work but there might be a bug that prevents the app from reconnecting after some idle time
    • The Stream Management implementation should be much more spec compliant, though we don't honor the prefered resumption location yet (but that issue is tracked)
    • We now discover what a JID supports automatically if we receive a presence
    • Debugging is now better als works almost the same as with Monal
    Source code(tar.gz)
    Source code(zip)
  • v0.0.1(Jan 23, 2022)

    This is the first ever pre-alpha release of Moxxy!

    Currently, nothing is supported besided Stream Management, simple text messaging and removing contacts from the roster. This is definetely not production ready. But I have done everything I have in my roadmap for a first release.

    Currently the login only works if your server allows connections following XEP-0368 and presents either SCRAM-SHA-1, SCRAM-SHA-256 or SCRAM-SHA-512.

    The apk files are signed with this key.

    Source code(tar.gz)
    Source code(zip)
    app-arm64-v8a-release.apk(18.55 MB)
    app-arm64-v8a-release.apk.asc(591 bytes)
    app-armeabi-v7a-release.apk(16.04 MB)
    app-armeabi-v7a-release.apk.asc(591 bytes)
    app-x86_64-release.apk(19.61 MB)
    app-x86_64-release.apk.asc(591 bytes)
Owner
Student, Anime Expert, Vocaloid Listener, Docker and Linux Fan
null
💗 Tinder_Clone Building this app with intention of learning flutter better .

Tinder Clone Mozilla ?? Tinder_Clone Building this app with intention of learning flutter better . ?? Screenshots Splash Screen Login Page Phone numbe

Abhishek Kumar 175 Dec 19, 2022
What it be - A flutter app to experiment with locally executed mobile AI.

what_it_be A flutter app to experiment with locally executed mobile AI. Getting Started This project is a starting point for a Flutter application. A

S. OZDEMIR 1 Jan 4, 2022
Experiment with dark themes based on popular apps.

Fast Dark Theme This project is a Flutter web experiment. It allows you to prototype dark mode colors based on popular apps: WhatsApp, Twitter and Sha

Bernardo Ferrari 47 Dec 10, 2021
A thought experiment on writing a strange API for Dart.

Operator Frog ?? What is Operator Frog Operator Frog is a < 24h thought experiment that I did. I wanted to know if we could write a strange looking AP

Jochum van der Ploeg 19 Dec 8, 2022
Serene is a white noise app developed with Flutter. It helps you meditate, sleep better, focus, relax and be calm.

Serene - Relax, Meditate and Sleep A white noise app developed with Flutter. It helps you meditate, sleep better, focus, relax and be calm. Screenshot

Vipul Asri 89 Dec 6, 2022
Overlay/OverlayEntry, but better

Call for maintainer I (@rrousselGit) am sadly unable to maintain flutter_portal at the moment due to a lack of time, and would like to find a new main

Remi Rousselet 401 Jan 2, 2023
A simple widget for getting better feedback.

?? Using this library in a commercial product? Consider becoming a sponsor. A Flutter package for obtaining better feedback. It allows the user to pro

Jonas Uekötter 232 Dec 31, 2022
A simple wholesome affirmations mirror to make you feel better about yourself.

goodmirror A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if th

Dagmawi Babi 4 Sep 5, 2022
A better font for golden tests.

A better font for golden tests. This project is a Flutter Bounty Hunters proof-of-concept. Want font adjustments? Fund a milestone today! Golden Brick

Flutter Bounty Hunters 3 Dec 14, 2022
A GraphQL client for Flutter, bringing all the features from a modern GraphQL client to one easy to use package. Built after react apollo

Flutter GraphQL Table of Contents Flutter GraphQL Table of Contents About this project Installation Usage GraphQL Provider [Graphql Link and Headers]

Snowball Digital 45 Nov 9, 2022
A GraphQL client for Flutter, bringing all the features from a modern GraphQL client to one easy to use package.

GraphQL Flutter ?? Bulletin See the v3 -> v4 Migration Guide if you're still on v3. Maintenance status: Low. Follow #762 for updates on the planned ar

Zino & Co. 3.1k Jan 5, 2023
Vrchat mobile client - VRChat Unofficial Mobile Client For Flutter

VRChatMC VRChatの非公式なAPIを利用したVRChatのモバイルクライアント Flutterで作成されたシンプルなUIが特徴的です iosビルドは

ふぁ 8 Sep 28, 2022
Project demonstrates building a simple chat application using Flutter framework and Firebase cloud

Flutter Chat on Firebase Project demonstrates building a simple chat application using Flutter framework and Firebase cloud. App does not poll for new

Sukitha Udugamasooriya 8 Feb 2, 2022
Flying Fish is full-stack Dart framework - a semi-opinionated framework for building applications exclusively using Dart and Flutter

Flying Fish is full-stack Dart framework - a semi-opinionated framework for building applications exclusively using Dart and Flutter.

Flutter Fish 3 Dec 27, 2022
Easy form building in Flutter with a fluent schema API.

former - Easy form building in Flutter Motivation Formik is one of my favorite React libraries. It is a form library that drastically reduces boilerpl

Kenneth 21 Oct 11, 2022
Learn to Code While Building Apps - The Complete Flutter Development Bootcamp

BMI Calculator ?? Our Goal The objective of this tutorial is to look at how we can customise Flutter Widgets to achieve our own beautiful user interfa

London App Brewery 146 Jan 1, 2023
A beautiful design and useful project for Building a flutter knowledge architecture

Flutter Dojo Change log Flutter Dojo Change Log 我的网站 https://xuyisheng.top/ Wiki Flutter Dojo Wiki 体验APK Github Actions APK download 认识Flutter是在18年,移动

xuyisheng 1.4k Dec 21, 2022
Flutter plugin for building pull to refresh effects with PullToRefreshNotification and PullToRefreshContainer quickly.

pull_to_refresh_notification Language: English | 中文简体 widget to build pull to refresh effects. Web demo for PullToRefreshNotification Chinese blog pul

FlutterCandies 165 Dec 28, 2022