SuiteCloud Platform

NetSuite SuiteScript 2.1: The 2028.2 Deadline, the Warning, and What Actually Breaks

Oracle is retiring SuiteScript 1.0, 2.0 and the 2.x annotation across four NetSuite releases. Here is what the dashboard warning is telling you, what changes when your code runs on the 2.1 engine, and how to find out how much of this is your problem.

By Santosh Krishnamoorthy EPIQ Infotech, Oracle NetSuite Alliance Partner since 2013 11 min read Reflects Oracle guidance as of November 2026

The short version

SuiteScript 2.1 is now the standard scripting version in NetSuite. Oracle expects to remove support for SuiteScript 1.0, SuiteScript 2.0 and the @NApiVersion 2.x annotation in the 2028.2 release, so every custom script has to be on 2.1 before then.

  • The release that changes behavior in your account first is 2028.1, when 2.0 and 2.x server scripts begin running on the 2.1 engine by default.
  • Scripts annotated 2.x currently resolve to 2.0, so the number of scripts needing attention is usually larger than it first appears.
  • SuiteScript 2.0 to 2.1 is mostly a testing exercise. SuiteScript 1.0 to 2.1 is a rebuild.
  • Oracle documents thirteen specific behavior differences between 2.0 and 2.1. Some throw errors. Several change values silently.

What the "Update Scripts to SuiteScript 2.1" warning actually means

If a yellow banner has appeared on your NetSuite dashboard telling you to update scripts to SuiteScript 2.1, nothing in your account has broken. What you have received is a deadline.

Update Needed: Update Scripts to SuiteScript 2.1 The banner appears in accounts that still run one or more scripts on SuiteScript 1.0, 2.0 or the 2.x annotation. Closing it takes one click. It does not change anything about the underlying requirement, and the banner will keep returning for as long as legacy scripts are deployed.

The warning is deliberately generic, because NetSuite cannot tell you from a banner which of your scripts will misbehave. It gives you the date. Working out the scope is your job, or your partner's.

The versions named in the warning are not in the same position as each other, which is the part most teams miss:

  • SuiteScript 1.0 uses global nlapi functions and a completely different script structure. Moving it to 2.1 is a conversion, not an edit.
  • SuiteScript 2.0 already uses the module pattern that 2.1 uses. The API surface is the same. What differs is the engine underneath it.
  • SuiteScript 2.x is an annotation, not a version. Oracle resolves it to 2.0 at runtime, so these scripts are legacy code wearing a label that sounds current.

The NetSuite SuiteScript deprecation timeline, release by release

Oracle has staged the removal across four releases. NetSuite ships two releases a year, so 2027.1 is the first half of 2027 and 2028.2 is the second half of 2028. Each account upgrades on its own date inside the release window.

NetSuite releaseWhat changes
2026.2SuiteScript 2.1 becomes the standard scripting model for new and existing scripts. The dashboard warning starts appearing. Nothing stops working.
2027.1SuiteScript 1.0 enters end-of-life support, covering critical issues only. Other problems will require converting the script to 2.1 first.
2028.1SuiteScript 1.0 scripts can no longer be deployed in new accounts, though they remain deployable in existing ones. SuiteScript 2.0 and 2.x scripts run as SuiteScript 2.1 by default.
2028.2All new and existing scripts must use SuiteScript 2.1. Support for the legacy versions and annotation values is expected to be removed.

Oracle's stated reasons for the change are a newer JavaScript standard, better performance, stronger security, and a single version to support going forward. That is reasonable, and it does not make the work any smaller.

Why 2028.1 is the date that should be in your calendar

Most coverage of this topic, including NetSuite's own banner, puts 2028.2 front and centre. That is the compliance date. It is not the date your account changes.

In 2028.1, SuiteScript 2.0 and 2.x server scripts begin running on the 2.1 runtime by default. No redeploy. No approval step. No code change on your side. If a script behaves differently on the new engine, it starts behaving differently then, roughly six months before the headline deadline, and it does so in production unless you have already tested it.

The practical consequence

Testing is not something you do in order to meet the 2028.2 requirement. It is something you do before 2028.1 so that the runtime change is uneventful. Those are different deadlines with different amounts of time in front of them.

How to find out how many scripts this affects

Before anything else, produce a number. In NetSuite, go to Customization > Scripting > Script Deployments, set the filters to show all deployments, and add the API version so you can see which version each script reports.

Two things make that count unreliable on the first pass, and both of them push the number downward:

  1. The 2.x problem. A script annotated @NApiVersion 2.x resolves to 2.0. Teams reading a version column that says 2.0 often assume they have no 2.x scripts at all, when in fact the two are merged in that view. The source file is the truth, not the column.
  2. What the deployment list leaves out. Custom modules and library files are not script records. Neither are the scripts inside bundles and SuiteApps you installed. All of them still have to be on 2.1 by 2028.2, and the ones you did not write are the ones you cannot fix yourself.

For each script and deployment worth tracking, capture the internal ID, the deployment status, the real annotation from the file, the script type, its dependencies, the business process behind it, when it last executed, and whether it is yours or a vendor's. That last column decides who does the work.

Do not retire a script just because it has not run recently

Annual, quarterly, exception-driven and manually triggered scripts look identical to abandoned ones in an execution log. Confirm what a script supports before deciding it supports nothing.

What actually changes when a 2.0 script runs on SuiteScript 2.1

The SuiteScript API is the same across 2.0 and 2.1. The engine is not. Server scripts on 2.1 run on the Graal runtime, which supports ECMAScript 2023, while 2.0 runs an older standard. Oracle documents thirteen specific behaviors that differ as a result.

What matters for planning is not the list itself but how each one fails. Some stop the script. Others let it finish and quietly return something else.

Differences that throw an error

BehaviorWhat happens on 2.1
Strict modeStrict mode applies, so assigning a value to an undeclared variable raises an error instead of quietly creating a global.
Reassigning a constPermitted silently under 2.0 in some cases. Throws under 2.1.
Reserved words as identifiersA variable or parameter using a reserved word no longer parses.
for each...inA non-standard construct that the newer engine does not support.
Conditional catch blocksAnother non-standard construct, also unsupported.
toSource()Obsolete and unavailable on the 2.1 runtime.
Invalid JSON parsingMalformed JSON that 2.0 tolerated, such as a trailing comma, is rejected.

Differences that change the result without raising an error

BehaviorWhat happens on 2.1
Decimal numbers with trailing zerosSetting a value such as 616.00 can be stored differently than it was under 2.0.
parseIntParsing differs for certain inputs, notably strings with leading zeros.
Dates to local date stringsThe default output format changes, which affects anything downstream that parses it.
RESTlet POST string handlingString handling in the POST method differs, so the payload a caller receives is not identical.
RESTlet return typesReturn type behavior differs, which external consumers will notice before you do.
Error object propertiesProperties available on error objects differ, so logs and error handling can lose detail.
Promises in server scriptsPromise support in 2.1 server scripts has its own rules, so asynchronous patterns need checking rather than assuming.

The second table is the expensive one. A script that throws gets noticed within the hour. A script that posts a slightly different number, or hands a RESTlet consumer a payload in a different shape, can run for weeks before anyone connects the symptom to the cause. When you decide how much testing each script deserves, sort by which table it falls into rather than by how long the file is.

NetSuite does give you a way to test this before the engine changes on its own. Account level preferences under Setup > Company > Preferences > General Preferences let you run 2.x and 2.0 server scripts on the 2.1 runtime without editing a single file. Use them in a sandbox or Release Preview account with a written test plan, never in production, because they affect many scripts at once.

SuiteScript 1.0 is a different kind of work

For a clean 2.0 script, the migration can genuinely end with changing one annotation after the script passes testing:

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */

SuiteScript 1.0 offers no such shortcut. The script has to be rebuilt with the correct 2.1 structure and entry points, the global nlapi functions and nlobj objects have to be mapped to their 2.1 module equivalents, and the places where no direct equivalent exists have to be solved rather than translated. Sublist handling, logging, URL resolution and error handling all behave differently.

There is also a practical problem that has nothing to do with code. SuiteScript 1.0 scripts tend to be old, which means the person who wrote them has usually left and the original requirement was never written down. Working out what the script is supposed to do often takes longer than writing the replacement. Budget for the archaeology, not just the development.

What you get in return for the work

This is a forced migration, so it is tempting to treat it as pure cost. A few things are only available on 2.1, and some of them are worth having:

  • The AI modules. N/llm for generative AI, N/documentCapture for extracting structured data from documents such as invoices and receipts, and N/machineTranslation for translation are supported in SuiteScript 2.1 only. If your roadmap includes AI inside NetSuite, 2.1 is the entry ticket. We covered the development side of this in how AI is changing SuiteScript development.
  • Modern language features. ECMAScript 2023 brings let and const, arrow functions, template literals, classes and the spread operator. Code written this way is shorter and easier for the next person to read.
  • Browser based debugging. SuiteScript 2.1 scripts are debugged in your browser's debugger rather than the SuiteScript Debugger, which puts NetSuite development in line with the rest of your stack.
  • Security modules. N/pgp for secure messaging, and N/crypto/random in server scripts, are 2.1 only.

If a script is being opened anyway, that is the cheapest moment it will ever be to fix the governance problem it has always had. A migration is a reasonable time to review how your customizations are built, not just which version they declare.

Where SuiteScript 2.1 is not supported yet

Two limitations are worth knowing before you plan a clean sweep of every script in the account.

SuiteScript 2.1 client scripts are not currently supported in the Scriptable Cart. If you run SuiteCommerce with custom cart scripts, moving those to 2.1 today means running a configuration Oracle does not support. Oracle's own instruction for this situation is to follow the version requirements documented for a feature until its help content is updated, so the correct move is to inventory those scripts as their own group, leave them where they are, and re-check at each release.

Separately, some 2.1 features are not fully supported in client scripts, subrecords being the documented example. A 2.1 client script deployed to All Records can error because that includes subrecords. Oracle's workaround is to keep such a client script on older language features. It is a small detail that will cost someone a confusing afternoon if they meet it without warning.

The other deadline sitting in the same releases

SuiteScript is not the only thing changing in this window. From 2027.1, NetSuite stops accepting new Token-Based Authentication integrations and NLAuth stops working, with support for existing TBA integrations expected to end in 2028.2, the same release that requires SuiteScript 2.1.

These two timelines collide in one place: RESTlets. A RESTlet converted to 2.1 still fails if the system calling it signs in with a retired method, and it is the same file either way. Teams that run the two efforts as separate projects end up opening, testing and redeploying the same scripts twice. Our TBA to OAuth 2.0 migration guide covers that side in detail, and the connected systems themselves fall under NetSuite integration services.

A five step plan you can start this quarter

  1. Stop adding to the problem

    Every new script written from today should be 2.1, and any legacy script a developer touches for another reason should come back as 2.1. The option of leaving a 1.0 script alone because it still works has an expiry date on it now. Factor the extra refactoring time into estimates for any project that opens old code.

  2. Build the inventory

    Script records, deployments, custom modules, library files, and the scripts inside bundles and SuiteApps. Read the annotation from the source file rather than trusting a version column, and record who owns each item.

  3. Sort every script into one of four outcomes

    Retire it, hand it to the vendor who owns it, migrate it as a routine change, or migrate it carefully because it touches transactions, integrations or shared libraries. Retirement is the only one of the four that makes the total smaller, so do that pass before anyone estimates the rest.

  4. Test on the 2.1 runtime in a sandbox

    Enable the account level preferences in a test account and exercise the scripts with realistic data, roles and volumes. Record the expected and the actual result for each deployment. A script that ran without error is not the same as a script that did the right thing.

  5. Convert in waves, then update the annotation

    Move lower risk scripts first, keep a rollback plan, and change @NApiVersion only after the behavior is verified. Monitor the first period close after each wave, because that is when a silent value change shows up if one slipped through.

Vendor coordination deserves its own calendar entry. Ask each bundle and SuiteApp publisher which NetSuite release ships their SuiteScript 2.1 version, and get the answer with a release number attached. If a publisher no longer exists or has no plan, you are not looking at a migration for that component. You are looking at a replacement, and that is a decision you want to make in 2027 rather than in 2028.

Not sure whether this is five scripts or five hundred?

EPIQ Infotech runs a read-only audit of your NetSuite account and returns the real count, split by version, with the risky scripts separated from the routine ones and third-party code listed on its own. You get the report whether or not we do the conversion work.

Oracle NetSuite Alliance Partner since 2013. 100+ NetSuite projects, 96% client retention, 24 countries.

Explore our SuiteScript 2.1 migration services

Frequently asked questions

Can I dismiss the SuiteScript 2.1 warning in NetSuite?

You can close the banner, and it will come back. Dismissing it does not change the requirement. Scripts on SuiteScript 1.0, 2.0 or 2.x still have to be retired, replaced or converted before the 2028.2 release.

Does every SuiteScript 2.0 script have to be rewritten?

No. The API is the same across 2.0 and 2.1, so many scripts run correctly with no code change at all. The engine differs though, and Oracle documents thirteen behaviors that change as a result, so each script should be tested on the 2.1 runtime before its annotation is updated.

Is changing @NApiVersion to 2.1 enough on its own?

Only after testing proves the script behaves identically. Changing the annotation tells NetSuite which runtime to use. It does not verify that the script produces the same result on that runtime, and a script can upload cleanly while returning different values.

Is migrating SuiteScript 1.0 to 2.1 just a syntax update?

No. SuiteScript 1.0 uses a different script structure and API model. A proper conversion needs the correct 2.1 entry points, the right modules loaded, replacement logic where an old API has no direct equivalent, and regression testing of the business process behind the script.

What happens to scripts inside bundles and SuiteApps?

They still have to reach 2.1, but you cannot edit them. Ask each publisher to confirm their compatibility plan and the release that ships it, then keep the component in your inventory until the updated version is installed and tested. A publisher with no plan is a replacement decision, not a migration task.

How long does a SuiteScript 2.1 migration take?

It depends on the count, how much can be retired outright, how much of the estate is on 1.0 rather than 2.0, and how much regression testing the affected processes need. A dozen clean 2.0 scripts can be done in days. Hundreds of undocumented 1.0 scripts is a programme measured in months. An audit is the only reliable way to tell which one you have.

What is the difference between SuiteScript 2.x and 2.1?

2.x is an annotation value, not a separate version. Oracle resolves it to SuiteScript 2.0 when the script runs, so a script marked 2.x is executing as 2.0 today and counts as legacy code for the 2028.2 requirement.

Does this affect SuiteCommerce?

Partly, and it is the least settled area. SuiteScript 2.1 client scripts are not currently supported in the Scriptable Cart, and Oracle's guidance is to follow the version a feature documents until its help content is updated. The practical approach is to inventory cart and storefront scripts as a separate group, leave them on the documented versions, and re-check at each release.

Keeping it that way after the last wave

Converted scripts still need an owner at the next release. Two NetSuite releases a year means two chances a year for something to drift, which is what NetSuite support services and managed services exist to absorb. If the script count is only one of several unknowns in your account, a NetSuite health check is the wider version of the same exercise.

Santosh Krishnamoorthy

Writes on NetSuite platform changes, customization and ERP delivery for EPIQ Infotech, a certified Oracle NetSuite Alliance Partner based in Cerritos, California. Get in touch with the NetSuite practice.

Sources, all from the Oracle NetSuite Help Center and checked on 12 November 2026:

Release timing reflects Oracle guidance published at the time of writing. Each NetSuite account upgrades on its own date inside a release window.

Santosh K

Santosh Krishnamoorthy is a Principal ERP Consultant at EPIQ Infotech, with extensive experience in NetSuite and enterprise systems. He works with finance and operations teams to improve reporting accuracy, streamline workflows, and build ERP environments that support sustainable growth. His writing focuses on practical insights drawn from real implementation and support experience.

Free Consultation

Talk to a NetSuite Expert

Response within 1 hour

Blogs Form
Tags

What do you think?

Related articles

Contact us

Have questions? We're here to listen.

We’re happy to answer any questions you may have and help you determine which of our services best fit your needs.

Your benefits:
What happens next?
1

We Schedule a call at your convenience 

2

We do a discovery and consulting meeting

3

We prepare a proposal 

Schedule a Free Consultation
By providing a telephone number and submitting this form you are consenting to be contacted by SMS text message. Message & data rates may apply. You can reply STOP to opt-out of further messaging.