Releases ship to users through the NetLogo Extension Manager, which reads
libraries.conf in NetLogo/NetLogo-Libraries.
A release is: a tagged commit here, a GitHub release with the zip, and a PR
to NetLogo-Libraries that adds the zip and bumps the version.
- JDK 21 or newer. NetLogo 7.0.4 is compiled for Java 21; JDK 17 fails with
UnsupportedClassVersionErroronorg.nlogo.api.APIVersion. - sbt 1.10.1 (pinned in
project/build.properties; NetLogo notes 1.10.2+ can hit a ZipException).
export JAVA_HOME=$(/usr/libexec/java_home -v 21+)In build.sbt:
version := "1.1.0"
isSnapshot := false // only for the release build; keep true while developingWith isSnapshot := false the plugin refuses to stage the extension from a
dirty working tree, so commit everything first.
Versioning is semantic: MAJOR for changes that break existing models, MINOR for new primitives or providers, PATCH for fixes.
sbt clean test packageZip
scripts/check-zip.sh # asserts the docs, config files and demos are insideOutput: llm-<version>.zip in the repo root (gitignored). It contains llm.jar,
its dependency jars, docs/README.md, demos/config-reference.txt, the curated
demos flattened into demos/, and demos/config.txt copied from the tracked
demos/config-placeholder.txt (never the developer's local config, which may
hold real keys). sbt packageZip also prints the libraries.conf entry to use.
Check the manifest says NetLogo-Extension-API-Version: 7.0:
unzip -p llm-<version>.zip llm.jar > /tmp/llm.jar && unzip -p /tmp/llm.jar META-INF/MANIFEST.MFsbt test(deterministic, no network) must be green; CI runs the same plus the zip check.- Live harness: open
demos/e2e-tests/e2e-tests.nlogoxwith a localconfig-<provider>.txt(see the.examplefiles) and run it against at least one cloud provider, Ollama, and TypeSafe (Jev). - Install the zip into a NetLogo 7.0.4 app
(
<NetLogo 7.0.4>/extensions/llm/), open a bundled demo, and run it.
git tag v<version>
git push upstream main v<version>
gh release create v<version> llm-<version>.zip -R NetLogo/Netlogo-LLM-Extension \
--title "LLM Extension v<version>" --notes-file <notes.md>- Fork https://github.com/NetLogo/NetLogo-Libraries and branch from
7.0(the branch NetLogo 7.0.x reads). Maintainers cherry-pick to7.1. - Add
extensions/llm-<version>.zip. - In
libraries.conf, update thellmentry'sversion(and descriptions if they changed) using the blocksbt packageZipprinted. - Open the PR against
7.0. For reference, v1.0.0 was NetLogo-Libraries PR #87.
-
versionset,isSnapshot := false, tree committed -
sbt clean test packageZipgreen,scripts/check-zip.shpasses - Manifest API version is 7.0
- Live e2e harness run (cloud provider, Ollama, Jev)
- Zip installed and a demo run in NetLogo 7.0.4
- Docs updated (
docs/API-REFERENCE.md,docs/CONFIGURATION.md,docs/PROVIDER-GUIDE.md) - Tag pushed, GitHub release published with the zip
- NetLogo-Libraries PR opened against
7.0 -
isSnapshot := truerestored for development
sbt clean assembly # fat jar at target/scala-3.7.0/llm.jar, for local installs
./build.sh # same, plus install when NETLOGO_DIR is set