Code Monkey home page Code Monkey logo

nio's Introduction

๐Ÿ’ฌ Nio

Matrix Liberapay

Nio is an upcoming Matrix client for iOS.

For the time being this project is still very much a work in progress. For updates, please check by in our matrix room โ†’ #niochat:matrix.org.

Want to give it a spin? Join the public TestFlight Beta.

This project is currently on hiatus and not under active development. Please use one of the other fantastic iOS Matrix clients :)

screenshot

Getting Started

Since Nio uses Swift Package Manager all you need to do is clone the project, open it in Xcode and hit โŒ˜R to run the app on your simulator or device.

Translations

If you can help translate Nio into other languages your help would be much appreciated! Translation files are available on translate.riot.im.

Translation status

Funding

As with any project, development costs a lot of time and money. Nio has no intention whatsoever of ever becoming a paid application or to support itself through icky means like ads or selling user data. But if you feel so inclined to support the project financially, we'd be forever grateful.

You can either use Liberapay for "traditional" payment methods or donate some Nano to nano_1dr4k1p63sas5qf9wyepqnuxwpjgik8z1f3nmk1gs8dpopaz97er6rq4tojm.

Nano

Other cryptocurrencies are of course just as welcome, just ask in the chat.

Thank you! โค๏ธ

Similar Apps

You might also have fun checking out the following applications.

  • FluffyChat, arguably the cutest mobile Matrix client.
  • Ditto Chat, cross-platform (based on ReactNative) and just as purple ๐Ÿ’œ

Why "Nio"?

Nio is short for Niobe (albeit pronounced differently), captain of the ship Logos in the Matrix trilogy. Additionally it's a homonym of Neo, because there's definitely not enough Matrix projects jumping on that pun train already.

The abbreviation NIO is also commonly used to refer to the term non-blocking IO. I find this entertaining for a messaging client, which is essentially a human IO interface.

nio's People

Contributors

1gbpendrive avatar a22sc avatar aaronraimist avatar anoloth avatar bitigchi avatar brdrrt avatar cvwright avatar helje5 avatar ihorhordiichuk avatar ionutivan avatar jelv avatar kiliankoe avatar laosb avatar leonurium avatar linagkar avatar mmehdishafiee avatar notramo avatar petercpg avatar pixlwave avatar punkrockgirl avatar raspin0 avatar regexident avatar rsre avatar stefanhofman avatar thomersch avatar toomore avatar tr-slimey avatar uetcis avatar viveron avatar zachinquarantine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nio's Issues

Re-license under MPL-2

@regexident recently brought up that the Apache License 2.0 might be problematic regarding usage of Nio by others and recommended the MPL-2 instead, being a non-viral GPL. Forks of Nio would have to make their changes available whilst keeping ownership of everything else if I understood it correctly.

Would this change be ok with all current contributors? @regexident @aaronraimist @sn3ek?

Sent messages don't immediately appear in history

On sending a message the message text field is cleared, but the message isn't shown in the history until it's fully sent. This can sometimes take a few seconds, which is awkward. Riot shows the message with an alternate text color in this case.

This uses the local echo events that are passed to the Matrix SDK APIs.

Sync draft messages

Feature for the far future when the macOS client exists. Draft messages should be synced transparently over the user's iCloud account.

Typing feeling is off

Not quite sure what's happening here, but typing in the message composer feels choppy somehow.

App Icon setting

Two versions of the icon for each accent color option. One with colored background and one inverted with a white background.

And definitely a bunch of fun ones like GitHub, Apollo and Working Copy ๐Ÿ˜

Screenshot 2019-12-10 at 22 15 02

Screenshot 2019-12-10 at 22 14 30

E2EE

  • Decryption of existing events
  • Sending of encrypted messages
  • Persistence of encryption keys
  • Support verification of encryption key sharing from other clients

Settings

What things should be included?

Matrix

  • Logout Button
  • PW change
  • App-wide notification settings (aside from room and system settings)
  • Device List
  • Crypto information and key export/backup

App specific stuff

  • hide unwanted events (redactions, room.member changes, ...)
  • Accent color (see #1)
  • App Icon (see #38)
  • App language possibly (aside from having this possible in the system settings)
  • About the app information
  • Tip jar for supporting the project

Anything else?

Export Compliance

Icky topic. Nio (obviously) uses encryption. It would probably make sense to copy whatever Riot is doing here, I think I've seen some info on that floating around somewhere.

Also make sure to add the necessary information directly to the app's metadata to make ASC happy and require less manual steps.

Un-/read handling

Currently a room is being completely marked as read on open. Is this what other messengers do? Probably.

What's still necessary:

  • Show unread indicator, like a red line indicating which messages are new.
    • When should this be dismissed?
    • And what should happen if this is out of screen? Should a conversation open to the last read point or should there be a jump up button like in Riot?
  • Mark messages as read when they come in when a room is currently open.

Show sync state

On app start the login view is shown during the login process. After this the sync process is not done though, which should be indicated by some kind of UI. Ditto has a very cool banner for this, maybe something along those lines? Alternatively just an activity indicator somewhere.

Ideally, the entire "restoring session" full screen view should not be necessary. The data is already there, it's just blocking while the mx session is authenticating, which is imho totally part one of the sync step that follows anyway. A chat app obviously shouldn't have a fullscreen loading view that takes seconds to dismiss before showing you your messages. Also, it fails if there's no internet connection, which is even worse.

Push beta versions from GitHub action

Running the fastlane action on pushes with a beta tag. Probably something along the lines of the following. This will also need all necessary authentication information in the repo secrets and might be interesting to setup with correct code-signing config.

name: Release Beta

on:
  push:
    branches: master
    tags: builds/beta/*

jobs:
  build:
    runs-on: macos-latest
    steps:
    - name: fastlane
      uses: maierj/[email protected]
      with:
        lane: beta

GitHub docs on filtering branches/tags in action events: https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestbranchestags

GitHub action for fastlane: https://github.com/maierj/fastlane-action

Random events dismiss RoomView

Some events cause Nio to dismiss the RoomView and go back to the RecentRoomsView. It has happened with new sent messages, new received messages and also new events in other rooms. Even with typing events!

I've not been able to reproduce this 100% with anything, but in tests it's definitely occurred more often on first events from a specific sender in a row.

Fastlane can't push beta to Testflight

Currently fastlane only uploads the beta to ASC, but I haven't automated any further steps, primarily because of the export compliance step in ASC (see #56). Ideally fastlane would upload the build, have it be available for internal testing, push it through review if necessary (and if not) make it directly available for public beta testing.

Keyboard shortcuts

Great for iPad and simulator usage.

  • โ†‘ Edit last message
  • โŒ˜โ‡ง\ Open reaction picker for latest message (like Slack)
  • โŒ˜k Open quickswitcher

Distinct foreign message colors

Add a setting that, if enabled, causes foreign messages in groups to have separate background (or just author name label) colors based on their sender to be easily distinguishable from another. Basically what Signal for Android does.

signal android screenshot

Colors should obviously be deterministically based on sender MXIDs. I don't think there's a need for anybody to be able to influence how they appear on another device, which would also make this much more complicated.

cc @sn3ek

ScrollView weirdness

Just to track all the ways the current reversed scrollview used for conversations is weird ๐Ÿ™ˆ

  • Scroll indicator is on the left.
  • Scroll indicator is on the right in landscape (if the keyboard is open on iPad).
  • Tap on status bar scrolls all the way down.
  • Navigation bar separator is not shown on iPad if scroll view is scrolled all the way down (instead of up which would be correct)
  • VoiceOver reads the messages in reverse order.
  • Dismissing the room view with a keyboard shown resets the scroll offset to behind the keyboard.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.