Repository navigation
Releases: Fallstop/sccharts-lab
Release list
v0.9.7
Stable release of 0.9.6, which shipped on the pre-release channel. No changes since 0.9.6; its
notes follow.
[0.9.6] - 2026-10-03
- Invalid source produces useful diagnostics before it reaches the compiler. Empty models,
syntax errors, unresolved names (including in imports) and invalid region structure are rejected with source locations.
An empty document and a transition to an unknown state previously caused null-pointer failures.
Unexpected compiler exceptions now identify the failed processor, preserve the stack trace and
finish the build so the next compilation can recover.
Unavailable compilation systems now offer an actionable error instead of a compiler exception.
Imported source locations retain Windows drive letters and network-share hosts. - Copy a diagnostic report from the preview or Command Palette. The report includes the
extension, Java and server versions, source version, compiler issues, technical details and
processor timings. Internal compiler errors also offer it from the editor's lightbulb. - Compile saves the selected model first. Auto-compile runs after a save and targets the saved
file even if another tab is active. Edited, cancelled and obsolete builds cannot open old generated
code or start a simulation; server restarts clear the old compiler and simulation state. - Diagnostics clear as soon as their source changes. Warning counts follow the current document
version, informational findings keep their severity, and an error cannot disappear behind a
duplicate warning. Models sharing a generated path keep their own findings when another closes
or recompiles. Live analysis also gives each open model its turn. - Simulation and generation recover from interrupted preparation. Cancellation during server
startup, edits during toolchain setup and a simulation stop that never answers release their
controls and report the next action. Background startup-cache failures no longer crash the host. - Smaller packages. Obsolete language-server jars, Jetty libraries and old webview builds are
excluded, removing about 97 MB from the unpacked extension on a checkout that still holds them.
Platform packages retain their bundled Java runtime. - Conflicting KIELER extensions can be uninstalled in one click, followed by a window reload.
Opening the conflict in Extensions now searches its exact identifier.
v0.9.6-pre
- Invalid source produces useful diagnostics before it reaches the compiler. Empty models,
syntax errors, unresolved names (including in imports) and invalid region structure are rejected with source locations.
An empty document and a transition to an unknown state previously caused null-pointer failures.
Unexpected compiler exceptions now identify the failed processor, preserve the stack trace and
finish the build so the next compilation can recover.
Unavailable compilation systems now offer an actionable error instead of a compiler exception.
Imported source locations retain Windows drive letters and network-share hosts. - Copy a diagnostic report from the preview or Command Palette. The report includes the
extension, Java and server versions, source version, compiler issues, technical details and
processor timings. Internal compiler errors also offer it from the editor's lightbulb. - Compile saves the selected model first. Auto-compile runs after a save and targets the saved
file even if another tab is active. Edited, cancelled and obsolete builds cannot open old generated
code or start a simulation; server restarts clear the old compiler and simulation state. - Diagnostics clear as soon as their source changes. Warning counts follow the current document
version, informational findings keep their severity, and an error cannot disappear behind a
duplicate warning. Models sharing a generated path keep their own findings when another closes
or recompiles. Live analysis also gives each open model its turn. - Simulation and generation recover from interrupted preparation. Cancellation during server
startup, edits during toolchain setup and a simulation stop that never answers release their
controls and report the next action. Background startup-cache failures no longer crash the host. - Smaller packages. Obsolete language-server jars, Jetty libraries and old webview builds are
excluded, removing about 97 MB from the unpacked extension on a checkout that still holds them.
Platform packages retain their bundled Java runtime. - Conflicting KIELER extensions can be uninstalled in one click, followed by a window reload.
Opening the conflict in Extensions now searches its exact identifier.
v0.9.5
- Compiling no longer reads the model while an edit is changing it. A compilation started from
the editor walked and copied the open document's model on its own thread with no lock, while
typing could reparse that same model underneath it. Copying also resolves references, which
writes to the model, so the two threads could corrupt its internal bookkeeping. That is one way
to end up with errors likeNullPointerException ... "adapter" is nulland an empty preview. The
compilation now takes its copy as a proper read of the document, waiting for any edit in
progress, and uses the model as it stands after that edit rather than the one it was asked
about.
v0.9.4-pre
- Newlines survive in string simulation inputs. A value like
line1\nline2appeared in the
input field with the newline missing, and because leaving the field committed whatever it held,
clicking into a string input and clicking away was enough to send the shortened value back to
the model -- with nothing typed and nothing to see.\r\nlost both characters. A single-line
field cannot hold a newline at all, so strings are now shown and typed escaped, using the same
escapes as thechrnumber format:\n,\r,\t,\0,\xNNand\\. Table cells show
them too, instead of collapsing a newline into a space, and a newline can now be entered in the
first place. An input nobody typed in is never written back.
v0.9.3-pre
- Simulating a model no longer fails on the diagram beside it. Starting a simulation also
refreshes the diagram, and when no open diagram matched the model the refresh threw
NullPointerException ... KGraphDiagramServer.getSourceUri(), which surfaced as "An error
occurred during simulation start" on a model that compiles and simulates perfectly well. The
diagram is now found under either spelling of its URI -- diagrams are keyed by the client's,
which percent-encodes a path with spaces, while the simulation carries the decoded one -- a model
with no diagram open simply skips the refresh, and a refresh that fails can no longer take down
the start, step or stop that triggered it. Closing a preview now also drops its view context
under either spelling instead of leaving a stale one behind. - The language server is ended when the window closes or the server is restarted. The client
only asked the server to exit, so one that was busy compiling or simulating outlived the window
and kept its whole JVM heap until the machine was rebooted, once more for every restart. The
server is now ended for good, together with the compilers and simulations it started, and a
restart whose shutdown timed out kills the old server and starts again instead of leaving a dead
client behind. - A hanging compiler probe no longer freezes the window. Looking for
gccruns before every
build;whichandxcode-selectnow give up after five seconds so a dead network mount cannot
block the extension host.
v0.9.2
- Shorter messages. Popups and diagnostic hints (instantaneous loops, scheduling cycles,
shared clocks, redeclared variables, missing Java or C compilers) are cut to one or two lines. - A quieter preview toolbar. Icon buttons for Restart, Back, Step, Run and Stop, the tick,
one speed slider (the value is its tooltip), a Breakpoints toggle with the count and a
Trace toggle. Continue is theCkey. Stages and Code stay in the editor title
only. Saving and loading a trace and the Generated toggle moved into the trace drawer, next
to what they act on. - Completion in the breakpoint and watch fields. The state field completes against the
model's states (type a few letters, Enter takes the first match); condition and watch
expressions complete the word at the caret with the simulation's variables andpre(. - Shorter hover cards for variables. The card shows the declaration as written, its comment,
and how it is used ("Written 8 times, never read."); the kind, type, initial value and root
scope are no longer repeated in prose. - Completion for SCTX. Keywords carry a one-line summary and a Markdown card
(go tois a weak abort,pre(x)reads the previous tick); triggers and effects propose
the variables, signals and clocks in scope with their declaration kind and comment, and
go to,abort toandjoin topropose the states of the enclosing region.scchart,
state,initial state,region,if ... go toandentry doalso come as snippets
with tab stops. A half-typed keyword inside a state body and a variable inside a trigger
used to return nothing at all; bare operators such as%,>>>andPr=are gone. - Input edits register while the simulation runs. The trace table was rebuilt from scratch
on every tick, so a click whose press and release straddled a tick landed on two different
buttons and did nothing, and the Generated, Save and Load buttons had the same problem. Rows,
their Next controls and the drawer tools are now created once and updated in place; a switch
shows the sent value at once so a second click toggles again before the server answers. The
breakpoint popover and the watch field are likewise left alone by ticks that change nothing
they show. - Picking a state from the breakpoint list no longer closes the popover. The chosen entry
removed itself from the list in its own mousedown handler, so the popover's outside-click check
saw a detached target and closed. The check now uses the event's path as it was when the mouse
went down. - Watch expressions moved to the top line of the trace drawer, next to the Generated, Save
and Load buttons; the tick summary (inputs, outputs, changed variables) sits directly above the
table it describes. - Warnings are optional. The preview's "Compiled with N warnings" panel has a Hide
warnings button and, once hidden, reads "Compiled, N warnings hidden" next to Show
warnings. The lightbulb on any KIELER warning offers Hide KIELER warnings;
Hide Compiler Warnings and Show Compiler Warnings are in the Command Palette and an
SCChart's editor title and context menus; while warnings are hidden a status bar item counts
them for the active model and shows them again on click. All of these set
keith-vscode.diagnostics.showWarnings, which keeps the compiler's warnings out of the editor
both from a compile and from the live analysis; errors always show. - Code is back on the preview toolbar. The editor-title entry only shows while the
.sctx
text editor is active, which left no way to generate code from the preview. - State breakpoints fire on entry only. A breakpoint on a state that merely stayed active
paused the simulation on every tick, because the server's state tracker compared the active
states against a set that never held them. - No popup at the start of a compilation. The "Compiling ... with ..." notification is gone;
the status bar shows the progress.
v0.9.1-pre
- A click in the editor no longer pulls the cursor onto the state's name. Sprotty fires its
diagram selection listener for selections the server sends as well as for clicks, so the cursor
sync's selection was answered withdiagram/openInTextEditorand moved the editor cursor onto the
selected element. Cursor-driven selections are now markedpreventOpenSelection; clicking in the
diagram still reveals the source whenkeith-vscode.diagram.selectTextis on. The server cursor
suite checks that no reveal follows a cursor request. - A running simulation keeps your zoom. Every tick relays the diagram out to move the
highlighting, and klighd-core refits the diagram after each model update because "Resize To Fit
on Refresh" defaults to on and has had no switch since the sidebar went. Model updates that arrive
while a simulation is running are now applied without the refit, so the viewport stays where you
put it; the first layout after start and everything outside a simulation fit as before.
v0.9.0-pre
-
Diagnostics while typing. Open SCCharts are analysed after every edit (debounced,
keith-vscode.liveDiagnostics.debounceMs, default 400 ms) through a new server-side
system,de.cau.cs.kieler.sccharts.live.analysis, that runs the netlist chain as far as the
scheduler and generates no code. Scheduling cycles, instantaneous loops and the other
located findings appear as KIELER · live squiggles without pressing Compile; a compile
report for the same document version takes precedence.keith-vscode.liveDiagnostics.enabled
turns it off. Protocol:keith/diagnostics/live(server → client),
keith/diagnostics/configureandkeith/diagnostics/analyze(client → server). -
Messages come from the analyzer that knows the cause. The loop analyzer and the guard
scheduler now emit structured issues themselves, naming the variables involved
(Circular dependency involving timeout_update prevents scheduling this tick.); the
extension no longer rewrites messages after the fact. The timed-automata expansion explains a
clock shared between concurrent regions, the inheritance processor explains redeclared
variables and regions, and the loop analyzer explains a sequential region re-entered in the
same tick, each at its source range with a hint. Every other compiler message that names a
model element now keeps its source location through the copies the compiler makes. -
Simulation breakpoints, watch expressions and stepping back. A breakpoint pauses the
simulation when a state is entered (Full, orCounter.Counting.Fullwhen names repeat) or
when a condition over the variables holds after a tick (count >= 3 && !done,pre(x) != x
reads the previous tick). Continue runs to the next breakpoint on the server; Run
stops on one too. Watches show an expression's value after every tick, with the reason when
it cannot be evaluated. Back,Backspace, or a click on an earlier tick rewinds the
simulation for real: the program is restarted and the recorded inputs are replayed up to
that tick (a few milliseconds for hundreds of ticks), so trace, diagram and watches match and
stepping forward with a changed input takes a different path. Breakpoints and watches are
remembered per model. New commands Add simulation breakpoint... (pick a state or type a
condition), Add simulation watch expression..., Step back one tick and Run to
breakpoint. Server methodskeith/simulation/setBreakpoints,setWatches,
runToBreakpoint,pause,history,stepBackandstates; step messages carrystep,
watchesandbreakpoint;keith/simulation/pausedannounces a hit. -
The diagram follows the editor cursor. Moving the cursor in an SCChart expands the
regions around it in the open diagram and selects the state, region or transition under it,
as the Eclipse editor's smart collapse did.keith-vscode.diagram.followCursorchooses
focus(default),expand(also collapse the regions the cursor is not in, unless you
expanded them yourself) oroff; Reveal Cursor in Diagram does it once from the palette
or the editor context menu. Selecting an element in the diagram selects its text in the editor
(keith-vscode.diagram.selectText). The server answerskeith/diagram/cursorby mapping the
offset to the model element and relaying out; it leaves compiler snapshots alone.
The reverse direction (a click in the diagram selecting the source text) is upstream sprotty
behaviour that is now switched on; on the Windows CI runners it is intermittently silent, so the
server suite only warns about it there. -
Hover cards, outline and timings from the language server. Hovering a variable, signal,
state, region, transition or action in an SCChart shows a Markdown card built from the model:
declaration, type, initial value, scope, write/read counts, the comment above it, a state's
regions and transitions, a transition's priority and preemption. Go to Definition, Find All
References and Rename already worked and stay; the Outline now shows simple names with element
kinds and details (input bool,initial state,controlflow region, 2 states) instead of a
flat list of dotted paths. The compiler reports each processor as it starts
(keith/kicool/progress) and, indidCompile, every processor's duration, start time and
status, the total wall time and the stages that never ran; the status bar names the running
processor and the compile time, and Stages shows each stage's duration and flags the
slowest. -
Compilation systems from the workspace. Every
.kicofile in the workspace (outside
build and dependency folders) is loaded by the language server and listed under a
Workspace heading in Compile current model with..., with the file it comes from; saving
the file, or editing it in the editor, replaces the system at once and deleting it removes the
entry. Errors show as squiggles in the.kicoeditor and as a warning: syntax errors, unknown
processor or system ids, and ids that shadow a built-in system. New command New compilation
system (.kico) in workspace writes a commented template; new setting
keith-vscode.compilationSystems.foldersadds directories outside the workspace..kicois
now a language of the extension, served by the language server. This replaces the
Eclipse-only system registration that the sccharts-lite server dropped. -
The language server starts a third faster after the first two starts. It now runs from
an AppCDS archive built on your machine: start 1 records the loaded classes
(-XX:DumpLoadedClassList), a detached low-priorityjava -Xshare:dumpbuilds the archive
(about 3 s, 65 MB under the extension's global storage, keyed to the exact jar and Java
binary) when that server exits, and later starts map it with-XX:SharedArchiveFile,
-Xshare:autoand-XX:+VerifySharedSpaces. The archive has to be built there because five
of the six bundled runtimes are cross-linked andjlink --generate-cds-archiveand
-XX:+AutoCreateSharedArchiveboth need the target JVM to run. JVM logging now goes to
stderr (-Xlog:disable -Xlog:all=warning:stderr): HotSpot prints its warnings to stdout,
the LSP channel, and one[warning][cds]line was enough to stall the protocol. Without
VerifySharedSpacesa damaged archive crashes the JVM (SIGSEGV) instead of being skipped. A
crash within 20 s of a start with the archive discards it. New command Clear language
server startup cache, new settingkeith-vscode.startupCache.enabled, cache state in
Show Java runtime and C compiler in use. Measured withscripts/measure-startup.cjs
(medians of five starts,test/fixtures/audit.sctx, bundled Temurin 21.0.12.1 image):configuration initialize compile menu ready compile RSS as before 1533 ms 2578 ms 498 ms 699 MB -XX:+AutoCreateSharedArchive(dynamic)1525 ms 2583 ms 490 ms 704 MB static archive (shipped) 993 ms 1815 ms 486 ms 564 MB static + -XX:TieredStopAtLevel=1853 ms 2032 ms 436 ms 250 MB static + -Xss512k1104 ms 2106 ms 540 ms 561 MB The dynamic archive does nothing on the jlink image (no base archive). C1-only starts
150 ms sooner and halves memory but warm compiles settle at 240 ms instead of 142 ms
(six compiles ofbroken-demo.sctxin one session), so it stays off;-Xss, Serial and
Parallel GC,-XX:CICompilerCount=2and-Xmx2gwere within noise.jlink --generate-cds-archivewould add 27 MB to the linux-x64 image only and is not used.
plan/native-launcher.mdmeasures jpackage (+0.6 MB for a nativesccharts-server
launcher, six OS-specific build jobs and signing) and lists the native-image blockers. -
Three platform packages instead of six. Marketplace builds with the bundled runtime now
cover linux-x64, darwin-arm64 and win32-x64; Intel Macs and ARM Linux or Windows get the
universal package and need a Java 21. The publish script uploads the universal package first,
retries a package the Marketplace gateway drops (with the four-minute "Services Unavailable"
page seen on 2026-09-11) instead of failing the whole release, and reports each call's duration. -
Removed the languages the server no longer serves. KGraph (
.kgt,.kgx), ELK Graph
(.elkt,.elkj), Esterel (.strl), KiVis (.kviz) and Lustre (.lus) were still registered
as languages with grammars and activation events, although the sccharts-lite server dropped them
in 0.8.0; opening such a file started the server for nothing. The extension now activates for
.sctx,.scland.kicoonly. The Open KIELER visualization in browser command and its
toolbar button are gone with the KiVis visualization server they depended on.
v0.8.3
- Uninstalling the extension deletes the downloaded w64devkit toolchain. VS Code keeps an
extension's global storage across an uninstall and reinstall in the same session, so a
vscode:uninstallhook now removes it; the extension records its storage path for the hook on
every activation.
v0.8.2
The release of the 0.8.0 and 0.8.1 pre-releases below, unchanged: a bundled Java runtime in every
platform package, a downloadable C toolchain on Windows, diagrams pinned to the light palette,
and the document-highlight fix. The Marketplace requires a version number of its own for the
release channel.