TCleanner

In development
Search downloaded Telegram history offline with regular expressions on iPhone and iPad.
Search: a regular expression finds a wifi password sent in a chat, over the built-in demo archiveTemplates: saved search patterns, and built-in ones for passwords, one-time codes, API keys, card numbers, emails and phone numbersDeletion: two selected messages, and a confirmation that names the exact count and says they are deleted for everyoneHow it works: the privacy principles, as the app shows them in SettingsDate range: only messages up to a chosen date, ready to be deleted

What it is for

Search works offline on history already downloaded. Deleting messages requires an internet connection and is available for everyone only where Telegram permits it.

People leave things in chats: a password sent in a hurry, a one-time code, an API key, a card number, an address. Telegram’s own search finds a word if you remember which chat it was in and which form the word took. TCleanner builds a plain index of your history on the device and lets you run a real regular expression over all of it at once, then select what it found and delete it — for everyone, on every device, with the exact count in front of you before anything goes.

It reads only your own account and never sends a message. It indexes your private chats and groups; channels you subscribe to are indexed only if you turn that on.

Where the data is

There is no server, and no analytics, ads or trackers. The only libraries are Telegram’s own TDLib and the local database GRDB. The index sits in the app’s private storage and is excluded from backups. The session is kept in TDLib’s encrypted data directory, also private and excluded from backups; its key is in the Keychain, kept “this device only”: it can be in an encrypted device backup, but it cannot be restored to another device. The app talks only to Telegram, as your client.

The same six principles are in the app, under Settings › How it works: on your device; only Telegram; nothing to third parties; you decide what is deleted; your session and index; diagnostics only if you export them. The full text is the privacy policy.

How it is built

A native iPhone and iPad app. One Swift package holds the domain and the presenters; SwiftUI renders a state snapshot and sends intents back. Telegram is reached through TDLib with its own message database switched off, because this app owns its index. That index is SQLite through GRDB, searched by a full scan with an early stop rather than a word index: a word index cannot answer a regular expression.

Behaviour is written down before it is written: eleven capability specifications with executable scenarios, each requirement under a frozen id that code and tests cite. Tests run on fakes with an injected clock. The project has its own mutation-testing tool with a 100% target; every capability has reached it. Indexing paces itself and resumes after the app is killed. Deletion is always for everyone, always confirmed with the exact count, and never scheduled.

Status

Not in the App Store yet. The built-in demo archive is used for development and testing without a Telegram account. The source code is private.

the feedback tracker

App support and diagnostics: support@kudravets.com. General questions: info@kudravets.com.

Unofficial app. Uses the Telegram API; not affiliated with Telegram.

Open-source licenses (English)

© 2026 Ilya Kudravets