Skip to main content

2026-08-17

  • A Regex Replace node in the mapping editor cleans a value before the rest of the mapping reads it — removing a kr suffix from a salary, dropping a separator, or rewriting a value using the pattern’s groups. A value the pattern does not match passes through unchanged.
  • Where a source system cannot keep history of its own and values are typed into one field as a timeline, that field now reads thousands separators, dates written without a space after the comma, and decimals that begin with a zero. 32 300, 20200101 used to fail the sync; 32300,20200101 was read as a single number with no start date; 2.05 was read as 2.5. Values of those shapes will change on the next sync to what the source system actually says, so a field carrying salaries or percentages typed this way is worth a look.

2026-08-08

  • The assign-name suggestions in the flow editor cover the nodes they were missing. A key written by Flow Cache, Flow Reference, Flow List Diff or any of the Entity Mapping nodes was never offered as something to read, and a key read by a counter, a cache key, a guard’s completion key, or any message you write with {braces} in it was never offered as something to write. Suggestions have always been advisory, so a name you typed yourself still works exactly as before.
  • The list of assigns you can save with a run no longer offers a Flow Each item. The item exists for one pass of the loop and is gone by the time the run finishes, so ticking it saved nothing. It is still offered everywhere it makes sense to read it, inside the loop body.
  • Add end nodes finishes a Flow Each. The toolbar action skipped any node that already had some outgoing connection, and a loop with its body wired but its Out port dangling counted as connected — the one shape the action exists to tidy up.

2026-08-07

  • Two steps can share one error branch. Wiring the error output of several steps into the same recovery path — one place that logs the failure, one place that files the anomaly — used to make the run repeat itself: the failing step ran again, failed again, and did so once more at each level, sending the same record to the remote system over and over until the run was cancelled or ran out of memory. The shared branch is now just the branch, and a failing step runs its recovery once.
  • Values a loop creates now belong to the pass that created them. A Flow Each loop starts every item from the same state, so whatever the loop body writes — a composed record, a list it builds up, a step’s result — is gone by the time the next item starts. It used to carry over, which meant a list built inside a loop kept growing instead of starting fresh: with an inner loop reading that list, the second item reprocessed the first item’s entries too, the third reprocessed both, and the work multiplied. Nine employees producing two rows each sent 90 records to the payroll system instead of 18. To keep a value past the item that made it, say so on the loop: Collect for one entry per item, Preserve for an accumulator the body grows itself. Both settings already existed; they now do the work rather than just describing it. A loop inside another loop needs the declaration at each level for a value meant to last the whole run — the outer loop clears it between items otherwise, which is usually what you want.
  • A Flow Guard can now bail on a condition you build, not just on whether a value is empty. Pick condition holds under “Bail when” and drill into the node to build the check the same way you’d build a Flow Filter predicate: compare, match, check membership, combine with and/or. Use it whenever “is it empty?” isn’t the question — bail when the salary code is one of these, bail when the employee number starts with TMP, bail when the amount is zero. The assign named above the condition becomes its subject, so you can read that record’s fields directly. If the condition itself fails to evaluate you choose whether that stops the run or just this path; either way it is reported, so a broken condition never quietly reads as “didn’t hold”.
  • A run that hits an error no longer loses the errors that came before it. Steps that check a record against a system’s rules before sending it — most of the “save one employee” steps — reported their findings in a way that replaced everything the run had recorded so far, so in a loop only the last failing row’s explanation survived. Every failure is kept now.
  • The line naming a failed pass through a loop now says what went wrong, instead of only which record it was on. Where a failure happens inside nested loops you get one line per level, so you can see both which employee and which row.
  • Loop lines are shorter and no longer carry personal data at normal verbosity. A loop over employees used to attach the entire employee record to two lines per pass. A loop line now identifies the record rather than reproducing it — by its Twine ID, or by the ID the source system uses for a record that hasn’t been saved here yet, or by the employee number. It never shows a name or an email address. Where a record carries no identifier at all the line just says what kind of record it was. The full record is still attached when that node is set to Debug.
  • A flow run that uses too much memory is now reported as failed with an explanation, rather than appearing to run forever. Previously such a run showed as in progress for up to an hour before anything closed it out.
  • Fixed: a flow step could pick up settings from an earlier step in the same flow. Any option you left blank could silently inherit the value another step had set for an option of the same name, which could make a step behave in a way nothing on screen explained. Each step now uses only its own settings. If a flow of yours was unknowingly relying on that, the step will now use its normal default instead — worth a look at any flow where you deliberately left an option blank.
  • Fixed: a flow run could report as successful while containing real errors. When an Error Shield was used, failures from before the shield could be miscounted as ones the shield had absorbed.
  • Fixed: a run could still multiply one error into tens of thousands of copies, exhaust its memory and stop mid-way. The fix released yesterday did not cover the case where a step inside a group node succeeds — which was enough to trigger it. A Flow Counter and per-step timings recorded inside a group node now reach the run’s totals too; timings previously did not.

2026-08-06

  • Flows can look up currency exchange rates. A new Get exchange rate step reads the rates published by Sweden’s central bank, the Riksbank, and writes the rate to a value your flow can use — multiply an amount by it to convert. Pick the two currencies and, if you need a historical rate, a date; leave the date empty for today. The rate is how many units of the target currency one unit of the source currency is worth, so converting EUR to SEK at 10.9 means one euro is worth 10.9 kronor. The step needs no integration, so it works in any flow. The Riksbank only publishes on Swedish banking days, so a weekend or holiday date uses the most recent earlier rate and the run log says which day it used. Note that the Riksbank describes these rates as indicative and intended for information rather than for transactions.
  • A flow run no longer repeats the same error over and over in its log. When a step failed, the run log listed every error the run had hit so far, not just the one that had just happened, so a loop where each pass failed the same way filled the log with thousands of copies of the same few lines, all timestamped the same instant. A step now reports only its own failure. Runs using a group node were affected worst: the errors it carried forward were multiplied by the number of members on every pass, whether or not anything had failed, which on a long loop could grow large enough to end the run outright.
  • A Flow Counter, or a Flow Guard set to count, now counts when it sits inside a group node. It previously recorded nothing at all there, so the charts on the run page were missing whatever a group was counting. Steps that cache their result inside a group are no longer re-run on every later pass either.
  • A single flow run can no longer use unlimited memory. A run that grows without bound now stops itself, with a line in its log saying how much it was using and which part of its state was responsible, instead of taking the server down with it. Only a run with a defect in it gets near the limit; a large data set does not.
  • A run whose server went away mid-run is now marked failed instead of appearing to run forever. A deploy or a restart could leave a run showing as in progress indefinitely, with its log stopping mid-step and nothing explaining why. Such a run is now closed out within a few minutes, with a line saying what happened. Everything the run had already done was done; only the finish was missing.

2026-08-05

  • Flows that write a very large log stay fast. A run producing many thousands of log lines used to slow down as it went and use a lot of memory doing it. Two things you may notice: a card showing a very large value underneath a log line is now shortened, with a marker saying how much was left out, and a run page showing a very long log loads the most recent 2,000 lines, with the full count next to the heading.
  • A run log where one node logged the same kind of line thousands of times is readable again. Twenty or more plain lines in a row from the same node, at the same level, collapse into one row showing the node, the count and the time span, with the first and last three lines kept. Click it to expand. A line that shows a value card underneath it never collapses, and neither does a line at a different level, so an error among a run of successes stays where you can see it. Copying or downloading the log still gives you every line.
  • A flow run stores up to 50,000 log lines. A run that goes past that keeps running normally, and keeps counting, but stops storing further log output from its nodes. The log says so where it stops, and again at the end with how many lines were left out. Only a flow that logs from inside a loop over many thousands of items gets near this.
  • Opening a running flow’s page now shows everything it has logged so far, not just what has arrived since you opened it. A run’s log is saved line by line as the run produces it, so refreshing mid-run no longer loses the beginning.
  • The log’s Copy button is now a split button: copy to the clipboard as before, or pick Download as text from the arrow next to it to save the run’s log as a file. Both give you the whole log, including the parts scrolled out of the page, and both respect the filter.
  • A Flow Log can print a list as a readable report. Add a format modifier to the token — {report:lines} for one item per line, or :bullets, :numbered, :csv — and the values appear in the message itself instead of as a card showing ["a", "b"]. This is how you print what a Flow Each loop gathered, whether you collected it with the loop’s Collect rows or built it up with Flow Assign Append. The Message field is now a text area, so you can put a heading line above the list. A log line that prints a list is shown as a framed block with its own copy button, so it stands out from the entries around it.
  • Copying a flow run’s log includes the values, not just the messages. Anything shown as a card underneath a log line — a list, a composed record, a set of changes — was previously left out of the clipboard. Each card also has its own copy button for grabbing just that one thing.

2026-08-04

  • Twine now tells you when its live connection has been degraded. When the browser cannot hold a fast connection to Twine, it falls back to a slower one that makes the app feel sluggish and lets pages lag behind. A warning appears in the lower right corner when that happens, with a Fix now button that restores the fast connection. If it cannot be restored, something on the network is blocking it, usually a VPN, proxy, or firewall.

2026-08-03

  • The flow inspector’s Docs pane lists every field you can set on the shape the selected node writes to. Each field is shown by the name you type into a nested path, with the connected system’s name for it and whether it is required.
  • The Flow Compose “Add field” list names fields the way the property mapper does, using the name the connected system uses (CustomerNumber) rather than Twine’s internal one (customer_number). Searching by either still finds the field.
  • A Flow Assign node with a nested path can set a single field on a struct built earlier by Flow Compose. Put the composed assign in “Output assign” and the field name in “Nested path”. A path segment that is not a field on the struct is an error naming the struct.
  • The audit trail for a domain mapping shows configuration changes only. Sync starts and ends are no longer recorded there, and the entries that recorded them have been removed from the history.
  • Creating an employee mapping that already exists is now a no-op returning 200 and the existing mapping, rather than 201. A create that would change an existing mapping, a different external_id or status for the same employee and integration, is refused with 409 rather than quietly repointing it. Use PUT to change a mapping.
  • The API can delete a domain mapping (DELETE /v1/org/domain-mappings/:id) and one of its sync triggers. Deleting a mapping deletes its triggers with it, deleting a trigger keeps the job history that ran off it, and neither can be undone.
  • AI assistants connected over MCP can delete domain mappings and sync triggers, if their role permits it.
  • The role quick start spells out that “Read + Write” covers creating and updating but not deleting, and offers deletion as a separate opt-in under Integrations. Existing roles are unchanged.
  • “Explain job failure” works on every job, shows changes to that job’s own integration and mapping, and says plainly when the job did not fail. It also takes an option to skip the change history entirely, when the question is just whether the job failed.
  • Roles whose access is limited to specific integrations or organizations can use the matching AI assistant tools.
  • The change history an AI assistant sees is scoped to the integrations and mappings its role may read, and reports which fields changed rather than the whole record.
  • Organization details returned to AI assistants carry the documented fields, matching what the API returns.
  • The AI capability list names the tool behind each action it says your role is allowed to take, so an assistant with an out-of-date tool list can tell that it needs to reconnect. It also separates “your role is not permitted to do this” from “Twine’s assistant tools cannot do this yet”.
  • A domain mapping’s description can be cleared by an AI assistant, not just set.
  • The role details panel hides expired tokens behind a “Show expired” toggle, lists the rest five at a time, and can revoke every active token on the role in one go.
  • The role export button offers a JSON download alongside copy to clipboard.
  • Notes are written in Markdown. Existing notes keep their text, but rich-text formatting is not carried over.

2026-07-27

  • The flow and property-mapping canvas zooms, from 10% up to 100%. Press F to frame a whole graph and Cmd 0 to reset, and your position is remembered per graph.
  • Auto-arrange was rebuilt: far fewer crossed edges, no more overlapping nodes, and edges route around nodes instead of through them.
  • New Date Range value type and node, so “is this date inside this period?” is one node instead of three.
  • New flow nodes for grouping and accumulating: Group By, Map Put, Map Entries, and collect / preserve on Flow Each.
  • New Error Shield node marks a trailing branch as non-critical, so an experimental branch cannot fail the whole run.
  • Double-click an output port to add an End node wired to it.
  • Time types are enabled by default. Attendance still has to be turned on deliberately, since it is far more data than absence.
  • File transfers over the Public API: upload a file, deliver it to a connected system, and get back the identifier that system assigned it.
  • Conversion failures tell you what failed, where, and which property mapping caused it.
  • API responses carry rate-limit headers reflecting your actual usage.

2026-07-20

  • Competences are a first-class part of Twine: a catalogue of competences plus per-employee assignments, with their own Public API, system data view, and section in the employee drawer.
  • Organization settings moved into a tabbed page instead of one long form plus four separate pages. Old links redirect.
  • Deleting system data moved to organization settings and now covers the whole organization, with an optional system filter. Schedules can be deleted too.
  • The data engine evaluator can load an employee who has never been synced, by picking which integration to fetch them from.

2026-07-13

  • Files are usable in flows: download and upload over SFTP and S3, parse spreadsheets, and build JSON files.
  • Integration templates carry data engine graphs, so a template applied to a v2 mapping brings its logic with it.
  • Employee reports can include the Twine ID column for cross-referencing.
  • The app works on narrow screens and small laptops. The property mapper inspector becomes an overlay rather than permanently taking a quarter of the width.

2026-07-06

  • Property mappings that are broken but draw no edge are listed in the editor’s warning banner, so they surface before a sync rather than during one.
  • When a mapping cannot read a value, the error names the path it was trying to follow and describes what it found.
  • Jobs can be filtered by status, type and date, and the filter is in the URL so it can be shared.

2026-06-29

  • A domain mapping that has a sync trigger can be updated over MCP and over the Public API’s PATCH.
  • MCP tool errors reach the assistant with an explanation of what went wrong.

2026-06-15

  • The Public API returns stored property values as they are, whatever type they hold.
  • The data update report no longer lists employees who have been inactive for a long time. Employees who went inactive during the report window are still included.

2026-06-08

  • The property mapping editor shows who else is on the page, warns when they have unsaved changes, and warns before a save would overwrite someone else’s work.
  • Salary transactions are available over the Public API.

2026-06-01

  • Flow runs that handled an error report as partial rather than successful, with the failure visible on the node and in the run log.
  • Mapping tables can be filled from a CSV file, not only by pasting JSON.
  • Employee reports: pick your columns, export as PDF or CSV.
  • Notification recipients can be organization contacts, so notifications can go to a shared mailbox without inviting a user.

2026-05-25

  • A flow can have several schedules, each seeding its own starting values.
  • “Inspect remote data” fetches directly from the source system where supported, with pagination and the raw HTTP response.
  • Integrations can pause themselves automatically when a sync would change an unusual proportion of your data, rather than writing it.

2026-05-18

  • MCP server: connect an AI assistant to your Twine data, with a read-only tool surface, sign-in via OAuth, and service-account tokens for headless clients.

2026-05-11

  • The new property mapping and conditions editors are the default. The previous editors are still reachable under “Legacy”.
  • The Properties page paints immediately and loads its data in the background.
  • Inactive-employee cleanup runs nightly, and is skipped for organizations under an onboarding suppression.

2026-04-27

  • Users are invited by email rather than created for them by an admin. Invitees set their own name, or sign in with Google or Microsoft and skip the form.
  • Profile pictures: upload one, or use the picture from the user’s Google or Microsoft account.
  • Users have a first and last name instead of a single display name.
  • Pending invitations are listed with resend and revoke actions.

2026-04-20

  • A redesigned preview of what a sync will change: field-by-field changes, per-section create, update and delete, and validation warnings, instead of raw JSON.
  • Preview every employee for a domain mapping at once, not just one at a time.
  • Job logs and metrics are kept even when a job crashes or is terminated.
  • Bulk sync preview shows a live feed of what it is doing, so you can follow a long run.
  • The “would be deactivated” warning says why, and appears only for mappings that are still active.
  • Cron expressions are validated, so the schedule you see in the preview is the schedule that runs.
  • Auto-match settings: match incoming entities against existing ones by configured fields instead of creating duplicates.

2026-04-13

  • Integrations can be paused automatically when errors spike or the source system reports an outage, and released by hand when it is resolved. Pausing an organization or a system stops everything below it.
  • New suppression setting, so a newly onboarded customer does not trip on expected noise.
  • First UI for flows: see the graph, run it, and read the run history.