---
title: "kScript (legacy) v1 vs v2"
description: "In Indicators this is nothing to migrate: an Indicator has no language versions, only four sheet contracts (abi_version: \"wrun-1\", frozen forever, then the…"
order: 89
section: "migrations"
---

<!-- source: docs/indicators/migrations/v1-vs-v2.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit -->

# kScript (legacy) v1 vs v2

In Indicators this is nothing to migrate: an Indicator has no language versions, only four sheet contracts (`abi_version: "wrun-1"`, frozen forever, then the additive `"wrun-2"`, `"wrun-3"` and `"wrun-4"`), and a module written under any of them keeps computing bit-identically. Everything the kScript (legacy) v2 change introduced (per-bar execution, keyword arguments, compile-time checks, dedicated feeds, scalar TA values, field accessors, functions and loops) is the baseline of an Indicator: the four exports run per bar, options objects name every argument, AssemblyScript type-checks before anything runs, `input(name, source.field)` names a feed, and the TA classes return one number per bar.

Nearest form: [Script definition](../functions/script-definition.md) documents the four contracts; a v1 or v2 script ports through the same construct table as a v3 one, on the From kScript (legacy) page beside this one.

What stays on kScript (legacy): the v1 engine itself (`buildTimeseries`, `mergeTimeseries`, positional arguments), which the platform still routes a marker-less script to.
