Children · Students · Consent · Vendor Review

These rules ask what your page collects. They never ask how your code is written.

An education technology team meets children's and student privacy law through a district questionnaire, a state procurement checklist, or an app-store declaration — almost never through the statutes themselves. The question that arrives is usually whether protecting the front end helps. It does not, because collection happens at run time and a protected build sends exactly the same requests as an unprotected one. What protection does change, in this sector more than any other, is how a reviewer reads you and how your runtime defenses behave on a managed school laptop.

The Short Version

Collection is a runtime fact · Reviewers read requests · School devices are hostile to guards

Three findings carry nearly all the practical weight, and only one of them is about the law.

Protection changes no request your page makesThe same values leave the browser for the same hosts, in exactly the same order.
Districts scan pages, not sourceYour vendor list and network activity are the evidence, and both survive any build setting.
Managed devices trip anti-tampering monitorsFiltering and accessibility extensions wrap the same built-ins the monitor watches, and the trip does not clear.
Why This Page Exists

A privacy question arriving at a team that ships a bundle

This site already carries pages for ten regulations and one standard, and the pattern repeats: the text never names obfuscation, and the engineering work sits in a few specific places rather than everywhere. Children's and student privacy is the sharpest version of that pattern, because the gap between what people hope protection does and what it actually does is at its widest here. Somebody asks whether the learning app can be made compliant by protecting the JavaScript, and the honest answer is that the two subjects barely touch — except in three places where they touch hard.

The rules are about data, not artifacts

What is collected, from whom, with what consent, disclosed to which parties, kept for how long, deleted on what trigger. Every one of those is a fact about running software and stored records. None of them is a fact about the text of a file you deployed.

Two regimes, arriving from different directions

One attaches to you as the operator of a service directed to children. The other attaches to the school and reaches you through the contract that makes you a party acting under its direct control. You will often owe both, on different theories, to different people.

The reviewer is unusually well equipped

District and state reviewers in this sector run scanners, share approval databases, and compare your documentation against your observed network activity. That comparison is the whole assessment, and no build setting participates in it.

Boundaries

How this differs from the other regimes on this site

Four instruments turn up in the same procurement conversation and are routinely confused, usually to the cost of whoever has to complete the questionnaire. They differ by who they bind and what they protect, and once that is clear the engineering work stops being duplicated.

The children's rule binds the operator

It reaches services directed to children under thirteen, and services with actual knowledge that they collect from them. The central duty is verifiable parental consent before collection, with narrow exceptions, plus disclosure, retention and deletion obligations.

The education records statute binds the school

It governs institutions receiving federal funding and the records they hold. A vendor becomes subject to its terms by acting for the school under its direct control, which is a contractual position rather than a status you can claim for yourself.

The European regime asks a different question

It protects personal data of all data subjects, with a specific rule about a child's consent to information society services and a national age threshold. Same incident, different trigger, different authority. Read the GDPR page.

State student-privacy laws sit on top

Several states restrict targeted advertising to students, profiling, and secondary use of school data more strictly than federal law does. They are frequently the binding constraint in a district contract, and they are where a stray analytics tag becomes a real problem.

The Four Points of Contact

Where these rules genuinely meet a front-end build

Out of the whole obligation set, four things are influenced by how you build and ship browser code. Everything else — the consent record, the contract, the retention schedule, the deletion workflow, the training — is decided by the organisation around the code, and no build setting moves any of it.

1. What the front end collects, and when it fires

The most consequential engineering fact in this sector is ordering: many vendor scripts collect on load, before a user has done anything and before any consent state has been consulted. An identifier written to storage, a page view sent to an analytics host, an advertising pixel firing in a page a nine year old opened. Protection does not delay, suppress or conceal any of that. If a request must not happen before a condition is met, the code that makes it has to be absent until the condition is met, which is a loading decision rather than a build one.

2. The other parties executing on the same page

Your bundle is one script among several. Tag managers, analytics, session recording, chat widgets, font and map providers, error reporters. That population changes without a deployment, is rarely inventoried, and is where nearly every finding in this sector originates. It is also the part your customers will ask about by name, because a district approval database is essentially a list of which vendors are allowed to receive anything at all. Protecting your own code does nothing for that list, and the list is the assessment.

3. Consent and age gates, which are presentation

A gate written in client-side JavaScript decides what the user sees, not what the system permits. Anyone can edit the page, and protection does not change that: the code still executes and can still be observed executing. The durable shape is that the browser asks and the server decides, with the consent state recorded against an identifier and every dependent request authorised on the server. Protection then raises the cost of tampering with the presentation, which is real but secondary and should never be described as the control.

4. Being able to answer a question about a past release

The questions that arrive months later are specific. What did version 4.2 send, and to whom. Why did this error appear on a school-managed Chromebook in March. Both are answerable from a build record and a readable stack trace, and both become expensive when the shipped artifact is protected and nobody retained the symbol map. Keep the map and the manifest for every release, keyed to the version, and rehearse reading a real production error before you need to.

The Classroom Device Problem

Runtime defenses meet the most extension-heavy environment there is

This is the part of the page that is genuinely about engineering rather than about law, and it is the part most likely to cost you a customer. Managed school devices carry filtering, monitoring, accessibility and classroom-management extensions by policy, not by user choice. Several of those wrap exactly the browser built-ins that an anti-tampering monitor watches, and the interaction is worse than a transient false alarm.

The monitor's baseline is built once

The anti-tampering option walks a list of built-ins at set-up time and records what each one looked like. When a clean copy read from a fresh realm looks native but the page's copy does not, that entry is recorded as pre-tampered, meaning the wrapping happened before your code ever loaded.

A pre-tampered entry never clears

The verification routine fails immediately on any entry carrying that flag, and the flag describes what was true when the list was built. An extension that wrapped a global before your script ran therefore puts the check into a failing state from its first heartbeat onward, every five seconds, for the life of the page.

So the failure action is the real decision

Blanking the document or reloading turns a policy-installed extension into a broken lesson and a district support ticket. A degrade action or your own callback records the condition and keeps the activity working. Choose that before you enable the monitor, not after the first classroom incident.

Accessibility Overlaps

Two options with a specific cost in a classroom

Schools are required to accommodate assistive technology, and two of the runtime options interact with that requirement badly enough to be worth naming before you enable them.

Blocking developer-tool keys blocks a context menu

That option registers a global handler that cancels the context menu event, alongside the function key and modifier combinations you would expect. The context menu event is also produced by the dedicated menu key and by a keyboard combination, so cancelling it removes a keyboard-reachable route to the browser's own reading, translation and spell-check features. In a classroom that is a real accommodation being withdrawn. The accessibility page covers this in detail.

The tamper monitor watches what overlays patch

Accessibility overlays and assistive extensions work by wrapping event registration, timers and network functions — the same population the monitor's default watch list covers. The documented escape hatches are an exclusion list of globals to ignore, and disabling the clean-realm comparison that produces the pre-tampered flag in the first place. Use them deliberately rather than discovering them from a support ticket.

What We Will Not Claim

Four things this product does not do for you

It does not reduce collection

A protected build and an unprotected build send the same values to the same hosts. If a request should not happen, the code that makes it has to be absent or gated on the server. No transform in any engine changes what a running program does.

It is not verifiable parental consent

Consent is a record you hold and can produce, obtained by a method the rules recognise. A dialog in a browser is how you ask. Making the dialog harder to read does not make the record stronger, and nothing in a bundle can stand in for the record.

It does not satisfy a district review

Reviews are decided on your vendor list, your network activity, your contract terms and your retention answers. An unreadable bundle contributes nothing positive to that assessment and occasionally raises a question you then have to answer.

It cannot tell you which regime applies

Whether your service is directed to children, whether you have actual knowledge, whether a contract places you under a school's direct control, and which state laws bind you are legal determinations. They belong with your counsel and your customer, before the engineering conversation starts.

Frequently Asked

Children's and student privacy with protected JavaScript, answered

Do COPPA or FERPA require or forbid JavaScript obfuscation?

Neither, and neither text mentions it. The federal children's privacy rule governs operators of services directed to children under thirteen, and the education records statute governs institutions that receive federal funding and the vendors acting on their behalf. Both are about what is collected, who it is disclosed to, what consent was obtained, and what happens to the data afterwards. The delivery format of a bundle is not part of any of those tests, so protecting your front end neither satisfies nor breaches an obligation. It is a legitimate anti-tampering and intellectual property measure that you may adopt on its own merits.

If we protect our JavaScript, does that reduce what we are collecting?

No, and this is the single most common misunderstanding on the subject. Collection happens in the browser at run time, when a script reads a value and sends it somewhere. Transforming the source text of that script changes nothing about which values are read or which endpoints receive them. A protected build and an unprotected build collect exactly the same data. If you need to collect less, you change the code, remove a vendor tag, or gate the request behind a consent state that lives on your server. Auditors and school reviewers judge you on the requests your page makes, and those requests are visible to anyone with a network panel.

Which of these two regimes applies to an education technology vendor?

Frequently both, on different theories, which is why teams get confused about who owes what. The children's privacy rule attaches to you as an operator when your service is directed to children or when you have actual knowledge that you are collecting from them. The education records statute attaches to the school, and reaches you through the contract that designates you as a party acting for the institution under its direct control. So one regime speaks to you and the other speaks through your customer. Several state student-privacy laws sit on top of both and are often stricter about advertising and profiling. Confirm the specific analysis with your counsel.

What does a school actually inspect during a privacy review?

The network activity of your pages, the vendor list behind it, your contract terms, and your data retention and deletion answers. Reviewers in this sector are unusually well equipped: many districts run automated scanners over vendor sites and maintain shared approval databases. What they look at is which hosts your page contacts, whether anything resembling advertising or profiling is present, and whether the behaviour matches what your documentation claims. None of that is affected by how your code is written, and a mismatch between your claims and your observed requests is the finding that costs a contract.

Does protected code look suspicious to a district reviewer?

It can, and pretending otherwise helps nobody. A reviewer whose job is to work out what a page does when children use it will notice that they cannot read your bundle, and the honest reading of that situation is that you have made their task harder for reasons they cannot verify. The fix is not to abandon protection but to remove the ambiguity in advance: publish a plain-language description of what the front end collects and which vendors are involved, keep it accurate, and be ready to answer a specific question about a specific request. The documentation, not the artifact, is what carries you through that conversation.

How should a consent or age gate be built?

With the decision on your server and only the presentation in the browser. A gate implemented entirely in client-side JavaScript is a user interface, and any user interface in the browser can be skipped by a person who edits the page. That remains true after protection, because the code still has to run and can still be observed running. The durable pattern is that the browser asks and the server decides: the consent state is recorded server-side against an identifier, and every request that depends on it is authorised there. Protection then makes tampering with the presentation more effortful, which is a genuine but secondary benefit.

Why do runtime defenses misbehave on school laptops?

Because managed school devices are the most extension-heavy environment your code will ever run in. Filtering, monitoring, accessibility and classroom-management extensions are installed by policy on those machines, and several of them wrap the same browser built-ins that an anti-tampering monitor watches. In this engine the monitor builds its baseline at set-up time, records an entry as pre-tampered when a global already looks wrapped, and treats that entry as failing on every check afterwards, on a five second heartbeat, for the life of the page. If your failure action blanks the document or reloads, you have written a product that is unusable in a classroom.

Which failure action is appropriate for this audience?

Degrade or a callback you control, never blank, reload or redirect. The reasoning is specific to the setting rather than general caution. A blanked page in front of a class of eleven year olds becomes a support call to a district help desk, and a reload loop on a monitored device looks to the school's own tooling like the misbehaviour they installed the monitoring to catch. A degrade action lets you record the condition and keep the lesson working, which is the outcome everyone involved wants. Decide this before enabling the monitor, not after the first support ticket.

Does obfuscation help us meet a data deletion request?

Not in itself, and it can slow you down. Deletion duties are about records in your systems, so they are answered by your data model and your retention process. Where a build pipeline does touch this is in your ability to say what a particular release collected. If a parent or a district asks what a version of your product sent and where, the answer comes from a build record and from the ability to read a real production error, which means retaining the symbol map and the manifest for every release. A protected build with no retained map turns a specific question into an investigation.

What should our privacy documentation say about client-side protection?

Describe it accurately and in one sentence. Filed as a measure that raises the cost of reading and modifying the code we ship, it is true and defensible. Filed as a measure that protects student or child data in the browser, it is not, because the browser receives the data either way and anyone can watch it arrive. School reviewers and state attorneys general read these documents against observed behaviour, so an overstated line is a liability rather than a selling point. Put your real control at the boundary where the data is decided, and describe the build measure as the hardening step it is.

Related Guides

Other compliance and education guides

The GDPR and your JavaScript

The European counterpart, including the rule about a child's consent to information society services and the national age thresholds.

Next Step

Check three things this week

Open your highest-traffic student-facing page with a network panel, load it fresh, and write down every host it contacts before the user does anything — that list is your review, and it is usually shorter and older than people expect. Confirm that every request depending on consent is authorised on your server rather than gated in the browser. Then load a protected build in a browser carrying two or three of the extensions a school actually installs, and watch what your runtime defenses do.