Content moderation
on public channels
DChat removes illegal content from public channels every day, using automatic checks against a hash database together with reports from users and organisations. This page publishes the counts, explains how the checks work, and is explicit about the one thing that shapes all of it: private messages, groups and calls are end-to-end encrypted, so moderation applies to public channels only.
What enforcement has done so far
These counters are read live from the moderation system when this page loads. They are not typed in by hand, and they are not rounded up.
Counts are cached for five minutes.
Why this covers channels and not your chats
Moderation applies to public channels because they are public. It cannot apply to private conversations because they are encrypted, and we are not going to build a way around that.
| Surface | Can we inspect it? |
|---|---|
| Direct messages | No. End-to-end encrypted, and we do not hold the keys. |
| Group chats | No. End-to-end encrypted. We relay ciphertext we cannot read. |
| Voice and video calls | No. End-to-end encrypted media. |
| Public channels | Yes. A channel is broadcast in the clear, hosted and served by us. Signed, not sealed. |
A public channel cannot be end-to-end encrypted, because anyone may subscribe to it. That is precisely why it is the surface we are responsible for: we distribute its content from our own storage, so where we are able to act, we act. A private conversation is the opposite. We could not read it in order to moderate it even if we were asked to, and adding a mechanism to do so would break the promise the rest of the product rests on. So: we never describe public channels as encrypted, and we never describe private messages as moderatable.
Images are checked against a hash database
Every image published to a public channel is automatically checked, on our servers, against a database of blocked material, before the post exists.
The check uses a perceptual hash, not a plain checksum. A checksum only catches a file re-uploaded byte for byte unchanged: re-save the image, resize it, or compress it again and the checksum is different, and the block is defeated. A perceptual hash describes what an image looks like, so a re-encoded or resized copy is still recognised as the same picture. This is what makes a removal permanent instead of an endless game against the same image returning in a slightly altered form.
When content is taken down, both its exact hash and its perceptual hash are added to the blocked list, and every later upload is checked against both. The counter at the top of this page labelled "uploads refused by the blocked media list" is the count of attempts that check has stopped.
Because a modified app could simply skip a check that runs on the phone, this check runs on our servers instead. If the check cannot run at all, for example because storage is briefly unreachable, the post is refused rather than published unchecked.
Two limits sit beside this, stated because they matter. The perceptual check runs on images, so a re-encoded video is currently caught only by its exact hash. And an adult content classifier can flag likely nudity for human review, but nudity detection is not child abuse detection: a score about whether an image is sexual says nothing about the age of anyone in it.
How to report something
Three routes, all of which reach the same queue.
| Route | Use it for |
|---|---|
| In-app report, on any channel post | Anything you see while using DChat. You do not need to subscribe to a channel to report it. |
| abuse@dchat.online | Child safety, and anything urgent. Monitored. |
| Contact form | Everything else, including appeals against a removal. |
A child safety report is always prioritised above every other report, regardless of how many reports anything else has received. That ordering is enforced in code, not by policy alone.
Zero tolerance for child sexual abuse material
There is no appeal, no warning and no second account. Material is removed, the media is permanently blocked, and the account is banned.
DChat is a decentralized network, and we say elsewhere on this site that we cannot read your private messages. That is true, and it is not a defence for public content. A public channel is published through our servers and served from our storage. Where we have the ability to act, we act.
What actually happens on a takedown
Hiding a post is not removing it. A takedown does four things, and skipping any one of them would leave us still distributing the content.
| Step | Why it matters |
|---|---|
| The post is tombstoned | Readers learn it was removed rather than finding an unexplained gap. |
| Its exact and perceptual hashes are blocked | The same file, and visually identical copies of it, can never be posted again, by anyone, to any channel. |
| The content is unpinned from storage | We stop serving the bytes. A hidden post whose file is still hosted is still being distributed by us. |
| Every other copy is removed | The same file re-posted to five channels is five distributions, and all five go. |
The permanent block is the part that matters most. It is what makes a removal accumulate rather than turning into an endless game against the same file being uploaded again.
What is and is not in place
| Status | |
|---|---|
| Blocked media check on every public upload | Yes, server-side, before the post exists |
| Checked on our servers, not just in the app | Yes, a modified app cannot skip it |
| Perceptual matching, so re-encoded copies are caught | Yes, on images |
| Report to review queue, with child safety prioritised | Yes |
| Takedown removes and unpins content everywhere | Yes |
| Published transparency counts | Yes, at the top of this page |
| Perceptual matching on re-encoded video | No, video is caught by exact hash only for now |
| Adult content classifier on images | Partial, detects nudity, which is not the same as detecting child abuse material |
| Matching against external child protection hash lists | No, not yet, see below |
| Public channel directory and discovery | No, deliberately, until the above is complete |
What we do not have yet
Stated plainly, because a safety page that only lists strengths is marketing.
We are not yet enrolled with the child protection bodies that maintain the authoritative hash lists, namely the National Center for Missing and Exploited Children, the Internet Watch Foundation, the Canadian Centre for Child Protection, and Microsoft's PhotoDNA. Those lists are what allow a service to detect known abuse material rather than merely react to reports. Enrollment is an organisational application process, and it is under way.
Until it completes, our blocked list contains material we have identified and removed, plus anything an operator has imported by hand. That is strictly weaker than matching against a curated external list, and we are not going to describe it as anything else. The system is built so those lists drop straight in when enrollment completes, with no redesign: the database records which algorithm each blocked hash belongs to.
No public channel directory exists, and none will ship before the above is finished. Without discovery, a channel reaches only the people given its link. With discovery, we would be actively recommending it. That is a line worth holding.
Child protection bodies and law enforcement
If you are a child protection organisation, a hotline, or a law enforcement agency, contact abuse@dchat.online. We will action takedown notices and accept hash lists for permanent blocking, in either exact or perceptual form.
We can act on what we host: public channels, their media, and the accounts that publish them. We cannot read end-to-end encrypted private messages, and we will not claim otherwise or add a mechanism to do so. What we hold about an account is set out in our Privacy Policy.
Beyond child safety
The same report and takedown path covers sexual content posted publicly, violent and extremist material, terrorism, scams, impersonation and spam. Report reasons in the app map directly to these categories.
Impersonation is worth calling out: only channels we operate carry an official marker, and that marker cannot be set by any request. If a channel claims to be DChat and does not carry it, it is not us, and it should be reported.