Direct messages are stored on the server. On a self-hosted app that means whoever runs the server can read them, which is fine when that is you and less fine when it is not. Turning on encryption changes that: your messages are encrypted on your device, and only you and the person you are talking to can read them.
Send a friend request from someone's profile card, or from the Friends panel in your user bar. Once accepted you can open a direct message with them from either place.
Friends and DMs are per instance, like your account. Being friends on one Outpost server says nothing about another one.
Open user settings and find Encrypted Direct Messages. Turning it on generates a key pair on this device and publishes the public half to the server.
You are shown a recovery code once. Save it somewhere you will still have next year, in a password manager rather than a note in the app. Without it you cannot read your encrypted messages on a new device, and a password reset will not bring them back, because the server never had the key in the first place.
Encryption only takes effect in a conversation when both people have turned it on. Until then messages are sent in the clear, and the app says so rather than quietly refusing to send. That is deliberate. Failing closed would mean the first person to enable encryption could no longer message anybody.
Old plaintext messages and new encrypted ones sit in the same scrollback and would otherwise look identical, so the app marks the point where it changed. Both directions are marked.
The switch back to plaintext reads as a warning rather than a neutral note, because that is the direction that changes what is exposed, and it can happen without you doing anything. The other person turning encryption off is enough.
The private key is stored in the browser's database on that machine and is marked non-extractable, which means the browser will use it and refuse to hand it back out. Two consequences worth knowing:
Turning encryption off stops encrypting new messages and lets contacts message you in the clear again. Your key stays on the device, so everything already encrypted stays readable, and turning it back on republishes the same key. Your existing recovery code still works.
The app remembers the public key it has seen for each person. If it changes, that means they set encryption up again, usually after losing a device or a recovery code, and the app tells you rather than silently accepting it. Old messages encrypted to the old key stay unreadable to the new one.
Encrypted messages create an obvious gap: the server holds no plaintext, so nothing on the server can inspect a message that breaks the rules. That is why reporting and blocking shipped in the same release. When you report an encrypted message, your own client supplies the text, and moderators see it clearly labelled as coming from the reporter rather than from the server.