This document describes how to produce a .kpz archive from a fresh clone of the repository.
| Tool | Purpose | Install |
|---|---|---|
| Node.js >= 20 | JS toolchain | brew install node or nvm |
| npm | Package manager (ships with Node) | — |
| just | Command runner | brew install just |
| rolldown | JS bundler | installed via npm install (local) |
just package calls scripts/package.sh which only needs zip (available by default on macOS and most Linux distros).
git clone --recurse-submodules https://github.com/LMSCloud/LMSEventManagement.git
cd LMSEventManagementIf you already cloned without --recurse-submodules:
git submodule update --init --recursivenpm installThe full build (sync Util modules, generate CSS, format code, bundle JS, package .kpz):
npm run buildOr without formatting:
npm run build:no-fmtThis runs:
tools/sync_util.sh— copies vendor Util modules into the plugin namespacetools/generate_tw_css_result.mjs— generates Tailwind CSSrolldown -c— bundles the TypeScript/JS sourcesjust package— zips theKoha/tree into a.kpz
The output is a file named lms-event-management-<version>.kpz in the project root.
Upload the .kpz file via the Koha staff interface at Home > Tools > Plugins > Upload plugin.
You can run each step independently:
# Sync Util modules from vendor submodule
npm run util:sync
# Generate Tailwind CSS
npm run css:build
# Bundle JS/TS
npx rolldown -c
# Package .kpz only (assumes everything else is already built)
just package
# Format TypeScript
npm run format:ts
# Format Perl
npm run format:pl# Extract translatable strings into a .pot file
npm run translate:extract
# Create a new .po file for a locale
npm run translate:instantiate
# Compile .po files to JSON and register static routes
npm run translate:package