Warda-DNSDocs Warda: from ward — to protect, guardian
v0.9.3

Hours of Internet

Household → Hours of Internet (administrators; a function of the subscription, open to every installation during the beta) sets, for each child and teenager, the hours when Internet answers: a week of 15 minute slots painted with the pointer (the time at the top and bottom, a line per quarter of an hour; the week starts on Sunday where the country does), or typed under the grid (Or type the hours: the days — every day, Monday to Friday, Saturday and Sunday, or one day —, a start and an end in quarters of an hour, then Open these hours or Cut these hours; every control reachable with the keyboard). Nothing applies until a parent turns the hours of a person on; the page proposes hours by age (child: weekdays 07:00–08:00 and 16:30–19:30, weekend 08:00–20:00; teenager: weekdays 07:00–22:00, weekend 08:00–23:00).

Outside the hours, every name is blocked for the devices of the person (reason "schedule" in the reports), whatever the pauses and the rules, except the names always permitted and their subdomains (school sites; by default index-education.net and ecoledirecte.com, 100 names at most), to which the other protections still apply. The names of the box and of the local network keep answering. A parent gives extra time in one click (+15, +30 or +60 minutes, from now or from the end of the current hours, 12 hours ahead at most) and can end it. Adults never have hours. The times are those of the box. The cut is not always instant: devices keep the answers they already have for their lifetime (TTL) and the connections already open.

Right now (same page): a parent cuts Internet at once for 30 minutes, an hour or until the morning (the next opening of the hours, or 07:00), whatever the hours and the extra time (reason "schedule"), or starts the homework mode for one or two hours (social networks, videos and games blocked, reason "category"). PUT /api/v1/people/{id}/mode {"mode": "cut" | "homework", "duration": "30" | "60" | "120" | "morning"}, DELETE /api/v1/people/{id}/mode.

Bypass: a device of a child or teenager used during a cut (it asked Warda at least 5 minutes after the cut began) then silent for 15 minutes gives a notice: when it still answers on the network (ARP, IPv4) but no longer asks Warda, "a VPN or another DNS?"; otherwise "switched off, or on another network?". Used means at least 3 queries to sites (not the services the systems call on their own) in one step of 5 minutes; a cut that began more than a day ago (hours closed all week) is not watched. Warda cannot be sure: the notice says so. The names of VPN, proxies and encrypted DNS asked by a minor's device are blocked (answered "does not exist", so that iCloud Private Relay and the browsers fall back to Warda) and told too, once a day per device and name.

Time a day (same page): for games, videos and social networks, a time allowed each day (15 minutes to 8 hours), whatever the hours; then the category is blocked until midnight (reason "category"). A step of 5 minutes counts from the second name of the category asked in it; the time used is kept on the box (category_usage, 7 days). PUT /api/v1/people/{id}/limits {"category": "games", "minutes": 60} (0: no limit).

School holidays (same page): during a period, every day, Sunday included, takes the hours of Saturday, for every child, while During the school holidays, the hours of Saturday every day is on (the default). Off, the holidays keep the hours of the week; the badge "On holidays" still shows. PUT /api/v1/vacations/hours {"saturday": false} (answers the view of the hours; holiday_hours in GET /api/v1/schedules). GET/POST /api/v1/vacations {"first_day": "2026-10-17", "last_day": "2026-11-02"}, DELETE /api/v1/vacations/{id}. The official calendar of a country and a region can be imported from OpenHolidays (open data): the coming year, checked again when the last import is a week old (the holidays of the region and of its school groups only); the service is asked only when an administrator opens that part or imports, and only the country, the region and the language leave the box. Imported holidays removed by hand are not imported again (GET /api/v1/holidays/countries?lang=FR, GET /api/v1/holidays/regions?country=FR&lang=FR, POST /api/v1/holidays/import {"country": "FR", "region": "FR-HF", "lang": "FR"}, DELETE /api/v1/holidays/import stops the weekly import).

School zones (from 0.8.5; internal/holidays). Where a country gives its school holidays by zone, the zones come first: the list Zone or region has two groups, School zones and Regions, with "In this country the school holidays go by zone: choose your zone (or your region, which gives the holidays of its zone)." OpenHolidays files the zones in two ways, and Warda reads both: as groups (its /Groups, and the groups each region names) or as regions of the category "zone" at the top of the country. Only geographic groups are zones: a group of the category "school type" (asked in every language, so that its English category is read) is never offered as one, nor, in a country other than France, the Netherlands and Belgium, a group the regions name that /Groups does not describe. A zone is imported like a region (POST /api/v1/holidays/import {"country": "FR", "region": "FR-ZB", "lang": "FR"}) and refreshed every week: the whole country is asked, then the holidays of the zone kept, whether filed under the zone or under its regions. A region also gets the holidays filed under its zone, and the holidays filed under another zone only are no longer taken for those of the whole country. GET /api/v1/holidays/regions gives the zones first (kind zone), then the regions. A country without zones keeps its list of regions as before.

What OpenHolidays gives, as read on 2026-10-13 (the list follows the service by itself):

Country Zones offered
France Zone A, Zone B, Zone C (regions of the category zone, FR-ZA, FR-ZB, FR-ZC, each with its academies); the regions stay offered and give the holidays of their zone
Netherlands the three school regions: North, Central, South (NL-NO, NL-MI, NL-ZU)
Belgium the three communities: French, Flemish, German-speaking (BE-FR, BE-NL, BE-DE)
Germany, Switzerland no zone: the groups OpenHolidays gives there are kinds of schools of a state or a canton (general and vocational schools of Mecklenburg-Western Pomerania; primary, secondary or vocational schools of a few cantons), not places, so they are not offered; choose the region (the state, the canton, the municipality)
Austria, Czechia, Italy, Luxembourg, Poland, Portugal, Spain no zone: the regions, as before

The CI imports a French zone against the real service when it offers one (scenario holidays-import; a warning otherwise).

The calendars cover the countries of the European Union that OpenHolidays publishes; the CI imports those of France, Germany, Belgium, the Netherlands and Poland at each run (scenario holidays-import). Portugal and Sweden have only their public holidays there, and Denmark, Finland, Greece and Cyprus are not covered yet. The list of the countries comes from the service: they appear in it by themselves when OpenHolidays adds them.

Requests: a child opens http://warda/ask on their device (served over plain HTTP too: their device has not accepted the certificate of the box). No sign-in: Warda knows the device by its address, only on the allowed networks, and only a device given to a child or a teenager can ask: 15, 30 or 60 minutes more of Internet or of a category used up, with a short message; one request at a time, six a day at most. The parents accept or refuse from the dashboard or the Alerts page; an accepted request gives the extra time (Internet: also over a cut made by a parent; category: minutes more today). GET/POST /api/v1/ask (the device), GET /api/v1/requests, POST /api/v1/requests/{id}/accept|refuse.

A home filter cannot see a device that leaves the network (mobile data, a friend's hotspot), unless the device is enrolled in the protection outside the home (from 0.8.0, subscription): its queries then come back to the box, with its hours, its cuts and its categories, and a minor's device that switches to mobile data at home is told. A device not enrolled, or an app with its own DNS, still escapes: lock the phone with the tools of its system as well (Family Link, Screen Time).

API: GET /api/v1/schedules, PUT /api/v1/people/{id}/schedule {"enabled": true, "grid": "<672 characters 0 or 1 from Monday 00:00>"}, POST /api/v1/people/{id}/bonus {"minutes": 30}, DELETE /api/v1/people/{id}/bonus, PUT /api/v1/schedule-allow {"domains": [...]}. A function of the subscription answers 402 on the free plan once subscriptions open. A box whose plan lapses stops applying the hours, the school holidays, the limits by category, the modes and the time given, and keeps them: they apply again within a minute when the plan comes back (see Plans); the pause of a person can always be ended (DELETE /api/v1/people/{id}/mode).