Changelog

Follow up on the latest improvements andΒ updates.

RSS

Your own AI coding agent can now work on a store's DataJet scripts and functions. Connect
Claude Code
,
Codex
,
Cursor
,
VS Code
or any other MCP client to DataJet's new MCP server and let it list, read, create, update, validate and debug scripts from your own editor or terminal.
  • πŸ”
    You stay in control
    β€” nothing can connect on its own. Every agent is approved by a logged-in user of the store, gets only the permissions you choose (
    Read
    ,
    Write
    ,
    Logs
    ), expires after a lifetime you pick (7, 30 or 90 days) and can be revoked at any time.
  • πŸͺ
    One URL per store
    β€” each store has its own server URL, so the same agent can be connected to several stores from different projects without mixing credentials.
  • πŸ“š
    The agent knows DataJet
    β€” on every connection the server hands over the DataJet scripting rules, and the agent reads the same docs, examples, recipes and webhook payloads the built-in AI Assistant uses. It validates every script before saving.
  • πŸ”
    Validate, don't guess
    β€” Liquid and function JavaScript go through DataJet's validator before they are saved; GraphQL inside scripts is checked too.
  • πŸͺ΅
    Debug from your terminal
    β€” with the Logs permission the agent reads run logs and recent errors and proposes a fix.
How it works
Open
Settings β†’ AI agent access
, tick
Let me connect my own AI agents to this store
and save. The
Connect an agent
block shows the setup for each client β€” for Claude Code it's a single command. The first connection opens an approval page in your DataJet admin: pick the permissions, approve, and go back to your editor.
Scripts and functions created by an agent are
inactive
until you turn them on, exactly like scripts from the AI Assistant.
A few things worth knowing
  • Read
    and
    Logs
    are selected by default; enable
    Write
    only when the agent should create or change scripts.
  • Every tool call is recorded (tool name, outcome and duration β€” never the content) and kept for 90 days.
  • Disabling agent access revokes every connected agent at once.
  • The built-in
    AI Assistant
    keeps working as before β€” this is for agents running outside DataJet.
  • Agent access is rolling out gradually; if the section says it isn't available for your store yet, drop us a line at support@code57.pl.
Full guide with setup for every client in the docs:
Integrations β†’ AI Coding Agents
.
Seven new Liquid filters make type conversion explicit. Values from CSV files, metafields, webhooks and API responses often arrive as text β€” now you can turn them into exactly the type you need, without
| plus: 0
workarounds.
  • integer
    β€”
    "00123" | integer
    β†’
    123
  • decimal
    β€”
    "12.50" | decimal
    β†’
    12.5
  • string
    β€” keep IDs, SKUs and postal codes as text
  • boolean
    β€”
    "false"
    ,
    "0"
    and
    "no"
    become a real
    false
  • is_number
    β€” check a value before converting it
  • increment
    /
    decrement
    β€” shorthand for
    plus: 1
    and
    minus: 1
A few things worth knowing
  • integer
    drops the decimal part (
    "12.9"
    β†’
    12
    ) β€” use
    round
    first if you want rounding.
  • decimal
    keeps full precision. Chain
    | round: 2
    for a number, or use
    to_fixed: 2
    for text like
    "12.50"
    .
  • string
    is ideal inside
    {% json %}
    blocks:
    {{ order.id | string | json }}
    always sends a quoted ID β€” no more hand-wrapping values in quotes.
  • boolean
    fixes a classic Liquid trap:
    {% if row.active %}
    is true for the text
    "false"
    .
    {% if row.active | boolean %}
    isn't.
  • increment
    and
    decrement
    return a new value. The
    {% increment %}
    tag still changes the variable in place.
  • The
    AI assistant
    knows the new filters and uses them when it processes uploaded files.
Full reference in the docs:
integer
Β·
decimal
Β·
string
Β·
boolean
Β·
is_number
Β·
increment
Β·
decrement
Your dashboard has been redesigned from the ground up to answer one question at a glance:
is everything running OK?
What's new
Health at a glance
β€” the new top strip shows your active scripts, runs and errors from the last 24 hours, what's running right now (live), and your credit usage with a projection of when you'll hit your limit.
Needs attention
β€” failing scripts now surface themselves. Criticals and warnings across your whole store appear at the top of the dashboard with occurrence counts, deep links to pre-filtered logs, and per-issue dismissal.
AI-suggested fixes
✨ β€” when a script fails, DataJet's AI analyzes the error, your code, and your configuration, then tells you what went wrong in plain language. When the fix is a code change, you get a side-by-side diff you can apply with
one click
β€” and the issue switches to "Monitoring" until a successful run confirms the fix.
Script details pages
β€” every task now has its own page with an AI-generated description of what it does, statistics, last-run status, performance hints, and its full configuration β€” no more digging through modals.
A better configuration experience
β€” task and function settings render in a clean two-column layout with grouped sections, named product/collection pickers, inline validation, and unsaved-change protection.
Global configuration page
β€” shared variables and secrets moved out of a modal into a dedicated page, including a "used by" column showing which tasks reference each value.
Logs
β€” logs open in a slide-out panel with severity, date, and category filters, live streaming, and one-click export. "View logs" from Needs attention lands you exactly on the errors that matter.
AI descriptions everywhere
β€” scripts
and
checkout functions now get automatic plain-language descriptions: a one-liner in the list and a full explanation on the details page.
The Functions Console gets a fifth category:
Cart Transform
. Write JavaScript that reshapes the cart itself β€” bundle products together, break bundles apart, or change how lines are presented, with any logic you can express in code.
  • 🧩
    Merge
    β€” combine several cart lines into a single bundle line, with an optional bundle discount.
  • πŸ“¦
    Expand
    β€” split one line (a bundle SKU) into the component items it contains.
  • 🎨
    Update
    β€” override a line's title, image or price (Shopify Plus and development stores).
How it works
Open the
Cart Transform
folder in the Functions Console and click
Add new
. Pick the
General
family, or
Tags
to build rules around product and customer tags β€” think "merge everything tagged
bundle
into one discounted line". Write a function body that returns transform operations; the starter code documents the exact shapes, and the editor's autocomplete knows your input inside out.
Turn the function on and it runs on
every cart change
β€” buyers see merged bundles and expanded components in the cart immediately, no checkout required.
A few things worth knowing
  • Each store can have
    one
    cart transform function β€” it's the single place your cart-reshaping logic lives.
  • The function's title is internal β€” buyers never see it.
  • Bundle parent variants and component IDs are best kept in
    variables
    , so merchants can point the rule at different products from the dashboard without touching code.
  • Like all functions, cart transforms are
    free
    β€” they don't consume credits.
  • Cart transforms
    fail open
    : if your code errors, the cart is left unchanged β€” buyers are never blocked.
  • The
    AI assistant
    can build cart transforms for you β€” describe the bundle logic in Build with AI and review what it writes.
Full guide and ready-made examples in the docs:
Functions β†’ Cart Transform
.
The Functions Console gets a fourth category:
Discounts
. Write JavaScript that applies automatic discounts at checkout β€” any rule you can express in code, from "10% off tagged products" to "amount off orders over a threshold for returning customers".
  • 🏷️
    Product discounts
    β€” percentage or fixed amount off individual cart lines, targeted by product, tags, collections or anything else in the input.
  • 🧾
    Order discounts
    β€” discount the order subtotal based on cart totals, customer, address, time of day and more.
How it works
Open the
Discounts
folder in the Functions Console and click
Add new
. Pick a family β€” the same 13 families you know from validations and customizations decide which checkout data your code sees β€” and write a function body that returns discount operations. The starter code documents the exact shapes, and the editor's autocomplete knows your input inside out.
Turn the function on and the discount is live at checkout immediately. It also shows up on the Shopify admin
Discounts
page like any other automatic discount, and it combines with your existing discounts.
A few things worth knowing
  • The function's
    title is shown to buyers
    at checkout as the discount name β€” pick something shelf-ready like
    Loyalty 10% off
    .
  • New discount functions are created
    turned off
    so you can review the code first. Active discounts count toward your plan's active-function limit, and Shopify allows up to 25 active automatic discounts per store.
  • Like all functions, discounts are
    free
    β€” they don't consume credits.
  • Discounts
    fail open
    : if your code errors, checkout continues with no discount applied β€” buyers are never blocked.
  • Query and code
    variables work exactly like in the other categories
    , so merchants can tweak thresholds and percentages from the dashboard without touching code.
  • The
    AI assistant
    can build discount functions for you β€” describe the rule in Build with AI and review what it writes.
Full guide and ready-made examples in the docs:
Functions β†’ Discounts
.
You can now write JavaScript that runs
inside Shopify checkout
β€” synchronously, on every order, enforced by Shopify itself. Where scripts react to events after they happen, Functions let you set rules that apply
before
the order is placed.
Three things you can build:
  • πŸ›‘
    Cart & Checkout Validation
    β€” block checkout with custom error messages: order limits, address rules, customer restrictions, or any other condition you can express in code.
  • 🚚
    Delivery Customization
    β€” hide, rename or reorder the delivery options shown at checkout.
  • πŸ’³
    Payment Customization
    β€” hide, rename or reorder payment methods.
How it works
Head to the new
Functions Console
in the app and click
Add new
. Pick a family β€” it decides which checkout data your code receives (cart, customer, addresses, tags, selling plans, time and more) β€” and write a plain JavaScript function body. The editor gives you full autocomplete for your input data, adjustable
variables
so values like thresholds can be changed without touching code, and built-in
version history
β€” every save is committed, and you can view diffs and restore any previous version.
A few things worth knowing:
  • No credits used
    β€” functions run on Shopify's infrastructure, so they don't consume DataJet credits. They're included on the Advanced plan and higher, and free on development stores.
  • Fail-open by design
    β€” if your code ever throws, checkout continues unaffected. Broken code never blocks your buyers.
  • Merchant-friendly configuration
    β€” on the dashboard, each function exposes a simple form for adjusting its variables, so anyone on the team can tweak a limit without opening the editor.
  • Build with AI
    β€” the AI Assistant can create and update functions for you; just describe the rule you need.
Not sure where to start? We've collected ready-to-use examples β€” order limits, PO Box blocking, B2B payment rules, free-shipping perks for loyal customers, and more.
The number of simultaneously active functions depends on your plan (Advanced: 1, Pro: 5, DataJet: 25). See the Functions documentation for full details.
Managing many open tasks just got easier.
Right-click a tab
for quick actions:
  • Close
    β€” close the tab (with a heads-up if it has unsaved changes)
  • Close Others
    β€” keep just this tab
  • Close to the Right
    β€” tidy up everything after it
  • Close Saved
    β€” close all tabs without unsaved changes
  • Close All
    β€” start fresh
Drag & drop to reorder
β€” grab any tab and drop it where you want it. Your tab order is remembered, so it's right where you left it next time you open the Developer Console.
Closed a tab by accident?
βŒ₯⇧T
(Alt+Shift+T) brings it back.
The Developer Console just got a lot faster to move around in. Press
βŒƒβŒ₯K
(Ctrl+Alt+K) β€” or
?
β€” anytime to see the full shortcut list right in the editor.
Find things instantly
  • ⌘P / Ctrl+P
    β€” Quick-open: start typing a task name and jump straight to it, no sidebar scrolling needed
  • βŒ˜β‡§F / Ctrl+Shift+F
    β€” Search across the code of
    all
    your tasks at once. Results show the matching line, and picking one opens the task and jumps right to it β€” unsaved changes are searched too
Work across tabs
  • βŒƒβŒ₯← / βŒƒβŒ₯β†’
    (Ctrl+Alt+←/β†’) β€” Switch to the previous / next editor tab
  • βŒƒβŒ₯W
    (Ctrl+Alt+W) β€” Close the current tab (you'll be asked before unsaved changes are discarded)
  • βŒ₯⇧T
    (Alt+Shift+T) β€” Reopen the tab you just closed
  • βŒ˜β‡§S / Ctrl+Shift+S
    β€” Save all tabs with unsaved changes in one go
And more
  • βŒ˜β‡§H / Ctrl+Shift+H
    β€” Open the version history of the current task
  • Tabs now show a
    dot indicator
    when they have unsaved changes β€” and those changes are kept safe when you switch tabs, open the variables panels, or navigate to another page and back
  • The old favorites still work:
    ⌘S
    save,
    ⌘R
    run,
    ⌘B / ⌘J / ⌘\
    to toggle the sidebar, logs, or both
You can now export a script's full log history and have it delivered straight to your inbox β€” no more scrolling through the log viewer or copying entries by hand.
Open the
action menu
next to any script and choose
Export logs
, enter the email address to send to, and we'll do the rest in the background.
Switching between scripts in the editor now feels instant and remembers exactly where you left off.
  • Folds and position are preserved
    β€” collapsed code regions (query definitions, JSON tags,
    if
    blocks, etc.), scroll position, and cursor location are kept per script. Jump to another tab and back and your view is exactly as you left it.
  • Instant tab switching
    β€” scripts are already loaded in memory, so we removed the old loading skeleton. Tabs now swap the moment you click, with no flicker or delay.
  • No cross-tab bleed
    β€” in-editor changes stay tied to their own script, so opening variable panels or switching tabs never carries content into the wrong file.
Load More
β†’