9.4
⭐️ If you find Artemis valuable, please consider giving our GitHub project a star! ⭐️
Highlights
- 📅 New exercise timeline for programming and modeling exercises: Instructors now configure all exercise dates from release to assessment on a unified, easier-to-use exercise timeline. Programming exercises received several usability improvements, and modeling exercises replace the previous separate date pickers with the same timeline.
- 🖼️ Images in the repository view: Students and instructors can now view images directly in the repository view of programming exercises, without cloning the repository.
- 🧠 Generate AI quiz questions from course competencies: In addition to free-topic generation, instructors can now generate quiz questions from selected course competencies. Artemis grounds the questions in the competencies and their linked lecture content, so they align with the course's learning objectives.
- 🔍 Iris answers in global search: The global search now shows an inline Iris answer card above the search results. Ask a question and an AI-generated answer with lecture source citations appears directly in the search view.
- 🤖 Turn review comments into exercise improvements: When creating a programming exercise with AI assistance, instructors can now leave review comments on the generated code, select those review threads, and have the next generation run implement exactly that feedback in the template, solution, and test repositories.
- 🎯 Easier-to-read feedback: Feedback for modeling, text, and file upload exercises now uses one consistent layout, so students find points, comments, and AI feedback suggestions presented the same way across these exercise types.
- ⚡ Exam administration stays fast for large exams: The student list in exam management now loads quickly and supports searching, sorting, and filtering, even for exams with thousands of registered students.
Important information for administrators
- REST API paths follow a new module-based convention: All account, course, and admin REST endpoints were migrated to a consistent module-name URL prefix, and an architecture rule now enforces this convention across the codebase. All old paths keep working through backward-compatible legacy aliases (responses carry
Deprecation/Sunsetheaders), so existing integrations are not broken. However, external tools and scripts that call the Artemis REST API should migrate to the new paths, as the legacy aliases are scheduled for removal after the sunset date 2026-09-30. See #12811 and #12822.
Improvements
Programming exercises: Improve the usability of the exercise timeline by @marlonnienaber in #12762Programming exercises: View images directly in the repository view by @Claudia-Anthropica in #12639Programming exercises: Split build templates into a compile and a test phase for the integrated code lifecycle by @matyasht in #12725Quiz exercises: Take the course context into account when generating quizzes with AI by @louis-heinrich in #12728Quiz exercises: Validate the title length of short answer questions while editing by @MaximilianAnzinger in #12533Modeling exercises: Replace the separate date pickers with the unified exercise timeline by @marlonnienaber in #12821Exam mode: Make requesting AI feedback in test exams more reliable by @laadvo in #12794Exam mode: Speed up the exam students view with server-side pagination, sorting, and searching by @ayca-cevdet in #12701Assessment: Align the user interface for AI feedback suggestions in the assessment editors by @musaberkay in #12765Assessment: Standardize the feedback display for modeling, text, and file upload exercises by @musaberkay in #12226Iris: Show an inline Iris answer card directly in global search results by @Nayer-kotry in #12612Iris: Detect and save the printed page numbers of lecture slides so slide pages can be linked correctly by @vivienxr in #12682Iris: Polish the chat layout: better placement of the scroll-to-bottom button and the thinking indicator by @thynguyentumde in #12771Hyperion: Select code review threads as feedback and have AI-assisted code generation implement them by @sawys777 in #12376Adaptive learning: Add orchestration mutation tools for the Atlas Companion by @jaylann in #12746Lectures: Make the slider of the YouTube player smoother by @vivienxr in #12601Tutorial groups: Move management actions into the title bar and remove duplicated page titles by @krusche in #12797Global search: Improve the formatting of search results by @florian-glombik in #12754Global search: Automatically set search filters based on the current page by @florian-glombik in #12756General: Polish the landing page FAQ accordion and feature cards by @thynguyentumde in #12770
Bugfixes
Programming exercises: Fix adding and removing environment variables in the build configuration of the exercise form by @matyasht in #12789Programming exercises: Fix changing the assessment type when updating an exercise by @Lyynnnx in #12805Programming exercises: Fix the customized build configuration using the wrong build template for non-Java exercises by @matyasht in #12876Quiz exercises: Show the correct participation status for students by @laadvo in #12842Quiz exercises: Fix "Invalid Input" persisting after deleting and restoring the only question by @MaximilianAnzinger in #12544Quiz exercises: Fix re-uploading deleted drag item images by @Nihad74 in #12884Exam mode: Fix an issue when importing an entire exam with a programming exercise by @matyasht in #12792Exam mode: Make the exam checklist also consider failed exercise preparations by @matyasht in #12777Exam mode: Fix the exam checklist wrongly reporting unprepared individual exams after removing a student by @Lyynnnx in #12868Iris: Fix the collapsed exercise side panel for users who opted out of AI features by @Nihad74 in #12852Adaptive learning: Fix a JSON serialization cycle for exercises with competency links by @jaylann in #12795Communication: Fix a visual issue with the announcement dialog by @Lyynnnx in #12799Global search: Exclude channels from search results when communication is disabled by @Lyynnnx in #12839General: Fix practice mode becoming unavailable after the due date by @krusche in #12896General: Fix the "Forgot password" link and spacing on the sign-in page by @krusche in #12890
Development
Server architecture & REST API
- Extract the notification module from communication by @krusche in #12793
- Move Jenkins CI code into a separate module by @krusche in #12810
- Split the programming module into multiple smaller modules by @krusche in #12813
- Declutter the core module by relocating feature code to its owning modules by @krusche in #12816
- Migrate account, course, and admin REST controllers to a module-name URL prefix by @krusche in #12811
- Enforce a consistent REST API path convention with backward-compatible legacy aliases by @krusche in #12822
- Migrate tutorial group REST responses to DTOs by @WoH in #12687
- Change complaint endpoints to use DTOs by @LeZhen1105 in #12395
- Migrate competency and Iris REST endpoints to DTOs by @dogusaytok in #12726
- Use DTOs for text, online, and exercise units by @WoH in #12787
- Fix a Jackson cyclic-reference race by returning cycle-free DTOs by @krusche in #12791
- Add an optional courseIds filter to the global search lecture endpoint by @Nayer-kotry in #12803
- Convert unidirectional
@OrderColumnto bidirectionalmappedByfor quiz entities by @krusche in #12640 - Add an entity usage architecture test to all modules and fix detection false positives by @krusche in #12804
- Strengthen REST best-practice architecture rules (authorization, methods, naming, bodies) by @krusche in #12855
- Improve input validation for communication requests by @krusche in #12901
- Remove the obsolete faqEnabled property from courses by @anian03 in #12841
- Enforce non-empty DTO fields again by @krusche in 3ab9300
- Update README after recent module changes by @krusche in 38449d8
Client modernization (Angular signals, PrimeNG, Vitest)
- Split the shared client module into foundation, shared-ui, and editor by @krusche in #12814
- Migrate the foundation client module to signals and Vitest by @krusche in #12823
- Migrate shared-ui to signals and PrimeNG dialogs by @krusche in #12825
- Migrate the editor client module to signals, Vitest, and PrimeNG by @krusche in #12843
- Migrate the programming client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @krusche in #12859
- Migrate the programming shared client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @FelixTJDietrich in #12706
- Migrate the remaining exercise components and the student code editor to Angular 21 signals by @FelixTJDietrich in #12857
- Migrate exercise client code to Angular 21 by @bassner in #12837
- Migrate the client exercise module to Vitest by @maximiliansoelch in #12016
- Migrate the exercise team client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @bassner in #12693
- Migrate the exercise result client module to Angular 21 signals, Vitest, and PrimeNG dialogs by @bassner in #12697
- Migrate the course sidebar and participant scores to Angular 21 signals and PrimeNG by @bassner in #12827
- Migrate the admin client module off ng-bootstrap to PrimeNG by @krusche in #12845
- Migrate the plagiarism module to Angular 21 PrimeNG dialogs and Vitest by @bassner in #12830
- Migrate atlas competency dialogs to Angular 21 PrimeNG by @bassner in #12833
- Migrate quiz module dialogs to Angular 21 PrimeNG by @bassner in #12828
- Migrate account/user memiris dialogs to PrimeNG by @bassner in #12818
- Migrate the modeling editor help dialog to PrimeNG by @bassner in #12819
- Migrate localci build-agent dialogs to PrimeNG by @bassner in #12820
- Migrate range-slider, dashboards, and image-cropper to Angular signals by @krusche in #12667
- Migrate signal stragglers (localvc, logos) and refresh the ESLint signal allowlist by @krusche in #12844
- Migrate logos, sharing, app-shell, and iris/shared Jest specs to Vitest by @bassner in #12817
- Lock course and editor into the signal-migration ESLint allowlist by @krusche in #12851
- Forbid legacy Angular decorators in test files of migrated modules by @krusche in #12856
- Discourage
ngOnChangesclient-wide and migrate the pure derived-state cases tocomputed()by @krusche in #12854
Testing, CI & dependencies
- Improve e2e test conduction by @krusche in #12786
- Stabilize flaky multi-node fast e2e tests by @krusche in #12724
- Fix programming exercise e2e tests by @krusche in #12806
- Add e2e tests for passkeys by @florian-glombik in #12761
- Instrument server test buckets with timing and CPU usage by @krusche in #12881
- Split the independent server test bucket to reduce execution time by @krusche in 3ed4580 and c55f6fd
- Fix failing e2e tests by @krusche in f1fc048
- Fix client check issues after pnpm update and remove remaining Jest mentions by @krusche in ea98e89
- Update client, server, and documentation dependencies by @krusche in #12871 and 891a83d
- Update python dependencies for the database approval check by @krusche in 4ba7f88
- Add documentation for the AI-assisted code generation feature by @sawys777 in #12741
New Contributors
- @dogusaytok made their first contribution in #12726
- @Lyynnnx made their first contribution in #12799
- @Nihad74 made their first contribution in #12852
Full Changelog: 9.3...9.4