Hideout · by Hoverfly

Private details,
hidden on the device.

Find phone numbers, UPI IDs, Aadhaar, PAN, card and bank numbers, emails, names and addresses in a message, and hide them before you save, show or send it. English, Hinglish, Hindi and other Indian languages, in a 8 MB library.

Get started View source

Free up to 10k monthly active devices · No API key · On Maven Central · Android, iOS, desktop, web

hideout.hide(message)
Call me on [PHONE], my UPI is [UPI]
Live demo

Try the real model, right here

This is the actual Hideout library, compiled to WebAssembly and running in your browser. Type a message with made-up personal details and watch them get caught. Your text never leaves this page.

Loading the model (~8 MB)…

Found

Hidden

Updates as you type
Why Hideout

Privacy that never leaves the device

No server, no API key, no per-request bill. The text you are protecting is never sent anywhere to be checked.

Made for Indian apps

Indian phone formats, Aadhaar (also masked), PAN, UPI IDs, IFSC, voter ID, driving licence and vehicle numbers, addresses with PIN codes and Indian names, in English, Hinglish, Hindi and other Indian languages.

19 kinds, exact spans

Each item comes with its type, exact character offsets and a confidence score. Hide everything, only some types, or replace with your own style like 98•••••210.

No dependencies

Pure Kotlin inference. There is no ONNX Runtime, TFLite, ML Kit or native code, and it runs on Android (minSdk 21), iOS, macOS, JVM desktop, JavaScript and WebAssembly, from Kotlin or Java.

Leaves the rest alone

Prices, times, order IDs, UPI transaction refs, PNRs and cities stay visible, so hidden messages still make sense.

96%
PII hidden
fresh hand-written messages
~8MB
On-device
model + tokenizer
19
Kinds of PII
with exact offsets
0
Dependencies
no native code
On device

Type anything, keep it private

Real output from the sample app on an Android emulator. These are not mockups.

Hideout hides a phone number and a UPI ID

English

"Call me on [PHONE], my UPI is [UPI]"

Hideout hides a name and an Aadhaar number in Hinglish

Hinglish

"Mera naam [NAME] hai, aadhar [AADHAAR]"

Hideout hides a phone number in Hindi

Hindi

"मेरा नंबर [PHONE] है"

Hideout leaves an order ID and a price alone

Nothing to hide

Order IDs and prices stay as they are.

Same library on every platform

The Kotlin Multiplatform sample app, built from the published artifacts, gives the same result on Android, iOS, desktop and the web.

Hideout sample on Android

Android

Call me on [PHONE], my UPI is [UPI]

Hideout sample on iOS

iOS

Call me on [PHONE], my UPI is [UPI]

Hideout sample on Desktop (JVM)

Desktop (JVM)

Call me on [PHONE], my UPI is [UPI]

Hideout sample on Web (Wasm)

Web (Wasm)

Call me on [PHONE], my UPI is [UPI]

Install

Add it to your build

One line in your Gradle file, from Maven Central. Works in commonMain for Android, iOS, macOS, JVM desktop, JavaScript and WebAssembly. No API key, no account.

Maven Central live
// build.gradle.kts: commonMain, or any platform source set
dependencies {
    implementation("io.github.rajumark:hideout:2.0.0")
}

// Gradle picks the right artifact per platform:
// hideout-android · hideout-jvm · hideout-iosarm64 · hideout-iossimulatorarm64
// hideout-macosarm64 · hideout-js · hideout-wasm-js
Build with a prompt
Add Hideout from rajumark to this Kotlin Multiplatform or Android project.

What it does: on-device personal info detection. It finds phone numbers, UPI IDs, Aadhaar, PAN, card and bank numbers, emails, names, addresses and more in text and hides them. English, Hinglish, Hindi and other Indian languages. ~8 MB, no dependencies, no network.

Install (Maven Central, no extra repository):
  build.gradle.kts (commonMain or any source set): implementation("io.github.rajumark:hideout:2.0.0")
  Platforms: Android, iOS, macOS, JVM desktop, JavaScript, WebAssembly

Usage:
  val hideout = Hideout()          // off the main thread, keep one instance
  val safe = hideout.hide(message)        // "Call me on [PHONE], my UPI is [UPI]"
  val items = hideout.find(message)       // type, start, end, text, score for each item

Repo: https://github.com/rajumark/hideout#readme
Add the dependency, then follow the README for the exact API and current version.
Usage

One call per message

Load once and reuse the instance. find() and hide() are thread-safe.

Kotlin
val hideout = Hideout()

hideout.hide("Account no 50100234567812, IFSC HDFC0001234")
// "Account no [BANK_ACCOUNT], IFSC [IFSC]"

hideout.find("Call Rahul on 98765 43210")
// [Pii(NAME, 5, 10, "Rahul", 0.998), Pii(PHONE, 14, 25, "98765 43210", 1.0)]

hideout.hide("OTP is 482913", replacement = { "*".repeat(it.text.length) })
// "OTP is ******"

hideout.close()
Java
try (Hideout hideout = new Hideout()) {
    String safe = hideout.hide(
        "Call me on 98765 43210, my UPI is raju@okaxis");
}
Use cases

Where Hideout fits

Anywhere people type things they shouldn't share.

Dating & social apps

Stop users sharing phone numbers, handles or UPI IDs in the first messages, or warn them before they do.

"text me on 98765 43210" → text me on [PHONE]

Support chat & logs

Mask Aadhaar, PAN, card and account numbers before a message is saved, logged or sent to an analytics or AI service.

"PAN BKLPS4821K, card 4532…" → PAN [PAN], card [CARD]

Before a cloud model sees it

Strip personal details on the device, then send only the safe text to an LLM, a translator or a search index.

hide() on device → send the rest

Screenshots & sharing

Blur OTPs, passwords and addresses in text you are about to share or show on screen.

"OTP is 482913" → OTP is ******
App ideas

20 apps you could build with Hideout

Real problems Hideout solves today. Pick one and ship it.

Dating apps · Stop users sharing phone numbers or Instagram handles in the first messages.

Marketplace chat · Keep deals on your platform by blocking phone numbers and UPI IDs in chat.

Safe LLM prompts · Strip personal details on the device, then send only safe text to an AI model.

Support chat logs · Mask Aadhaar, PAN and card numbers before a message is saved or logged.

Crash & bug reports · Scrub personal info from logs and bug reports before they are uploaded.

Safe screenshots · Blur OTPs, card numbers and addresses before a user shares a screenshot.

OTP leak warning · Warn "Never share your OTP" before a user sends one in chat.

Clipboard guard · Alert users when they copy an Aadhaar or card number.

Screen-share mode · Hide personal details on screen while presenting or streaming.

Bank SMS reader · Mask account and card numbers when showing transaction SMS.

Private notes · Hide Aadhaar, PAN and passwords in notes until the user taps to reveal.

Kids safety · Stop kids sharing their phone number or home address with strangers.

Game chat · Block phone numbers and social handles in chat with minors.

Delivery apps · Hide customer phone and address once the order is delivered.

Health apps · Mask names and IDs in patient notes before they sync to the cloud.

Feedback forms · Remove personal info from free-text feedback before storing it.

Anonymous HR feedback · Remove names and contacts so employee feedback stays anonymous.

Smart form autofill · Pull the phone, email and address out of a pasted message to fill a form.

Privacy-safe search · Index chats and notes for search without storing personal data.

Clean analytics · Send text events to analytics with every personal detail already masked.

Quality

Honest numbers

Hand-written chat messages in 14 languages, written after the model was trained and never used to build or tune it, plus held-out test sets. "Hidden" = the whole item is covered; "left alone" = messages with no personal info where nothing was hidden.

HideoutMicrosoft Presidio (Indian recognizers on)GLiNER multi PII
Fresh hand-written messages: PII hidden96%64%42%
Fresh hand-written messages: no-PII left alone95%40%90%
Fresh hand-written messages: exactly right90%37%47%
Indian chat (3,000 messages): PII hidden99%66%62%
Multilingual PII benchmark (8 languages): PII hidden98%58%40%
English documents benchmark: PII hidden98%71%76%
Size8 MB445 MB1.1 GB
Latency, one message, 1 CPU thread (laptop)~0.3 ms~10 ms~66 ms

Presidio hides many ordinary numbers and cities and reads Indian phone numbers as dates; GLiNER is careful but misses most Indian formats. Hideout still misses some things: a name right before a relation word ("Hemant bhai"), a bare number after "at" taken as an address, a Wi-Fi network name taken as a password.

Reference

API at a glance

MemberDescription
Hideout()Loads the bundled model. Implements AutoCloseable.
hide(text, types, threshold, replacement)The text with each found item replaced, by default with [TYPE].
find(text, types, threshold)The found items, Pii(type, start, end, text, score), in text order.
contains(text, types, threshold)true if the text has personal info of those types.
PiiTypeNAME PHONE EMAIL UPI AADHAAR PAN CARD BANK_ACCOUNT IFSC ADDRESS PASSPORT VOTER_ID DRIVING_LICENSE VEHICLE GOV_ID DOB SECRET USERNAME IP
Pricing & license

Free until you're big.

No API key, no sign-up, no license file. Add Hideout to your project and ship. It stays free until your product passes 10,000 monthly active devices, and there's never a limit on how often each device runs it.

Commercial
Let's talk

For products above 10,000 monthly active devices on any platform.

  • One license per product, per model
  • Pricing that fits your scale
  • Direct support from the people who built it
  • Early access to model updates
Custom models
Built for you

A small, fast on-device model trained for your language, domain or task.

  • Privacy filters, moderation, classification, replies and more
  • Tuned on your use case and your users' languages
  • Shipped as a plain Kotlin library, like Hideout
  • Private: your model runs on your users' devices

How devices are counted

A monthly active device is a phone, tablet or other device that runs Hideout at least once in a calendar month.

The 10,000 limit applies separately to each product, each platform (Android, iOS, web…) and each Hoverfly model. Crossed it? You have 30 days to get a commercial license.

What the license does not allow

  • Selling or redistributing Hideout or its model on its own, or inside another SDK
  • Extracting, modifying or fine-tuning the model weights
  • Using the model or its outputs to train or distill another model
  • Reverse engineering the model or its file format
  • Offering it as a hosted API for others

Questions about licensing? Email raju348636@gmail.com or call / WhatsApp +91 63533 21951. Full terms: Hoverfly Community License.

FAQ

Questions

What is Hideout?

A Kotlin Multiplatform library (Android, iOS, macOS, JVM desktop, JavaScript, WebAssembly) that finds personal information in text (phone numbers, UPI IDs, Aadhaar, PAN, card and bank numbers, emails, names, addresses, passwords and OTPs and more) and hides it.

Which languages does it support?

English, Hinglish and romanised Tamil / Telugu, Hindi, Marathi, Bengali, Tamil, Telugu, Kannada, Malayalam, Gujarati, Punjabi and Urdu, plus Spanish, French, German, Italian, Dutch and Portuguese. Numbers, emails and IDs are found in any language. Chinese, Japanese and Thai are not supported.

Will it hide ordinary numbers?

Mostly not: prices, times, order IDs, UPI transaction references, PNRs, room numbers and cities stay visible. On fresh test messages with no personal info, 95% were left untouched. Raise threshold to hide less, lower it to hide more.

Is it a replacement for regex rules?

It reads context, so it knows "my OTP is 482913" from "I paid 482913", finds names, and handles numbers typed with spaces, dashes or +91. If you also have strict formats of your own, you can run your rules next to it.

How long can the text be?

Any length. Long text is cut into overlapping windows, so every word is judged with context on both sides.

How fast is it on a phone?

It is the same size and speed class as Comma: a few milliseconds per chat message on a laptop JVM, and on an Android emulator on the same day it ran as fast as Comma. Load it once, off the main thread, and reuse it.

Does it run on device?

Yes. Inference runs entirely on the device in plain Kotlin. It makes no server calls, needs no network permission and sends no telemetry.

Is the Kotlin port exact?

Units, token ids, every label and the hidden text match the reference implementation on all 197 test vectors, both on the JVM and on an Android device.

How much does Hideout cost?

Nothing for products with up to 10,000 monthly active devices per platform, including commercial apps. There is no API key or account, and no limit on how often it runs. Above that, a commercial license is needed; see Pricing.

Can you build a model for my app?

Yes. Hoverfly trains custom on-device models for your language, domain or task and ships them as a small library like this one. Email raju348636@gmail.com or call / WhatsApp +91 63533 21951.

A note from the creator

Built by a developer, for developers.

Every model here started as a problem I hit in my own apps. I made them small, private and free to start, so you can spend your time on the part your users will love.

Raju ShingadiyaAndroid developer · creator of Hoverfly
Meet the maker
The Hoverfly family

Hideout is one of eight.

Eight small on-device models, one job each. Same install, same free tier, and the same promise: nothing leaves the device.

MojiEmoji suggestionsThe right emoji for any message, in 22 languages. BeaconLanguage detectionLanguage and script of any text, Hinglish included. CommaPunctuationTurns voice-typed text into readable sentences. ComebackSmart repliesThree tap-to-send replies for every message. EmotionEmotion detection28 emotions and an overall mood, per message. GatekeeperToxicity detectionCatches abuse and threats in Indian chat.
HideoutPersonal info hidingHides phones, UPI, Aadhaar and more.You're here
ChalkDoodle recognitionGuesses 345 things from pen strokes, live.
View all models Hoverfly home