AtlatestRenderedmarkdown
Readme

Changelog

Versions are synced with Sigil releases. A missing entry indicates no changes for that version.

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.10.1] - 2026-04-29

Fixed

  • irc-privmsg and irc-notice now always emit the body as a :trailing parameter, even for short spaceless single-token bodies (e.g. connected.). The earlier behavior — make-irc-command's "needs-colon" heuristic dropped the : for any body without an internal space or leading colon — produced wire that strict receivers parsed as a middle parameter, leaving irc-message-trailing empty and the message body lost. Surfaced in apiary's reconnect-presence broadcast (PRIVMSG #hive connected.) round-tripping through enclave-server and arriving at peers with empty text.

Added

  • make-trailing-command — public sibling of make-irc-command that unconditionally emits a : on the last argument. Use it for any command whose final parameter is human/agent text (PRIVMSG, NOTICE, TOPIC, QUIT, PART message, KICK reason). make-irc-command retains its existing per-token heuristic for commands like MODE/NICK/PING where the last argument is structurally an identifier.

[0.8.0] - 2026-04-27

Added

  • Reshaped from a client-only library into the canonical IRC protocol library for the Sigil ecosystem. Adds parser, types, capability descriptors, numeric constants, and state-machine helpers covering both client AND server flows.
  • Added IRCv3 message tags: full @key=value;… parsing/serialization with escape handling (\: \s \\ \r \n), typed accessors for time, msgid, account, batch, label, +draft/reply, +typing, plus a tagged-line builder make-irc-command/tags.
  • Added (sigil irc identity): qualified <nick>@<server-domain> identity with display + canonical accessors. Federation-readiness constraint — future CrafterNet sovereign-per-server federation requires identities to be qualified from day one.
  • Added (sigil irc numerics): named bindings for 50+ numeric reply codes (welcome, MOTD, errors, SASL, MONITOR, standard replies).
  • Added (sigil irc capability): capability descriptor record + parser for LS/REQ argument bodies. Tier 1 caps (sasl, message-tags, server-time, account-tag, account-notify, extended-join, userhost-in-names, multi-prefix, away-notify, chghost, invite-notify, setname, batch, labeled-response, echo-message, cap-notify) + Tier 2 caps (draft/chathistory, draft/read-marker, MONITOR).
  • Added (sigil irc cap-negotiation): client and server CAP state machines as composable values. Multi-line LS continuation, atomic REQ enable/disable, NAK rejection, LIST, END, NEW/DEL runtime announcements.
  • Added (sigil irc sasl): SASL state machines for client and server. PLAIN + EXTERNAL mechanisms ship working; chunked AUTHENTICATE base64 encoding/decoding handles the 400-char chunking spec including the empty-+ terminator. Pluggable verify callback for server-side credential check; pluggable scram-driver slot for SCRAM mechanisms.
  • Added (sigil irc sasl-scram): SCRAM-SHA-256 driver per RFC 5802 / RFC 7677. Both client and server flows. Server uses a fetch callback to retrieve persistently stored scram-credentials (salt + iterations + stored-key + server-key); never stores plaintext passwords. derive-scram-credentials helper for use at user registration. Requires sigil-crypto v0.15.0+ (pbkdf2-sha256, hmac-sha256-bytes).
  • Added (sigil irc batch): BATCH +reftag / BATCH -reftag line builders, reftag generator, and a batch-context tracker for receiving sides.
  • Added (sigil irc chathistory): CHATHISTORY query parser/serializer for BEFORE / AFTER / LATEST / AROUND / BETWEEN / TARGETS subcommands; selector parser for * / timestamp= / msgid=; FAIL standard-reply error codes.
  • Added (sigil irc read-marker): MARKREAD parser + builders for the draft/read-marker capability (cross-device last-read sync).
  • Added (sigil irc monitor): MONITOR client-side line builder, server-side numeric reply builders for RPL_MONONLINE (730), RPL_MONOFFLINE (731), RPL_MONLIST (732), RPL_ENDOFMONLIST (733), ERR_MONLISTFULL (734).
  • Added comprehensive test suite covering each new module with IRCv3 spec-derived test vectors. SCRAM-SHA-256 end-to-end tests guard on crypto-primitive availability and skip gracefully on older sigil binaries.

Changed

  • Bumped sigil version requirement to ^0.14.
  • Reorganized dependencies to point at extracted standalone repos (codeberg:sigil/sigil-socket, codeberg:sigil/sigil-tls, codeberg:sigil/sigil-crypto) instead of the old monorepo path. Bumped sigil-crypto to ^0.15 for SCRAM-SHA-256 primitives.
  • Existing client API in (sigil irc connection) retained unchanged for backwards compatibility.

[0.7.0] - 2026-03-01

Added

  • Added procedure specifications with inline (: ...) syntax, optional runtime checking via sigil-checks feature, and predicate combinators (any-of, maybe, list-of, none-of).
  • Added procedure specs and docstrings to all exported procedures.
  • Added procedure specs and docstrings to all exported procedures.
  • Added define-native compiler form for declaring native C bindings in Scheme modules with optional specs and docstrings.
  • Added VM-level exception handler stack for tail-optimized guard semantics, replacing prompt-based exception handling.
  • Added multi-VM threading with share-nothing architecture, message passing, and parallel-map for data-parallel workloads.
  • Added preemptive yield points at loop back-edges to prevent CPU-bound tasks from starving the async scheduler.
  • Added procedure specifications with inline (: ...) syntax, optional runtime checking via sigil-checks feature, and predicate combinators (any-of, maybe, list-of, none-of).
  • Added procedure specs and docstrings to all exported procedures.

Changed

  • Changed I/O multiplexing to use epoll (Linux) and kqueue (macOS/BSD) instead of select(2) for better scalability.

Fixed

  • Fixed false positive capture corruption check in serializer, Windows build issues with mingw macro collision and unix-connect, closure arity errors now catchable by guard, and exception handler double-pop segfault.

[0.4.0] - 2026-01-14

Added

  • Added full macro hygiene support for syntax-rules and syntax-case. Macros now properly respect lexical scope, preventing accidental variable capture that could cause subtle bugs. This release also adds free-identifier=? for comparing identifiers in macro expansion, and the #' reader shorthand for (syntax ...) expressions.
  • Added native C implementations of list operations (assoc, assq, assv, member, memq, memv) that were hotspots during macro expansion. This results in 2x faster test suite execution and 50% faster module compilation.
  • Added ability for guard to catch VM-level errors such as type errors, division by zero, and out-of-bounds access. Previously these errors would terminate the program; now they can be handled gracefully using the new vm-error? predicate in (sigil error).
  • Added CPU and memory profiling infrastructure via the new (sigil profile) module. Developers can now measure execution time and memory allocation to identify performance bottlenecks in their applications.

Fixed

  • Fixed source file names in error stack traces. Errors now display the correct file path with line and column positions (e.g., main.sgl:3:15), making debugging significantly easier.
  • Fixed with-api-docs to correctly resolve package-centric documentation paths. API documentation generation now works correctly for all package layouts.
  • Fixed missing package dependency declaration that could cause import errors when using sigil-irc in isolation.

Other

  • Reduced release binary size from 3.2MB to 1.8MB through build optimizations. Smaller binaries mean faster downloads and reduced disk usage for deployed applications.

[0.1.0] - 2026-01-09

Other

  • Initial release of the test framework with assertions, test discovery, filtering, and formatted output.
  • Initial release with TCP and UDP socket support for network programming.
  • Core runtime providing a bytecode VM with incremental mark-sweep garbage collector, S-expression reader with extensible syntax, and hygienic macro system supporting syntax-rules and syntax-case. Native bindings for I/O, filesystem, networking, process management, SQLite, and cryptographic hashing.
  • Initial release with SXML utilities for XML/HTML document construction and manipulation.
  • JWT token encoding and verification with HS256 signing support.
  • Model Context Protocol server implementation for building AI tool integrations with resources, tools, and prompts.
  • SQLite database bindings with prepared statements, transactions, and result iteration.
  • Initial release of the WebAssembly runtime for running Sigil applications in the browser via Emscripten.
  • Initial release of changeset-based release management with version bumping, changelog generation, and git integration.
  • Initial release of the interactive web playground for trying Sigil in the browser.
  • Core standard library with (sigil core) providing pattern matching, records, delimited continuations, and utilities for arrays, dicts, strings, and lists. Includes modules for math operations, process spawning, time/date handling, filesystem access, and path manipulation. Nearly complete R7RS (scheme base) compatibility with additional modules for I/O, exceptions, generators, and coroutines.
  • Static site generation with composable pipeline for Markdown files and module documentation.
  • Initial release with Markdown parsing and frontmatter extraction.
  • Initial release with ANSI escape code utilities for terminal colors, bold, dim, and other text formatting.
  • Initial release with extensible hook system for REPL and application customization.
  • CSS generation from Sigil code with selectors, properties, and stylesheet composition.
  • Initial release of the code formatter with automatic indentation and parenthesis inference.
  • Initial release with declarative command-line argument parsing, supporting options, flags, subcommands, and automatic help generation.
  • Initial release of the build system with package management, dependency resolution, task execution, and executable bundling.
  • Initial release of the network REPL server for editor integration and remote evaluation.
  • Command-line interface with commands for building packages, creating standalone executables, running tests, code formatting, project initialization, documentation generation, and release management. Interactive REPL for development.
  • HTTP/1.1 server with routing, request/response handling, and server-sent events for streaming responses. HTTP client with TLS support for making outbound requests.
  • Web application framework with routing, middleware, and template rendering.
  • WebSocket client and server implementation with support for text and binary messages.
  • Git repository operations including status, staging, commits, branches, and diff inspection.
  • JSON parsing and serialization with bidirectional mapping between JSON and native Scheme types (dicts, arrays, strings, numbers, booleans). Port-based I/O for reading and writing JSON streams.
  • IRC client for connecting to IRC networks with message handling and channel operations.