xyOps Dev Update: June / July / August 2026 #420
jhuckaby
announced in
Announcements
Replies: 1 comment
|
It's come a long way in a short amount of time! It's been fantastic for us since we switched to it and it just keeps getting better. Amazing work! |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Overview
This update covers June 13, 2026 through August 19, 2026, picking up right after the last post.
It has been an exciting summer! We shipped the brand-new SDK for Node.js, workflows gained some seriously useful debugging and live-control features, the API became friendlier for synchronous automation, the scheduler and database layers were hardened for larger workloads, multi-user administration got safer, and the Marketplace grew again.
This stretch also produced a big collection of practical Wiki guides. They cover everything from custom business calendars and global blackout windows to multiplexed sub-workflows, six-figure batch processing, live workflow modification, SFTP customer intake, low-bandwidth networks, accessibility, and a long list of hidden shortcuts.
Release Overview
During this window we shipped:
As always, see the full changelog for every feature, fix, dependency update, and documentation change:
Major Improvements
Here are the biggest themes from mid-June through mid-August:
/waitsupport for Event and Magic Link launches, richer workflow responses, raw output instream_job, the newget_multipleendpoint, API-key file uploads, and a new API for changing active jobs.Introducing the xyOps SDK for Node.js
The new xyOps SDK for Node.js gives JavaScript developers a clean, native interface for both sides of xyOps development:
apiinterface connects applications, services, command-line scripts, integrations, and jobs to the xyOps REST API.jobinterface helps custom Event Plugins and Shell Plugin scripts communicate with xyOps while they are running.You can install it from npm:
Then import either or both interfaces:
The API client handles URL construction, API-key authentication, request formatting, uploads, downloads, response parsing, timeouts, retries, and live job streaming. Its method names use normal JavaScript camel case, so
get_eventsbecomesapi.getEvents(),run_eventbecomesapi.runEvent(), and so on. The catalog covers Events, Jobs, Servers, Monitors, Alerts, Tickets, Secrets, Buckets, Marketplace data, search APIs, and much more.The job runtime side handles the xyOps JSON-over-STDIO protocol for you. A custom Node.js job can read parameters, input data, files, workflow data, server data, and assigned secrets with simple helper methods. It can publish output data, attach files, add tags and actions, render custom tables or Markdown, update its progress and status live, emit structured logs, record performance metrics, and finish with a clean success or error result.
There are also helpers for encrypting and decrypting JSON-compatible values using AES-256-GCM, including optional authenticated context data. This is useful for workflows that need to store an encrypted value in a bucket, spreadsheet, or external service and retrieve it later.
The SDK supports both CommonJS and ESM imports and includes bundled type definitions. It is already included with xySat v1.0.34 and later, so custom Event Plugins and Node.js scripts running through the built-in Shell Plugin can require it without installing anything. In v1.0.89, xyOps also added the SDK to its own dependencies so Action and Trigger Plugins can use it directly.
The project has already reached v1.0.4, including support for the new
update_active_jobAPI. This was originally a later-roadmap item, so I am very happy to have shipped it early. See the full SDK announcement and examples, or jump directly into the SDK documentation.Workflow Replay and Better Testing
Workflow debugging is much more practical now.
The new Replay feature lets you freeze a node during a test run and reuse the output from one of its previous jobs. This is perfect when an early node is slow, expensive, destructive, or calls an external service. You can replay its earlier data and files, then repeatedly test everything downstream without running that first step again.
Suspended workflows can now resume at a selected target node, which gives operators a controlled way to skip ahead after investigating or correcting a problem. Start and retry delays can also be skipped manually by clicking the live state label.
Test runs gained much finer controls. You can choose exactly which action conditions should fire, toggle resource limits, supply custom JSON and files, and test unsaved Event or Workflow changes without committing them first. The Test dialog remembers your preferred action and limit settings too.
Workflow Job Details now show Controller nodes in the jobs table with their own elapsed time and progress bars. Event and Job nodes can switch between compact and expanded display, custom titles can clarify repeated uses of the same Event, and clicking a node highlights and scrolls to all of its related job rows.
These are all small pieces of one larger goal: make a complex workflow understandable while it is running, and make it easy to reproduce just the part you are trying to debug.
Live Workflow Control
The new
update_active_jobAPI can change a workflow while it is still running. It can update eligible properties on the parent workflow job, change sharedworkflowData, and modify nodes that have not started yet.That enables some very dynamic patterns. An early job can inspect a file, query a service, or ask a user for input, then choose which later nodes should run, change their targets, update their parameters, or prepare shared data for the rest of the workflow.
The new Update a Live Workflow guide walks through doing this from inside a running job. It also shows how to build a reusable Action Plugin backed by a narrowly scoped API Key and Secret Vault. The SDK exposes the same operation as
api.updateActiveJob(), so Node.js jobs can do this without writing their own HTTP plumbing.This is one of those features that looks specialized at first, but it opens up a lot of possibilities. Workflows can now adapt their future execution plan based on facts discovered during the run itself.
Multiplexing and Large Batches
Nested workflows can now be multiplexed. A Split Controller in an outer workflow can launch one copy of a sub-workflow per item or batch, just like it can launch an Event node. Inside each sub-workflow, all of the normal workflow tools are available again.
Split Controllers also gained a configurable Batch Size. Instead of always sending one item to each job, they can divide a large input array into smaller arrays and send each batch to a separate job or sub-workflow.
Together, these features make it possible to process very large inputs without creating an unmanageable fan-out in one workflow. The new Processing Large Batches with Two-Stage Workflows guide demonstrates the pattern with 100,000 items:
There is also a focused How to Multiplex a Sub-Workflow guide for the simpler case.
As a safety guardrail, xyOps now limits each workflow run to 1,000 sub-jobs by default, with a configurable maximum. Two-stage batching gives you a clean way to scale far beyond that while preserving useful boundaries, progress tracking, concurrency limits, and failure isolation.
Easier Automation Through the API
The Event and Magic Link launch APIs now accept a
/waitURL suffix. Instead of returning as soon as a job is queued, the request can wait until the job completes and return the result. When the launched Event is a Workflow, the final response includes the parent job and all of its sub-job objects.This makes xyOps much easier to use as a synchronous automation service. A script, web service, CI job, or external application can launch work, wait on one HTTP request, and receive the complete result without building its own polling loop. These direct API launches also skip the normal scheduler launch queue, so they are not delayed by mass-scheduling throttles.
Other API improvements include:
stream_jobcan optionally include raw live text output alongside structured job updates.get_multiplecan fetch several commonly needed lists in one request, and can include the current epoch, active jobs, alerts, and system statistics.upload_filesnow works with API Keys as well as browser sessions.fire_job_web_hooklets an authorized caller fire a configured Web Hook for a job.update_active_jobenables the live workflow patterns described above.The new SDK wraps these APIs in straightforward JavaScript methods, including uploads, downloads, streaming, errors, retries, and authentication.
Actions, Labels and On-Demand Responses
Running jobs can now fire Instant Job Actions. A Plugin can dynamically push an action such as an email or Web Hook with the special
instantcondition, and xyOps executes it immediately instead of waiting for the job to finish.This is useful when a long-running job discovers something that needs an immediate response. It can notify a team, call another service, or launch follow-up automation while continuing its own work.
The built-in "Run Event" action gained an optional start delay, and operators can manually skip both start delays and retry delays when needed. A new "Apply Label" action can assign a dynamic label to an Event or Workflow job. Action descriptions on Event Details are now clickable where applicable, which makes their configuration easier to inspect.
Plugins can also add actions at runtime through the SDK with
job.addAction()orjob.addActions(). The Hidden Features guide includes complete examples for sending a custom email or firing a Web Hook from inside a running job.Scheduling, Dispatch and Failover
The scheduler can now launch multiple jobs for the same Event in the same minute (i.e. with separate parameters). This removes an awkward limitation for schedules that intentionally fan out several variations of one Event at the same timestamp.
There is also a new Fewest Active Jobs targeting algorithm. It selects the eligible server currently running the fewest jobs, giving you a simple load-balancing option that does not depend on CPU or memory monitor values.
High-volume launches are smoother too. Parallel scheduled jobs are staggered by a small configurable interval (default
50ms), and rapid job status broadcasts are debounced. These changes reduce unnecessary bursts when a large number of Events fire at once.Multi-conductor installations gained Preferred Conductors for controlled primary handoff. Administrators can designate which conductor should be primary, and the cluster can actively hand ownership over instead of waiting for a failure.
Worker upgrades now disable the server before beginning so new jobs are not dispatched into the maintenance window. Servers can also disable themselves during an unplanned but graceful shutdown. Several related retry and failover bugs were fixed, including active jobs not resuming after conductor failover and satellite-shutdown aborts not triggering eligible retries.
Finally, catch-up handling was corrected for single-shot and precision schedules, and schedule-related timestamps are normalized consistently to the minute.
Performance, Database Maintenance and Scale
A lot of the less visible work in this cycle focused on keeping xyOps responsive under heavier load.
Database search queries now pass through a queue so expensive searches do not pile up under load. Detailed search timing and index metrics are written to the API log, which makes slow-query diagnosis much easier. On the browser side, many read-only calls were corrected to use HTTP GET, and the client now queues GET requests to avoid flooding the server.
The database maintenance editor now exposes advanced settings as JSON. Nightly maintenance can optionally save all chopped rows into XYBK backup files before deleting them, giving administrators a recoverable artifact for offline analysis or later re-import.
Other scaling improvements include faster synchronization between conductor peers, debounced job status broadcasts, staggered scheduled launches, more efficient combined data fetches, and reduced low-level storage transaction logging by default.
Safer Team Administration
xyOps now shows when another user is editing an Event, both on the Event list and when you open an editor. It does not lock the object, but it gives everyone a clear warning before two people accidentally overwrite each other's work.
Administrators can broadcast a custom message to every connected user from the System page. Messages support several notification types, include the sender's name, and are handy for planned maintenance, urgent operational notices, or coordination during an incident.
The user category and group restriction system received a complete overhaul. Restricted searches were hardened, workflow secret propagation across categories was corrected, and admin-locked Plugin parameters now stay protected when non-admins run Workflows.
The Plugin Editor also gained clearer access to revision history, job history, and a new "Show Dependants" dialog. Plugin types can no longer be changed after creation, and new default parameter values can be pushed into existing Events.
Security work continued throughout the cycle with stronger user-input encoding and sanitization, stricter API validation, dependency vulnerability updates, and provenance attestations for GitHub Actions build artifacts.
Operator Experience
There were many useful day-to-day improvements across the UI:
The new Hidden Features guide collects many shortcuts that are easy to miss. It covers Alt-click actions, range and pattern selection in multi-select menus, raw JSON editing, file drops into code editors, one-click Workflow node creation, grid snapping, quick condition editing, job-row highlighting, test runs with unsaved changes, Ticket short URLs, XYPDF imports from any page, and the full keyboard shortcut catalog.
New Marketplace Plugins
Three new PixlCore Plugins arrived during this window, bringing the full Marketplace to 50 Plugins, including 19 from PixlCore:
The calendar Plugin is a nice example of the Trigger Plugin system. You keep a normal xyOps schedule on the Event, then use an iCal calendar as a final launch modifier for holidays, freeze windows, business hours, or other organization-specific rules.
The IMAP Trigger opens another useful intake path. Email can now become structured workflow input, including attachments, without an external service translating the mailbox into API calls first.
Several existing Marketplace Plugins also received updates:
Thank you again to all of the Marketplace authors and maintainers. The catalog is becoming a very capable toolbox.
New Wiki Guides
The Wiki grew quite a bit during this cycle. Here are the new guides and what they cover:
I love these recipe-style docs because they show how xyOps features fit together. A Magic Link, Bucket, Secret Vault, Marketplace Plugin, Action, API Key, and Workflow can each be useful on its own, but the really interesting solutions appear when you compose them.
Hosting, Storage and Reliability
The main Hosting guide was rewritten from scratch, with a new "Before You Install" section and clearer guidance throughout. It also gained instructions for migrating xyOps to a new server, satellite upgrade timeout configuration, more accurate installation details, and stronger coverage for real deployment decisions.
Storage documentation now covers PostgreSQL SSL, native transaction support, and updated recommended configurations. The sample configuration includes Redis, and the System DB Optimization tool now supports multiple storage engines, including PostgreSQL.
Satellite installation and upgrade scripts were hardened for unreliable downloads and older systemd versions. External ports are preserved correctly in install and upgrade URLs, partial GitHub outages are handled more carefully, and normal GitHub failures no longer produce noisy UI error notifications.
Job and Workflow cleanup became more robust too. Deleting a Workflow parent now traverses through nested sub-jobs and sub-workflows, and job deletion cleans up input files as well as output files unless another xyOps object still owns them.
Stability and Fixes
There were plenty of fixes mixed in with the new features. Some notable ones include:
sanitize-html,nanoid, mail, WebSocket, request, and form dependencies for upstream security fixes.Retries also gained an optional force mode, which allows a retry to run even when the prior attempt ended through an abort. The Retry Limit documentation now explains retry eligibility and the new option in detail.
Looking Ahead
Shipping the SDK early was a big milestone, and it gives the next round of CLI, Plugin, and integration work a much stronger foundation.
The major v1.1 roadmap items still ahead include the full remote CLI, filesystem and Git synchronization, and password-protected Magic Links. I also want to keep expanding the practical Wiki recipes, growing the Marketplace, tightening high-scale behavior, and improving the tools for operating xyOps as a team.
The last two months have made xyOps much more programmable from both directions. External software can launch work and wait for complete results, while code inside a job can use the SDK to interact richly with its own run or even reshape the rest of a live Workflow. I am very excited to see what people build with this!
Community
Please join the community and help improve xyOps:
Hope to see you there! Come and say hi!
All reactions