Functions are now generally available in Tulip

This has been one of the most requested features from all of you, and the day has finally come! :tada: Functions is now generally available for weekly release users.

What Functions does do?

Functions let you build reusable trigger logic once and call it from anywhere you’d normally write a trigger. Instead of copy-pasting the same logic across dozens of steps and then hunting down every copy when something needs to change, you define it once as a Function and reference it wherever you need it.

Functions run locally and synchronously as part of your app’s trigger logic, using the same visual editor, native looping, and complex conditionals you already know from Automations.

What’s available starting today?

  • Functions enabled by default for all weekly users.

  • Import/Export support, so Functions travel with your Apps across instances and workspaces. Note: Machine references and User references inside a Function are not carried over and will need to be manually remapped after import

  • Rename, duplicate, and archive functions directly from the Functions list page

  • Note: We plan to enable functions by default with LTS18

Getting started

Head to Apps → Functions in the navbar to build your first one. If you’re new to Functions, your best first candidate is to start by looking for logic you’ve copy-pasted more than twice.

Where to go from here

A lot of you have been asking for this for a long time. Thank you for the patience and the feedback along the way.

A special thank you to all of the community members who helped us make this feature possible.

@Gary @OliverGnepper @thorsten.langner @Richard-SNN @Preston @Simon_Lipsky @BlakeBou @richard_janssen @thomas.guillaume @rosschul @mslay and many, many more.

Pete

Thanks for sharing @ngutierrez ! When do you expect the use of Table Queries & Aggregations built in Table editor to be part of functions functionality?

Hey @nicolettenaya - good question. This is something we’ve been thinking about seriously, and it’s come up from a few other customers too. No promises on timing yet, but it’s on our radar for both functions and automations.

For those of us on the LTS release cycle, when will we see functions?

Thanks,
Richard

Hi @Richard-SNN , we plan to have functions enabled in LTS18

cc @atrabuco

@Richard-SNN - One other small flag re:LTS.

With LTS17 we will allow enablement of functions upon request for those interested in testing functions ahead of general availability.

Pete

Glad we had the opportunity to test this so early! They’ve been an absolute game changer for our app logic

You make my day @Pete_Hartnett :heart_eyes:

Awesome! We may request that on our non-production instances so we can start testing.

Do you mind sharing some use cases, where it helped a lot?

biggest uses have been serialization logic, transactions to ERP, traceability triggers, etc. I think we’re sitting around 90 functions right now - some used far more than others.

For us it is also a game changer.
Especially for all logic that are redundant cross application, step and cross workspace:

  • Integration logic with our ERP: today to run a business process integrated with our ERP, need several API call and data-manipulation logic. With function, it’s add an abstraction layer between connector-function (API) and front-end apps. It add also ability to build “template logic” in function that other team could reused in front-end apps.
  • Log error, trace, timetracking: in many apps, in trigger, we store in Tulip tables logs error/trace that help us to investigate issue or rerun integration that fail afterward. With function, those logic are in function and in apps only the function is called in trigger.

Great question! Here are a few use cases we see as ideal for functions.

Wrapping connector calls. If an integration takes three or four connector calls, bundle them into a single Function that can be called each time. As @Nicolas mentioned with ERP calls

Core process logic you use everywhere. Things like Report Defect, Create Unit, Work Order processing, or logging station activity. If you have a repeated approached to certain logic, it can be bundled into a Function that runs through it each time it’s called.

Anything you need reviewed and validated. Because a Function is a single centralized component, you can define, review, and validate it once, then let other builders in your org use it without worrying they’ve re-implemented it slightly differently.

Any time you have the same logic behind different triggers. Example: a barcode scan and a manual barcode entry should trigger the same logic within your app, so that logic can be defined as a Function that’s triggered by either.

Standardizing data. For example, formatting collected data before it goes into a table, parsing barcodes consistently, or templatizing ZPL label code.

Looping. Functions have native looping, so you can iterate through data directly instead of using the old step-looping workaround.

Our latest blog also has a few examples that our EA cusomters have shared, but I’d love to hear what else folks are using Functions for.

I forget the “loop” that is definitively the most valuable!

Seeing this has made my day - any chance of putting it in to LTS 16? :stuck_out_tongue: