The Rust brain for the White Noise app
  • Rust 99%
  • Just 0.6%
  • Shell 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Javier G. Montoya S. f9db2effeb
Fix/aggregated messages reaction deletion (#412)
* test(integration/advanced_messaging): add case to check deleted reactions are properly removed from aggregated messages

* fix(aggregated_messages): update base message upon reaction deletion

* refactor(event_tracker): use dependency injection for better testability
2025-12-08 17:01:46 +04:00
.cargo Add rustfmt & clippy project settings files (#111) 2025-03-18 22:23:47 +01:00
.cursor/rules Remove old media code (#376) 2025-09-29 12:45:07 +02:00
.github Feat/add group method (#399) 2025-11-07 09:50:08 +01:00
.test Implement upload profile picture (#237) 2025-07-01 12:47:32 +02:00
.vscode feat(integration_tests/benchmarks): add benchmark tests with SendMessageBenchmark (#404) 2025-11-13 16:28:11 -03:00
db_migrations Feat/persist aggregated messages (#407) 2025-11-20 18:31:58 -06:00
dev test(benchmarks/scenarios/message_aggregation): add benchmark test for fetch_aggregated_messages_for_group (#405) 2025-11-14 12:51:14 -03:00
docs Media files support (#383) 2025-10-15 14:13:11 -03:00
scripts Feat/add group method (#399) 2025-11-07 09:50:08 +01:00
src Fix/aggregated messages reaction deletion (#412) 2025-12-08 17:01:46 +04:00
.cursorignore Remove all Tauri specific code 2025-05-14 17:24:27 +02:00
.env.example Add query and fetch methods for contacts, thoroughly test query and fetch (#266) 2025-07-10 11:50:39 +02:00
.gitignore feat(integration_tests/benchmarks): add benchmark tests with SendMessageBenchmark (#404) 2025-11-13 16:28:11 -03:00
.goosehints Remove all Tauri specific code 2025-05-14 17:24:27 +02:00
Cargo.lock Perf/create identity (#408) 2025-11-27 10:39:34 +04:00
Cargo.toml Perf/create identity (#408) 2025-11-27 10:39:34 +04:00
CHANGELOG.md feat(commands/groups chats/[id]/+page): add delete message functionality (#97) 2025-02-26 15:31:58 +01:00
clippy.toml Bump MDK version, update CI and local checks (#377) 2025-10-02 13:35:50 +02:00
deny.toml Bump MDK version, update CI and local checks (#377) 2025-10-02 13:35:50 +02:00
docker-compose.yml "fix: remove conflicting build directive from blossom service (#394) 2025-10-29 09:56:05 +01:00
justfile Feat/persist aggregated messages (#407) 2025-11-20 18:31:58 -06:00
LICENSE Create LICENSE 2024-11-20 16:41:14 +01:00
README.md Feat/add group method (#399) 2025-11-07 09:50:08 +01:00
rust-toolchain.toml Bump MDK version, update CI and local checks (#377) 2025-10-02 13:35:50 +02:00
rustfmt.toml Update rust edition to 2024 (#379) 2025-10-03 07:59:21 +02:00

White Noise

A secure, private, and decentralized chat app built on Nostr, using the MLS protocol under the hood.

Overview

White Noise aims to be the most secure private chat app on Nostr, with a focus on privacy and security. Under the hood, it uses the Messaging Layer Security (MLS) protocol to manage group communications in a highly secure way. Nostr is used as the transport protocol and as the framework for the ongoing conversation in each chat.

This crate is the core library that powers our Flutter app. It is front-end agnostic and will allow for CLI and other interfaces to operate groups in the future.

Status

CI

The Spec

White Noise is an implementation of the NIP-EE spec.

Releases

Coming soon

Building White Noise Yourself

White Noise is a standard rust crate. Check it out and use it like you would any other crate.

  1. Clone the repo: git clone https://github.com/parres-hq/whitenoise.git and cd whitenoise.

In addition, there are extensive integration tests in the codebase that run through much of the API and functions. Run it with the following

just int-test

Check formatting, clippy, and docs with the following:

just check

Check all those things and run tests with precommit

just precommit

Contributing

To get started contributing you'll need to have the Rust toolchain installed (version 1.90.0 or later) and Docker.

  1. Clone the repo: git clone https://github.com/parres-hq/whitenoise.git and cd whitenoise.
  2. Install recommended development tools: just install-tools (optional but recommended)
  3. Start the development services (two Nostr relays; nostr-rs-relay and strfry, and a blossom server):
    docker compose up -d
    
    Or if using older Docker versions:
    docker-compose up -d
    
  4. Now you can run the integration tests with just int-test.

Development Tools

We recommend installing additional cargo tools for enhanced development experience:

just install-tools

This installs:

  • cargo-nextest: Faster parallel test runner
  • cargo-audit: Security vulnerability scanner
  • cargo-outdated: Check for outdated dependencies
  • cargo-llvm-cov: Code coverage reporting
  • cargo-msrv: Verify minimum Rust version
  • cargo-deny: License and dependency checker
  • cargo-expand: Macro expansion tool

See docs/DEVELOPMENT_TOOLS.md for detailed usage instructions.

Formatting, Linting, and Tests

Before submitting PRs, please run the precommit command:

just precommit

Or for a quicker check (without integration tests):

just precommit-quick

Available development commands:

just check           # Run format, clippy, and doc checks
just fmt             # Format code
just test            # Run all tests (uses nextest if available)
just test-cargo      # Force cargo test (slower)
just coverage        # Generate coverage report
just audit           # Security audit
just outdated        # Check for outdated dependencies
just deny-check      # Check licenses and dependencies

Test Coverage

Prerequisites: Docker must be running for coverage tests.

# Start required services
docker compose up -d

# Generate coverage
just coverage        # Generate lcov.info report
just coverage-html   # Generate HTML report

# View HTML report
open target/llvm-cov/html/index.html

Coverage is automatically tracked in CI as part of the test suite. PRs that decrease coverage will be blocked.

License

White Noise is free and open source software, released under the Gnu AGPL v3 license. See the LICENSE file for details.