
2025 was the most productive year in Pine Script's history. Starting with unlimited scopes and bid/ask variables in February and ending with relaxed line wrapping rules in December, TradingView shipped 11 monthly updates1 that transformed Pine Script v6 from a promising release into a genuinely powerful algorithmic trading language. Add the January 2026 footprint requests feature to the mix and the v6 platform looks radically different from what launched in November 20241.
This review ranks every 2025 update by its impact on the typical Pine Script developer. We grouped updates into four tiers: game-changers that unlock entirely new strategy categories, major improvements that meaningfully expand capabilities, solid additions that fill important gaps, and minor polish that improves day-to-day quality of life. Whether you have been tracking every release or are catching up after a break, this is your complete scorecard for Pine Script's biggest year.
We evaluated each update on three criteria. First, how many Pine Script developers does it affect? A feature used by nearly everyone ranks higher than a niche capability. Second, does it enable something that was previously impossible, or does it improve something that already worked? New capabilities rank higher than refinements. Third, what is the practical impact on strategy development and trading automation? Features that change how people build and run strategies rank above visual or syntactic improvements.
With that framework, here is every 2025 Pine Script update ranked from most impactful to least.
These updates unlocked entirely new categories of strategies and tools that were simply not possible before.
Technically a January 2026 release1, but it is the culmination of the v6 development cycle and deserves the top spot. The request.footprint() function introduced two new types (footprint and volume_row) and over a dozen built-in functions for accessing volume profile data directly in Pine Script3.
Developers can now retrieve the Point of Control, Value Area High/Low, per-row buy and sell volume, volume delta, and imbalance detection for every bar on the chart3. Before this update, approximating footprint data required request.security_lower_tf() workarounds that were slow, imprecise, and consumed multiple request calls.
This is the largest single feature addition since v6 launched, and it brings institutional-grade volume analysis natively into TradingView. The main limitation is that it requires a Premium or Ultimate plan3. See our footprint requests guide for detailed examples.
The March update1 changed how for loops evaluate their to_num boundary. Previously, the boundary was captured once before the first iteration and could not change during execution. Now it is evaluated dynamically before every iteration, meaning code inside the loop can grow or shrink the iteration count4.
//@version=6
indicator("Dynamic Loop")
int limit = 50
for i = 1 to limit
if close[i] < ta.sma(close, 200)[i]
limit := i // Stop searching at first bar below SMA
break
This enables adaptive lookback periods, variable-length pattern scanning, and self-adjusting algorithms. It brought for loops into alignment with while and for...in loops, which already had dynamic stopping conditions4. The March update also added box.set_xloc(), completing the drawing API's setter functions1.
The active parameter was added to every input*() function1, letting developers conditionally enable or disable settings based on other input values. When active is false, the input appears grayed out in the Settings panel and cannot be modified3.
//@version=6
indicator("Active Input Demo", overlay = true)
bool showBands = input.bool(true, "Show Bollinger Bands")
float bbMult = input.float(2.0, "BB Multiplier", active = showBands)
int bbLen = input.int(20, "BB Length", active = showBands)
This is a game-changer for anyone publishing scripts or building strategies with many configuration options. Instead of showing every setting at all times, you can create professional, context-aware interfaces where irrelevant options are automatically disabled. July also introduced syminfo.current_contract for continuous futures1, which is essential for scripts that need to identify the front-month contract for order routing3.
These updates meaningfully expanded Pine Script's capabilities and improved significant workflows.
February introduced bid and ask built-in variables providing real-time best bid and ask prices on the 1T (one tick) timeframe1. While limited to tick charts, this was data that was completely unavailable in Pine Script before3. Developers can now build spread monitors, liquidity analysis tools, and execution quality trackers.
The spread between bid and ask is a fundamental measure of market liquidity and transaction costs. Being able to analyze it directly in Pine Script opens up market microstructure strategies that were previously exclusive to external platforms.
The same February update removed the 550 local scope limit1 that had constrained Pine Script since its early versions2. Every if, for, while, switch, and function call creates a scope, and complex strategies with elaborate conditional logic would frequently hit this ceiling.
Removing the limit unblocked multi-asset scanners, ensemble strategies, parameter grids, and any architecture requiring deep nesting. Combined with dynamic requests from the v6 launch, unlimited scopes mean Pine Script can now handle genuinely complex algorithmic logic without artificial restructuring.
September added a linestyle parameter to plot() with three options: plot.linestyle_solid, plot.linestyle_dashed, and plot.linestyle_dotted1. Before this, all plotted lines were solid and could only be distinguished by color3.
For indicators that overlay multiple reference lines, thresholds, and signals on a single chart, dashed and dotted styles provide a second visual dimension that significantly improves readability. This is particularly important for published indicators where color-blind accessibility matters.
These features fill real gaps and improve specific workflows, even if they do not affect every developer.
The maximum string length jumped from 4,096 to 40,960 characters1. This removed a common bottleneck for scripts that build large text outputs, generate detailed tables, or construct complex JSON payloads for webhook alerts. For traders who automate with TradersPost5 or other webhook platforms, longer strings mean richer alert payloads with multi-symbol instructions and detailed position data.
June added the ability for libraries to export constant variables using export const syntax1. Before this, libraries could only export functions. Sharing commonly used constants required wrapping them in getter functions, which added overhead and clutter.
//@version=6
library("TradingConstants")
export const float GOLDEN_RATIO = 1.618033988749895
export const int MAX_LOOKBACK = 500
Direct constant exports make shared libraries cleaner and enable configuration packages for common trading parameters, ratio tables, and threshold values.
November introduced syminfo.isin1, which returns the 12-character International Securities Identification Number for the current symbol3. Unlike ticker symbols that vary between exchanges, ISINs are globally unique. This is valuable for portfolio analysis scripts, cross-listed security detection, and compliance tools that need to match instruments across data sources.
October added a timeframe_bars_back parameter to time() and time_close()1. Previously, the bars_back parameter offset by bars on the chart's current timeframe. The new parameter offsets on the specified timeframe instead3, simplifying multi-timeframe timestamp calculations that previously required request.security() workarounds.
These updates improve the daily development experience without fundamentally changing what you can build.
December relaxed indentation rules for lines wrapped inside parentheses1. Previously, continuation lines could not use indentation that was a multiple of four spaces, which caused unexpected compilation errors for developers who use four-space indentation as their standard. The December update removes this restriction for parenthesized expressions, aligning Pine Script with standard coding conventions.
April added a "PercentageLTP" style option to ticker.renko(), ticker.pointfigure(), and ticker.kagi()1. Box sizes are calculated as a percentage of the last trading price rather than a fixed absolute value, so the same setting works proportionally across instruments at different price levels3.
May fixed time_close behavior on non-standard chart types including Renko, line break, Kagi, point and figure, and range charts1. These chart types previously returned na for time_close on realtime bars. After the fix, closing timestamps become available immediately after a bar closes, enabling accurate time-based trade management on alternative chart types.
Alongside the string limit increase, August moved the Pine Editor to a side panel layout1, giving developers more vertical space for code editing while keeping the chart visible. A word wrap toggle via Alt+Z (or Option+Z on macOS) was also added. This is a pure workflow improvement, but for developers who spend hours in the editor, the additional screen real estate is welcome.
Here is a month-by-month summary for quick reference:
If 2025 is any indication, TradingView will continue shipping monthly updates that expand Pine Script v6's capabilities. Several areas seem ripe for further development.
The footprint system is new and likely to receive additional functions, particularly for historical aggregation and multi-bar volume profiles. The bid and ask variables are currently limited to tick charts, and extending them to other timeframes would dramatically expand their usefulness. Library improvements could continue with support for exporting more complex types.
On the developer experience side, the Pine Editor has already moved to a side panel, suggesting further IDE-like features could follow. Better autocomplete, inline documentation, and integrated debugging would continue the trajectory that runtime logging started.
Whatever TradingView ships next, the 2025 cycle established that Pine Script v6 is being actively developed with serious features, not just incremental maintenance patches.
Every update in this list creates new possibilities for trading automation. Footprint data enables volume-based signal generation. Dynamic loops allow adaptive algorithms. Active inputs build more user-friendly strategy configurations. And the expanded string limits make it easier to construct detailed webhook alert messages.
If you are building Pine Script strategies that generate buy and sell signals, TradersPost connects your TradingView alerts directly to supported brokers for automated order execution5. Whether you are running multi-symbol scanners built with dynamic requests, footprint-based strategies, or simple moving average crossovers, TradersPost bridges the gap between your Pine Script signals and live or paper trading accounts across stocks, options, futures, and crypto.
For more on Pine Script v6 features, explore our related guides:
1 Pine Script Release Notes
2 Pine Script v5 to v6 Migration Guide
3 Pine Script v6 Language Reference
4 Pine Script User Manual
5 TradersPost - Automated Trading Platform