Personal mirror, might delete later
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Katharina Fey a30f94e0bb Update .mailmap 3 years ago
clients Refactoring RPC components 3 years ago
docs website: move footer to bottom of the page 3 years ago
emberweb update documentation 3 years ago
libqaul libqaul: remove legacy code 3 years ago
licenses update documentation 3 years ago
netmods Pin ratman-identity to 0.6.0 and update Cargo manifest 3 years ago
nix nix: fix CI build dependencies 3 years ago
ratman netmod-udp: updating depnedency to task-notify 3 years ago
rpc-core Refactoring RPC components 3 years ago
sdk Improve SDK/ example service documentation 3 years ago
services Improve SDK/ example service documentation 3 years ago
tests update documentation 3 years ago
utils alexandria: fix tests 3 years ago
.envrc Adding project-local nix files to use with lorri 5 years ago
.gitattributes Adding a gitattribute file 4 years ago
.gitignore added builded documentation to .gitignore 5 years ago
.gitlab-ci.yml Add Nix packaging and CI 3 years ago
.mailmap Update .mailmap 3 years ago
.rustfmt.toml meta: add .rustfmt.toml with edition config 4 years ago
CODE_OF_CONDUCT.md update documentation 3 years ago
Cargo.lock netmod-udp: updating depnedency to task-notify 3 years ago
Cargo.toml Refactoring RPC components 3 years ago
LICENSE Changing license from GPL-3.0 to AGPL-3.0 5 years ago
README.md Update README.md 3 years ago
notes.md libqaul: refactoring external type fascade into separate crate 3 years ago
shell.nix Refactoring RPC components 3 years ago

README.md


Built with Nix

qaul is a decentralised networking project, aiming to create easy-to-use solutions for ad-hoc wireless communication. It supports many common desktop operating systems (Linux, Windows, MacOS, BSD, …), and Android mobile phones. iOS support is on the roadmap.

qaul is both a cross-platform application, implementing messaging, filesharing, and voice calls, but also a development toolkit to create fully decentralised third-party applications.

In order to be able to run on unpriviledged mobile platforms qaul implements decentralised routing protocols and utilities entirely in userspace. The codebase is largely written in Rust, with only a few compatibility components being written in more platform specific languages. All parts of the project are contained in this repository.

Following is an overview of the available components. Components have additional information in their respective README files.

Component Description
clients qaul end-user applications for various platforms
docs Manuals (for both users and developers), and tools to build and deploy documentation
emberweb Cross-platform web interface bundled in with various user clients
libqaul Core library of the qaul ecosystem. Provides networking abstractions, user management and discovery
licenses Set of license texts that are in use in this repository
netmods Platform-specific networking interface drivers
nix Nix related build utilities
ratman A decentralised and modular userspace frame router
rpc-core Core components of the qrpc development system
sdk Software Development Kit libraries for third-party developers
services A collection of services that use qaul as their network backend. Some are part of qaul.net, others are development examples
tests Integrated test suite for various components. Most of the code also has inline tests
utils Various utilities in use all over the repository that don't fit in anywhere else

Overview

Most traditional networking infrastructure (both the transmission layer, as well as applications) operate in a centralised way. Clients connect to servers, and devices to towers. This makes the infrastructure vulnerable to attacks. Natural disasters or opressive governments can easily shut down communication for millions of people, potentially putting them at risk, and slowing down or disrupting any organisation or activist movement.

qaul aims to solve this issue by creating decentralised circuits between devices directly. These direct device-to-device connections can be imperfect and unstable. qaul's routing approach takes these issues into account by caching undelivered messages, and carrying them towards their destination until the receipient comes back online.

Routing in a qaul network is done via a user's ed25519 public keys, creating a 32 byte large address space. Connecting devices together happens via channel-specific drivers (for example the tcp internet overlay). Therefore when creating a circuit, roaming between different connection types is normal, and no single technology has to work on all possible devices.

To learn more about the technical side of qaul, check out the contributor manual.

How to use

There's no single way to use qaul. Various platforms support different clients, and a qaul network can consist of many different components interacting with each other. To get started, check out the user manual!

Contributing

Social processes, code, and design guidelines are outlined in the contributor manual. We have a developer chat hosted on Matrix where we would be happy to answer any questions you have. For more long-form posting we have a mailing list. We also accept patches via e-mail!

If you want some inspiration for what you can do with qaul, check out the services section.

License

qaul is free software licensed under the GNU Affero General Public License version 3 or later.

Additional Permissions: For Submission to the Apple App Store:

Provided that you are otherwise in compliance with the AGPLv3 for each covered work you convey (including without limitation making the Corresponding Source available in compliance with Section 6 of the AGPLv3), the qaul developers also grant you the additional permission to convey through the Apple App Store non-source executable versions of the Program as incorporated into each applicable covered work as Executable Versions only under the Mozilla Public License version 2.0.

A copy of both the AGPL-3.0 and MPL-2.0 license texts are included in this repository, along other external licenses for third-party code, and can be found in the licenses directory.