Open-source licences
Noor is built on the following open-source components. We are grateful to the people who wrote them.
WebRTC — the video and audio link
flutter_webrtc · © 2018 湖北捷智云技术有限公司, used under the MIT licence. It carries the media between your two phones.
libwebrtc · © The WebRTC project authors, used under a BSD 3-clause licence. This is the native library that performs the DTLS-SRTP encryption described in our privacy policy.
We ship a modified copy of flutter_webrtc, and say so here. Noor bundles its own copy of that library with three changes, each tagged in the source and documented in full — including why, what was measured, and what a future upgrade must re-verify:
- Camera capture accepts an Android
Contextinstead of requiring anActivity, so the camera keeps working inside the background service after you swipe the app away. Without it, capture crashes in that service. - Switching cameras honours the requested lens. Upstream ignored the lens identifier on Android and simply toggled front/back, so asking for a phone's telephoto lens opened the selfie camera instead.
- Locking the focus works at all. Upstream's Android handler read a different argument name than the one it was sent, so the call failed every time. Noor needs it because a phone pointed at a cot all night should focus once and stay there, rather than hunting in the dark.
All three are changes we would like to see upstream; if they are accepted, our copy goes away. The MIT licence permits modification and requires the copyright notice above be preserved, which it is — in the app, in our copy of the library, and here.
Cry detection
TensorFlow Lite and tflite_flutter · © The TensorFlow Authors, used under the Apache License, Version 2.0.
YAMNet · © Google LLC, released under the Apache License 2.0. YAMNet is an audio-event classifier trained on Google's AudioSet. Noor bundles the model inside the app and runs it entirely on the camera phone — it is never contacted over a network, and no audio is sent anywhere.
Lullabies
The three lullabies are public-domain compositions — Twinkle, Twinkle, Little Star ("Ah! vous dirai-je, maman"), Brahms' Wiegenlied Op. 49 No. 4, and Frère Jacques.
The recordings are our own: they were synthesized in our own repository by a script we wrote, so there is no third-party recording in the app and no performance or master right to clear. We mention this because a music-licensing claim is exactly the kind worth being precise about.
Typefaces
Noto Sans and Noto Sans Arabic · © The Noto Project Authors, used under the SIL Open Font License 1.1. Both are bundled inside the app rather than downloaded, so Noor never contacts a font server — see the privacy policy.
Material Symbols · © Google LLC, Apache License 2.0.
Apache License 2.0
Also used under the Apache License, Version 2.0: the Android Jetpack (AndroidX) libraries and the Kotlin standard library · © The Android Open Source Project, JetBrains s.r.o. and Kotlin contributors.
BSD 3-clause
© The Flutter Authors, the Dart project authors, and the respective package authors:
- Flutter and the Dart SDK
- go_router, url_launcher, shared_preferences, path_provider, path, video_player, intl, http, web_socket_channel, crypto, json_annotation, google_fonts
- qr_flutter and mobile_scanner — the pairing QR code and the scanner that reads it
- flutter_secure_storage — pairing keys, held in the Android Keystore
- flutter_local_notifications · © Michael Bui
- battery_plus · © The Chromium Authors
MIT
- Riverpod (
flutter_riverpod,riverpod_annotation) and Freezed · © Remi Rousselet - drift and sqlite3_flutter_libs · © Simon Binder — the event timeline's local database. SQLite itself is in the public domain.
- flutter_foreground_task · © Dev-hwang — what keeps monitoring alive after you swipe the app away
- permission_handler · © Baseflow
- audioplayers · © Blue Fire
None of these components send anything to us. Noor holds the
INTERNET permission solely to reach the other phone on
your own Wi-Fi, and contacts no server of ours — because we operate
none. The privacy policy explains this in
full.