The comprehensive guide to getting started with NetSuite SDF

Written by
Avishai Asaf
Financial Information Systems Specialist
March 14, 2023
min read

Table of Contents

View all guides


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

This is some text inside of a div block.

SuiteCloud Development Framework Introduction (New to SDF? Start here)

The NetSuite SuiteCloud Development Framework (SDF) is a powerful tool for developers looking to customize NetSuite environments quickly and easily. With the SDF, developers can work with almost all types of records and create Script and Script Deployment records locally before deploying them to the environment.

In comparison to SuiteBundles, the SDF offers several advantages, such as the ability to collect customizations from multiple environments in one project, maintain a backup of the project, and implement quickly without waiting for installation.

However, it also has its limitations, such as being unable to import locked records and needing to manually import dependencies. Currently, the SDF is fully supported by Eclipse and WebStorm, with a Node.js CLI available for those using VS Code and other unsupported IDEs.

This article's purpose is to get you up and running with either WebStorm or Node.js CLI.

Who is this article for?

This article is intended for both beginner and intermediate NetSuite developers who are looking to learn more about the NetSuite SuiteCloud Development Framework (SDF). Whether you are new to developing with NetSuite or have some experience, this article will provide a comprehensive introduction to the SDF and guide you through the process of setting up, developing customizations, and deploying to NetSuite.

For beginners, this article will provide a starting point for learning about the capabilities and benefits of the SDF and how it can be used to enhance your NetSuite environment. The article will cover the basics of setting up the SDF and provide detailed instructions for developing customizations with the SDF, including examples and best practices.

If you have experience importing script files to NetSuite via SDF but haven't got the chance yet to fully deploy customizations, this article will guide you through the SDF deployment steps, the most common deployment challenges, and how to overcome them. It will also provide tips and tricks for using the SDF more efficiently. If this is what you’re looking for, start at the Deploying Customizations section.

Setting up the SDF with the WebStorm integrated development environment

To ensure proper configuration of your NetSuite account, whether you are using WebStorm or any other IDE, validate that the following settings are in place:

  • SuiteCloud Development Integration bundle is installed. (See Create Token Based Authentication Section)
  • SOAP and REST web services are enabled
  • Plugin version is compatible with NetSuite and Webstorm

To install the plugin you need to open the WebStorm application WebStorm>Preferences (Windows: File>Settings)

(Import the NetSuite plugin from in the WebStorm preferences)

Click Manage Plugin Repositories:

(Import WebStorm plugin repository from URL)

To get the latest version of the SuiteCloud Plugin, enter the following in the dialog:

Then click OK, followed by the “install” button. Once finished, restart WebStorm.

This version of the Plugin is available to update with any new version. To update, go to the Plugins screen and click the “Update” button, which will be located where the “uninstalled” label currently is.

(NetSuite Plugin view pane, install or update the plugin)

For more specific information regarding the installation process, you can go to NetSuite help: https://<accountID>

To configure the SDF global behavior Go to Webstorm>Preferences>Tools>NetSuite:

(NetSuite plugin preferences page, define your default configurations for SDF)

On this screen you can define whether you would like the plugin to automatically add dependencies to your project, as well as which warning notifications will be enabled.

Deploy to Production - this is something you want in the beginning since you don't want to deploy something by mistake.

Overwrite Custom Object/Files - In my opinion, these are redundant and, unless you are working with different stages of the same records, not necessary. However, they can be a good thing in the beginning.

Now you can add the NetSuite environments to your WebStorm.

Open the NetSuite folder and click on Account Management:

(Adding NetSuite environment to WebStorm)

Here you can just click the ‘+’ sign to add a new environment.

You have two options here: browser-based auth and TBA. Since it's best practice, I’ll cover just the latter.

(Insert the NetSuite environment details to be set)

Here you can type your account ID. Notice that sandbox accounts are typed as “XXX_SB1”.

Create Token Based Authentication in NetSuite

To establish a TBA connection, you need to install the SuiteCloud Development Integration bundle.

In NetSuite, go to Customization>SuiteBundler>Search & Install Bundles and type either the bundle name or ID “SuiteCloud Development Integration” ID: 245955.

When installation completes, go to the NetSuite home page and scroll down to the Settings portlet. You should find the “Manage Access Tokens” link here:

(NetSuite get access tokens)

You’ll be directed to the “My Access Tokens” page. Click the “new My Access Token” button to create a new token.

Select the application and give it a name:

(NetSuite manage access tokens page)

Note: The Access token will inherit your current role permission this way. If you wish to assign another role to the access token, go to Setup>Users/Roles>Access Tokens>New and configure the user and role.

Note: When you save, the token will be available as long as you’re on the page.

Now you can set your account in WebStorm or CLI using the Token ID and Token Secret with the account ID.

Add all your environments to the SDF—just pay attention to which environment you’re connected to anytime you perform a push or deploy.

Setting up the SDF with the command-line interface (CLI)

Open VS code and install the SuiteCloud CLI following the directions in NPM Docs: link.

Type the “suitecloud” command in the VS Code terminal to check that everything is working smoothly. This is the response you are looking for:

(SDF CLI help in the terminal, all the existing commands with attributes.)

If you received a command not found error, try resolving it by following the steps in this NPM Doc: link 

Now follow the Adding NetSuite Environment section to add your environments to the CLI.

Once you have a token, type in the terminal “suitecloud account:setup” and choose the create new Authentication ID option. Choose the TBA option, and now the terminal will ask you for the credentials you gathered.

You can now start using the SDF CLI.

The SDF Project structure

Now into the SDF project! 

There are two types of projects: Account Customization and SuiteApp. Here, we’ll examine the first one.

A project is combined from the following structure:

SDF Project/

├─ src/

│  ├─ FileCabinet/

│  │  ├─ SuiteScripts/

│  │  ├─ Templates/

│  │  ├─ Web Site Hosting Files/

│  ├─ Objects/

│  ├─ deploy.xml

│  ├─ manifest.xml

All your scripts will be saved under the SuiteScripts folder. It’s a good practice to also have a directory for the whole project and sub-directories for each component.

The Deploy file contains the project deployment setup. It is combined from Configurations Files Objects and Translations. You can edit this file each time before deploying your project to fine tune the parts you want to deploy.

The Manifest file contains all the project dependencies, custom objects, and features—basically everything your project needs to work in a different environment. If there is a missing dependency, your project deployment will fail and you’ll be notified.

(The WebStrom SDF menu)

Note that SDF does not provide you with versioning control, so if you need that you’ll have to create a Git repo in your project.

Let’s walk through the SDF menu:

  • The deploy functions are simple. Use ‘Deploy to account’ when you are connected to one environment and you want to deploy to another without switching your env.
  • Before deployment, don’t forget to “Add Dependencies References to Manifest”. This will automatically complete the Manifest file for you.
  • Generate a zip file to back up your project deployment in another location.
  • Items below the divider line: These change depending on the place you open the menu from. On Files folders, you’ll have the option to “Import files from the account” and “Upload folder to the Account”. Clicking on a specific file will allow you to upload the specific file and compare it to the environment file. Same goes for objects. 
  • The validation is a pre-deployment stage to make sure all your dependencies, files, and objects are configured precisely.

Now you can start building your customizations. You can write script files directly in your IDE and build customizations in the NetSuite account and later import them into the project. Customizations can also be built in the IDE, so consider which tool is more convenient for you.

Note: Before starting to build your project, it is important that you won’t rely on other bundles’ locked records since those cannot be imported to your project.

Deploying customizations to a NetSuite account

This is the most complicated part—you’ll now discover whether you have built your project correctly in the SDF. It is a good practice to validate your project before deploying it to any account.

Pay attention to Account Specific Values in your object; these are not deployable, and you’ll need to replace them with actual values.

Same thing with a Workflow Email Action that uses an email template—you’ll need to replace the template with blanks as they are currently not supported.

If the validation runs without any error, deploying the project will only take a few moments depending on your project size. You’ll be able to see the deployment logs under the “SuiteCloud IDE” tab.

Let’s take a simple example and build the following script:

(New to SDF, Hello World SuiteScript)

Let’s create a User Event Script customization for this record by Right Click Objects Folder>New>Custom Object

Select the Object type to be User Event Script and enter a script ID.

(WebStorm create new SDF object for script)

You should now see the following customization xml:

(SDF object xml schema)

This is just the basic structure. You can now modify it in the same manner:

(Populate values to SDF object xml schema)

Some customizations are easier to configure in the NetSuite UI, but in the case of SuiteScript I believe it’s more effective to build the Script and Script Deployment records in SDF.

Validate the project by Right Click>NetSuite>Validate.

This is the message you should get in the SuiteCloud IDE console:

(SDF project validation process screenshot)

Now you can deploy the project to your environment by Right Click>NetSuite>Deploy to Account.

If you have multiple environments connected, select the desired one and click deploy.

Your script is now up and running in NetSuite.

In the same way, you can now build complex projects by building them in SDF or in the NetSuite UI and then importing them to SDF. 

Best practices and pro checklist for using the SDF effectively

To achieve a successful deployment, here is my checklist:

  • Consider deploying your WF/Script as not initiating/deployed to have another validation step before affecting the PROD environment.
  • Validate that all the project dependencies exist locally and import missing ones to the project if there are any.
  • Find the Account-Specific-Values in the project and replace those with their equivalent values from the target account (you can find the occurrences in the project by the validation command or by looking for “[ACCOUNT_SPECIFIC_VALUE]” in your project).
  • If your project contains a WF with send email action that uses an email template, delete the email template id from the WF XML and change the email template option to false. This action is not yet supported by SDF, and you’ll have to fix this manually after the deployment. (You can simply look for “[NOT_YET_SUPPORTED]” in your project.)
  • Add the dependencies to the manifest and validate again. If there are no errors, then you are good to go.
  • Select the account and deploy. This should be fast.

Conclusion and summary of key takeaways from the article

The NetSuite ERP SuiteCloud Development Framework (SDF) is a powerful tool for customizing and extending the functionality of a NetSuite account. This article introduced the SDF and covered the steps involved in setting it up with both the command-line interface (CLI) and the WebStorm integrated development environment.

If you are considering using the SDF, here are the pros and cons that you need to think of:


  • Ability to collect customizations from many environments into one project.
  • Keep a backup of the project you’ve pushed.
  • Fast implementation—you don’t have to wait for installation.
  • Managing Account Specific Values.


  • Does not support building a project using locked objects; unlike the SuiteBundles on SDF, a project cannot depend on locked records.
  • Manually import all dependencies; unlike the SuiteBundles, here you’ll have to actively import all your dependencies, though the SDF will alert you to which dependencies are missing.
  • You cannot access File Cabinet files that are outside the SuiteScript, Templates, and Web Site Hosting Files directories.
  • Deployment is complicated in several cases, such as with email templates in WFs or Account-Specific-Values.
  • Deleting files is not supported.

See how you can resolve those problems using Salto.

Written by
Avishai Asaf

Avishai is a Financial Information Systems Specialist at SimilarWeb. Experienced in providing strategic advice and planning, delivering full-cycle solutions as a Design Leader, NetSuite developer and integration expert. A lifelong learner with a passion for technology and finance.

Written by