Releases: learningequality/studio
v2026.05.14
What's Changed
- Fixes issue with Stripe redirect after payment in production.
Supporting PRs:
- Remove deployed deploy step. by @rtibbles in #5905
- Use canonical Site domain for Stripe redirect URLs by @rtibbles in #5908
Full Changelog: v2026.05.13...v2026.05.14
v2026.05.13
What's Changed
High level overview
Easy Sharing of Community Channels lets channel editors share their channels with the broader Kolibri community. Editors submit a channel with country, language, and subject metadata, walk through a license audit to confirm their resources are shareable, and get notified when an admin reviewer approves the submission or asks for changes.
The question editor has been overhauled. Editors can now apply bold, italic, underline, and strikethrough; create ordered and unordered lists and headings; embed images, formulas, and links; and paste content from Microsoft Word and other editors with much less cleanup needed afterwards.
Added
New Feature: Easy Sharing of Community Channels
Channel editors can share their channels with the broader Kolibri community via admin review.
- Submit a channel to the community library via a new Share button. Editors fill in country and description; languages and subjects are auto-populated.
- License audit scans the channel at submission. Channels containing All Rights Reserved resources are blocked. Channels containing resources under licenses that require special permissions are flagged so admins can review the license description.
- Admin review — admins filter submissions by community status, review any license descriptions flagged by the audit, add notes, and approve or request changes.
- Notifications for all editors of a channel when a submission is approved or needs changes.
- Resubmit prompt when a previously-submitted channel is republished.
A related draft channel publishing workflow sits behind the draft_channels feature flag — editors can publish a draft for testing in Kolibri without changing the live version of the channel.
List of supporting PRs
- CommunityLibrarySubmission model by @Jakoma02 in #5156
- Populate Country table by @Jakoma02 in #5168
- CommunityLibrarySubmission viewset by @Jakoma02 in #5167
- Save channel included categories and expose channel version history by @Jakoma02 in #5176
- Add action to resolve Community Library Submissions by @Jakoma02 in #5178
- Add to community library on submission approve by @Jakoma02 in #5228
- Update channel logic to support publishing channel draft by @taoerman in #5241
- Copy Side Panel Modal and add community channels strings file by @AlexVelezLl in #5216
- Update channel publishing UX to support publishing channel draft versions by @taoerman in #5274
- Community library submission fields and filters in AdminChannelViewSet by @Jakoma02 in #5292
- Add bitmask fields for ChannelMetadata categories by @Jakoma02 in #5272
- Ensure channel version database exists when adding to community library by @Jakoma02 in #5233
- ESoCC: Update UIUX of admin ChannelTable to support new Community Library info by @Jakoma02 in #5370
- Submit to Community Library panel by @Jakoma02 in #5405
- Add a public filter to the kolibri-public's ChannelMetadata viewset by @taoerman in #5486
- Prevent inconsistent states beteween public channels and community ch… by @taoerman in #5500
- Info messages about previous submissions in create submission side panel by @taoerman in #5513
- Add loader if channel is being published and community library side p… by @taoerman in #5523
- Hide share button in TreeViewBase if user does not have permissions t… by @taoerman in #5550
- Handle deletion of a Channel with a related Community Library Submission by @taoerman in #5551
- Create license audit task and special permissions model by @taoerman in #5538
- Show resubmit channel to community library CTA after channel publish by @taoerman in #5541
- Community Library Notifications Filtering by @taoerman in #5566
- Issue 5449 show license audit and special permissions checks by @taoerman in #5563
- Create ChannelVersion model with token support by @taoerman in #5589
- Refactor publish side panel by @AlexVelezLl in #5603
- Use channelVersion objects instead of special permission ids by @taoerman in #5622
- Temporarily hide draft button. by @rtibbles in #5652
- [ESoCC] Command to create channel versions by @nucleogenesis in #5660
- Compute license audit task results during publish workflow by @taoerman in #5665
- Set distributable Special Permissions Licenses by @taoerman in #5681
- Add migration command for channel versioned content databases by @ozer550 in #5692
- Add Notifications page by @AlexVelezLl in #5610
- Add submission details page by @AlexVelezLl in #5716
- Show version history in the channel publish side panel by @AllanOXDi in #5721
- Remove channelVersion object and database with version "next" when stale by @ozer550 in #5728
- Show draft tokens in Studio by @AlexVelezLl in #5729
- Add draft_channels feature flag by @AlexVelezLl in #5759
- Add support for channel version tokens on v1 public channel endpoint by @AlexVelezLl in #5772
- Community channels page by @AlexVelezLl in #5770
- Update ChannelVersion size field type to FloatField by @AlexVelezLl in #5799
- Review submission side panel by @Jakoma02 in #5630
- Add details to submit panel about acceptance criteria by @marcellamaki in #5820
- feat: add library field to v1 and v2 public channel APIs, gate v1 ChannelVersion lookup by @rtibblesbot in #5828
- Update ESoCC strings after UX writing review by @marcellamaki in #5819
- Add guards for channel version computed values by @AlexVelezLl in #5858
- Robust solution for filtering unpublishable changes on frontend by @AlexVelezLl in #5844
- Revert "Temporarily hide draft button." by @rtibbles in #5856
- Update community library page by @AlexVelezLl in #5809
- Fix duplicate community library submission by @AlexVelezLl in #5773
- Fix add to community library change making channel publishable by @AlexVelezLl in #5825
- Fix lookup not finding draft tokens by @AlexVelezLl in #5857
- fix: populate draft ChannelVersion metadata during draft publishes by @rtibblesbot in #5841
- fix: populate channel snapshot fields on draft ChannelVersion during draft publish by @rtibblesbot in #5851
- fix: write version=0 in ChannelMetadata for draft publishes by @rtibblesbot in #5853
- Fill the deploy-migrate command with ESoCC migrations by @AlexVelezLl in #5878
New question editor
The question editor has been overhauled.
- Inline formatting: bold, italic, underline, and strikethrough.
- Content structure: ordered and unordered lists, and headings.
- Embeds: images, formulas, and links.
- Paste from Microsoft Word and other external editors with significantly less cleanup.
- Touchscreen-friendly toolbar on touch devices.
- Improved accessibility: math formulas now announce themselves correctly in screen readers, including non-English locales.
List of supporting PRs
- feat(texteditor): Markdown dual conversion for backward compatibility by @habibayman in #5189
- feat(texteditor): Mobile view and responsiveness enhancements by @habibayman in #5220
- feat(texteditor): completely replace old with new TipTap editor 🎉 by @habibayman in #5246
- refactor(texteditor...
v2026.03.25
v2026.03.16
What's Changed
- Downgrade non-urgent _sort_by_order logging error to warning by @LianaHarris360 in #5712
- Fix exercise extra_fields migration for non-m_of_n mastery models by @rtibbles in #5714
- Update snackbar to use multiline overflow option by @marcellamaki in #5730
- Add link to new DCMA form by @marcellamaki in #5738
- Add additional completion to exercises that have already had their completion criteria fixed but their complete value is still wrong by @rtibbles in #5731
Full Changelog: v2026.02.18...v2026.03.16
v2026.02.18
What's Changed
This release makes our new AI-powered recommendations in search (previously in beta) available for all Studio users.
Pull Requests:
- Remove ai_feature feature flag and ungate search recommendations by @rtibblesbot in #5695
- Add management command for auditing missing sources by @bjester in #5711
Full Changelog: v2026.01.21...v2026.02.18
v2026.01.21
What's Changed
- Fix trash page pagination by @ozer550 in #5552
- Infra File Cleanup by @DXCanas in #5596
- Update paths for nginx Dockerfile in workflow by @rtibbles in #5612
- Configure Celery for graceful shutdown during K8s deployments by @rtibbles in #5520
- Prevent and handle IntegrityErrors during user creation by @rtibbles in #5582
- Add fields language, provider, aggregator, role_visibility to sync op by @rtibbles in #5590
- Fix Language foreign key column lengths by @rtibbles in #5623
- Unit tests (as in, tests for unit folders) by @rtibbles in #5646
- Temporarily hide draft button. by @rtibbles in #5652
Full Changelog: v2025.12.02...v2026.01.21
v2025.12.02
What's Changed
- Pin pip due to pip-tools incompatibility. by @rtibbles in #5518
- Add focus trapping to resource preview side panel by @AllanOXDi in #5505
- Adds defensive check when generating language text in the language dropdown by @akolson in #5465
- Fix responsive issues when Importing from other channels within search recommendations by @AllanOXDi in #5542
- Fixes folders or resources with missing title remain 'incomplete' after editing just the title by @AllanOXDi in #5539
- Make 'updateDescendants' true by default by @marcellamaki in #5075
Full Changelog: v2025.10.29...v2025.12.02
v2025.10.29
What's Changed
- Adds defensive check when reading file_format on file object by @akolson in #5440
- Adds defensive check when validating node title by @akolson in #5464
- Fix focus ring on some buttons + confirmation dialogs not appearing for channel sharing operations by @MisRob in #5483
- [Remove Vuetify from Studio] Buttons/links in Import from channels by @Abhishek-Punhani in #5467
- Restore EPUB renderer height by @bjester in #5491
- Renames dupilicate recommendations endpoint names by @akolson in #5506
- Add file duration setting as migration task by @rtibbles in #5508
Full Changelog: v2025.10.06...v2025.10.29
v2025.10.06
What's Changed
- Fix validation to allow upload of HTML5 files by @rtibbles in #5418
- When creating exercises, default randomize to true as data. by @rtibbles in #5427
Full Changelog: v2025.9.29...v2025.10.06
v2025.9.29
What's Changed
High level overview
This major release includes:
- a closed beta for recommendations when importing content from other channels in Studio
- support for QTI exercise export
- foundational technical work for a new Rich Text Editor (not yet available to users in the UI)
- foundational technical work for a staging/draft channel publishing experience (not yet available to users in the UI)
- contributions towards the Open Source Community project "Remove Vuetify from Studio"
- numerous bug fixes, optimizations, and improvements
Supporting PRs for Recommendations and Feedback Mechanism
- Welcome Embeddings 🚀 by @vkWeb in #4322
- Allow docker build on push to
search-recommendationsby @bjester in #4499 - Core functionality of
connectandmake_requestmethods onBackendclass by @AlexVelezLl in #4494 - Embed topics and content logic by @akolson in #4588
- Extract content urls by @akolson in #4604
- Update
search-recommendationswith the latest fromunstableby @akolson in #4848 - Updates kds breaking changes by @akolson in #4842
- Merge down hotfixes into unstable by @bjester in #4853
- Update
search-recommendationswith the latest code changes by @akolson in #4856 - Implement recommendations display by @akolson in #4803
- String fixes from UX writing review by @marcellamaki in #5364
- Add initial pass of translations (Spanish) for QA team review by @marcellamaki in #5365
- Add locales for search recommendations beta by @marcellamaki in #5383
- Fixes missing scheme error when hitting recommendations API by @akolson in #5056
- Implement recommendation feedback utilities by @ozer550 in #5055
- Handle port default for CA API-- port 8000 by @bjester in #5071
- Search recommendations strings by @marcellamaki in #5357
- Add thumbnail placeholder to recommendation card by @bjester in #5261
- Search recommendations branch cleanups by @akolson in #5015
- Revamp content file mgt by @akolson in #4872
- Adds go to navigation to recommended resource card popout icon by @akolson in #5016
- Updates pillow version by @akolson in #5002
- Search recs unstable merger by @akolson in #5005
- Search recommendations Feature by @akolson in #5014
- Fixes unprocessed SASS expression in Thumbnail by @akolson in #5147
- More tweaks from #5014 review by @akolson in #5020
- Fixes the recommended resource card title duplication by @akolson in #5126
- Gherkin scenarios updates and corrections by @pcenov in #4902
- Add defensiveness against missing language for recommendations by @bjester in #5125
- Clean up recently ran migrations by @ozer550 in #4778
Supporting PRs for Dev Experience, Automations, QoL, Environment/Build
- Remove studio PR template in favor of org template. by @marcellamaki in #4823
- Remove use of deprecated set-output, use pre-commit lite action instead by @rtibbles in #4806
- Use notify_team_new_comment workflow action from .github repo by @rparadowski in #4844
- Remove 'pull_request_review' event from the community contributions spreadsheet action by @MisRob in #4859
- QoL improvement for IntelliJ based IDEs by @bjester in #4858
- feat: add community contribution labeling workflow by @iamshobhraj in #4927
- Fix the action not updating some data in the contributions tracking sheet by @MisRob in #4900
- Add new local_dev_wsl guide and update host and docker guides with references to it by @GautamBytes in #4904
- Node.js 18, pnpm 8, jest 29, linting/formatting updates, and webpack fixes by @bjester in #4462
- Switch package ecosystem to npm by @bjester in #5030
- Pin node and yarn versions by @EshaanAgg in #4822
- Remove unused code and dependencies by @rtibbles in #4934
- Reinstate .styl noop replacement for production webpack builds by @bjester in #5344
- unassign inactive users by @SukhvirKooner in #4979
- Revert flake8 and re-formats python files by @akolson in #5044
- Update Minio download link in local_dev_host.md and host_setup_services.md by @GautamBytes in #4892
- Prepare transition to postgresql 16 by @bjester in #4912
- Update contact information in the contributing guidelines by @MisRob in #4932
- Update workflow that handles contributor comments to the latest version by @MisRob in #5190
- Update manage issue header workflow events by @MisRob in #5177
- Update Node.js version to 20.x by @rtibbles in #5143
- Remove stylus module replacement causing non-hot devserver to break by @bjester in #5035
- Remove custom issue templates, turn on issue header automation, reference new contributing guidelines by @MisRob in #5105
- Explicitly specify localhost as an allowed host, and add WSLIP IP in WSLEnvironments. by @rtibbles in #5134
- Approve vue-demi postinstall build by @bjester in #5070
Supporting PRs for new Rich Text Editor
- feat(texteditor): initial standalone tiptap editor component by @habibayman in #5097
- feat(texteditor): implement insertion toolbar actions by @habibayman in #5155
- Use bundler advice for including fonts for mathlive. by @rtibbles in #5196
- Make tip tap editor sandbox completely dev only by @rtibbles in #5197
Supporting PRs for Remove Vuetify from Studio
- Replace Material Icons with Kolibri Design System Icon by @SukhvirKooner in #4913
- Migrate kradiobutton usages by @akolson in #4889
- Migrate LESS styles to SCSS by @adibmbrk in #4880
- Removed unused vuetify components by @drona-gyawali in #4911
- Upgrade KDS from 5.2.0 to 5.2.1 by @MisRob in #5210
- Issue#5123 : Migrated the offline alert bar in Settings from Vuetify to Kolibri Design System. by @AadarshM07 in #5162
- Do not use hardcoded colors in 'Request more space' form by @yeshwanth235 in #5195
- Use KTransition instead of VSlideYTransition in 'Request more space' form by @yeshwanth235 in #5194
- Feedback utility functions by @akolson in #5088
- Remove old Kolibri loading gif in favour of KLogo. by @rtibbles in #5149
- [Remove Vuetify from Studio] Top-level buttons in Channels by @RONAK-AI647 in #5232
- Updated LoadingText to KCircularLoader KDS component by @yeshwanth235 in #5215
- Fix/Replace Vuetify with KDS on ‘Channel Not Found’ Page by @vtushar06 in #5242
- Upgrade KDS from 5.0.0 to 5.2.0. by @MisRob in #5108
- Updated the license info section to use the KExternalLink component for l...