This release includes 11 database migration(s). Back up your database before upgrading.
0a7e3c9d1b42_add_editortemplate_table.py5bd3b62a4ef8_add_mcp_oauth_tables.py74cc74ce41c7_add_paths.py8d1f2c3b4a5e_add_messaging.py8d2b6f4c1e75_add_editorvariable_table.pya1l2v3s4e5s6_add_live_sessions.pybea69132ae0f_add_lti_tables.pydae02f36bef2_add_drip_content.pye4f7a2c9b1d3_add_hot_path_indexes.pyf2a3b4c5d6e7_payments_sell_anything.pyf5a8b3d0c2e4_add_analytics_tables.py
Features
- feat(embed): post activity events to the host page56340a4dc
- feat(sdk): retry 429s, add pagination and webhook verification00082166e
- feat: add @learnhouse/vue and rebuild the docs sitecd450657b
- feat: per-feature analytics dashboards and more tracked eventsa190c1b5a
- feat: move org analytics to Postgres with first-party collection78a1f5156
- feat: add @learnhouse/sdk and @learnhouse/react packagesd22393c7a
- feat(web): native-feeling mobile UI and assignments redesign24a8df3de
- feat(web): keep school members out of the platform hub after signupf8ac1d5b0
- feat: messaging with people and AI agentsd13317838
- feat(web): redesign error screens and harden against non-app crashesa0fa654c3
- feat(mcp): learning paths, completions, more prompts and pluggable toolsb3d9395cf
- feat: stream onboarding videos from YouTube3824f3282
- feat: redesign admin onboarding with video walkthroughs3bb5f4d7e
- feat: live sessions and calendar542697b17
- feat: learning paths with their own certificate7b91a654f
- feat(api): migrate the database schema automatically on every deploy9fc325dae
- feat(editor): group related toolbar and header actions8b45672e7
- feat(payments): sell any content, any way54510e837
- feat(courses): more drip conditions, unlock emails, day preview and calendar export3a2bf39df
- feat(courses): drip content, release chapters on a schedulee73fe320c
- feat: add LTI 1.3 support (Enterprise)e9eff4bba
- feat(editor): rules and variables for certificates, assignments and community activitye0041f765
- feat: connect AI apps over MCP, add teaching insights and course-wide tools921381211
- feat(communities): #community tags in lessons and discussions574def101
- feat(editor): custom variables, toolbar variable picker, navigation variables970da4627
- feat(editor): saved audiences, quick-start rules and starter templates3c5fcc499
- feat(editor): audience reach, real-learner preview and template fields9a1202bbd
- feat(editor): dynamic content and reusable templates978c3427c
- feat(cli): allow LEARNHOUSE_DOCKER_BIN and reject Windows-reserved install namesa862a667e
- feat(cli): add --dir, terminal checks for interactive commands and an update-check opt-outab0382665
- feat(agent): surgical activity-content editing (patch one block, not the whole doc)329eea2cf
- feat(agent): complete the block palette in describe_activity_blocks6fb5217f6
- feat(agent): image/video/pdf/audio block tools (URL upload)4366c19c7
- feat(agent): teach the agent the activity block paletteecea525a6
- feat(mcp): embed a stateless MCP server exposing the agent tools21512d50d
- feat(agent): user/usergroup/role/org tools + analytics runner28f5089c0
- feat(agent): library, community, playground, and board toolsf699c99a4
- feat(agent): course/chapter/activity/assignment tools + entity resolver65261ca61
- feat(agent): redis-backed pending-action engine with confirm challenges9c052ba5c
- feat(agent): tool registry foundation with tiered enforcement pipeline03e668f94
- feat(config): add MCP SDK dependency and mcp_enabled config knob7835c039d
- feat(atlas): plan gate, i18n strings, and loading-border stylesb79241c86
- feat(ai): add style priming, revisions, surgical edits to magic blocks3d2c6e0bd
- feat(atlas): add dashboard AI agent chat UI and page-context wiring6ff38cfd4
- Merge pull request #1232 from learnhouse/feat/activity-sdk266868059
- Merge pull request #1234 from learnhouse/feat/first-party-analyticsf6eb3ae9d
- Merge pull request #1227 from learnhouse/feat/mobile-native1f33ef444
- Merge pull request #1226 from learnhouse/feat/post-signup-routing1ae8fbfc5
- Merge pull request #1217 from learnhouse/feat/onboarding-v2e6390daa1
- Merge pull request #1221 from learnhouse/feat/messaging-agentsf9b2eefd0
- Merge pull request #1196 from learnhouse/feat/mcp-agent89d08eb6c
- Merge pull request #1214 from learnhouse/feat/live-sessions-v228482f382
- Merge pull request #1210 from learnhouse/feat/paths86f660182
- Merge pull request #1201 from learnhouse/feat/payments-redesign87787a187
- Merge pull request #1199 from learnhouse/feat/lti-1.31d6bd3d4c
- Merge pull request #1208 from learnhouse/feat/auto-migrations0c1b99fc3
- Merge pull request #1207 from learnhouse/feat/editor-toolbar-grouping36c56f42b
- Merge pull request #1200 from learnhouse/feat/drip-content808811fb4
- Merge pull request #1194 from learnhouse/feat/editor-templating692a786b4
Fixes
- fix(billing): cancel an organization's subscriptions when it is deletedb180bbe81
- fix(embed): stop leaking content details to framing pageseb1da68ef
- fix(deps): update all non-major dependenciesf4355b245
- fix(deps): update dependency workos to v10.7.065d86a679
- fix(deps): update all non-major dependencies99bcd2c79
- fix(react): keep analytics client out of the package bundlecedb9fb18
- fix: only file logins under orgs the user belongs to, bound analytics caches59c781f8e
- fix(web): stop AI side panel crash on a stale selectiona1e1cd4bc
- fix(auth): scope sessions held to one org to that org62efebeaa
- fix(web): Safari bottom strip, adaptive header search, phone auth pagesa65158f05
- fix(web): stop the hydration error on the organizations hub4123b5722
- fix: enable messaging on every plan and remove the old Copilot32f3ab66e
- fix(deps): update all non-major dependencies8768da64a
- fix: separate turned-off and not-in-plan features in the sidebar89a5eab7f
- fix(api): put the index migration after the MCP tables migrationd309bbdc6
- fix(messaging): tighten who sees and posts whatddfcc663c
- fix(api): handle AI provider limits and clean up noisy errorsa7b0887bb
- fix: make live sessions a Pro plan feature45c7ca050
- fix(i18n): complete all locales and move hardcoded strings to keys1d0fd7518
- fix: keep course last-updated date currentf62e508fc
- fix(web): image aspect ratios, missing-image fallbacks, white-label brandingbc9b6f406
- fix(certificates): include org logo in PDF and tidy path certificate copye5c6fd2b0
- fix(paths): recover cleanly from enroll and certificate races0920cec99
- fix(api): serve a filtered OpenAPI spec to the API playgroundca8b81ec2
- fix(paths): keep revoked certificates revoked and scope API tokens to their orgc097f8a39
- fix: block org and avatar changes for LMS-launched sessionsa5f782005
- fix: block account security changes from LMS-launched sessions0ac467b19
- fix: limit LMS-launched sessions to the org that registered the LMSbe6052b9e
- fix: stop LTI migration from forking the Alembic historycb643c34e
- fix(courses): unique drip migration id, local-time enrollment dates, Postgres-safe learner query0a0ddd6c1
- fix: keep org scripts off when tenancy is a fallback guessa4b561dc0
- fix: use same-origin media stream URLs on custom domains7fe55e509
- fix(api): tie playground generation sessions to the user who started them15838e5fd
- fix: exempt LTI login and launch from CSRF checks3a15df029
- fix: scope LMS 2FA bypass to the registering orgf582af698
- fix(api): tie assignment submission files to the learner who uploaded them4cce1a683
- fix(collab): separate viewer seats and pin presence to the authenticated user8a7b49113
- fix: limit org-authored scripts and SCORM files on shared hostsff6a8a8a7
- fix(web): remove dark background behind video block player corners7bb06c0d8
- fix(editor): keep the variable menu on screen when the toolbar wrapsffd192059
- fix(communities): validate community tag ids in the client, moderate tag namesf05c92365
- fix: repair search tool import after merging dev368db2eb1
- fix(deps): update all non-major dependencies822df062a
- fix(editor): show the group picker on a new custom variable value139b57c15
- fix(editor): open the rules of the block a shortcut inserted3bc2d0441
- fix(editor): pick the slash menu item that is shown1791c7939
- fix(editor): fail closed on unresolvable rules, restrict audience edits4b513df0d
- fix(docs): build with current zod and skip unchanged previews safely3b2e715d0
- fix(deps): update all non-major dependencies329506caa
- fix(editor): count reach once per block and cap total rule workaff5eaf31
- fix(editor): mask learner email in previews, bound reach counting956ee6394
- fix(billing): explain failed upgrade charges, including bank confirmation590ed55b7
- fix(docker): add libatomic for Node 26 on amd6401ea36f80
- fix(deps): keep the CLI engines floor at Node 22716731c30
- fix(billing): charge the prorated difference when a plan is upgraded6f177eab6
- fix(deps): update all non-major dependencies571881292
- fix(deps): update dependency pypdf to v6.21.4 [security]832e2e04f
- fix(content): refuse non-ASCII directory segments in content paths9fcf26c9b
- fix(content): match content path segments case-insensitivelye2fd32b5a
- fix(cli): pin third-party images to current minor versions3eb2447b8
- fix(api): send response headers before body for uncompressed responsesc048d6263
- fix(cli): detect ports held on IPv6 or via netstat on Windows0e6336814
- fix(cli): installers, dev mode and release script0fb8d26eb
- fix(cli): validate setup input and keep an install's data on re-run02008316e
- fix(cli): harden update for both editions8fd2713f1
- fix(cli): make backup and restore safe045dec5a1
- fix(cli): run docker without a shell and find containers per compose serviced1b22ad4e
- fix(security): re-validate every redirect hop in asset fetch (SSRF)593ce339e
- fix(agent): don't pre-flight activity targets through the RBAC checkerbfaebfb70
- fix(events): guard MCP lifespan when app has no state (test harness)decb5ab37
- Merge pull request #1242 from learnhouse/fix/org-delete-cancels-billing6996c6b7d
- Merge pull request #1238 from learnhouse/renovate/all-minor-patch7dc39bc0e
- Merge pull request #1237 from learnhouse/renovate/workos-cryptography2a48ba743
- Merge pull request #1236 from learnhouse/renovate/all-minor-patch14d013b90
- Merge pull request #1233 from learnhouse/fix/ai-panel-stale-selection53fd2fa2d
- Merge pull request #1231 from learnhouse/fix/lti-security-sweep1e4297183
- Merge pull request #1203 from learnhouse/fix/collab-and-upload-ownership70fc82588
- Merge pull request #1229 from learnhouse/fix/header-search-compact40957acc6
- Merge pull request #1228 from learnhouse/fix/home-hydration9cb154b1b
- Merge pull request #1224 from learnhouse/fix/messaging-all-plans39deccefb
- Merge pull request #1222 from learnhouse/renovate/all-minor-patch7f9f42155
- Merge pull request #1223 from learnhouse/fix/sidebar-feature-states6822be5e6
- Merge pull request #1220 from learnhouse/fix/error-screen-sentry-noise5217a8557
- Merge pull request #1216 from learnhouse/fix/live-sessions-standard-plan75f3cb158
- Merge pull request #1215 from learnhouse/fix/i18n-sweepac8ea9fee
- Merge pull request #1213 from learnhouse/fix/course-last-updated85fd3ba9b
- Merge pull request #1212 from learnhouse/fix/image-aspect-ratios7170d4bbd
- Merge pull request #1211 from learnhouse/fix/path-certificate-polish8dd000c6c
- Merge pull request #1209 from learnhouse/fix/api-playground-openapi-spec6e57796ae
- Merge pull request #1206 from learnhouse/fix/org-scripts-instance-fallbackfe069f643
- Merge pull request #1205 from learnhouse/fix/stream-custom-domain474dcd5d4
- Merge pull request #1198 from learnhouse/fix/org-js-session-containment3c72611de
- Merge pull request #1197 from learnhouse/fix/video-block-transparent-bgd3e5f6ed0
- Merge pull request #1195 from learnhouse/renovate/all-minor-patch989626e67
- Merge pull request #1193 from learnhouse/renovate/all-minor-patch63fb843ef
- Merge pull request #1191 from learnhouse/fix/billing-charge-upgrades623d24866
- Merge pull request #1189 from learnhouse/renovate/all-minor-patchced04b185
- Merge pull request #1188 from learnhouse/renovate/pypi-pypdf-vulnerabilityb313cc15c
- Merge pull request #1187 from learnhouse/fix/assignment-submission-authza74a2f206
- Merge pull request #1185 from learnhouse/fix/cli-hardening-1.618fd9cce1
- Merge pull request #1186 from learnhouse/fix/gzip-excluded-response-startee9fe982c
Performance
- perf(api): build the new indexes concurrently after migrating4e1704d69
- perf(web): fewer and faster server-side fetches13c5b870a
- perf(web): lighter images and fontsf583ccead
- perf(web): load editors, modals and dashboard tabs on demandbbe6f2368
- perf(api): add missing indexes for lesson, membership and trail lookups50c43673e
- perf(api): keep blocking storage calls off the event loopa2119905a
- perf(api): load a lesson's chapter with the lessond921fea3a
- perf(api): stop re-querying what the request already loaded for auth checks4231f78ef
- perf(api): only pre-ping database connections that sat idle018143d64
- Merge pull request #1219 from learnhouse/perf/across-the-board30d0fadab
Refactoring
Documentation
- docs: add section accents and fix list markers and header patterns5d9fb1964
- docs: tag Cloud links with UTM and add signup CTAs7e4df47b8
- docs: fix outdated docs, merge duplicate pages, improve SEO and speedfb95a207c
- docs: add Messages page and replace old Copilot docse71688b7b
- docs: document recent features with screenshots and video guidesdc348c7bd
- docs: sync documentation with shipped features93ce851c4
- docs(self-hosting): explain automatic database migrationscc437d3f4
- Merge pull request #1225 from learnhouse/docs/messages-copilot1ea040aa0
- Merge pull request #1218 from learnhouse/docs/feature-docs-v288dcdbe85
Maintenance
- chore(web): fix strict lint errors in embed-touched filesa7d2be37d
- chore: use re-narrated onboarding videos (lesson, branding, school, community)cbdeff6e8
- chore: use re-narrated onboarding videos (tour, first course, invite)2cbc2cfdb
- chore: restore fakeredis test dependency in apps/api72079cdec
- chore(deps): update dependency node to v2673e21934e
- chore(cli): update TypeScript and Node types, type-check in CI48b198087
- chore(cli): release 1.6.0bdf12a550
- Merge pull request #1230 from learnhouse/chore/api-coverage-ci1fe6966e9
- Merge pull request #1190 from learnhouse/renovate/node-26.xbb05d7874
npx learnhouse update --to 1.4.4