{"id":38182122,"url":"https://github.com/digabi/exam-engine","last_synced_at":"2026-01-16T23:55:33.085Z","repository":{"id":37617896,"uuid":"223358056","full_name":"digabi/exam-engine","owner":"digabi","description":"Toolkit for creating exams for the Abitti exam system","archived":false,"fork":false,"pushed_at":"2026-01-12T03:38:44.000Z","size":498396,"stargazers_count":16,"open_issues_count":4,"forks_count":8,"subscribers_count":20,"default_branch":"master","last_synced_at":"2026-01-12T10:33:46.050Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://digabi.github.io/exam-engine/MexDocumentation/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/digabi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-11-22T08:29:15.000Z","updated_at":"2026-01-12T03:38:47.000Z","dependencies_parsed_at":"2023-02-19T14:45:56.489Z","dependency_job_id":"1958a9b9-f987-4ae7-99b7-0d5ce7ecff1d","html_url":"https://github.com/digabi/exam-engine","commit_stats":null,"previous_names":[],"tags_count":675,"template":false,"template_full_name":null,"purl":"pkg:github/digabi/exam-engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digabi%2Fexam-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digabi%2Fexam-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digabi%2Fexam-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digabi%2Fexam-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/digabi","download_url":"https://codeload.github.com/digabi/exam-engine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digabi%2Fexam-engine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28489348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T22:54:02.790Z","status":"ssl_error","status_checked_at":"2026-01-16T22:50:10.344Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-16T23:55:32.421Z","updated_at":"2026-01-16T23:55:33.080Z","avatar_url":"https://github.com/digabi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Digabi logo](https://digabi.fi/images/digabi-logo.png)](https://digabi.fi)\n\n# Digabi\n\nDigabi is a codebase used in the Abitti exam system, the digital exam environment for the [Finnish Matriculation Examination](https://www.ylioppilastutkinto.fi/en).\n\nAll bug reports, feature requests, and pull requests are appreciated. However, the following should be kept in mind:\n\n- Pull requests based on submitted issues cannot be implemented due to limited resources. Similarly, upstream issues related to third-party projects in use are not forwarded.\n- No guarantee can be given that submitted pull requests will be reviewed.\n- Our focus is strictly on the Finnish Matriculation Examination, as defined by law. Issues or pull requests unrelated to this mission will not be addressed.\n- Official channels should be used for inquiries. The issue tracker and pull requests are not to be used for general questions or support requests.\n\nBefore any contribution is accepted to the codebase, to clarify the intellectual property rights associated with contributions to open-source projects owned by the Finnish Matriculation Examination Board, all contributors must sign and submit a Contribution License Agreement (CLA):\n\n- Individuals should sign and send the [Personal CLA](https://digabi.fi/YTL%20Personal%20CLA.pdf) to [digabi@ylioppilastutkinto.fi](mailto:digabi@ylioppilastutkinto.fi).\n- Organizations or corporations should sign and send the [Corporate CLA](https://digabi.fi/YTL%20Corporate%20CLA.pdf) to the same address.\n\n# Digabi Exam Engine\n[Documentation](https://digabi.github.io/exam-engine/MexDocumentation/)\n\nEngine for the MEX exam format.\n\nProvides:\n\n- Exam preview tools for exam developers\n- MEX format documentation\n- Tools for mastering an exam to run it in Matriculation examination board's environment\n\n**Make sure you test any MEX format exam manually before publishing it or using it with Abitti in\nproduction. This manual testing should include holding the exam, answering all questions, grading\nit, and checking that all examinees' answers are available.**\n\n**The MEX format and this engine is still under development: All functionalities of the MEX format\ndo not yet work in Abitti. Breaking changes are also still possible without prior warning.**\n\n# Setup\n\nMake sure the following are installed in your system:\n\n- [Node.js](https://nodejs.org/en/) `nvm install` and/or `nvm use`\n- [Firefox](https://www.mozilla.org/fi-FI/firefox/new/)\n\nAfter Node.js has been installed, open a new terminal window and type the\nfollowing command.\n\n```\n$ npm install -g @digabi/exam-engine-cli\n```\n\nThis installs the `ee` command-line program to your system.\n\n# Creating a new exam\n\nTo create a new exam, use\n\n```\n$ ee new Esimerkkikoe\n```\n\nThis creates a `Esimerkkikoe` directory, containing a basic `exam.xml` file and an\nempty `attachments` directory where to place attachments.\n\n# Preview\n\nTo start a live preview of any exam on your computer, navigate to the exam\ndirectory and run\n\n```\n$ ee preview\n```\n\n# Importing an exam to Abitti\n\nTo use an exam in Abitti, it must be first packaged as a transfer zip. It is\nthen possible to import it to Abitti by clicking \"Tuo koe/För in prov\".\n\nTo create a transfer zip, navigate to the exam directory and run\n\n```\n$ ee create-transfer-zip\n```\n\nThis creates a transfer zip file in the exam directory for each language\nversion of the exam.\n\n# Offline versions\n\nOffline version refers to a static version of an exam that can be viewed in\na web browser without any additional tools.\n\nTo create an offline version of the exam, navigate to the exam directory and\nuse\n\n```\n$ ee create-offline\n```\n\n# Intellectual property rights\n\nMost of the artifacts in this repository are licensed under [LICENSE](LICENSE). Exceptions are:\n\n- XHTML-based XML Schema Definition files [packages/mastering/schema](packages/mastering/schema).\n  See [packages/mastering/schema/xhtml11.xsd](packages/mastering/schema/xhtml11.xsd) for the license.\n- Abitti and the Abitti logo are EU trademarks registered by the Finnish Matriculation Examination\n  Board (FMEB) under the codes 015833742 and 015838915.\n  For detailed use rights, see [https://abitti.net/abitti-trademark.html](https://abitti.net/abitti-trademark.html)\n- Several attachments in the SC sample exam [packages/exams/SC/](packages/exams/SC/) are third party material. See\n  the `\u003ce:reference\u003e` tags in [packages/exams/SC/SC.xml](packages/exams/SC/SC.xml) for details.\n\n# Development\n\nThe information in this section is only relevant for developers.\n\n## Architecture\n\nExam-engine is structured as a monorepo containing several NPM packages.\n\n| Component                                           | Purpose                                                                                                                                                                                                                                                                                |\n| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [@digabi/exam-engine-core](packages/core)           | The main UI code responsible for rendering a mastered exam into HTML. It produces an AMD bundle containing several React components and a CSS file. This AMD bundle is packaged to every exam .mex file and loaded dynamically when taking the exam.                                   |\n| [@digabi/exam-engine-mastering](packages/mastering) | Mastering is a step in which we take a source XML file, validate its contents, do some processing (e.g. calculate the maximum score and assign IDs for each question). A single source XML file will produce a separate mastered XML file for each language defined in the source XML. |\n| [@digabi/exam-engine-rendering](packages/rendering) | Contains webpack-related code for previewing an exam or converting one into a static HTML file (also known as an \"offline exam\").                                                                                                                                                      |\n| [@digabi/exam-engine-exams](packages/exams)         | Contains sample exams in the mex format.                                                                                                                                                                                                                                               |\n| [@digabi/exam-engine-cli](packages/cli)             | Contains the `ee` CLI tool.                                                                                                                                                                                                                                                            |\n\n## Preview\n\nThe `ee` client can be run with `npm run ee`. So to preview an exam, run\n\n```\n$ npm run ee preview path/to/exam.xml\n```\n\n## Compilation\n\nBefore doing any changes to the code, you'll want to command TypeScript to compile\nany changes within the whole project automatically.\n\n```\n$ npm run watch\n```\n\n## Lint\n\n```\n$ npm run lint\n```\n\n## Tests\n\nTo run all tests\n\n```\n$ npm run test\n```\n\nTo run a specific test or a specific set of tests, use\n\n```\n$ npm run test packages/foo/__tests__/testFoo.ts\n$ npm run test packages/foo\n```\n\nIf you've made changes to the code that affect exam mastering or rendering,\nyou need to update the test snapshots by running. Review changes the snapshots manually.\n\n```\n$ npm run test-jest -- -u\n```\n\n## NPM releases\n\n### Prerelease\nIncrease version number of the packages:\n```bash\n$ npx lerna version premajor | preminor | prepatch | prerelease [--force-publish] [--yes]\n```\nUse `--force-publish` to set new version even when there are no changes and `--yes` to auto-confirm\nversion to be set. This will create a tag for new version and push it to the remote repository.\n\nGitHub Action will be triggered to publish new version to npm repository after successfully building\nthe repositories and running tests.\n\n### Production release\nSimilar to prerelease, just\n\n```bash\n$ npx lerna version major | minor | patch [--force-publish] [--yes]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigabi%2Fexam-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdigabi%2Fexam-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigabi%2Fexam-engine/lists"}