Safety

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.

Transparency

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.

loading
Uploads refused by the blocked media list. Every one of these is an attempt to publish content the hash detection recognised and stopped before it was ever posted.
loading
Media files permanently blocked. Each entry blocks that file, and visually identical copies of it, on every channel, forever.
loading
Posts removed from public channels, by moderator takedown or by their author.
loading
Accounts banned from publishing to a channel.
loading
Reports received from users and organisations. Child safety reports are always actioned first.

Counts are cached for five minutes.

Public channels are a new surface on DChat, so these numbers start small. We would rather publish a small honest number than no number at all, and rather publish it from the live system than from a slide.
The boundary

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.

SurfaceCan we inspect it?
Direct messagesNo. End-to-end encrypted, and we do not hold the keys.
Group chatsNo. End-to-end encrypted. We relay ciphertext we cannot read.
Voice and video callsNo. End-to-end encrypted media.
Public channelsYes. 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.

Automatic checking

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.

To report child sexual abuse material, email abuse@dchat.online. Include the channel link and, if you can, the post. Do not attach the material itself. Reports from the public and from child protection organisations are actioned ahead of everything else.
Reporting

How to report something

Three routes, all of which reach the same queue.

RouteUse it for
In-app report, on any channel postAnything you see while using DChat. You do not need to subscribe to a channel to report it.
abuse@dchat.onlineChild safety, and anything urgent. Monitored.
Contact formEverything 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.

Policy

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.

Enforcement

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.

StepWhy it matters
The post is tombstonedReaders learn it was removed rather than finding an unexplained gap.
Its exact and perceptual hashes are blockedThe same file, and visually identical copies of it, can never be posted again, by anyone, to any channel.
The content is unpinned from storageWe stop serving the bytes. A hidden post whose file is still hosted is still being distributed by us.
Every other copy is removedThe 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.

Status

What is and is not in place

Status
Blocked media check on every public uploadYes, server-side, before the post exists
Checked on our servers, not just in the appYes, a modified app cannot skip it
Perceptual matching, so re-encoded copies are caughtYes, on images
Report to review queue, with child safety prioritisedYes
Takedown removes and unpins content everywhereYes
Published transparency countsYes, at the top of this page
Perceptual matching on re-encoded videoNo, video is caught by exact hash only for now
Adult content classifier on imagesPartial, detects nudity, which is not the same as detecting child abuse material
Matching against external child protection hash listsNo, not yet, see below
Public channel directory and discoveryNo, deliberately, until the above is complete
We would rather publish this table with its "No" rows than let you assume a maturity that does not exist. If a row here changes, this page changes with it.
Gaps

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.

For organisations

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.

Other content

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.