Skip to content
Ihawu

Ihawu

Stop leaking sensitive fields in your API responses. Ihawu masks them at the serialization boundary — declaratively and fail-closed, on Spring Boot and Ktor today. Your controllers stay clean.

Ihawu (Ndebele for shield) guards the data your API returns. It is a lightweight Policy Enforcement Point: you annotate a field, define a policy, and every response is masked for the caller who receives it — enforced as the response is serialized, and failing closed rather than leaking on error.

Sensitive data leaks through responses

SSNs, salaries, and PII slip into API payloads because masking is an afterthought bolted onto controllers.

Masking logic sprawls

if (role == ...) checks scatter across handlers, DTOs, and mappers — hard to audit, easy to get wrong.

Reinvented per framework

Every service and platform rolls its own masking, with no shared, testable enforcement layer.

Declarative

Annotate a resource with @IhawuResource and describe rules as policy — no masking code in your controllers.

Fail-closed by default

No verified identity? Ihawu emits {} rather than leaking. Security is the default, not an opt-in.

Serialization-neutral core

The core carries no web-framework or serialization dependency — backends and adapters sit on top. It is multiplatform (JVM + JS): mask through Jackson or kotlinx.serialization.

Your policy source, your call

Static rules in config, or dynamic ones from a database or OPA via a simple SPI. Ihawu enforces — it never usurps your decision engine.

Already using Jackson’s @JsonView or @JsonFilter? They solve part of this, and for a small enough problem they are the right answer. How Ihawu compares →

Spring Boot Starter — available

Drop the starter on the classpath and Ihawu auto-configures masking into your Jackson pipeline. Get started →

Ktor — available

One install(IhawuKtor) masks every @IhawuResource response per caller role, with no per-route code. Ktor adapter →

Kotlin Multiplatform — available

ihawu-kotlinx masks through kotlinx.serialization on the JVM and JS, through the same serialization-neutral engine. How it works →