Changelog Archive - April-May 2026
May 2026
v0.8.0
Changed
Go API — Private Value fields:
Integer.Value,Float.Value,Boolean.Value, andString.Valueare now private- Use
object.NewInteger(),object.NewFloat(),object.NewBoolean(),object.NewString()constructors instead of struct literals - Use
.IntValue(),.FloatValue(),.BoolValue(),.StringValue()getters instead of.Value - Small integer caching now prevents accidental mutation of shared singletons
v0.7.0
Changed
Improved Performance
v0.7.0
Added
AI Tool Registry - type aliases:
registry.add()now accepts Python-style type aliases:int→integer,float→number,str→string,bool→boolean,dict→object,list→array
MCP Go library:
- New
mcp.Integer()andmcp.IntegerArray()parameter constructors for tools that require whole numbers
Fixed
str.upper()andstr.lower()now correctly handle strings that mix ASCII letters with non-ASCII Unicode characters (e.g."naïve résumé".upper()now returns"NAÏVE RÉSUMÉ")- AI Tool Registry:
"number"is now emitted as JSON Schemanumber(was silently downgraded tointeger) - AI Tool Registry: unknown type strings now raise an error at
registry.add()time instead of producing invalid schemas silently - MCP tool metadata:
int/integernow emit JSON Schemainteger;float/numberemitnumber(previously both mapped tonumber) - MCP tool metadata:
array:int/array:integernow emit array items of typeinteger;array:float/array:numberemit items of typenumber - MCP tool metadata: unknown type strings in
.tomltool definitions now produce a registration error instead of silently defaulting tostring
v0.6.5
Changed
AI library:
scriptling.ai.Client(..., headers={...})— Add custom HTTP headers to every AI API request made by that clientclient.completion(..., extra_body={...})andclient.completion_stream(..., extra_body={...})— Merge provider-specific fields into chat completion request bodies, such as Z.ai thinking-mode optionsscriptling.ai.estimate_tokens(request, response=None)— Allow request-only and response-only token estimates by omittingresponseor passingNonefor either side
v0.6.4
Added
FloatArray enhancements:
.tolist()method - Convert FloatArray to a plain list (1D returns list of floats, 2D returns list of lists).shape()method - Return shape as a list of integers (method equivalent ofmath.shape())+operator - Concatenate FloatArrays (1D joins elements, 2D stacks rows with matching columns)- List comprehension support - Iterate FloatArray in comprehensions with optional filtering (
[v * 2 for v in a],[row[0] for row in m])
Go API:
GetFloatMatrix(obj)- Typed getter that extracts data, rows, and cols from a 2D FloatArray
v0.6.3
Changed
Performance improvements
Language:
rf"..."andfr"..."raw f-string prefixes now supported (previously onlyrandfseparately)- Triple-quoted f-strings:
f"""..."""andf'''...'''
Added
FloatArray type:
- New
FloatArraytype for efficient numerical operations, avoiding per-element boxing overhead - 1D and 2D arrays with row-major storage
- Supports indexing, slicing, assignment, iteration, equality,
inoperator,forloops,len(),list()conversion math.array(data)- Create a FloatArray from a list of numbers or list of listsmath.shape(a)- Return the shape of a FloatArray as a list of ints
Math library:
softmax,dot,matmul,transpose,mat_addnow acceptFloatArrayinputs- Functions return
FloatArraywhen givenFloatArrayinput, preserving type
Built-in functions:
sum(),min(),max()acceptFloatArrayenumerate(),zip(),reversed()acceptFloatArraylist()convertsFloatArrayto a list of floatsforloop iterates overFloatArrayelements (1D) or rows (2D)
April 2026
v0.6.2
Added
Math library:
tanh(x)- Hyperbolic tangenterf(x)/erfc(x)- Error function and complementary error functiongamma(x)/lgamma(x)- Gamma function and log-gammacbrt(x)- Cube rootnextafter(x, y)- Next floating-point valueremainder(x, y)- IEEE 754-style remainderlog1p(x)/expm1(x)- Accurate log(1+x) and exp(x)-1 for small xcomb(n, k)- Binomial coefficientperm(n[, k])- Permutationsprod(iterable, start=1)- Product of all elementsdist(p, q)- Euclidean distance between two pointssoftmax(x)- Numerically stable softmaxdot(a, b)- Dot product of two vectorsmatmul(a, b)- Matrix multiplicationtranspose(m)- Matrix transposemat_add(a, b)- Element-wise matrix additiontauconstant - 2π (6.283185…)
Random library:
choices(population, weights, k)- Weighted random sampling with replacementbetavariate(alpha, beta)- Beta distributiongammavariate(alpha, beta)- Gamma distributiontriangular(low, high[, mode])- Triangular distributionparetovariate(alpha)- Pareto distributionweibullvariate(alpha, beta)- Weibull distribution
fs extension library:
read_bytes(path, offset, length)- Read bytes from a filewrite_bytes(path, offset, data)- Write bytes to a fileunpack(format, data)/pack(format, values)- Binary struct packing/unpackingbyte_at(data, index)- Get unsigned byte valuelen(data)- Byte length (not Unicode code points)slice(data, start[, end])- Byte-safe slicing
v0.6.1
Added
Container library:
volume_create(name, size=...)- optionalsizekwarg (e.g."20G","512M") sets the volume size on Apple Containers; silently ignored for Docker and Podman
v0.6.0
Added
HTTP server:
runtime.http.not_found(handler)- Register a custom 404 handler, called when no route matches or a web root file is not found--web-root <dir|zip>CLI flag (SCRIPTLING_WEB_ROOT/server.web_root) - Serve static files from a directory or zip archive; requests fall through to thenot_foundhandler if no file is found
Template library:
scriptling.template.html-html/templaterendering with automatic HTML escapingscriptling.template.text-text/templaterendering with no escaping
v0.5.8
Changed
Gossip library updates:
scriptling.textrenamed toscriptling.sedto better reflect its in-place editing capabilities
v0.5.7
Added
Configuration file:
- Optional
scriptling.tomlconfiguration file with search paths (.,$HOME/,$HOME/.config/scriptling/) -C/--configflag to specify a custom config file path- All flags with a config path column can be set in the file
- Priority order: command-line flag > environment variable > config file > default
Container management:
scriptling.container- Container lifecycle management for Docker, Podman, and Apple Containers
Search:
scriptling.grep- Fast file content search with concurrent worker pool, glob filtering, binary file detection, and path restriction supportscriptling.text- In-place file content replacement with atomic temp-file rename, concurrent worker pool, and path restriction support
Changed
Gossip library updates:
- Request/reply messaging, node groups, and leader election
v0.5.6
Added
Networking libraries:
scriptling.net.gossip- Gossip protocol cluster membership and messaging with failure detection, metadata propagation, tag-based routing, encryption, and compressionscriptling.net.multicast- UDP multicast group messaging for one-to-many communicationscriptling.net.unicast- UDP and TCP point-to-point messaging with client and server support
Secrets:
scriptling.secret- Provider-agnostic secret access through host-configured aliases--secret-config- CLI support for loading Vault and 1Password provider aliases from TOML
Changed
Runtime and tooling:
scriptling.websocketmoved toscriptling.net.websocketto consolidate all networking libraries under thescriptling.netnamespace
v0.5.5
Added
Language:
delstatement for removing list indices, slices, dict keys, and object attributes (del items[0],del cache["key"],del obj.attr)
AI library:
ai.tool_calls(response)- Extract and normalize tool calls from a completion response, message dict, or raw listai.execute_tool_calls(registry, tool_calls)- Execute tool calls using aToolRegistryand return result messagesai.collect_stream(stream, **kwargs)- Collect a chat stream into a single aggregated result with optional per-chunk callbacksai.tool_round(client, model, messages, registry)- Perform a single tool-use round: complete, execute tool calls, return resultsai.estimate_tokens(messages, model)- Estimate token count for a message list
Agent framework:
- Agent constructor gains
max_tokensandcompaction_thresholdparameters - Automatic message compaction for long conversations, with configurable threshold
- Improved streaming support with reasoning and content chunk helpers
Console:
- Panel
add_message()now accepts aroleparameter (user,system,thinking,tool,assistant) for richer TUI output
Changed
Runtime and tooling:
isinstance()now accepts a tuple or list of types, matching Python semantics (isinstance(x, (int, float)))- Lexer keyword lookup refactored from map-based to switch-based dispatch for improved performance
- Better concurrency handling in
ChatStreamInstancewith caller cancellation support - Improved error handling in variadic function calls
- Parser refactored with cleaner initialization and improved regex handling