Branch: stable (switch to
development),
SWI-Prolog Changelog from version 10.0.0 to 10.0.1
[Feb 17 2026]
[Feb 18 2026]
[Feb 17 2026]
- TEST: Fixed Debug build test on Windows to avoid C stack overflow.
Based on PR by Eric Tauber. This replacement builds on the new Prolog
flag
build_type and rewrites the test suite to use PlUnit.
- ADDED: Prolog flag
build_type, representing the CMake build type
used.
- FIXED: library(main): make spy options default to the user module.
[Feb 15 2026]
- BUILD: added comments to scripts/configure
- BUILD: added comments to CMakeLists.txt for protobufs test
[Jan 23 2026]
- DOC: clarified details of heap allocation
[Feb 16 2026]
- PORT: Minimize C stack on MSVC debug builds.
[Feb 15 2026]
- TEST: Skip test_thread_exit if alert signal == 0
- PORT: Include platform pthread headers and includes for pthread config.
- FIXED: #1465 Overflow issue in trie handling. This is the result of
replacing an
int incorrectly with bool.
[Feb 14 2026]
- FIXED: PThreads4W exit crash in MSVC Debug builds Without this,
the system crashes during process exit.
- ENHANCED: listing/1,2: show number of clauses in other threads.
[Feb 13 2026]
- ADDED: listing/2: option
thread(+ThreadId) This lists the clauses
for a thread-local predicate as they can be seen for the given thread
(rather than the calling thread).
- MODIFIED: Modified PL_put_dict() to be a
bool function. All usage
in packages assumed bool and this is a more consistent interface.
Invalid keys now generate a fatal ABI error and dupiicate keys a normal
Prolog exception. As this function is not used much and there is no
clean way to fix the current bugs without changing the API we will
backport this to the stable series as is.
- FIXED: dict_pairs/3 could create dicts with duplicate keys.
Mistake changing types to
bool. This changes the dict ordering
functions to return _PL_dict_status_t, which is now also returned
by PL_put_dict().
- CLEANUP: Avoid unreferenced variable warning for MSVC
[Feb 12 2026]
- BUILD: MSVC Sanitize build
- TEST: Windows pipe test by using absolute batch file path The pipe:cat1
test was failing because the batch file path was relative. cmd /c
couldn't find pltest-XXXX.bat. Fixed using absolute_file_name/2.
- BUILD: Use proper CMake dependencies for building the
INDEX.pl
files Since we no longer merge the package library files with the
main library and since CMake has evolved, we can get rid of the ugly
"run always" approach to building the INDEX.pl files and create
a proper custom rule with the proper dependencies.
[Feb 11 2026]
- FIXED: Hashing over uninitialized memory on 32-bit systems. On 32-bit
systems, clause references are created in part from unitialized memory.
This leads to crashes in atom-gc for clause references.
- TEST: Add alternative bitint term hash for 32 bit engines.
- PORT: Remove /D_DEBUG and /DO_DEBUG from MSVC Sanitize build flags
MSVC AddressSanitizer requires the release CRT (/MD), but /D_DEBUG
causes the STL to reference debug-CRT symbols (_CrtDbgReport) and
makes Python headers demand python3XX_d.lib.
[Feb 10 2026]
- PORT: MSVC debug build CRT mismatch for plugins
- PORT: MSVC debug build: variadic macros and PRETTY_FUNCTION
- PORT: Set CMAKE_MSVC_RUNTIME_LIBRARY globally for MSVC builds
- PORT: Fix MSVC C4334 warning in pl-buffer.c
- PORT: Drop xpce on < 64 bit platforms.
- BUILD: Extend build_home.pl to support multi-config generators There
was specific code to support Microsoft Visual Studio. This patch
supports multi-config generators on platforms that leave the modules
in the package directories such as
ninja -G "Ninja Multi-Config"
[Feb 9 2026]
- PORT: Avoid undefined
ms_snprintf() and renamed to c99_snprintf().
[Feb 8 2026]
- PORT: Add /EHsc to MAKE_CXX_FLAGS for MSVC. Thanks to Eric Tauber.
- CLEANUP: Avoid implict enum conversion warnings. Based on #1445 by
Eric Tauber.
[Feb 6 2026]
- FIXED: Make
PL_query(PL_QUERY_HALTING) return true inside atexit()
handlers. This addresses the cleanup in package nlp cleanup issues.
[Feb 5 2026]
- PORT: Make
exit() work properly in Windows with Asan and Debug enabled.
Thanks to Eric Tauber.
[Feb 4 2026]
- PORT: Avoid calling
sleep() after Lsan detects a leak.
- PORT: Updated scripts/macos-deps.h for SDL3 Updated version and build
instructions for building a universal binary.
- ADDED: check_installation/0: report OpenSSL version
[Feb 2 2026]
- PORT: Exclude LeakSanitizer code on Windows (MSVC ASan lacks LSan
support)
[Feb 3 2026]
- FIXED: Bignum allocation issues. This may lead to memory corruption
on LibBF as well as using GMP on arithmetic errors. Found by Eric
Taucher while debugging the MSVC compiled version.
[Feb 1 2026]
- FIXED: Tabling with attributed variables: memory management. Make sure
avm in trie_lookup_abstract() never points below the allocated
buffer. It is not clear to me whether that is strictly necessary,
but MSYS-2 using clang and Asan suggests it is. I do not understand
why this is not reported using Asan under Linux. Surely this prevents
reading below the buffer, causing a SEGV if it is tried anyway.
[Jan 31 2026]
- TEST: term_hash/2 for indirect data types (bigints, floats) term_hash/2
is platform dependent as it hashes the binary representations of
indirect types (big int, rational, float). The test succeeds if
the produced hash is one of a set. When using LibBF, the hash also
depends on whether the limb size is 32 bits or 64 bits. The C
compiler must support a twice as wide integer type, i.e., the choice
depends on
HAVE_INT128.
- FIXED: term_hash/2: exception when exhausting memory. Also cleanup
types.
- CLEANUP: Avoid reading uninitialized local variable. Not entirely sure
why the
popSegStack() can fail. Surely it does on the XSB tests from
tests/xsb/sub_tests/xsb_test_sub.pl. In debug mode we set dstate
such that accessing it crashes. This seems not to be the case.
- FIXED: Windows: ms_snprintf null-termination bug for edge case
[Jan 30 2026]
- PORT: Ensure default 4Mb C-stack on Windows Otherwise the default is
2Mb for MinGW and 1Mb for MSVC
- FIXED: When specified, also set the C-stack limit for
swipl-win
[Jan 29 2026]
- PORT: Compile MacOSX bundle using gcc. This provides about 40%
performance improvement.
[Jan 27 2026]
- PORT: Support CMake < 3.24 Using CMake < 3.24 the build was broken due
to the usage of
cmake -E env ... -- ... We now omit that for older
cmake version. This implies that building in e.g build.gcc=14
does not work for these versions.
[Jan 24 2026]
- FIXED: write_term/2: handle
partial(true) for backquoted text.
- FIXED: write_term/2 using option
partial(true) to separate quoted
objects. Found by Joachim Schimpf
- DOC: write_term/2: handling of
back_quotes and module options
[Jan 23 2026]
- FIXED: write_term/3 and friends to get default back_quotes from flags.
[Jan 22 2026]
- PORT: Better support for Homebrew dependencies (MacOS) This ensures
SDL3 comes from Homebrew if both provided by Macports and Homebrew and
configure maps gcc=14 to Homebrew gcc.
- PORT: Make configure work for
build.gcc=15 on MacOS. Compiler is
called gcc-mp-15 and it does not support -g3.
[Jan 21 2026]
- ENHANCED: edit/1: merging module and file. If a spec resolves to a
file and module with the same name, edit the module.
[Jan 19 2026]
- FIXED: Allow building only the core system (no packages at all).
Stop installing libraries that depend on packages and do not warn if
library(editline) is not present.
- FIXED: #1436 check_installation/0: check editline, also on Windows.
- FIXED: CpuCount() typing
[Jan 18 2026]
- FIXED: Type issues on 32 bit platforms
[Jan 15 2026]
- CLEANUP: Types Restore API affecting type changes of
-Wconversion
cleanup, introduce new integer aliases and enums to replace int
with more appropriate types. Propagate these through the system
(incomplete).
[Jan 10 2026]
- CLEANUP: Make likely/unlikely silent.
[Jan 5 2026]
- FIXED: #1431 format/2: handling
~d on gmp evaluation returning
a small int.
[Dec 31 2025]
- ENHANCED: edit/1: if multiple hits are in the same file, take most
specific. Thus, if both the file and some object inside the file
match, use the object. Also xpce classes are more specific that the
module they are contained in.
[Dec 25 2025]
- FIXED: edit/1 for normal predicates. Broken after integrating
foreign predicates.
[Dec 23 2025]
- FIXED: UBSAN: Calling event handler with too many arguments.
[Dec 22 2025]
- UBSAN: Avoid offset to NULL pointer
- UBSAN: Possible increment of NULL pointer This is benign, but
officially undefined.
- FIXED: Type handling for PL_thread_at_exit(). Resulted in reported
undefined behaviour due to non-matching function prototype.
[Dec 18 2025]
- CLEANUP: Unconditionally use
fpclassify() This is available on any
system providing C99 and we already demand C11.
[Dec 17 2025]
- PORT: Make compile using Emscripten
- ADDED: Extract the source location of foreign predicates. Added
'$foreign_predicate_source'/2. Requires debug symbols and
addr2line or similar.
[Dec 16 2025]
- THEME: Support PceEmacs bookmark view in the dark theme,
[Dec 15 2025]
[Dec 14 2025]
- UBSAN: Avoid bit shift ==
sizeof(x) The proposed change is not pretty,
but it avoids another UBSAN error if low (64 bit) is << by 64 bits.
[Dec 12 2025]
- UBSAN: Avoid bit shifts in MT RNG
[Dec 10 2025]
- FIX: UBSAN check Avoid
memcpy(NULL, _, 0)
[Dec 9 2025]
- FIXED: bigint cache allocation error Can lead to buffer overflow.
[Dec 7 2025]
- CLEANUP: use snprintf to avoid deprecation warnings
- PORT: replace sprintf by snprintf to avoid deprecation warnings
[Dec 4 2025]
- BUILD: Updated
scripts/configure Simplified, added --help
option and allow for both extracting features from the name and using
commandline arguments.
- FIXED: Undefined ep_has_console/1 message when enabling the debugger.
Package archive
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warnings
Package bdb
[Jan 22 2026]
- CLEANUP: Avoid -Wconversion warnings You might wish to check if the
assertions are needed/solve a problem.
Package clib
[Feb 8 2026]
- CLEANUP: Bool types and avoid conversion warnings for Windows
[Jan 31 2026]
- PORT: Ensure
ssize_t is defined when using MSVC
[Jan 18 2026]
- ENHANCE: use size_t to avoid -Wconversion errors I also added a few
casts I considered safe. Dubious casts are highlighted.
[Nov 20 2025]
- DOC: minor fix in comment
[Dec 7 2025]
- PORT: replace sprintf by snprintf to avoid deprecation warnings
Package cpp
[Jan 23 2026]
- ENHANCED: make it easier to generate the standard form of exceptions
[Jan 22 2026]
- CLEANUP: add more default qid=0
[Jan 21 2026]
- CLEANUP: Plx_exception() has default qid=0
[Jan 20 2026]
- CLEANUP: change PL_exception() to Plx_exception()
[Jan 12 2026]
[Jan 9 2026]
to write into "reserved" but not initialized memory areas.
- Alternatively, and that may be the reason for the ASAN complaint:
buf in the outer std::string(buf, size) function is not "officially"
initialized. [Dec 4 2025]
- DOC: fix description of PlQuery::
next_solution()
Package http
[Feb 10 2026]
- BUILD: Add zlib to doc generation dependencies
[Jan 25 2026]
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warnings
[Dec 16 2025]
Package jpl
[Jan 24 2026]
- CLEANUP: avoid -Wconversion, improve UTF16 support On systems with
wchar_t is 4 bytes (pretty much anything but Windows), convert
Prolog Unicode code points > 0xffff to/from UTF-16.
Package json
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warning
[Jan 2 2026]
- FIXED: Server side handling for methods without parameters.
Now accepts omitted
params field as well as ""params: {} as
valid input for such a method.
- FIXED: Correctly call methods that take no parameters
[Dec 29 2025]
- ADDED: json_call/4: option async(:Goal) Extends
async(true) to get
an asynchronous reply.
- FIXED: json_method/1: Avoid discontiguous messages
- ADDED: Print a warning if the server receives a non-implemented
notification.
[Dec 25 2025]
[Dec 24 2025]
- ADDED: JSON RPC server: set
json_rpc_stream global variable while
dispatching. This variable provides access to the underlying stream.
This may be used to identify the connection.
[Dec 9 2025]
- FIXED: Apply header to server van using client in full duplex mode.
Also code cleanup, avoiding code duplication between client and server
by adding json_rpc_common.pl
- ADDED: json_call/3 option
async(true) JSON RPC allows calls with a
request id not to send a reply. This option adds an id, but does
not wait for a reply.
Package libedit
[Jan 5 2026]
- FIXED: Build on Windows for enhanced background write handling.
[Jan 3 2026]
- ENHANCED: Refreshing the terminal on background writes.
Package nlp
[Feb 6 2026]
Package plunit
[Dec 10 2025]
- FIXED: Allow for concurrent loading of unit test files.
Package sgml
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warnings
[Dec 7 2025]
- CLEANUP: Use snprintf to avoid deprecation warnings
Package ssl
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warnings
Package table
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warnings
[Dec 7 2025]
- FIXED: Windows: close memory leak after error.
- CLEANUP: use snprintf to avoid deprecation warnings
Package tipc
[Jan 23 2026]
- CLEANUP: Modernise exception handling, use
bool and update PlDoc
- CLEANUP: avoid -Wconversion warnings
Package utf8proc
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warnings
[Dec 23 2025]
- FIXED: #1 UBSAN: adding to NULL pointer.
Package xpce
[Feb 13 2026]
- ENHANCED: PceEmacs to list thread-local clauses. If a PceEmacs window
is embedded in the debugger, fetch the target debug thread and list
the clauses as the debuggee sees them.
[Feb 10 2026]
- FIXED: undefined Dprintf and _T symbols in terminal.c debug code
- FIXED: MSVC C4319 warning and potential bug in
clearDFlagProgramObject() Cast mask to uintptr_t before applying
bitwise NOT. Without this, ~mask produces a 32-bit result on Win64
(unsigned long is 32 bits) that gets zero-extended to 64-bit uintptr_t,
incorrectly clearing the upper 32 bits of dflags.
[Feb 5 2026]
- CLEANUP: Remove old deprecated usage of SunOS
on_exit()
[Feb 2 2026]
- ADDED: implementation for 3d rounded corners box
r_3d_box()
- ENHANCED: 3d effect rendering. Notably makes scrollbars look better.
- PORT: Support MSVC
- FIXED: GUI Tracer: remove non-functioning Help menu entries. Links to
the manual and notably xpce manual seem unnecessary. Also removed
the About as it is all part of the integrated Prolog IDE tools.
[Jan 28 2026]
- ADDED: PceEmacs: associate
emacs_<mode>_mode module with mode.
And define style/2 and def_style/2 for style mapping. This is used
by the experimental LSP client and should be used by the other modes,
notably the Prolog mode.
[Jan 26 2026]
- CLEANUP: Avoid suspicious
sizeof() handling warning by clangd
[Jan 22 2026]
- FIXED: Use `font<-average_char_width` for width computations This
used to be `font<-ex`, but this is the height of the
x character.
This notably fixes the default width of PceEmacs windows to hold 80
characters rather than a few less (depending on the font).
- FIXED: PceEmacs Prolog mode: find-references to avoid duplicates.
[Jan 21 2026]
- FIXED: class
text_buffer: LSP position reporting for wide-character
buffers.
- FIXED: Epilog: underline could continue in scrollbar.
[Jan 19 2026]
- FIXED:
text->underline. Underline was relative to top instead
of base.
[Jan 13 2026]
- ENHANCED: When opening one of xpce's manual tools, do not show @manual.
This additional window is often needed and especially on systems that
do not allow for window placement, this is annoying.
[Jan 7 2026]
- ENHANCED: Make most errors that result from buggy program print
a backtrace
[Jan 5 2026]
- ADDED: PceEmacs: (empty) markdown mode. Allows for user extension,
so we can play with markdown LSP servers.
[Dec 31 2025]
- ENHANCED:
editor->align: minimize the change This reduces
change/undo info and keeps the buffer marked clean if no change
happens.
- FIXED: Collecting LSP change message could corrupt edit modifications.
- ADDED: Broadcast
pce_emacs(saved(Buffer)) when a buffer was saved.
Can be used to trigger an LSP didSave() event, automatically recompile,
etc.
[Dec 29 2025]
- FIXED: Avoid undefined
@nil->update in bookmark handling.
[Dec 25 2025]
- ENHANCED: Only display output from help/1 in GUI when invoked from
the gui.
[Dec 24 2025]
- ADDED:
error->feedback type backtrace to force errors to dump
a backtrace.
[Dec 23 2025]
- FIXED: Avoid memory corruption when ->initialise fails. The partial
object may have references. If so, leave its final destruction to
the reference count dropping to zero.
[Dec 18 2025]
- CLEANUP: Replace all calls to
sprintf() with snprintf()
- FIXED: Thread monitor. Broken due to changes to class image.
New code is simplified by using
image->fill and num rather than
int|real type.
- FIXED:
image->fill to accept a colour. Filling with images is
currently not supported.
[Dec 17 2025]
- ADDED: Exploit features to edit foreign predicates directly.
- FIXED:
swipl-win: deadlock when trying to attach a console to
the xpce (main) thread.
- FIXED: Underline colour when using default underline. If a line
contains two fragments with different colour and underline, the first
used the colour of the second.
[Dec 16 2025]
- ADDED: Update bookmarks both when saving and colouring.
- FIXED: PceEmacs bookmarks: update when saving the buffer.
- ADDED: PceEmacs Prolog mode:
find_references (Alt-?)
- FIXED: PceEmacs bookmarks displaying the full path.
[Dec 14 2025]
- ENHANCED: PceEmacs bookmark list Create nodes per file and provide
proper highlighting
- ADDED: Class
grbox: allow for baseline vertical aligment.
- FIXED: Class
grbox was not displaying
- ADDED:
parbox->initialise: allow adding content
- FIXED: Class
parbox redraw handling for opacity.
[Dec 13 2025]
- ENHANCED: Style PceEmacs bookmarks
- ADDED: Support background of style in class
tbox.
[Dec 12 2025]
- ENHANCED: PceEmacs bookmark handling. Allow bookmarks on a selection
inside a line. Working on a non-persistent bookmark instance that we
can use for dynamic sets such as search hits, references, errors, etc.
- ENHANCED:
@emacs->goto_source_location: use new line_pos and
length
- ADDED: Class
source_location: line_pos and length fields.
[Dec 11 2025]
- ADDED: PceEmacs: allow adding new type-based prompting.
[Dec 10 2025]
[Dec 9 2025]
- FIXED:
r_3d_box(): device offset for filling the box was applied twice.
[Dec 8 2025]
- ADDED: PceEmacs: support hovering fragment icons.
- ADDED: PceEmacs: quick action for commenting xpce get methods.
- FIXED: Class editor: align line spacing between normal and bold fonts.
- ENHANCED: Moved font ascent and descent to main object. This allows
for adjusting the line spacing of a font, such that we can ensure
consistent line spacing for normal and bold font in editors.
- ENHANCED: Class
font: properly compute ex Instead of using
simulation, being 1/2*h.
- ADDED: ``editor->hover_fragment_icon: fragment*, [area]'' Called from
the margin to act on hovering the margin icons.
[Dec 7 2025]
- FIXED: Underline in class
tbox
[Dec 6 2025]
- FIXED: PceEmacs: keep LSP servers in sync on M-x revert
- ENHANCED:
text_margin: indicate that a fragment icon can be clicked.
- FIXED:
text_margin: display fragment that appears on first line
- ADDED:
text_margin->icon_size to scale icons.
- ADDED: Margin icons for LSP diagnostic types
[Dec 5 2025]
- FIXED: Broadcast changes due to white space normalisation while saving
- ENHANCED: Class
editor: use real bold font instead of simulated.
This results in cleaner and more efficient rendering.
[Dec 4 2025]
Package yaml
[Jan 22 2026]
- CLEANUP: avoid -Wconversion warnings