[nonimo]
EN
Download the app

Microsoft Presidio alternative: Nonimo Gateway for LLM calls

· Written and maintained by Nonimo

Presidio gives you the parts to find and replace personal data in text. If what you need is to stop names and ID numbers leaving in calls to the OpenAI API, and to get the real values back in the answer, you still have to build the proxy around it. Nonimo Gateway is that proxy, already built.

Nonimo Gateway runs on your own servers. See plans and get in touch.

This guide covers what “Microsoft Presidio” is today, what the Presidio Analyzer and Anonymizer do, where the gaps are for LLM API calls, and how Nonimo Gateway fills them.

Microsoft Presidio, now under Data Privacy Stack

People still search for “Microsoft Presidio”. The project was built at Microsoft and is now transitioning to “an independent, community-governed open source project” under a GitHub organisation called Data Privacy Stack. The old repository at github.com/microsoft/presidio redirects there, the docs have moved to presidio.dataprivacystack.org, and the project says the legacy images at mcr.microsoft.com/presidio-* “are no longer updated”, so check your pull paths. The licence stays MIT.

It is a modular, free detection toolkit with 80 predefined entity types, including recognisers for Spain (NIF, NIE and passport), Italy and Germany, built for cleaning datasets, documents or images in a Python or Spark pipeline.

Where Presidio stops for LLM API calls

Presidio is a library and a pair of REST services. Protecting live calls to an LLM is a different job, and on the pages we checked Presidio does not document it.

No proxy. Presidio does not document an OpenAI-compatible endpoint, streaming or tool calls. You write the layer that intercepts each request, sends the text to the analyzer, anonymises it and forwards it.

Only one reversible operator. The anonymizer offers replace, redact, mask, hash, encrypt and others. The only built-in deanonymizer is decrypt, so only encrypt is reversible out of the box. If you replace a client’s name with a placeholder, Presidio itself does not track it and put the name back into the model’s answer.

English by default. In the project’s words, “In its default configuration, it contains recognizers and models for English.” Other languages mean choosing, installing and testing models for each one.

Gaps in national IDs. The country list covers 18 countries. France, Portugal, Brazil and Mexico have no national ID recognisers on it.

Sizing by trial. The analyzer and anonymizer run as separate containers, and hardware requirements are not published.

Why streamed answers are the hard part

Most chat interfaces stream: the answer arrives a few characters at a time. If your layer replaced a name with <PERSON_1>, the stream can split that placeholder across two or three chunks, and code that swaps chunk by chunk will miss it. The layer has to hold back just enough text to recognise a placeholder, swap in the real value and release the rest, without waiting for the whole answer. It is solvable, and it is where home-built layers tend to break quietly.

If you already run LiteLLM, its Presidio guardrail adds masking and an option to restore replaced values. We cover that set-up, and the Nonimo plugin for LiteLLM, in LiteLLM PII guardrails.

Presidio compared with Nonimo Gateway

PresidioNonimo Gateway
What it isOpen-source library and REST servicesPrivate proxy for LLM API calls
How it runsSeparate analyzer and anonymizer containers, which you connectOn your own servers
OpenAI-compatible endpointNot documentedYes, you change base_url
Restores real values in the responseOnly for the encrypt operator, via decryptYes, real values back in the answer
LanguagesEnglish by default; others by adding modelsNational documents and numbers of each country it serves
National IDs59 entities across 18 countries; none for France, Portugal, Brazil or MexicoIncludes Spanish DNI/NIE/NIF, German Steuer-ID, French NIR, Italian codice fiscale, Brazilian CPF, Mexican RFC and CURP
LicenceMIT, open sourcePlans on the Nonimo Gateway page

How Nonimo Gateway does it

Nonimo Gateway runs on your own servers. Your application keeps its code and changes one setting:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://llm-gateway.your-company.internal/v1",  # your Nonimo Gateway
    api_key=os.environ["OPENAI_API_KEY"],  # your own OpenAI key
)

On the way out, it replaces personal data with placeholders before the request reaches OpenAI. On the way back, it restores the real values in the response. It recognises the national documents and numbers of each country we serve. You use your own OpenAI key, and if you already run LiteLLM there is a plugin for it.

Replacing identifiers this way is pseudonymisation, which is not the same as anonymisation and still needs the rest of your process around it. For what happens when personal data does reach a provider, see is putting client data in ChatGPT a data breach. For a written rule your staff can follow, start from our AI policy template. And if you are weighing other open-source options, our LLM Guard alternative guide covers a toolkit built on top of the Presidio Analyzer.

Skip the glue code

If you would rather not own an analyzer, an anonymizer and a placeholder map, Nonimo Gateway gives you the whole path on your own server. See Nonimo Gateway’s plans and get in touch.

Sources

Checked 20 October 2026.


This page is for information. Product details of other vendors were checked on their official pages on 20 October 2026 and can change.

Nonimo is the software that does this on your own computer: it redacts client names and IDs before your text reaches ChatGPT. No account needed, and the app does it without your files leaving your machine.

Common questions

Is Microsoft Presidio still a Microsoft project?

Not any more. Presidio was created at Microsoft and is now transitioning to an independent, community-governed open source project under a GitHub organisation called Data Privacy Stack. The old Microsoft repository redirects there, the licence stays MIT, and Microsoft says it supports the transition.

What is the difference between the Presidio Analyzer and the Presidio Anonymizer?

The analyzer finds personal data in text and returns what it found and where. The anonymizer takes those results and applies an operator to each one, such as replace, redact, mask, hash or encrypt. They ship as separate Docker images and you run and connect them yourself.

Can Presidio put the original values back into an LLM response?

Only for one operator. Presidio documents a single built-in deanonymizer, decrypt, which reverses its encrypt operator with the key. Replace, redact, mask and hash are not reversed by Presidio itself. LiteLLM, which wraps Presidio as a guardrail, documents its own option to restore values replaced by Presidio.

Does Presidio detect Spanish, Italian or German ID numbers?

Yes, for some. Its published entity list includes recognisers for Spain (NIF, NIE and passport), five Italian entities and nine German ones, among 18 countries. French, Portuguese, Brazilian and Mexican national IDs are not on that list.

Is Presidio an OpenAI-compatible proxy?

No. Presidio is a detection and anonymisation library with REST services. Sitting between your application and an LLM API, swapping values out and back, and handling streamed responses is work you build around it. Nonimo Gateway is that proxy layer, already built.

Is Presidio free?

Yes. It is open source under the MIT licence and has no paid tier. The cost is the engineering time to deploy, tune and connect it.

Tools

Remove personal information from a file or text before AI reads it. Or cover the details on a copy of your ID and add a watermark before you send it.

All tools →