schnaq Labs[app]

status: open-source

ZilpZalp — Learning Birds Before You Can Read

A learning app for preschoolers: 70 native bird species, two games with no written word. No account, no ads, no data collection — everything stays on the device.

Two games, one question

ZilpZalp introduces children to the birds outside their own front door — before they can even read. Both games ask essentially the same question in two ways: "Erkenne den Vogel" ("recognise the bird") reads a bird's name aloud, and the child taps the right one of four photos. "Wer singt da?" ("who's singing?") plays a real bird call and asks which of four birds it was — tapping the speaker icon repeats the call as many times as the child likes.

The 70 species of the Germany pack ship with the app, from blackbird, blue tit and robin all the way to kingfisher, eagle owl, crane and white stork. No network connection is needed to play. Anyone who wants more downloads the packs for the rest of the world and for Africa — both free of charge, with no account and no in-app purchase.

No reading required

Every task is spoken aloud, and every answer is a photo with no caption — ZilpZalp works entirely without reading skills. One detail worth calling out: the app doesn't talk live to any speech service. Every spoken line is a pre-recorded audio clip shipped as an asset with the app; nothing calls out to a service in the background while you play.

And when an answer is wrong, it looks like it, too: not red, but sun-yellow, with a friendly "Versuchs nochmal" ("try again"). Getting it wrong is meant to feel like a second attempt, not a failure.

Stars, a collection, several children

Each round earns up to three stars, depending on how much lands on the first try. Recognise a bird correctly five times in a row and its sticker joins the collection — progress that builds up over weeks, not in a single sitting. Several children can share one device through their own local profiles, each with a name and a bird avatar; no account is needed, and everything stays on the device.

For the adults in the room

ZilpZalp ships in the App Store's Kids Category, and that draws firm lines: no data collection, no account, no ads, no in-app purchases, no third-party analytics or crash reporting, no tracking. As with FoxHunt: nothing leaves the device that doesn't have to.

The parent area opens with Face ID or the device passcode — and, where none is set up, behind a simple maths problem meant for adults. From there you can set a daily time budget; once it runs out, the app gently says "Zeit fürs Nest" ("time for the nest"). Any link that leads out of the app opens only after the same maths problem.

Real birds, free media

The photos come from naturalists on iNaturalist, the calls from recordings on xeno-canto — both are only ever queried at curation time, never while the app is running. Every photo and every recording carries a free licence (CC0, CC BY or CC BY-SA), no exceptions. The repository declares each source with its creator, licence and SHA-256, and a check in CI fails the build if any of that is missing — the in-app credits screen is generated from those same manifests, so it can't drift out of date.

Stack and shipping

  • Swift/SwiftUI, native on iPhone and iPad.
  • The game logic lives in its own SwiftPM packages: ZilpZalpCore (rounds, scoring — no UI dependency), ZilpZalpData (models, pack manifests, persistence) and ZilpZalpUI (the design system).
  • Media curation runs through Python tools that query iNaturalist and xeno-canto at curation time.
  • Available on the App Store, free, with no ads. The listing and its metadata are in German, as ZilpZalp is a German-language app for now.

Who's behind it

The idea and the game are Johanna Hillebrand's, built together with Christian Meter — the same order the app itself credits. schnaq provides the home for the project: the repository, build and release infrastructure, and the media bucket. The code is public on GitHub, and the full landing page is at zilpzalp.schnaq.com.

// Status

status: open-source

// Stack

SwiftSwiftUIiOSPython

// Live since

2026-07

// Head Maintainer

Talk about this project