Skip to content

Releases: learningequality/kolibri

v0.19.2

05 Mar 23:26
7556d79

Choose a tag to compare

What's Changed

This patch release includes foundational work for the upcoming Courses feature, improvements to sync reliability and content handling, continued Python 2.7 cleanup, and various bug fixes across the platform. It also migrates the JavaScript package manager from yarn to pnpm and adds several new developer tooling improvements.

Added

Courses Feature (Foundational)

Initial implementation of the Courses feature, including backend models, API endpoints, frontend views, and assignment workflows.

List of supporting PRs

Developer Tooling

Changed

Performance & Build

List of supporting PRs
  • Add hashing to font CSS and WOFF generation by @rtibbles in #14088
  • Update kolibri-zip with support for css import statements, fix browser compatibility by @rtibbles in #14085

Tech debt / refactors

List of supporting PRs
  • Replace CSS Variables in favor of theme variable for CSS styling by @AllanOXDi in #14089
  • Restore frontend linting and fix issues that happened in the interim by @rtibbles in #14126
  • Removes residue style overrides prop code by @akolson in #14112
  • Clean up localeCompare usage for proper internationalization (fixes #3888) by @rtibbles in #14087
  • Slim down agents.md with progressive disclosure and moving more into Claude.md by @rtibbles in #14164
  • Update ignores for worktrees and JetBrains features by @bjester in #14162

Python 2.7 Cleanup

List of supporting PRs

Fixed

List of supporting PRs

Internationalization

List of supporting PRs
  • Update translations from Crowdin for release-v0.19.x by @learning-equality-bot[bot] in #14249

New Contributors

Full Changelog:
v0.19.1...v0.19.2

v0.19.2-rc1

04 Mar 22:36
e0c8129

Choose a tag to compare

v0.19.2-rc1 Pre-release
Pre-release

Since rc0

What's Changed

This patch release includes foundational work for the upcoming Courses feature, improvements to sync reliability and content handling, continued Python 2.7 cleanup, and various bug fixes across the platform. It also migrates the JavaScript package manager from yarn to pnpm and adds several new developer tooling improvements.

Added

Courses Feature (Foundational)

Initial implementation of the Courses feature, including backend models, API endpoints, frontend views, and assignment workflows.

List of supporting PRs

Developer Tooling

Changed

Performance & Build

List of supporting PRs
  • Add hashing to font CSS and WOFF generation by @rtibbles in #14088
  • Update kolibri-zip with support for css import statements, fix browser compatibility by @rtibbles in #14085

Tech debt / refactors

List of supporting PRs
  • Replace CSS Variables in favor of theme variable for CSS styling by @AllanOXDi in #14089
  • Restore frontend linting and fix issues that happened in the interim by @rtibbles in #14126
  • Removes residue style overrides prop code by @akolson in #14112
  • Clean up localeCompare usage for proper internationalization (fixes #3888) by @rtibbles in #14087
  • Slim down agents.md with progressive disclosure and moving more into Claude.md by @rtibbles in #14164
  • Update ignores for worktrees and JetBrains features by @bjester in #14162

Python 2.7 Cleanup

List of supporting PRs

Fixed

List of supporting PRs

Internationalization

List of supporting PRs
  • Update translations from Crowdin for release-v0.19.x by @learning-equality-bot[bot] in #14249

New Contributors

Full Changelog:
v0.19.1...v0.19.2-rc0

v0.19.2-rc0

02 Mar 23:14
80c1ad8

Choose a tag to compare

v0.19.2-rc0 Pre-release
Pre-release

What's Changed

This patch release includes foundational work for the upcoming Courses feature, improvements to sync reliability and content handling, continued Python 2.7 cleanup, and various bug fixes across the platform. It also migrates the JavaScript package manager from yarn to pnpm and adds several new developer tooling improvements.

Added

Courses Feature (Foundational)

Initial implementation of the Courses feature, including backend models, API endpoints, frontend views, and assignment workflows.

List of supporting PRs

Developer Tooling

Changed

Performance & Build

List of supporting PRs
  • Add hashing to font CSS and WOFF generation by @rtibbles in #14088
  • Update kolibri-zip with support for css import statements, fix browser compatibility by @rtibbles in #14085

Tech debt / refactors

List of supporting PRs
  • Replace CSS Variables in favor of theme variable for CSS styling by @AllanOXDi in #14089
  • Restore frontend linting and fix issues that happened in the interim by @rtibbles in #14126
  • Removes residue style overrides prop code by @akolson in #14112
  • Clean up localeCompare usage for proper internationalization (fixes #3888) by @rtibbles in #14087
  • Slim down agents.md with progressive disclosure and moving more into Claude.md by @rtibbles in #14164
  • Update ignores for worktrees and JetBrains features by @bjester in #14162

Python 2.7 Cleanup

List of supporting PRs

Fixed

List of supporting PRs

Internationalization

List of supporting PRs
  • Update translations from Crowdin for release-v0.19.x by @learning-equality-bot[bot] in #14249

New Contributors

Full Changelog:
v0.19.1...v0.19.2-rc0

v0.19.2-beta0

25 Feb 23:08
76cce20

Choose a tag to compare

v0.19.2-beta0 Pre-release
Pre-release

QA Guidance — v0.19.2-beta0

This PR is included in the "bug fixes" section below, but note that - "#14201 Better missing resources handling in quiz editing" was not QA'd so should be given particular attention.

0. Refactored Learner Home Page Cards

This was QA'd recently so no need to retest it - but please note that bugs found in previous QA are not addressed here in case you come across them again.

1. Sync & Classroom Partitioning

What to test: Sync between devices — especially single-user devices (SoUD) syncing with full-facility servers. Import and export of facility data. Any workflows where user data (like created_by or assigned_by fields) references users that may not exist on the local device.

What to look for: Sync failures or hangs, data missing after sync, user references showing as blank or causing errors, unexpected data deletion on SoUD devices after syncing with a full-facility server.

2. Font Hashing & CSS/Browser Compatibility

What to test: Verify that all fonts load correctly across different browsers — especially older browsers. Check that text renders properly in all supported languages, including RTL scripts. Test content rendering in kolibri-zip (H5P, HTML5 apps) — particularly content that uses CSS @import statements. Verify SafeHTML content (tables, images) renders with correct theme colors.

What to look for: Missing or broken fonts, text appearing in a fallback/system font, flash of unstyled text, stale cached fonts not updating after upgrade, CSS files failing to load (404s), broken styling inside zipped HTML5 content, SafeHTML tables or images losing their themed colors.

3. Internationalization — Sorting

What to test: Anywhere lists of items are sorted alphabetically — user lists in Facility management, group lists in Coach, side navigation entries, learner/group selectors when assigning content or quizzes. Test with non-English languages, especially languages with accented characters or non-Latin scripts.

What to look for: Items appearing in the wrong sort order, items not resorting when switching languages, JavaScript errors when sorting empty or undefined lists.

  • #14087 Clean up localeCompare usage for proper internationalization by @rtibbles

4. Bug Fixes

What to test:

  • Facility management: Select some users, then apply a filter — verify the selection is cleared and doesn't carry over.
  • Unprovisioned device: Navigate directly to any Kolibri URL (e.g. /learn, /facility) on a device that hasn't been set up — verify you're redirected to the setup wizard.
  • Quiz editing: Create or edit a quiz that references content that has since been deleted or is unavailable — verify the UI handles it gracefully.
  • Exam page: Open a quiz as a learner and interact with the KSelect dropdown — verify no scrolling issues or clipped dropdowns.

What to look for: Stale user selections persisting after filtering, being able to access plugin pages on an unprovisioned device, crashes or blank screens when quiz content is missing, dropdown menus being clipped or causing page scroll issues on the exam page.

  • #14201 Better missing resources handling in quiz editing by @akolson

5. Task System / Import Retry

What to test: User import during the setup wizard — especially importing users from another Kolibri device or a CSV file. Try importing large numbers of users. Test what happens when the source device is unreachable mid-import or when the connection is flaky. Test navigating back during an import. Also test general task behavior (channel imports, exports) since the underlying job storage was migrated from SQLAlchemy to Django.

What to look for: Import tasks failing and not retrying, imports silently losing users, the setup wizard allowing you to navigate back during an active import, duplicate users appearing after a retry, tasks getting stuck in a pending/running state, any errors referencing the jobs database or missing tables.

What's Changed

Read more

0.19.2-alpha0

06 Feb 19:46
bfca81c

Choose a tag to compare

0.19.2-alpha0 Pre-release
Pre-release

Overview

This is an UNSTABLE pre-release for preliminary testing of initial workflows for a feature-flagged pilot of Courses in Kolibri. Core aspects of the Course experience have not yet been implemented. Some data is also not yet present and displayed. Please see Product Issue: Courses are discoverable within downloaded channels, and coaches can preview them and assign them to learners for a general overview of the scope of the workflow.

What's Changed

QA review list: Foundational work for Courses in Kolibri pilot

Course management page

  • "Courses" page appears at the same level as Lessons and Quizzes in Coach navigation
  • Verify coaches can view all assigned courses on this page
  • Verify coaches can manage course visibility from this page
    Not present: Other columns beyond visibility toggle within Courses main page table (i.e. status, learners, mastery)
Screenshot 2026-02-05 at 6 48 50 PM

Course assignment workflow

Previewing/selecting course

  • Clicking to assign a course opens the side panel workflow (same pattern as lessons/quizzes)
  • Only one course can be selected at a time (radio buttons, no multi-select)
  • Clicking on the course card opens a course preview (further details below)
  • The side panel and cards use existing routing, focus trapping, and card a11y patterns

Learner assignment

  • The course can be assigned in the same manner as lessons and quizzes: entire class, existing groups, or adhoc groups of learners
    Note: the assignment confirmation via signing in as the learner workflow is not yet completed and not in scope of this alpha release
Screenshot 2026-02-05 at 8 08 46 PM Screenshot 2026-02-05 at 8 08 56 PM

Course Preview

  • Condensed course information preview displays in the sidebar using an accordion layout
  • Each accordion is one UNIT
  • With the accordion OPEN, the coach can preview the LESSONS in the unit. (note: the Figma spec is a bit misleading here. there will not be single resources i.e. a PDF or video at the preview level)
  • The Unit accordion has a title, and each lesson has a lesson icon, title, and the number of resources in that lesson
  • Coaches cannot preview pre-test or post-test questions, or specific resources from within the side panel
  • The header section of the course preview page has the title, thumbnail, description, as well as the number of units and resources
  • Icon buttons for "expand all" and "collapse all" units are functional
Screenshot 2026-02-06 at 2 43 01 PM

NOTE: the accordions in the course preview and in the learner/group selection does not match exactly the Figma. I vetoed the design changes that Tomiwa tried to sneak in at the last moment 😅

Particular areas to QA and other notes:

Screenshot 2026-02-06 at 2 55 20 PM

PRs

Full Changelog: v0.19.1...0.19.2-alpha0

v0.19.1

20 Jan 16:54
e38dc4d

Choose a tag to compare

What's Changed

This release includes HTML5 Article Renderer improvements, performance optimizations including a ~25% reduction in JS bundle size, and foundational work for upcoming features. We also addressed some tech debt and continued cleaning up Python 2.7 compatibility code with great help from the community.

Added

Content & Rendering

Courses Feature (Foundational)

Developer Tooling

Changed

Performance & Build

Tech debt / refactors

Python 2.7 Cleanup

New Contributors

Full Changelog:
v0.19.0...v0.19.1-rc0

v0.19.1-rc0

16 Jan 23:51
7393c7d

Choose a tag to compare

v0.19.1-rc0 Pre-release
Pre-release

What's Changed

This release includes HTML5 Article Renderer improvements, performance optimizations including a ~25% reduction in JS bundle size, and foundational work for upcoming features. We also addressed some tech debt and continued cleaning up Python 2.7 compatibility code with great help from the community.

Added

Content & Rendering

Courses Feature (Foundational)

Developer Tooling

Changed

Performance & Build

Tech debt / refactors

Python 2.7 Cleanup

New Contributors

Full Changelog:
v0.19.0...v0.19.1-rc0

v0.19.1-beta0

16 Jan 00:04
faf076f

Choose a tag to compare

v0.19.1-beta0 Pre-release
Pre-release

QA Guidance

1. All Content Viewers

What to test: Every content type renderer (HTML5, H5P, BloomPUB, video, audio, PDF, ePub, Perseus, slideshow, QTI)

What to look for: JavaScript errors, broken interactions, content failing to load, performance differences

Why: Webpack bundling changes re-enabled Terser mangling and changed how core-js polyfills are loaded in the sandbox. These affect all compiled JavaScript.

  • 6a4c0c4 - Webpack bundle size optimizations (mangling re-enabled)
  • de9ac92 - Fix core-js duplication in viewer bundles
  • 54eb476 - H5P JavaScript library update

2. Application Startup & Navigation

What to test: Initial page load, navigation menu population

What to look for: Delayed or missing navigation items, flash of untranslated content, race conditions on slow connections

Why: i18n setup is now async with lazy-loaded locale data. Navigation component registration is deferred until i18n completes. This changes the timing of when the app becomes fully interactive.

  • 2eb1fba - Lazy load all intl and vue-intl locale files, defer nav component registration

3. Internationalization Across the App

What to test: Non-English languages, RTL languages, language switching

What to look for: Missing translations, layout breaks in RTL, errors when switching languages

Why: The entire i18n initialization flow was refactored from synchronous to asynchronous. Any code that assumed translations were immediately available could break.

  • 2eb1fba - Lazy load all intl and vue-intl locale files

4. Channel Import

What to test: Import channels from various sources

What to look for: Import failures, missing metadata post-import

Why: Channel import now includes modality annotation step. The annotation uses options__contains JSON string matching.

  • 3458d8f - Annotate modality field on upgrade and channel import flows

v0.19.0

10 Dec 21:03
a5c7d85

Choose a tag to compare

High level overview

Release 0.19.0 updates user management capabilities to make it easier for administrators to manage user accounts. The changes reduce the number of repetitive tasks required for class enrollment and unenrollment of learners, and general account management. This makes both setting up new programs and and year-over-year user management simpler and more efficient.

Added

New Feature: User Management

Administrators can now perform actions on multiple users at once, reducing the time needed to manage users at scale. Key workflows include:

  • Bulk user selection and actions: Allows admins to select multiple users and apply actions to all of them at once, including enrollment, removal from classes, and deletion
  • Copy classes: Admins can now copy classes of learners and coaches
  • Learner-only device management: Allow admins to remove learner-only devices users from a device and import them outside of the setup wizard workflow
  • Improved user creation workflow Admins can now enroll a user in one or more classes during user account creation
List of supporting PRs

Noteworthy technical updates include upgrading to Node.js v20, upgrading to Morango for improved sync reliability, implementing SQLite transaction improvements for better performance, and adding Django-silk support for development performance profiling.

Other technical additions include upgrading Morango for improved sync performance, implementing load testing framework for learner interactions, and finalizing JS package renaming and migration in the packages directory.

List of supporting PRs
  • Morango upgrade and sync queue tweaks by @rtibbles in #13774
  • Add load testing framework for learner lesson interactions by @rtibbles in #13856
  • Use BEGIN IMMEDIATE for all SQLite transactions by default by @rtibbles in #13878

Changed

Code cleanup and refactoring.

Supporting PRs
  • Upgrade Node.js from v18 to v20 by @rtibbles in #13531
  • Remove vestigial is_facility_user flag in favour of standard Django user properties by @rtibbles in #13857
  • Cleanup unused dependencies for kolibri-tools by @rtibbles in #13877
  • Complete removal of ...
Read more

v0.19.0-rc1

10 Dec 19:14
8ad9961

Choose a tag to compare

v0.19.0-rc1 Pre-release
Pre-release

0.19.0

High level overview

Release 0.19.0 updates user management capabilities that make it easier for administrators to manage users. The changes reduce the number of repetitive tasks required for class enrollment and unenrollment of learners, and general user account management. This makes both setting up new programs and and year-over-year user management simpler and more efficient.

Additionally, this release upgrades to node v20.

Added

New Feature: Bulk User Management

Administrators can now perform actions on multiple users at once, reducing the time needed to manage users at scale. Key workflows include:

  • Bulk user selection and actions: Allows admins to select multiple users and apply actions to all of them at once, including enrollment, removal from classes, and deletion
  • Copy classes: Admins can now copy classes of learners and coaches
  • Learner-only device management: Allow admins to remove learner-only devices users from a device and import them outside of the setup wizard workflow
  • Improved user creation workflow Admins can now enroll a user in one or more classes during user account creation
List of supporting PRs

Noteworthy technical updates include upgrading to Node.js v20, upgrading to Morango for improved sync reliability, implementing SQLite transaction improvements for better performance, and adding Django-silk support for development performance profiling.

Other technical additions include upgrading Morango for improved sync performance, implementing load testing framework for learner interactions, and finalizing JS package renaming and migration in the packages directory.

List of supporting PRs
  • Morango upgrade and sync queue tweaks by @rtibbles in #13774
  • Add load testing framework for learner lesson interactions by @rtibbles in #13856
  • Use BEGIN IMMEDIATE for all SQLite transactions by default by @rtibbles in #13878

Changed

  • BREAKING CHANGE - Node.js has been upgraded from v18 to v20.

Additional changes are code cleanup and non-breaking refactoring.

Supporting PRs
Read more