A generic LiaScript-Exporter that converts educational content into different formats, so that LiaScript courses can be used in Learning Management Systems (LMS) or as static documents (PDF, ePub, DOCX, …). Supported formats: SCORM 1.2, SCORM 2004, IMS, xAPI, Web, PDF, ePub, DOCX, Android, Project, RDF.
But, it is still the easiest way to share your courses via
https://LiaScript.github.io/course/?YOUR_REPO. The LiaScript course website is a fully fledged “offline-first” Progressive Web App (PWA), which allows to store all of your courses and states directly within your browser. There is no need for a back-end system, but if you need to track student progress, you can use this tool.
Download Desktop App GitHub Repository
Usage
The LiaScript-Exporter is available in three forms — all driven by the same underlying export engine.
1. Desktop App (recommended)
Download and install the desktop application for your operating system from the
GitHub Releases page.
No Node.js installation or terminal knowledge required.
Available packages: .exe, .dmg, .AppImage, .deb, .rpm, and portable archives.
2. Web UI (via CLI)
Install Node.js first, then install the exporter globally:
npm install -g @liascript/exporter
Then start the local web server:
liaex serve
This starts the export server on port 3000. The web interface allows you to upload files or specify a Git repository, select an export target, configure advanced settings, and track export jobs in an asynchronous queue.
3. CLI
For scripting, automation, or CI/CD pipelines. Once installed via npm, use liaex or liascript-exporter:
liaex -h
Core options:
-h --help show help
-i --input input file (Markdown or YAML for projects)
-p --path path to pack (defaults to the input file's directory)
-o --output output file name (default: "output"; extension set by format)
-f --format scorm1.2, scorm2004, ims, web, pdf, epub, docx, xapi,
android, project, rdf, json, fullJson (default: json)
-s --style additional CSS to inject
-v --version print version
-k --key ResponsiveVoice key for text-to-speech
Docker (Android export)
Android exports require the Android SDK. The easiest approach is the pre-built Docker image:
docker pull liascript/exporter
docker run --rm -v $(pwd):/work liascript/exporter \
liaex -f android \
-i /work/README.md \
--android-appId io.github.liascript.mycourse \
--output /work/output
You can also use Docker to run the web UI:
docker run --rm -p 4000:4000 liascript/exporter
Then open http://localhost:4000 in your browser.
Format Reference
SCORM 1.2
liaex -i project/README.md --format scorm1.2 --output rockOn
Note: SCORM 1.2 is too restrictive for storing data. Only location information is stored; quiz and survey states are lost after reload. Use SCORM 2004 if possible.
--scorm-masteryScore — percentage of quizzes/surveys a student must complete to pass (0–100, default 80).
--scorm-organization — sets the organization title in the imsmanifest.
--scorm-typicalDuration — expected course duration in ISO 8601 format (e.g. PT1H30M0S). Default: PT0H5M0S.
--scorm-iframe — wraps the course in an <iframe> to fix loading issues on ILIAS, OpenOlat, etc.
--scorm-embed — embeds the Markdown source into the JS bundle. Use for Moodle 4 and LMS with restrictions on dynamic loading.
--lia-subfolder — places course files into a content/ subfolder; implies --scorm-embed.
--path — if your README is not at the project root, use this to specify the directory to pack (input path is then relative to it).
--key — ResponsiveVoice key for text-to-speech (free for educational use).
SCORM 2004
Same options as SCORM 1.2, but supports persistent storage of quiz, survey, and task states.
liaex -i project/README.md --format scorm2004 --output rockOn
SCORM Examples
Tested commands for specific LMS:
| LMS | Command |
|---|---|
| ILIAS | liaex -i course/README.md -f scorm2004 --scorm-masteryScore 80 --scorm-iframe |
| learnworlds.com | liaex -i course/README.md -f scorm2004 --scorm-masteryScore 80 --scorm-iframe |
| Moodle 3.x | liaex -i course/README.md -f scorm1.2 --scorm-masteryScore 80 --scorm-iframe |
| Moodle 4.x | liaex -i course/README.md -f scorm1.2 --scorm-masteryScore 80 --scorm-embed |
| OPAL | liaex -i course/README.md -f scorm1.2 --scorm-masteryScore 80 --scorm-embed |
| open edX | liaex -i course/README.md -f scorm1.2 --scorm-masteryScore 80 --scorm-embed |
| OpenOlat | liaex -i course/README.md -f scorm1.2 --scorm-masteryScore 80 --scorm-embed |
| scorm.cloud | liaex -i course/README.md -f scorm2004 --scorm-masteryScore 80 --scorm-iframe |
For even simpler LMS-specific exports, the exporter has built-in presets:
liaex -i course/README.md -f presets --moodle4
liaex -i course/README.md -f presets --ilias
liaex -i course/README.md -f presets --opal
Run liaex -f presets to list all available presets.
IMS Content
A simple packaging format supported by many LMS (IMS v1.1.4).
liaex -i project/README.md --format ims --output course
--ims-indexeddb — preserves quiz and coding states across reloads using the browser’s IndexedDB.
--lia-subfolder — places course files into a content/ subfolder.
WEB
Generates a standalone web project that can be uploaded to any web server.
liaex --format web -i project/README.md -o outputFolder
--web-zip — bundle output into a zip file instead of a folder.
--web-iframe — hides the course URL by wrapping it in an iframe (breaks external slide links).
--web-indexeddb — stores states persistently; optionally pass a key to pin the database to a specific version:
liaex --format web -i project/README.md -o outputFolder --web-indexeddb someKeyToUse
Note: Web exports must be served over HTTP — opening
index.htmldirectly viafile://will not work. Preview locally with e.g.npx serve outputFolderorpython3 -m http.server --directory outputFolder.
Android
Tip: Setting up the Android SDK locally can be complex. Use the Docker image instead.
liaex -f android \
-i course/README.md \
--android-sdk /home/user/Android/Sdk \
--android-appId io.github.liascript.mycourse
--android-appName — app name (defaults to the course title).
--android-icon — optional app icon (1024×1024 px).
--android-splash — optional splash image (2732×2732 px).
--android-splashDuration — splash screen duration in milliseconds (default: 0).
--android-preview — open the result in Android Studio instead of building.
Uses Puppeteer to render the full course as a single page and export it to PDF, including scripts, code examples, and iframes (preserved as screenshots).
liaex --format pdf -i project/README.md -o output
--pdf-preview — open an interactive browser preview instead of exporting (works with remote URLs too).
--pdf-stylesheet — inject a custom CSS file to override fonts, colors, and LiaScript CSS variables.
--pdf-theme — LiaScript theme: default, turquoise, blue, red, yellow.
--pdf-timeout — additional wait time in ms for rendering to complete (default: 15000).
--pdf-scale — webpage scale, between 0.1 and 2 (default: 1).
--pdf-format — paper format, e.g. A4, Letter (default: A4).
--pdf-landscape — landscape orientation (default: false).
--pdf-pageRanges — e.g. "1-5, 8, 11-13".
--pdf-displayHeaderFooter, --pdf-headerTemplate, --pdf-footerTemplate — header/footer with date, title, url, pageNumber, totalPages classes.
--pdf-printBackground — print background graphics (default: false).
--pdf-margin-top/right/bottom/left — page margins with units.
--pdf-preferCSSPageSize — prioritize @page CSS size over format/width/height.
--pdf-omitBackground — hide default white background for transparent screenshots (default: true).
ePub
Renders the course with Puppeteer and packages it as an ePub compatible with most e-readers.
liaex -i project/README.md --format epub --epub-title "My Course" --epub-author "Author Name" --output course
--epub-title — title of the book (required).
--epub-author — author name(s), semicolon-separated for multiple (required).
--epub-publisher, --epub-description, --epub-language (default: en), --epub-version (2 or 3, default: 3).
--epub-cover — path or URL to cover image.
--epub-stylesheet, --epub-theme — custom CSS or LiaScript theme.
--epub-fonts — comma-separated paths to custom font files to embed.
--epub-toc-title — table of contents title (default: "Table Of Contents").
--epub-hide-toc — hide table of contents (default: false).
--epub-timeout — additional rendering wait time in ms (default: 15000).
DOCX
Exports the course as a Microsoft Word document (.docx), compatible with Word 2007+, LibreOffice, and Google Docs.
liaex -i project/README.md --format docx --output course
--docx-title, --docx-author, --docx-subject, --docx-description, --docx-language (default: en-US).
--docx-orientation — portrait or landscape (default: portrait).
--docx-font — font name (default: Arial). --docx-font-size — in half-points (default: 22 = 11pt).
--docx-header, --docx-header-html, --docx-footer, --docx-footer-html, --docx-page-number.
--docx-stylesheet, --docx-theme — custom CSS or LiaScript theme.
--docx-timeout — additional rendering wait time in ms (default: 15000).
xAPI
Generates a self-contained web package with a tincan.xml manifest for tracking learning experiences with a Learning Record Store (LRS).
liaex -i project/README.md --format xapi --output course
--xapi-endpoint — LRS endpoint URL.
--xapi-auth — LRS authentication string (e.g. "Basic dXNlcm5hbWU6cGFzc3dvcmQ=").
--xapi-actor — JSON string representing the xAPI actor (default: anonymous).
--xapi-course-id, --xapi-course-title — custom course identifier and title.
--xapi-mastery-threshold — mastery score threshold (default: 0.8).
--xapi-zip — package the output as a zip file.
--lia-subfolder — places course files into a content/ subfolder.
Project
Bundle a collection of courses into a custom overview page. The input is a YAML file:
title: My OER Collection
comment: A collection of open educational resources
logo: https://example.org/logo.png
collection:
- url: https://raw.githubusercontent.com/LiaScript/docs/master/README.md
- url: https://raw.githubusercontent.com/LiaBooks/LiaScript-Tutorial/main/README.md
title: LiaScript Tutorial
tags:
- Tutorial
- OER
liaex -i curriculum.yml --format project
liaex -i curriculum.yml --format project --project-generate-pdf --pdf-format A4
--project-no-meta — disable OpenGraph/Twitter card meta generation.
--project-no-categories — disable category/tag filter.
--project-category-blur — blur non-matching courses instead of hiding them.
--project-generate-pdf — auto-generate PDFs for every course card.
--project-generate-scorm12, --project-generate-scorm2004 — auto-generate SCORM packages.
--project-generate-ims — auto-generate IMS packages.
--project-generate-cache — skip regenerating files that already exist.
RDF & JSON-LD
Exports LiaScript course metadata as RDF (JSON-LD or n-quads) based on schema.org Course.
liaex --format rdf --rdf-preview -i https://raw.githubusercontent.com/liaScript/docs/master/README.md
--rdf-format — json-ld (default) or n-quads.
--rdf-preview — print result to console instead of writing a file.
--rdf-url — inject a remote URL when processing a local file.
--rdf-type — override the schema type (default: Course; e.g. EducationalResource).
--rdf-educationalLevel — e.g. beginner, intermediate, advanced.
--rdf-license — license URL (auto-detected from a LICENSE file if not set).
--rdf-template — URL or local JSON file to use as a base template.
The following LiaScript course header fields are used:
<!--
author: Your Name
email: author@email.com
comment: Course description
version: 1.0.0
logo: https://example.org/logo.jpg
tags: keyword 1, keyword 2
language: en
-->
# Course Title
GitHub Action
Export courses automatically in GitHub workflows on every push:
name: Export Course
on: [push]
jobs:
export:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Export to SCORM
uses: LiaScript/LiaScript-Exporter@master
with:
input-file: 'README.md'
format: 'scorm1.2'
output-name: 'my-course'
scorm-organization: 'My Organization'
- name: Upload SCORM package
uses: actions/upload-artifact@v4
with:
name: scorm-package
path: '*.zip'
Full documentation: action/README.md