Private conversations. Local voice transformation. Encrypted storage and control over what stays.

Designed for iOS In development

AAlexPrivate conversation
I have the final notes.
Send them here.09:41
Message…

Message expiry: 8 hours.

Your device
AAlex4h
I have the final notes.09:41
Private keys stay on this device.
Paars delivery
8f a2 09 7c b1 e4 6d 32c7 4e 92 a0 15 d8 f3 6b31 d6 fa 88 0c b9 e5 74
RecipientExpiryMessage ID

Routing information is visible.
Message content is not.

Their device
YYou4h
I have the final notes.09:41
Private keys stay on this device.

Encrypted before transport.

Paars prepares the content on your device. The encryption engine protects the message before it reaches the delivery service.

Sender

Prepared content → Encrypted message

Delivery is not a read receipt.

A server acknowledgment confirms acceptance, not that the recipient has read the message. Delivered and Seen are separate states.

Peer encryption upgrade

Integration of the official libsignal engine is in progress. It does not make Paars metadata-anonymous or independently audited.

The transformation happens locally.

Paars changes a voice recording on the sending device, before the message is encrypted. The outgoing voice payload is the transformed recording.

Processing

Record → Transform → Encrypt

Local preparation

Voice transformation is a Paars feature. The messaging protocol encrypts the prepared audio; the backend transports its ciphertext.

Private implementation

The transformation algorithm is proprietary. The visual sequence shows the processing order, not its internal method.

Remove the information around the image.

Before a photo is encrypted, Paars removes source metadata including GPS, EXIF, IPTC, XMP, MakerNote, JPEG comments and embedded thumbnails.

Removed

Location · Camera data · Tags · Thumbnails

The fifth incorrect attempt triggers a local wipe.

Paars’s access-code policy counts incorrect attempts across app restarts. The fifth incorrect attempt triggers cleanup of app-owned local data, including conversation history, keys and Vault content.

Trigger

Five incorrect access-code attempts

Not the account password

This policy applies to the local access code. It is not a five-attempt backend password lockout. Storage errors are not presented as a successful wipe.

Erasure limits

Local file cleanup is not a promise of physical erasure from flash memory, system snapshots, external backups or another participant’s device.

A separate code triggers the local wipe.

When enabled, entering your configured duress code starts local cleanup immediately and exits Paars. It does not wait for five incorrect access-code attempts.

Trigger

Configured duress code → Local cleanup → App exit

Optional and separate

Duress is disabled until a separate code is configured. The five-attempt policy remains independent and active. Entering a normal access code unlocks protected content; entering the configured duress code triggers cleanup.

Local cleanup, not remote erasure

App-owned file and Keychain-item removal does not guarantee physical erasure from flash memory, OS-managed storage or backups.

One username. Two distinct password checks.

Your username identifies your account. Your password unlocks the local SQLCipher database and is verified by the backend for sign-in. These are separate operations, not two separate accounts.

Account credentials

Local database access + Backend authentication

Local database

SQLCipher derives encryption keys from the account password. The username identifies the account; it is not an extra database-encryption key.

Device policy validation

Single-device enforcement has been tested in the development environment. Physical-device attestation and release validation are still outstanding.

Keep selected content in your local Vault.

Save supported text, photos and voice messages from a conversation. The Vault retains selected content inside Paars’s encrypted local database.

Saved items

Text · Photos · Voice messages

Set a default. Change it per conversation.

Choose a default message-expiry duration, then override it for a peer or group chat. Expiry starts when the message is created, not when it is read.

Expiry

Default setting → Conversation override

Saved username, not a saved password

The optional username is stored in iOS Keychain with device-only, unlocked-device access and no iCloud synchronization. The sign-in card conceals the identifier. Your password and registered-device proof are still required.

Private notification content

The intended notification displays Paars and a generic “New message” alert, without a sender name or message text. Notification delivery integration remains in development.