Git Product home page Git Product logo

tryquiet / quiet Goto Github PK

View Code? Open in Web Editor NEW
1.8K 23.0 76.0 487.85 MB

A private, p2p alternative to Slack and Discord built on Tor & IPFS

Home Page: https://www.tryquiet.org

License: GNU General Public License v3.0

JavaScript 0.62% TypeScript 27.78% HTML 0.09% Dockerfile 0.04% Shell 0.07% Makefile 0.01% Starlark 0.01% Java 0.05% Kotlin 0.31% Swift 0.08% Ruby 0.01% Objective-C 0.15% Python 0.63% CMake 0.02% C 58.36% C++ 11.66% Objective-C++ 0.08% ASL 0.04%
chat collaboration decentralized discord-alternatives ipfs local-first p2p privacy slack-alternative

quiet's Introduction

Logo

Quiet

Encrypted p2p team chat with no servers, just Tor.
Downloads | How it Works | Features | Threat Model | Mission | FAQ | Developer setup

Quiet is an alternative to team chat apps like Slack, Discord, and Element that does not require trusting a central server or running one's own. In Quiet, all data syncs directly between a team's devices over Tor with no server required.

NOTE: Quiet is not audited and should not be used when privacy and security are critical. It lacks basic features and probably won't replace your Slack or Discord yet. That said, it works surprisingly well and we use it daily as a Slack replacement.

Quiet is for fans of software freedom, decentralization and privacy tech, and for anyone craving a future where humanity can collaborate effectively online without trusting our communities, networks, and data to giant corporations.

Quiet is written (mostly) in TypeScript, with Electron and React Native frontends, and welcomes outside contributions! See: Contributing to Quiet

Screenshot

How it works

While apps like Slack, Discord, and Signal use central servers, Quiet syncs messages directly between a team's devices, over Tor, with no server required.

Each group of people (Quiet calls them "communities") gets their own insular network, so that data from one community never touches the devices of Quiet users in other communities. Not even in encrypted form!

Message syncing is taken care of by a project called OrbitDB, which works like a mashup of Git, a gossip protocol, and BitTorrent; it broadcasts new messages, syncs the latest messages, and fetches files. Syncing means that users typically receive all messages sent while they were offline.

Invites, access, and usernames are granted by a community owner, i.e. whoever creates the community. The owner hands out an "invitation code" which invitees use to connect to the owner's device, register a username, and get a standard cryptographic certificate so they can prove to other peers they're part of the community.

See our FAQ for answers to common questions and a comparison of Quiet with similar apps.

Getting started

To try Quiet, download the latest release for your platform (.dmg for macOS, .exe for Windows, etc.) and install it in the normal way. Then create a community and open the community's settings to invite members.

If you'd like to help develop Quiet, see Contributing to Quiet.

Features

  • Team Chat - Create a "community" for your team or organization and invite members.
  • End-to-end Encryption - All data is encrypted end-to-end between member devices.
  • Channels - Organize chats in Slack-like channels.
  • Images - Send and receive images, with copy/paste, drag & drop, and image previews.
  • Files - Send and receive giant files without arbitrary limits.
  • Notifications - Get desktop notifications for new messages, with optional sounds.
  • Invite links - Share invite links, just like in WhatsApp, Signal, or Discord.
  • Keyboard Controls - Navigate channels without using the mouse.
  • Desktop Apps - Desktop apps for Mac, Windows, and Linux.
  • Android App - A fully peer-to-peer Android app with working notifications.
  • iOS App - A fully peer-to-peer iOS app (TestFlight) without notifications.
  • No email or phone number required - Unlike Slack, Discord, WhatsApp, Telegram, and Signal, no email or phone number is required to create or join a community.

Planned (but still-missing) features

  • iOS Notifications - Receive notifications on iOS, with help from a service Apple requires to be centralized.
  • Direct Messages - Send and receive direct messages that are encrypted to the recipient and unreadable by other community members.
  • Mentions - Send @ mentions that notify other users.
  • Removal - Remove users from your community.
  • User Profiles - Add an avatar or bio.
  • Message Deletion - Delete individual messages and set timed deletion rules ("disappearing messages") for the community.
  • Status - See your own connection status and the online status of other users.
  • Reactions - React with emojis.
  • Multiple Communities - Join multiple communities, as you would in Slack or Discord.
  • Account Recovery - Recover owner accounts from a backup phrase.
  • Private channels - Create private channels with multiple members that are unreadable to the community at large.

Post-1.0 Features

  • Large Communities - Create a community with 1000 members or more (right now ~30-100 members is the limit.)
  • Moderation - Appoint moderators who can hide messages and silence or remove users.
  • Spam and Denial-of-Service Protection - Settings to automatically remove users who send disruptive messages.
  • Search - Robust message search.
  • Threads - Reply to messages in threads.
  • Tor Bridges - Connect via public or private bridges to avoid Internet censorship.
  • Tor Browser Support - Join communities as a full member with Tor Browser, without downloading an app.
  • Browser Support - Join communities with any modern browser via Arti-in-WASM.
  • Publishing - Share files (or entire websites) from your community to the web, via Tor, OnionBalance, and Tor2web + IPFS.

Technical overview

This is a concise technical summary of the main points.

  1. Granting access: community owners use standard PKI (PKI.js) to grant access, with each community owner serving as the community's certificate authority; this is handled by Quiet and transparent to users.
  2. Authentication: a valid signed certificate from the community owner is required to connect to peers, receive connections from peers, and for messages to be visible to other peers.
  3. Networking: peers connect via Tor onion services, exclusively with their fellow community members.
  4. Privacy: Tor encrypts all data in transit, and a Quiet user's device connects only to the devices of their fellow community members, so all messages are encrypted to recipients.
  5. Syncing: IPFS and OrbitDB, an IPFS-based CRDT, ensure that all data (messages, user data, etc) syncs between peers with eventual consistency.
  6. Asynchronous messaging: because messages sync to all members, members can communicate without being contemporaneously online, provided that there is "continuous liveness", a continuous chain of online peers who each sync the latest updates, between the sender and the recipient.
  7. Identity: a valid certificate from the community owner on account creation establishes a username, which the owner attests is unique; in future versions, Quiet will warn all members if community owners are caught issuing non-unique usernames, to protect against impersonation by malicious or compromised owners. (See: #119)
  8. Invitation: to invite new members, community owners provide (via some other secure channel) an onion address that points to a registration API which accepts a certificate signing request, responds with a signed certificate, and provides sufficient peer information to connect to other peers; in future versions this onion address will expire. (See: #536)
  9. Account recovery: owners must back up their data (e.g. by copying a folder, or someday with a wallet-style passphrase) and members request new accounts from owners.
  10. User removal: TBD, but likely a combination of expiring invitation onion addresses, certificate revocation, and message-layer encryption with updated keys.
  11. Multiple device support: TBD, but most likely based on local-first-web/auth
  12. Mobile push notifications: barring a major victory for consumer rights, iOS notifications require using a centralized push notification service that connects to Apple, but message data can still be encrypted; in proof-of-concept, Quiet works well as an always-on background app on Android, so Android versions will likely not require a push notification server.
  13. Stack: Our backend is in Node.js (on iOS/Android we use nodejs-mobile); we use Electron on desktop and React Native on mobile.

Our Mission

We are building Quiet to sharpen the tools that open societies use to hold power accountable. Each year, movements use the Internet to hold power accountable in breathtaking new ways. But the rise of big tech has made the Internet itself seem like yet another unaccountable power. The medium that brought us Occupy Wall Street now looks like regular old Wall Street. We believe this happened because software became too dependent on company-run infrastructure, which undermined the role free software has historically played in holding the software industry accountable. Our goal is to fix that.

In the 2000s, when key dominant tech products had viable free software competitors that were radically pro-user (products like Firefox, BitTorrent, VLC, Handbrake, or Linux) there was a limit to how much big tech could abuse users before users fled.

But software for communication and collaboration seemed to require servers, whose cost grew with the software's popularity, so the question "who runs the server?" became a dilemma for free software projects. Should the project itself run the server? What about when costs grew too high? Should users run the server? But only a small niche of hobbyists have servers! Should an organization run the server? If so, then that organization now controls the data and relationships that make the product useful, limiting the freedom to fork and flee that makes free software so accountable and desirable. Reddit, for example, was once free software, but because forking Reddit's code would never have resulted in anything more than an empty website (since all the conversations and relationships that make Reddit what it is sit on company-run servers) Reddit being free software never gave Reddit's users any real power to hold it accountable.

Federation is a proposed solution to this dilemma, but Gmail shows its limits. After all, email is the most well-known federated product, but Google can still build must-have features like spam filtering on the server side, and Gmail controls a user's email address, so exiting Gmail means updating dozens or hundreds of accounts created with that address. Exiting Gmail might be easier than exiting Facebook or Instagram, but no Gmail competitor can make exiting Gmail as easy and delightful an experience as Firefox made exiting Internet Explorer, because Gmail controls infrastructure, where Internet Explorer never did. So while federation does help, we must do better if we want to hold big tech accountable.

Regulation is an even weaker proposed solution. Even when regulation works—and a quick look at the media, telecom, energy, or banking industries will illustrate its limits—regulation tends to create a cozy relationship between industry and regulators that makes industries easy targets for government subversion. For example, the highly-regulated telecom industry bends over backwards every time governments want help carrying out unpopular mass surveillance. Is this what we want from big tech?

We're building Quiet because we believe that, for a broad and growing class of software, the best answer to the "who runs the server?" dilemma is "no one." Eliminate the server; in terms of accountability, it is a burden and a weakness. By eliminating servers from software's attack surface, software can be more private and secure. By eliminating exponentially growing server costs and the expertise-intensive work of scaling servers, software can be built by smaller teams under less financial pressure to betray users. Most importantly, by eliminating the server operator's control of relationships and data, users will be free to fork and exit, so they will once again have real power to hold software accountable.

We're building Quiet to spark a new phase of the free software movement where it is easy and normal to build apps this way. We want to make a private alternative to Slack & Discord that people love, to figure out the best and easiest technical approach along the way, and—by doing all this—to blaze a trail that other free software teams building other products can follow. Once one team (us, we hope!) can build a good alternative to Slack that doesn't use servers, other teams can build alternatives to Google Docs, Figma, Asana, Trello, 1Password, and so on, until someday—and this is technically much more difficult—humanity can build fully-forkable alternatives to things like Facebook, Twitter, Instagram, or even more complex applications. Big tech's users will be free to flee, and the Internet can stop being yet another unaccountable power, and keep being the breathtaking medium for holding power accountable that open societies need.

Join us, and let's figure this out.

Contributing to Quiet

Even though Quiet is completely peer-to-peer, it is mostly written in TypeScript and will be familiar to anyone accustomed to Node.js web development. Desktop and mobile versions share a common Node.js backend and React state manager, with Tor binaries for each platform and architecture, using Electron and React Native and for their respective frontends.

To get started hacking on Quiet, follow the instructions for Quiet Desktop or Quiet Mobile. (If you're new to the project, start with Quiet Desktop, as it's more stable and vastly easier to start hacking on.) Here are some good first issues, and you can see upcoming priorities in our project board.

Most of all, if you're interested in contributing, be in touch! Drop us a line at [email protected] and we'll add you to the project's Quiet community and (if you like) plan an onboarding session.

quiet's People

Contributors

adrastaea avatar agiledev24 avatar aleksey28 avatar alexandermoskovkin avatar andreybelym avatar dependabot[bot] avatar dinek007 avatar emim avatar euzebe avatar farfurix avatar holmesworcester avatar ikoenigsknecht avatar jkdev601 avatar josephlacey avatar joshuef avatar kacper-rf avatar kingalg avatar kowalski avatar leblowl avatar mike-kiss avatar norbertbodziony avatar pdurbin avatar rajdip-b avatar richardtorres314 avatar siepra avatar steveetm avatar tylerchilds avatar ulisesgascon avatar vasilystrelyaev avatar vinkabuki 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  avatar  avatar  avatar  avatar  avatar  avatar

quiet's Issues

add channel saga

channel saga should be shared. This part of store is responsible for keeping information about unread messages, keeps an input value etc

Registered usernames that are duplicates or invalid should trigger aggressive warning

We should validate that data written to the user table meets our criteria, and show an aggressive warning if it does not.

  1. All users should validate that username entries are correct, by the same criteria as the registrar frontend (alphanumeric, character limits, etc.)
  2. All users should validate that there are not duplicate username registrations.
  3. Seeing a message from a user with a duplicate registration signed by the admin should trigger a warning, even if there is only one registration in the user table. This does not apply to unregistered users, or an unregistered user having the same name of a registered user. This aggressive warning should only show when we have two messages from registered users signed by different public keys with the same name.
  4. The warning should show on startup or, in the future, whenever someone switches to the community.
  5. The warning should include a "leave community" button.

https://www.figma.com/file/TV9pF84Ob8pLYRLu83gNol/Joining-when-owner-is-offline?type=design&node-id=311-6979&mode=design&t=eS9WDLYpQNod1Acl-4

Image

Release candidate should build and auto-update for all changes to develop

Since we're actively dogfooding an internal testing version, and since we're focusing more on testing right now than QA, let's do automatic updates for every change that gets pushed to the develop branch.

This will also encourage folks to really try to catch any issues with tests before merging.

Zbay crashes on every restart following initial internal restart for entropy.

The instructions within the application said that it should take a bit less than an hour, and to more securely anchor the installation I should click to restart it and then everything should be optimum.

OS = Win 10/64
Zbay version (unable to check, but installed about two hours ago).

I installed Zbay. I take my time reading and looking over, and noting that it didn't say 'beta' anywhere decided to set it up and give it a try.

I couldn't find anywhere to set it to use TOR by default for private messages, and read where it suggested closing and relaunching to achieve I guess, maximum entropy?

Anyway, when I clicked to let it close and reopen I got errors which it wanted to send to the dev team, and then locked me out. It won't successfully launch at all now, and keeps coming up with the error which I grant access for it to report.

I did not fund it, although I was ready to right after that reboot. At this point it looks like I'll need to uninstall and reinstall but nowhere did I see a place to restore using my private paper recovery phrases.

Libp2p connection problem. Wrong common name

waggle:libp2p:err Could not connect to discovered peer QmV1D4RtapSnCfBbahhkApPwK4WiDqMJS3BcEjXz9GZv7S AggregateError:
Error: Hostname/IP does not match certificate's altnames: Host: dtwy5lwyzf3we6jnjq72nsyqkfw27bibvrfheshxydbcbyy7u6tpf6ad.onion. is not cert's CN: hbq5s7o6omo6raevbhkl6rqlut5dzdzzhohg57veesq2opin4ccoioid.onion
at Array.map ()
at maybeSettle (/home/bart/Code/zbay/nectar/node_modules/p-some/index.js:31:11)
at /home/bart/Code/zbay/nectar/node_modules/p-some/index.js:69:23
at maybeSettle (/home/bart/Code/zbay/nectar/node_modules/p-some/index.js:31:11)
at /home/bart/Code/zbay/nectar/node_modules/p-some/index.js:69:23
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
name: 'AggregateError'
} +0ms

Support CRL (certificate revocation list)

  • owner of root key should control the CRL list
  • CRL should be either a seperate channel or a different kind of message on "user certficate channels" (whichever seems more convenient)
  • CRL should be respected in WebsocketOverTor.
    • if either server or client certificate is on CRL the connection handshake should not succeed
    • mind that CRL can be update after we have started listening (on websocket) and we need to also respect changes made since than
  • certificates should be disregarded from CRL when they are passed their expiration date (NotAfter field)
  • when certificate is added to CRL, each connected peer should actively disconnect from it (check peerId of connections it has and hang up connection if connected to the peer being expelled)

User should be able to create a new public channel

Any user should be able to do this. In the future we might limit it to channel owners or add limits on the number of channels someone can add.

Channel names should have the same validation rules as usernames.

Error is thrown sometimes while closing Zbay (IPFS - ''ERR_NOT_STARTED")

NotStartedError: not started
    at Function.use (/home/rf/dev/zbay/waggle/node_modules/ipfs-core/src/utils/service.js:155:15)
    at Service.use (/home/rf/dev/zbay/waggle/node_modules/ipfs-core/src/utils/service.js:201:26)
    at peers (/home/rf/dev/zbay/waggle/node_modules/ipfs-core/src/components/pubsub.js:133:38)
    at Object.peers (/home/rf/dev/zbay/waggle/node_modules/ipfs-core-utils/src/with-timeout-option.js:20:46)
    at checkPeers (/home/rf/dev/zbay/waggle/node_modules/ipfs-pubsub-1on1/src/wait-for-peers.js:5:37)
    at Timeout._onTimeout (/home/rf/dev/zbay/waggle/node_modules/ipfs-pubsub-1on1/src/wait-for-peers.js:17:19)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7) {
  code: 'ERR_NOT_STARTED'
}

User registration should take ~2 seconds or less

Right now user registration can take 20 or 30 seconds or more sometimes.

From Emi:

"I noticed that sometimes user registration takes a long time. I think this is happening because before saving cert to db we iterate over certificates and parse them to check if username exists. Worst case scenario we iterate to the end of log-db. I saw in the logs that this can take a while."

We should figure out what the issue is. It should be almost instantaneous, no?

@ mentions for notifying someone

steps:

  1. @ mention someone

expected:

  1. user selector appears with autocomplete
  2. name is highlighted for sender
  3. name is highlighted for recipients
  4. user gets a notification of the mention on desktop or mobile
  5. in notification settings you can choose to be notified only of @ mentions and DMs.

Couldn't send from docker zbay to host zbay

Emi had two Zbays running, one running release candidate in a docker and one running develop branch locally.

The local one could not see messages from the docker one. Other Zbay users could see messages from both.

Theories about why this was happening:

One hypothesis: local was not connected to docker directly and messages aren't propagating correctly across peers who aren't directly connected.

I'm not sure how hard this is to reproduce, but it probably will take a few tries. We might just need to write a lot of tests that vary when peers come on and offline, and who is connected to whom.

Reaching user registration screen should take ~2 seconds or less

Right now it takes about 23 seconds before a first-time user reaches the registration screen.

This feels too long. In the logs, it looks like the step where the user registration screen displays is:

subscribeForAllConversations: 0.018ms
Sending back 2 certificates
initAllConversations: 19.686ms
Message replicated
Sending back 4 certificates

...so the user is syncing even before the user registration screen displays? Why not display it right away on app startup?

Do we even need to be connected to the network to show the user registration screen? The user can take their time choosing a name, and we can spin up Tor etc while they're doing that.

Then they just need to connect to the registrar via Tor right?

In the model we're moving towards, they won't even know which network they're connecting to when the app starts. They'll paste in an invite link or start their own network. We can still start a Tor hidden service and libp2p though, while we wait for them to decide.

Collection of UX consistency issues around name registration, new channel, channel post.

Hi, just launched Zbay Lite. Great work!

rambling story with UX paper cuts

After launching Zbay Lite for the first time, it asks for a name I'd like to register, and I entered zecnate. So far so good.

The main screen appears and I start exploring it. Then I realize up at the top it says @anon<NNN>, and I think "huh, but I thought I registered a name". I click that, see an option to register, then go to do so. I re-enter the same name, and it mentions I need to add funds.

I go to add funds, I get a zaddr. I can't find the QR Code button for the zaddr. Why isn't there one? (Aside: why is the shielded address second and hidden behind a drop-down?) I use a commandline tool to generate a QR code then send some funds to that address.

It takes Zbay a while to show the pending funds. (This doesn't surprise me, but I figure it would confuse non-blockchain-savvy users.)

However, over the next while, the pop-out over the "add funds" button keeps appearing prompting me to add funds. But I've already done so, I'm just waiting for them to confirm.

After a while I see my name registration appear in the #zbay channel. Yay!

However, now I can't post to that channel. In fact, sometimes I see a text input widget, and sometimes I do not. I've typed text into the widget, but I can't hit enter and there's no send button.

I try creating a new channel and I'm able to do so after a few tries. After that, it looks like my balance is pending again.

Generalization of the Issues

Generally it seems like I need to try actions a few times and the response is inconsistent depending on sync state or confirmation of transfers. Whenever something is pending, I can easily get confused because when I try an action I don't see an immediate response.

Follow up

I apologize for jumbling together multiple issues in a rambling story, just trying to get this all down on paper. If you'd like to suggest specific tests I can run those, and potentially file separate tickets for separate more precise issues.

UX brainstorms

It might be helpful to have a "pending actions" widget that shows a queue. Example:

[cute yet unobtrusive spinner...]
1. registering `@zecnate` - status: waiting for transaction confirmation.
2. create channel `#zcash-dev` - status: waiting for funds.

It might also be nice to have a separate "busy indicator" whenever we're waiting for zecwallet-lite to do some operation.

Keep up the good work! I hope I can ditch slack sooner or later. :-D

Users should not be able to spam arbitrary edits to DBs (DoS vector)

Right now, any member of the community can add arbitrary entries to any orbitdb, including the user table, the channel list, DM threads that don't belong to them, etc.

We should add orbitdb access control to confirm that users can only edit the databases in ways that are intended, and that all other edits are ignored by other peers.

Examples:

  1. User table should only be writable by owner (this does not require a custom access controller, I don't think)
  2. Only owner should be able to delete channels. Users should be able to add channels but not delete them.
  3. Users should not be able to add invalid data to the channel list.
  4. Only the participants of a DM thread should be able to write messages to that thread. (This might not need custom access control either)
  5. Users should not be able to write invalid messages to any channel.
  6. There should be a size limit on messages.
  7. The owner should not be able to add invalid data to the user table.

Question: are there any other tables I'm forgetting about here?

Determine whether delivering a snapshot to a user speeds up syncing process, relative to latest orbitdb

Right now we suspect that delivering a snapshot to a user speeds up the syncing process, but we don't know if this is true, or by how much.

We should find out how much making a snapshot on request for a new user and delivering it to the user speeds up initial message sync.

to be clear we are measuring snapshot creation time plus time to send and parse snapshot, not just the latter.

It's potentially okay if snapshots are partially working, since if they speed things up while partially working we can assume they speed things up even more when working completely.

We should compare create snapshot + sync from snapshot to regular syncing in the latest (master) orbitdb.

User should see warning if registration server "lies" and gives the same name to two distinct users/keys.

Right now, we trust that the registrar is honest and doesn't impersonate people, or let two users register the same username.

If we ever see two users with the same username, we should:

  1. Show a full-screen warning to the user who sees this. The message should continue to display in some way when the user closes their screen.

  2. Broadcast a message containing the proof of equivocation to all other users to be sure everyone sees the equivocation, e.g. in the case the message was sent in a DM or on a private channel such that it would not be visible to all participants. We should make sure there is a way to do this without sharing message contents.

This behavior should work on desktop and mobile, and it's critical, so at least some of it should be shared code.

(We've talked about breaking out the encryption and identity bits of waggle into a shared library.)

This ticket shouldn't be closed until there's a corresponding ticket created for implementing this in ZbayMobile

User should be able to see when someone new joins a community

In Zbay we had a notification that a user had been added to a community. In Quiet we should add this back.

Two options (I think #2 is the right choice because it's so simple, but it's not the best)

  1. We could do it the way we did it before, where there was a special kind of message that displayed in the channel (should be #general i think) when we see that a new user has been added. This would appear as coming from a "bot" called "Quiet" with the Quiet logo, and we could use it for other meta level messages.

  2. We could have the owner/registrar send the message "@username joined community-name" to the #general channel after they complete the process of adding that user. We do something like this already for new channel creation.

The second is less good because the owner can spoof that message just by typing it, even when they did not add a user. But it's also really simple. And it reinforces that the owner is the one responsible for adding people.

Cannot click on user modal to initiate DM

Steps to reproduce:

  1. Click on a username in #zbay channel

Expected: can click button in modal to DM.
Actual: it is inactive / grayed out, even though the user is registered

Enable mentions for inputs in community channels

ChannelInputComponent takes [{ nickname: string }] as 'users' param in order to display mentions by typing in '@'.
There is a need to get list of channel participants, e.g. by combining peerList (community) with certificatesMapping and pass it to the component

Libp2p does not handle tor connection problem

We knew that libp2p is trying to reconnect in case of failed connections, but there is at least one tor problem that does not disappear itself.

https://www.reddit.com/r/TOR/comments/a1vyxt/closed_1_streams_for_service_scrubbedonion_for/

waggle:tor Nov 16 10:01:40.000 [notice] Closed 1 streams for service [scrubbed].onion for reason resolve failed. Fetch status: No more HSDir available to query.
waggle:tor +15s
waggle:tor Nov 16 10:01:56.000 [notice] Closed 1 streams for service [scrubbed].onion for reason resolve failed. Fetch status: No more HSDir available to query.
waggle:tor +16s
waggle:tor Nov 16 10:02:12.000 [notice] Closed 1 streams for service [scrubbed].onion for reason resolve failed. Fetch status: No more HSDir available to query.
waggle:tor +17s
waggle:tor Nov 16 10:02:27.000 [notice] Closed 1 streams for service [scrubbed].onion for reason resolve failed. Fetch status: No more HSDir available to query.
waggle:tor +15s
waggle:tor Nov 16 10:02:44.000 [notice] Closed 1 streams for service [scrubbed].onion for reason resolve failed. Fetch status: No more HSDir available to query.
waggle:tor +16s
waggle:tor Nov 16 10:02:58.000 [notice] Closed 1 streams for service [scrubbed].onion for reason resolve failed. Fetch status: No more HSDir available to query.
waggle:tor +14s

Zbay and Tor performance issues in Apple Silicon

A user with Apple Silicon is reporting high CPU usage for both Zbay and Tor.

This is expected, according to Electron folks: https://www.electronjs.org/blog/apple-silicon

We can build an arm64 version of Zbay, and then we can make a universal binary (both versions stuck together) using this: https://github.com/electron/universal

I think we should do this soon given that performance issues are something we really need to stamp out, and given that many users will have recent macs.

It would be great to have performance tests run in CI on Apple M1 hardware.

Also, see: electron/electron#26710 for some possibly helpful information about electron-builder not being the officially supported tool. They recommend electron-forge.

Set timeout for github actions

Look at this build: it consumed 6 hours of CI time, because its the default timeout. Set this to something that makes sense.

Community owner should store their root CA offline, sign with an intermediate CA, and be able to restore root CA from paper backup

Right now we're signing certificates with the root CA. Standard practice is to keep the root CA online as little as possible and sign with an intermediate CA. We should do this.

Owner should be able to:

  1. Back up the community CA (which is subsequently forgotten on the device) with a seed phrase.
  2. Restore this backup, revoking their old intermediate CA, and re-signing user certificates one by one, or re-inviting people (How will this work?)
  3. Be the owner of the community again.

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.