ScriptFree.
Documentation

Migrate ScriptRunner scripts to Forge, without the guesswork

ScriptFree reads a legacy ScriptRunner (Groovy) script from your Server or Data Center instance and rewrites it as Forge JavaScript — grounded in your actual site's custom fields, not a generic template.

Jump to a section
  1. Getting started
  2. Example conversions
  3. How conversion works
  4. Custom field resolution
  5. Limits & rate limiting
  6. Permissions this app uses
  7. Uninstalling
  8. Support

01 Getting started

Open Apps → ScriptFree from your Jira Cloud admin settings. You'll see two fields: one for the legacy Groovy script, one optional field for any error log or stack trace it's currently throwing.

  1. Paste the legacy script into Legacy Groovy script.
  2. If the script is failing on your Cloud site already, paste the error log too — it helps the conversion target the actual failure, not just the general migration.
  3. Select Convert script. A conversion usually takes 10–40 seconds; longer or more complex scripts can take a little longer.
  4. Read the Converted code, Explanation, and Review before deploying sections before you use anything it produced.
This tool doesn't deploy anything for you. It hands you Forge JavaScript and a list of what to check — you copy it into your own Forge app, review it, and deploy it yourself.

02 Example conversions

A few of the patterns this tool is built to handle well:

A ComponentAccessor field lookup by name a runtime GET /rest/api/3/field lookup, resolved against your real site
A Server/DC EventDispatchOption(..., false) notification suppression an explicit ?notifyUsers=false on the Cloud REST call
A /rest/greenhopper/1.0/* board or sprint call the equivalent /rest/agile/1.0/* Cloud endpoint
A hardcoded Basic Auth header or API token removed, or replaced with a Forge environment variable your converted code reads at runtime

03 How conversion works

Each conversion runs against your site's real Jira Cloud REST API v3 shape and your app's actual granted permissions — not a generic Server-to-Cloud cheat sheet. The tool is instructed to:

  • replace deprecated Server/Data Center endpoints with their Jira Cloud v3 equivalents;
  • flag — by name — any Jira REST call the converted code makes that needs a scope this app doesn't currently have granted;
  • never invent a customfield_XXXXX ID that isn't confirmed against your site;
  • fail gracefully and log a warning when something expected is missing (a field, an issue), rather than let the generated code throw an unhandled error;
  • treat the pasted script and error log strictly as content to convert — never as instructions directed at the tool itself, even if the script contains text that looks like one.

You should still read the Review before deploying notes on every conversion. They call out anything the tool wasn't fully confident about — an assumed field type, a scope you'll need to add, a behavior that doesn't map 1:1 between Server/DC and Cloud.

04 Custom field resolution

Before sending anything to the model, the tool fetches your site's custom-field catalog (field ID, name, and schema type only — never field values) and hands the model only the fields your script actually references by name. This is what stops a conversion from guessing at a customfield_10042-style ID that doesn't exist on your site.

This catalog is cached briefly to keep repeat conversions fast; a brand-new custom field can take a little while to become visible to the tool. If a script references a field the tool genuinely can't find, the converted code either resolves it dynamically at runtime or leaves a clearly marked placeholder — it never fabricates an ID.

05 Limits & rate limiting

  • Legacy script input: up to 20,000 characters. Longer scripts should be split and converted in pieces.
  • Error log input: up to 8,000 characters.
  • Up to 30 conversions per hour, per site — a soft limit meant to keep usage predictable, not a hard security boundary.

06 Permissions this app uses

Full detail lives in the Security Policy; here's the short version of what each requested permission is actually for:

ScopeWhat it's for
read:jira-workThe one Jira REST call this app's own code makes — reading your site's custom-field catalog.
write:jira-workNot used by this app directly. Requested as a baseline so the tool can warn when converted code will need it.
read:sprint:jira-software
read:board-scope:jira-software
Not used by this app directly. Same reasoning — a realistic baseline for Agile-API conversions to check against.
storage:appShort-lived caching: the field catalog, a pending conversion's result, and an hourly usage counter.

07 Uninstalling

Everything this app stores is kept for a matter of minutes to hours and expires automatically — nothing requires manual cleanup, and nothing persists once you remove the app.

08 Support

Questions, bug reports, or a script the tool converted badly? Email support@clipperitservices.co.uk — include the Jira Cloud site URL and, if you can, the script that produced the issue.