Desktop · macOS, Windows, Linux

Compliance is written in documents.
It is broken in code.

Norma 29 reads your source and your database schema and tells you which specific obligations your implementation currently fails — with the file, the line, and the article it comes from.

Builds comingHow it works

Free tier: one regional framework plus every store policy. No account needed to scan.

The Norma 29 desktop app open on its dashboard, listing scanning capabilities beside a sidebar of scan types.
Norma 29 v0.1.11, running on the desktop.

The gap

A privacy notice cannot see your logging statements

Data-protection compliance is almost universally practised as paperwork. An organisation writes a notice, files a record of processing, appoints someone accountable, and treats the obligation as discharged. None of those documents touch the place where personal data is actually read, written, logged, transmitted, and retained.

So a company can hold a well-drafted notice promising that national identity numbers are never logged, while a debug statement three layers down writes the full record to stdout on every request. Both facts are true at once. Only one of them is visible to the person who signed the policy.

Security scanners will not close that gap, because they answer a different question. They ask whether code is exploitable. They do not ask whether it satisfies a named article of a named statute in a named jurisdiction.

How it works

Two surfaces, three passes

Pass 01

Pattern rules

Every installed framework ships rules bound to a specific article and a stable control identifier, filtered by scope so server-side heuristics are never applied to browser code. Includes inverse checks that assert something must be present — the test that catches a missing control rather than a bad one.

Pass 02

Semantic analysis

Where a regular expression sees text, this pass sees syntax. It matches on abstract syntax trees, which is what lets a rule state that a request parameter reaches a raw SQL query, or that a personal-data field is written with no accompanying consent check.

Pass 03

Context

Every finding is enriched with the enclosing function or scope. A line number tells you where; the scope tells you what the code was trying to do. In practice that is the difference between a finding you can act on and one you re-investigate from scratch.

The schema scanner connects to a live database, reads its column catalogue, and matches names and declared types against the framework's schema rules. It never reads row data — only the shape of the database.

A source-code scan running against GDPR, showing progress through 887 files and the names of files as they are read.
A scan in progress against GDPR (EU) 2016/679 — regex, Semgrep and Tree-sitter over the same source tree.

What it refuses to claim

Every framework declares what it cannot check

A large share of any data-protection statute is not verifiable by reading code. Whether consent was freely given. Whether a data protection officer was appointed. Whether a breach was notified in time. Whether a retention period is justified.

Norma 29 will not quietly leave those out. Each framework ships a manifest naming the obligations it cannot verify, and that manifest is reported beside every result — because “all controls passed” is a claim about the controls that were tested, and a ceiling presented without its limits is a lie by omission.

Across the four frameworks available today, 51obligations are declared out of reach of static analysis and named individually. The exported report carries control counts, evidence, and a scope-and-limits statement — and no compliance percentage, because a percentage inside a dated document is an admission of the remainder.
A finished GDPR scan result. A panel headed 'Not verifiable by this scan' names the individual articles the framework declares it cannot check from source code.
Right-hand panel: the 12 GDPR obligations the framework declares it cannot verify, named article by article, beside the result rather than after it.

Frameworks

The law is a versioned download, not a hard-coded feature

Norma 29 ships no jurisdiction knowledge of its own. Every rule it applies comes from a framework you install, and each one is independently versioned and dated against the text it encodes. A tool that hard-codes one country's law is useless in every other market and stale the first time that law is amended.

FrameworkJurisdictionKindDeclared limits
UU PDP No. 27 of 2022Indonesiaregional9
GDPREuropean Unionregional12
Apple App Review GuidelinesApple App Storeplatform17
Google Play Developer PolicyGoogle Play Storeplatform13

Regional frameworks answer whether an implementation satisfies a statute. Store policies answer a different question on a different deadline — what will get this build rejected — so they get their own console and a pass/attention verdict instead of a score. Both are pre-flight checks. Store review is performed by people and stays discretionary; nothing here predicts an outcome.

The framework settings screen, listing four installed frameworks with individual version numbers and the date each was last updated.
Installed frameworks, each carrying its own version and the date its rules were last checked against the text they encode.

Data handling

Nothing you scan leaves your machine

Your source code is read from your disk by a process on your own computer and never transmitted. Database credentials open a connection from your machine directly to your database. There is no upload step, no analysis queue, and no server-side copy of anything you scan.

This is not a privacy feature bolted on for irony's sake — it is a precondition for the product existing. The people who most need this scan are the least able to send a proprietary codebase and production credentials to a third party.

Results are stored in an encrypted database on your own machine. Account email addresses are encrypted on your device before they reach us, so we cannot read them. The only network traffic the app generates is framework downloads and authentication.

The projects screen, listing a registered application with its version, platform and declared data types.
The project registry. Codebases, scan history and results are held locally — registering an application here sends nothing anywhere.

Who it is for

Engineers carrying compliance obligations without a compliance department

Solo founders, small product teams, agencies delivering into regulated markets, and developers shipping to jurisdictions whose law they read once and hope they remembered correctly.

It is not legal advice, not an audit, and not a certification. It is an instrument: it tells you, specifically and with evidence, which parts of your implementation currently fail which obligation. Then it lets you fix them and check again.