RUAL Core v15.0.0
Our platform operates on software, commonly known as core. This software can be run either locally within the cloud environment of Enterprise Customers or within our AWS cluster.
Modified or newly introduced blocks
In this release 19 blocks have been modified and 112 new blocks were introduced. You'll find a complete list of blocks at the bottom of this page.
Core engine rewritten in Go
RUAL Core 15 is the first release running on the new Go engine, a full rewrite of the previous Node.js core. The rewrite focuses on performance, reliability and simpler deployment, while keeping the platform fully compatible: blueprint JSON, blocks, pins, API routes, scopes and tokens all behave as before, so existing applications and blueprints keep working without migration.
AI in blueprints: Anthropic connection
A new family of 26 blocks brings AI straight into blueprints around the Anthropic connection. Send messages with anthropicconnection_message or stream them with anthropicconnection_message_stream, give the model tools like web search, code execution and memory, branch or switch between tool flows, build and parse JSON schemas, classify input, count tokens, preflight requests and run batches. Usage and memory management blocks round out the set.
Places and geo
Fourteen new places blocks query the places dataset: places_search, nearest and within-radius lookups, bounding box queries, filtering, facets, enrichment, category resolution and free-text query parsing. Geo points gain helpers like geo_point_reverse_geocode, validation, snapping, nearby search, land cover and city lookup, and arrays get geo helpers including array_reverse_geocode.
NS: Dutch railways
The new NS connection covers the Dutch railway API: plan trips with nsconnection_trips, list departures and arrivals, find stations and nearest stations, and read current disruptions.
More new blocks
- Currency: convert, format, list and rate blocks, for example
currency_convert. - Email through Lettermint:
lettermintconnection_send_emailand a batch variant. - Flow control:
function_run_parallel,function_rate_limit,function_wait_for_queue_item, a millisecond timer, neighbor search and a passwordless login code request. - Thirteen ready-made TTL helpers such as
date_ttl_1_day, from one minute to one year. - Media and files:
video_compress, video size,file_hashand file spreading. - Values and conditions:
value_random_string,value_sha256_hmacandcondition_regexp_test. - And more: raw request bodies, OpenStreetMap tiles, byte converters, a phrase prefix query block and
mssgs_send_message.
Improved blocks
function_broadcastandfunction_write_to_websocketaccept an optionalfieldswhitelist, projecting only the selected fields into the outgoing response.value_parse_querystringnow honors its separator and equal pins when parsing.- The SHA hashing blocks (
value_sha1,value_sha256,value_sha512) take over incoming state on their extra pins.
Documentation
Block pages in this documentation gained a machine-readable semantics section per block, a per-block version history, and studio-style canvas examples for the most-used blocks. Block changes are now tracked per release from the block catalog, so future release notes list exact block and pin changes.
Blocks introduced
base64 to filefunction Accepts a base64 string and returns a file. The file is written to its own directory under /temp/ (/temp/{id}/{filename}) so concurrent conversions never share a name. blurhash function Compute a blurhash placeholder for the given images : a ~30 character string a client paints as a blur while the real image loads broadcast function Send a message across different sessions over a channel and event. These messages are on send and forget base and are not stored. build output template anthropicconnection Pick the fields Claude should return and describe each one; produces an output template for a Claude block's output template. Each field's type comes from the field itself; per field you set a description and (optionally) the allowed options. No JSON Schema knowledge needed. build tool anthropicconnection Define a tool Claude can call and pick the function that runs it. The function receives the model's arguments as in-pins and returns the result back to Claude. Feed the output into a message block's tools pin. classify anthropicconnection Classify input into exactly one of your labels using Claude; route the resulting label with a switch block. code execution tool anthropicconnection Let Claude run Python in a sandbox (data analysis, math, charts); Anthropic-hosted. Wire the tool output into a message block's tools pin. compress video Compresses a video file with ffmpeg as a background queue job. Use a preset for standard message-media output, or override individual settings. Wire on_complete_function / on_error_function to react to the result. convert currency currency Convert an amount between currencies using ECB daily reference rates. copy file Copies the given files into a destination directory, keeping each file's original name. The destination directory is a folder path (created if missing), not a full path including the filename : e.g. /public/uploads copies hero.png to /public/uploads/hero.png. Place the directory under /public/… to make the copies publicly servable via /static/…. To rename the copy, set the optional filename pin (single source file only). To fan one file out to several full paths and/or names at once, use the file spread block instead. count tokens anthropicconnection Count the input tokens a prompt (with system + attachments) would use, and estimate the cost; before you send it. Free; no spend. create batch anthropicconnection Submit many prompts as one asynchronous batch at 50% of the standard price (results within 24h). Wire on_finished/on_item to be called automatically when the batch completes (the system polls in the background), or poll the batch_id yourself with the get batch block. create memory anthropicconnection Open (or create) a persistent memory by id. The same id returns the same memory across runs, so Claude can pick a conversation back up weeks later. Feed the memory into a send message block. delay ms function generate a delay in milliseconds delete memory anthropicconnection Delete a memory by id (forget the conversation and its files). enrich with nearby places places Adds the nearest place per category to every item in a list, in one call : no iterator needed. The usual pipeline is: query your objects, run this block, then write the result back with a mutation. After that an ordinary range query filters on the stored distance, so no further lookups are needed. Each item gets {distance_m, name, id, count} per category under output path. Items are copied, never modified in place, and every item is returned whether or not it had a usable coordinate. exchange rate currency Get the exchange rate between two currencies (ECB daily reference rates). facet counts by places places Counts how many items in a list are near each category : “412 objects near a hospital” in one node. Counts items, not places: an item with three hospitals nearby counts once, which is what a facet over an inventory means. Pass categories with a shared radius, or filters for a named filter per facet. filter by places places Keeps or removes items from a list according to a places filter, without writing anything to a store. Feed it a filter from places_parse_query to turn typed text such as binnen 300m van een basisschool straight into a filtered list. Items with no usable coordinate cannot satisfy a spatial test, so they are treated as not matching. format currency currency Format an amount as a currency string with symbol and grouped thousands (e.g. $1,234.50). from city geo Resolves a city/town name (optionally constrained to a country code, e.g. NL, and a province/state, e.g. Vermont) to a geo point at the city centre, plus the city's radius in metres and its province/country. Offline lookup against the embedded dataset. A city name is not unique within a country : eight US states have a Morristown : so wire province whenever you know it, for example straight from geo point reverse geocode. fuzz geo locations array For each item in the array, replaces the location with a uniformly-random point within a disc of the item's fuzzing distance (km) when the item's fuzzing-enabled field is true. Items where fuzzing is disabled, the location is invalid, or the distance is non-positive pass through unchanged. gb in bytes number Converts an amount of gigabytes (GB) to bytes. Binary/1024-based: 1 GB = 1,073,741,824 bytes. generate random string value Generates a cryptographically random string from an alphabet you choose. Use it for human-facing codes (claim, invite, voucher) where the alphabet has to exclude lookalike characters. Every character of the alphabet is equally likely. get arrivals nsconnection Get the live arrival board for a station. Provide the station code or the UIC code. get batch anthropicconnection Poll a batch by id. Fires `ended` and returns all results (text/usage/cost per custom_id) once processing finishes. get departures nsconnection Get the live departure board for a station. Provide the station code or the UIC code. get disruptions nsconnection Get current disruptions and engineering works on the NS network. get fields object Gets the selected fields from the given object. get memory anthropicconnection Read a memory's contents by id (conversation history, memory files, summary) without creating one. get multiple documents (cached) function Get multiple documents from the given storage using the hot document cache. Fetches each document individually. Skips documents that do not exist or are removed. get nearest stations nsconnection Find the NS stations closest to a coordinate. Provide a geo point, or a separate latitude and longitude. get place by id places Looks up a single place by its Overture id : the block for re-resolving an id you stored earlier. Not finding it is a successful lookup with found false, not an error: an id can disappear between dataset releases, so branch on found rather than on success. Ids are opaque; do not parse them. get raw body httpconnection Returns the request body exactly as received on the wire, as a string : the bytes an HMAC signature covers. Use this (never a re-serialized object) when verifying signature headers like X-Mssgs-Signature. get stations nsconnection List or search NS stations. Leave the search empty to retrieve all stations. get usage anthropicconnection Report total tokens and cost used on this connection (USD and the connection's currency), with a per-category breakdown. get video size file Returns the dimensions of the video given (MP4-family containers). hash file Computes a content hash (sha256 by default; md5/sha1 supported) for each given file : e.g. to detect duplicate uploads before storing them. is nearby geo Checks whether a road or railway is within a given distance of a geo point, and returns the nearest point on it. Offline lookup against the road/rail network (Benelux, OpenStreetMap). is valid geo Checks whether the given geo point has a valid latitude and longitude. land cover geo Resolves a geo point to a terrain / land-cover type (urban, agricultural, forest, grassland, wetland, water, bare, coastal). Offline raster lookup (Benelux, simplified CORINE). list currencies currency List the supported currency codes (the ECB set plus EUR). list memories anthropicconnection List all memories (id, timestamps, expiry, turn count) for browsing or housekeeping. list place categories places Lists the curated category groups with their Dutch and English labels and synonyms : the block to build a category dropdown from. Overture ships roughly 1700 raw categories, which is far too many to show a user, so they are folded into a smaller curated set. Any group id or synonym listed here can be passed to the categories pin on the other blocks. lock or wait function Sets a lock or waits until the lock has been released. match places filter places Tests one geo point against a places filter, normally one from places_parse_query. distance_m and count come back whether or not the filter matched, so you can re-answer any radius question from the result without calling again : which is what lets a radius slider move without a round trip. reason is a readable Dutch explanation you can show to the user. mb in bytes number Converts an amount of megabytes (MB) to bytes. Binary/1024-based: 1 MB = 1,048,576 bytes. memory from json anthropicconnection Cast a raw {id, guid} object into a memory handle for a send message block; for passing a memory handle you already have. memory tool anthropicconnection Let Claude manage its own long-term memory notes (read, write, search) for the wired memory. Drop into a message block's tools pin; use the toggles to limit what it may do. multiple anthropicconnection Combine several tools into one connection for a message block's tools pin. nearest places places Finds the nearest points of interest to a geo point, ordered by distance, with the distance to each in metres. Leave max distance empty for an unbounded search : because you get distances back rather than a yes/no, you can apply any radius afterwards without querying again, which is what makes a free-choice radius slider possible. Data is Overture Maps Places; see places_dataset_info for the release, and note that counts are indicative rather than a register. on api file upload on Exposes URI on /api/. Accepts a multipart/form-data POST request and saves the attached file. Supports its own rate limit and lock (serialisation) through the pins below. open connection function Create a connection to the Anthropic (Claude) API for use by Claude blocks. open connection lettermintconnection Opens a new lettermint connection using the given API token. open connection nsconnection Open a connection with the NS (Nederlandse Spoorwegen) Reisinformatie API. Reuse the resulting connection in the other NS blocks. output template from json anthropicconnection Cast a raw JSON Schema object into an output template for a message block (or a tool's parameters); for full control beyond the build output template block. parse json (repair) anthropicconnection Recover and parse JSON from messy text (code fences, prose, trailing commas, truncation). No API call. parse places query places Turns typed Dutch or English into a structured filter. binnen 300m van een basisschool becomes a proximity filter; niet bij scholen becomes a negated one; minimaal 3 kroegen binnen 500m carries a minimum count; wijk Jordaan and Station Breda resolve to a location. Feed filter into places_match, places_filter or places_facet. Parsing is rule-based and deterministic : no model call and no network. It never guesses silently: anything it could not read comes back in unparsed with a lower confidence, so you can fall back to plain search instead of acting on a half-understood filter. place density places Measures how built-up the area around a point is: how many places sit within the radius, the rate per km², a breakdown per category, and a classification (dense_urban, urban, suburban, rural). The classification is driven by the per-km² rate rather than the raw count, so it does not change when you change the radius. Data is Overture Maps Places. places dataset info places Reports which dataset this node is serving: the Overture release, the vocabulary version, and how many records and categories it holds. This is the one places block that answers when no dataset is loaded : that is its job, so check loaded rather than success. Worth surfacing in an admin view: the release string is what makes results reproducible and comparable between refreshes. Accuracy limits worth knowing: education categories overcount by roughly 6% against the official register, counts are indicative until conflation exists, and confidence is uncalibrated. places in bounding box places Returns every point of interest inside a bounding box : the block for rendering what is currently on screen. Results carry no distance, because a bounding box has no query point; use places_nearest when you need distances. Data is Overture Maps Places. places within radius places Returns every point of interest inside a radius, nearest first. Reports both count and raw_count: Overture is not conflated, so the gap between them is how much duplication the source data carries at this spot. Treat count as a deduplicated search result, not a census : train_station totals 1,432 nationally against roughly 400 real stations. Data is Overture Maps Places. plan trip nsconnection Plan a journey between an origin and a destination. Each endpoint accepts a station code, a UIC code, or a geo point. preflight document anthropicconnection Convert a document (PDF, image, HTML, spreadsheet, text) to clean Markdown with a cheap model, stripping boilerplate; run before sending it to an expensive model to cut tokens. preflight documents anthropicconnection Convert several documents to clean Markdown with a cheap model, in parallel. Returns one .md file per input plus the concatenated Markdown; run before sending an upload set to an expensive model. rate limit function Counts calls per registered key and reports whether this one is still within the limit. Replaces the incr-key + ttl + condition chain every API blueprint used to build by hand: pick a key that identifies the caller (for example one with a {ip:value} placeholder), a limit, and a window. Rejected calls count towards the limit as well. raw request nsconnection Perform a raw GET request against any NS Reisinformatie API path. Use this for endpoints without a dedicated block. remove fields conditional array For each object in the array, removes the configured fields only when the value at match_key equals match_value. Non-matching items pass through unchanged. Original objects are not mutated. reply in json httpconnection Reply to any httpconnection as JSON body request passwordless login code function Send a passwordless login code (email or SMS) to a user. Bypasses the rate limit so it can be triggered right after creating an account. The code itself is never exposed. resolve place category places Resolves free text such as kroeg, basisschool or supermarkt to a category group id. Regular plurals are handled, so kroegen and bars work without being listed. When a word spans several groups : school is the obvious case : the alternatives are returned rather than one being picked silently, because only you know which was meant. reverse geocode array Enriches an array of objects in place: for each item it reads the geo point at the location key and writes the resolved city, province, country and country code into the configured output keys. Offline lookup (embedded multi-country dataset). reverse geocode geo Resolves a geo point to the nearest street, city, province and country. City/province/country are nearest-populated-place; street is the nearest named road (needs the road network loaded). run parallel function Runs up to 5 selected functions in parallel to speed up execution, then continues the flow once all have finished. Each function's return values are exposed on its own result_N object pin. Sets success=false and a global error if any function fails. search as you type query Matches documents whose field starts with the given phrase, analyzed on both sides. Use this for type-ahead: the last word is treated as a prefix and the input goes through the same analyzer as the stored text, so mssgs test matches MSSGS-Test-1. For an exact, unanalyzed prefix on a keyword field use starts with instead. search neighbors function Given an anchor GUID, returns the N documents directly before and the M directly after it when the storage is sorted by the chosen field. Use this to show context around a specific document (e.g. messages around a chat message) without paginating the whole storage. search places places One search box over both points of interest and settlements, with a single ranking across the two. Handles accents (Bréda finds Breda), typos (amsterdm centraal), partial words as you type, and collapses duplicate records for the same real place. Settlements outrank businesses, so Breda resolves to the municipality rather than to one of the ~2000 business names containing it. Pass near to bias results towards the current viewport. Each result carries kind, subtitle and score, so a dropdown renders straight from them. send email lettermintconnection sends a single email via Lettermint. send email batch lettermintconnection sends up to 500 emails in a single Lettermint batch request. Each item in the input array supports the same fields as the single send block (from, to, subject, html, text, cc, bcc, reply_to, tag, attachments). send message anthropicconnection Send a message to Claude and get the reply, with built-in cost guard, model allowlist and typed error reporting. send message mssgs Send a message into a mssgs channel using an incoming webhook URL. Only the Webhook URL and message are required; the other pins map to the rich message_container options. sha1 value sha256 value sha256 value HMAC-SHA256 of the value keyed with the secret, as lowercase hex : e.g. to verify a webhook's X-Mssgs-Signature: sha256=<hex> header against the raw request body. sha512 value snap to network geo Snaps a geo point onto the nearest road or railway (road/track pinning). Outputs the snapped point and how far it moved. Offline lookup against the road/rail network (Benelux, OpenStreetMap). spread file Copies a single source file to multiple destination paths, creating a real copy for each. Each entry in paths is a full destination path including the filename (e.g. /public/uploads/hero.png), so one upload can be fanned out to several locations and/or names at once. stream message anthropicconnection Send a prompt to Claude and stream the reply token-by-token to a WebSocket channel as it generates, then return the full text. summarize memory anthropicconnection Compact a memory: fold the older turns into a running summary and trim the history, so a long conversation stays cheap and in-context while keeping its gist. Run it periodically. tb in bytes number Converts an amount of terabytes (TB) to bytes. Binary/1024-based: 1 TB = 1,099,511,627,776 bytes. test condition Returns true if the regular expression matches the text. Mirrors JS RegExp.prototype.test(). tool from json anthropicconnection Cast a raw JSON object into a tool for a message block's tools pin; for full control beyond the build tool block. tool if anthropicconnection Pick a tool based on a condition: outputs the true tool when the condition holds, otherwise the false tool. Add elseif branches for more cases. tool switch anthropicconnection Pick a tool by matching an expression against case values (with an optional default). Wire the result into a message block's tools pin. travel mode from points geo Classifies which network a series of GPS points is travelling on (road pinning): when at least min ratio of the points lie within max distance of a road or railway, the traveller is pinned to that network : e.g. the last 5 fixes near a road means driving, near a railway means riding a train. When both networks qualify the one with the smaller mean distance wins. Outputs the mode (road, rail or none), per-network conditions, the match confidence and the points snapped onto the matched network. A single geo point object is accepted as well; entries without numeric lat/lon are ignored. Offline lookup against the road/rail network (Benelux, OpenStreetMap). ttl 1 day date Gives you the current date plus 1 day. Useful as a TTL value. ttl 1 hour date Gives you the current date plus 1 hour. Useful as a TTL value. ttl 1 minute date Gives you the current date plus 1 minute. Useful as a TTL value. ttl 1 month date Gives you the current date plus 1 month. Useful as a TTL value. ttl 1 week date Gives you the current date plus 1 week. Useful as a TTL value. ttl 1 year date Gives you the current date plus 1 year. Useful as a TTL value. ttl 12 hours date Gives you the current date plus 12 hours. Useful as a TTL value. ttl 2 weeks date Gives you the current date plus 2 weeks. Useful as a TTL value. ttl 3 months date Gives you the current date plus 3 months. Useful as a TTL value. ttl 30 minutes date Gives you the current date plus 30 minutes. Useful as a TTL value. ttl 5 minutes date Gives you the current date plus 5 minutes. Useful as a TTL value. ttl 6 hours date Gives you the current date plus 6 hours. Useful as a TTL value. ttl 6 months date Gives you the current date plus 6 months. Useful as a TTL value. wait for queue item function Polls a queue document by GUID and blocks the flow until the job reaches a terminal state (executed/failed) or the timeout elapses. Use with any block that produces a queue_guid outpin (e.g. video_compress with wait_in_flow=false) to gate downstream work on background completion. web search tool anthropicconnection Let Claude search the web (Anthropic-hosted). Wire the tool output into a message block's tools pin. Optionally cap uses or restrict domains. world bbox osmworld Fetch OSM world geometry for a bounding box (south,west,north,east) as GeoJSON (roads, buildings, water, greenery). world tile osmworld Fetch OSM world geometry for a slippy-map tile (z/x/y) as GeoJSON (roads, buildings, water, greenery). Recommended zoom: 15. Geometry is simplified per zoom (buildings stay crisp at z≥15). Blocks modified
claim lockfunction Tries to claim a lock and returns if it was successful or not filter by geo distance array Filters an array of objects, keeping only items where the from location is within the distance specified by each item's distance field. The distance unit (km or m) is configurable. get cache ttl function get the time to live in seconds parser value remove document function Removes the given document from the given storage. request: delete function Performs an HTTP DELETE request to remove a resource at the specified URL. Returns the response as a string value. request: delete json function Performs an HTTP DELETE request to remove a resource at the specified URL. Automatically parses the response as JSON. request: get function Performs an HTTP GET request to retrieve data from the specified URL. Returns the response as a string value. request: get json function Performs an HTTP GET request to retrieve data from the specified URL. Automatically parses the response as JSON. request: head function The HEAD HTTP method requests the metadata of a resource in the form of headers that the server would have sent if the GET method was used instead. request: patch json function Performs an HTTP PATCH request to partially update a resource at the specified URL with a JSON body. request: post form-data function Performs an HTTP POST request with application/x-www-form-urlencoded content type. The body object is automatically encoded as form data. request: post json function Performs an HTTP POST request to create or submit data to the specified URL with a JSON body. request: post value function Performs an HTTP POST request to create or submit data to the specified URL with a raw string body. request: put json function Performs an HTTP PUT request to create or replace a resource at the specified URL with a JSON body. request: put value function Performs an HTTP PUT request to create or replace a resource at the specified URL with a raw string body. send message function Send the given payload as JSON to the current websocket update document function Update document in the given storage and creates a revision for it. upsert document function Creates or updates a document with the given GUID. If the document does not exist, it will be created. If it already exists, the mutations will be applied to the existing document.
