The package downloader deleted the installed language pack as soon as a version difference with the server was detected, before the download had even started. If the download then failed (connection drop, server error), the device was left with an empty language directory: on the next offline launch, the directory check failed and the app was unusable until internet access was restored. The early cleanup was also redundant: _copy_data() already removes the existing directory right before extracting the new archive, i.e. after the download has succeeded (HTTP 200). Changes in package_downloader.gd: - Remove the pre-download cleanup of the current language directory; the previous pack now stays usable for offline play until the new one has been fully downloaded. - Check the return value of HTTPRequest.request() and show the download error popup when the request cannot be started, instead of leaving the screen waiting forever on a request that was never sent. - Surface extraction failures (missing archive, unzip error) through the error popup instead of silently returning from the extraction thread and leaving the user stuck on a frozen progress screen. Changes in login.gd: - Handle the result of UserDataManager.login_student(), which was previously logged and ignored. The synchronization performed right before the login can delete or move the student locally (e.g. the server requested a local deletion), in which case the child was sent to the gardens scene with no student session loaded, ending up on a dead screen. On failure, play the wrong-password feedback and reset the code keyboard instead of changing scene. Verified with the GUT test suite (58/58 passing).
📖 Kalulu — Learn to Read, the Smart Way
🌍 Available Languages
- 🇪🇸 Español
- 🇫🇷 Français
- 🇧🇷 Português (Brasil)
📑 Table of Contents
🧠 Why Kalulu?
Kalulu is more than just a game — it’s an educational adventure grounded in scientific research that helps children learn to read through a decoding-based method.
Each lesson follows a structured sequence based on linguistic data drawn from children's literature. Learners start with vowels and gradually move on to more complex sounds.
- 🎯 Goal: Make learning to read fun and effective
- 🌟 Science-Based: Developed using research in education and neuroscience
- 👶 Target Audience: Primarily children, but useful for anyone wanting to learn to read
- 🔎 Published Research: Several articles have been published on Kalulu's design and reading results, read here:
https://www.tandfonline.com/doi/pdf/10.1080/00220973.2023.2173129
https://hal.science/hal-03015914/document
https://hal.science/hal-03702075/document
✨ Features
- Interactive grapheme-phoneme reading lessons
- Adaptive difficulty progression
- Child-friendly interface with engaging visuals
🛠️ Installation
📥 Clone the Repository
We recommend forking the repository before cloning, so you can easily contribute or manage your own changes.
- Go to the Kalulu GitHub Repository.
- Click the Fork button at the top-right corner to create your own copy of the repo.
- Once forked, open your terminal and run the following commands:
# Clone your fork of the repository
git clone https://github.com/YOUR_USERNAME/Kalulu-Frontend.git
# Or
git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git
# Navigate into the project directory
cd Kalulu-Frontend
🔁 Remember to replace YOUR_USERNAME with your actual GitHub username.
🎮 Install the Godot Engine
To run Kalulu, you need the Godot Engine installed on your machine.
- Visit the official Godot Engine website: https://godotengine.org/
- Click on Download and choose the version compatible with your operating system.
- Extract the downloaded file and run the Godot executable to launch the editor.
That's it! You're now ready to explore the Kalulu project in Godot.
🧩 Addons
Kalulu includes several useful addons to enhance development and streamline workflow:
🔄 EnvironmentSwitcher
A utility to easily switch between development and production environments.
📤 export_tool_manager
Facilitates export to various platforms and simplifies the export process for additional tools like prof_tools.
✅ godot-form-validator
A plugin for Godot 4 that adds validation logic to any control element in your project.
🗃️ godot-sqlite
Provides SQLite integration for Godot projects.
Important: This addon must be downloaded manually from the Godot AssetLib. The folder
addons/godot-sqlite/binis excluded from version control due to its large size. Make sure to download and install it after cloning the repository.
🤝 Contributing
We welcome contributions from everyone! Whether it's fixing bugs, improving documentation, or suggesting new features, your help is greatly appreciated.
How to Contribute
-
Set up the Project
See the Installation section to learn how to fork and clone the repository. -
Create a New Branch
git checkout -b feature/your-feature-name -
Make Your Changes
Implement your changes or improvements. -
Commit and Push
git add . git commit -m "Describe your changes" git push origin feature/your-feature-name -
Open a Pull Request
Navigate to your forked repository on GitHub and click Compare & pull request to submit your changes for review.
Please make sure your code follows our coding conventions and includes relevant tests or documentation updates when appropriate.
❓ FAQ
📱 Is Kalulu available on mobile?
Yes! Kalulu is available on:
💻 Is Kalulu available on desktop?
Yes! Desktop versions for Windows, Mac, and Linux are available in the Releases section.
🌐 Is Kalulu available directly on the web?
We are working on it, stay tuned!
Related Repositories
| Repository | Description |
|---|---|
| Kalulu Backend | Serverless API — authentication, sync, dashboards, and data management |
| Kalulu Language Lambda | Pipeline that processes language packs and updates the database |
| Kalulu Languages | Linguistic data packs (French, Spanish, Portuguese etc...) |
Built with care by Excello Recherche & Education
We also have a website