Noodle 0.9.2 adds noodle.time to pre-request and post-response scripts. It covers the small date operations that API workflows need: a timestamp in a header, an expiration window, a local display time, or an elapsed difference. This release also adds Intel Mac binaries and strengthens macOS artifact verification before publication.

One instant, several representations

Capture the current time once when related fields must agree:

scripts:
pre: |-
const now = noodle.time.now();
const expiresAt = noodle.time.add(now, 15, "minutes");
noodle.request.headers.set("X-Timestamp", noodle.time.iso(now));
noodle.request.headers.set("X-Expires-At", noodle.time.iso(expiresAt));
noodle.run.set("expiresAt", expiresAt);
post: |-
const remaining = noodle.time.diff(noodle.run.get("expiresAt"), noodle.time.now(), "seconds");
console.info("Expiration window remaining (seconds):", remaining);

now() returns Unix milliseconds, unix() returns seconds, and iso() returns a UTC ISO timestamp. fromUnix() converts seconds back to milliseconds. parse() accepts date-only ISO strings at midnight UTC or timestamps with an explicit offset, including expanded ISO years.

The pre script applies generated values directly to the current request. The shared RunScope value is then available to post and later requests in the same collection run. Invalid time inputs use the existing script validation and rollback behavior.

Format locally, calculate elapsed time

Formatting defaults to UTC. Pass a named timezone when the API or display needs another representation:

const local = noodle.time.format("2026-01-15T12:00:00Z", "YYYY-MM-DD HH:mm:ss Z", {
timeZone: "America/Santiago",
});
// 2026-01-15 09:00:00 -03:00

Patterns cover year, month, day, time, milliseconds, and UTC offsets. Named timezone aliases are accepted, and historical offsets retain seconds when needed. Use iso() when you want a UTC value that parse() can read back.

add(), subtract(), and diff() work with elapsed durations from milliseconds through weeks. A day always means 24 hours, including across daylight-saving changes. They do not perform local-calendar month or year arithmetic. JavaScript Date and the existing random timestamp generators remain available.

The Inline Scripting guide introduces the helpers, the Script Cookbook includes timestamp and expiration recipes, and the API reference lists every method, token, and limit. The noodle-use skill now documents the same contract; noodle-dev identifies the implementation and regression checks.

macOS releases for both architectures

Prebuilt macOS binaries now cover Apple Silicon and Intel Macs. The installer and update metadata select the matching architecture alongside the existing Linux builds.

macOS binaries are ad-hoc signed and strictly verified before testing and checksum generation. The release workflow then downloads the draft artifacts and checks their checksum, signature, version, and script sandbox before publication. This prevents invalid embedded signatures from causing macOS to kill Noodle after installation or an update. Failed validation blocks publication, update metadata, and Homebrew notifications; reruns cannot replace published release assets.

CI and release handling also use pinned actions, narrower permissions, and checks for the exact four-binary release set. Manual CI runs provide test builds with checksums and build identity for verification before a release.

See Installation for supported platforms and update instructions.