{"id":41459140,"url":"https://github.com/intuit/isl","last_synced_at":"2026-02-25T21:06:35.941Z","repository":{"id":325179187,"uuid":"1098527216","full_name":"intuit/isl","owner":"intuit","description":"ISL a low-code, Intuitive Scripting Language designed for JSON-to-JSON transformations.","archived":false,"fork":false,"pushed_at":"2026-02-23T05:55:51.000Z","size":36356,"stargazers_count":5,"open_issues_count":2,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-23T13:51:45.280Z","etag":null,"topics":["java","json","json-to-json","sandbox-environment","scripting","transformer"],"latest_commit_sha":null,"homepage":"https://intuit.github.io/isl/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/intuit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support.md","governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-17T20:07:00.000Z","updated_at":"2026-02-13T01:05:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/intuit/isl","commit_stats":null,"previous_names":["intuit/isl"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/intuit/isl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fisl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fisl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fisl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fisl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/intuit","download_url":"https://codeload.github.com/intuit/isl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fisl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29840001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T20:42:33.054Z","status":"ssl_error","status_checked_at":"2026-02-25T20:42:21.322Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","json","json-to-json","sandbox-environment","scripting","transformer"],"created_at":"2026-01-23T15:48:31.903Z","updated_at":"2026-02-25T21:06:35.926Z","avatar_url":"https://github.com/intuit.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ISL\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./docs/img/isl_small.png\" alt=\"ISL\"\u003e\n\u003c/div\u003e\n\nISL is a low-code, interpreted scripting language designed primarily for JSON-to-JSON transformations, utilizing a WYSIWYG (What You See Is What You Get) approach to make scripting visual and intuitive. \n\nOperating within a JVM-based runtime container, ISL provides a ready-to-deploy execution environment that allows both developers and non-developers to easily write, test, and integrate their custom code into virtually any service.\n\n\n⏩ **[Get started now with this Java or Kotlin Hello World](https://intuit.github.io/isl/quickstart/)**\n\n⏩ **[Checkout the Overview](https://intuit.github.io/isl/overview/) for examples and the basics of the ISL**\n\n✅ ISL has a permissive [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n\n## Overview\n\nOriginally ISL was designed as a **JSON-to-JSON transformation library** as an [alternative to JOLT](https://intuit.github.io/isl/dev/benchmark-report/) and other Java based JSON-to-JSON transformations but since then ISL has evolved into a fully fledged scripting languange while still providing a simple powerful JSON-to-JSON transformation capabilities.\n\nThe ISL supports an intuitive simplified syntax with features that make data transformations easy with minimal lines of code.\nIn addition, the language supports easy extensibility allowing it to be used as a multi-purpose service extensibility language.\n\nThe ISL can be embedded in any JVM based project to provide runtime based extensibility through a fast and lightweight runtime.\n\n**If it looks like a JSON it's a valid ISL :)**\n\n![ISL Transformation](./docs/img/simple_transform.png)\n\nCheckout the [Overview](https://intuit.github.io/isl/overview) for examples and the basics of the ISL.\n\n\n\n## Major Features\n\n- JSON Compatible [Object Building](https://intuit.github.io/isl/language/objects) `item: { field: true, \"my-property\": 12 }`.\n- Comprehensive [Conditions, If/Else \u0026 Switch statements](https://intuit.github.io/isl/language/conditions) including [RegEx Switch Case](https://intuit.github.io/isl/language/conditions#regex)\n- Script [Imports](https://intuit.github.io/isl/language/functions#imports).\n- [Math Expressions](https://intuit.github.io/isl/language/math) `$total: {{ $amount * $quantity * 1.2 }}`.\n- Functional Expressions for:\n  - [Filters](https://intuit.github.io/isl/language/modifiers#filtering): `$positive: [ -1, 0, 1 ] | filter( $ \u003e 0 )`.\n  - [Reduce](https://intuit.github.io/isl/language/modifiers#reduce) `$total: [ 1, 2, 3, 4 ] | reduce( {{ $acc + $it }} )`.\n  - [Map](https://intuit.github.io/isl/language/modifiers#map) `item: [ 1, 2, 3, 4 ] | map( { id : $ } )`.\n- Easily Extensible with\n  - [functions](https://intuit.github.io/isl/language/functions): `@.Service.Function( ... )`.\n  - [modifiers](https://intuit.github.io/isl/language/functions#modifiers): `| calculate_tax( ... )`.\n  - [wildcard modifiers](https://intuit.github.io/isl/language/functions#modifiers): `| encode.base64( ... )`.\n  - [block statement extensions](https://intuit.github.io/isl/language/functions#blockstatement-functions) similar [to pagination support](https://intuit.github.io/isl/advanced/pagination) `@.Pagination.Page() { ... block ... }`.\n  - [annotations](https://intuit.github.io/isl/language/functions#annotations) that work as interceptors `@cache() fun getCurrentUser(){ ... }`\n- Pagination Strategies for [Page](https://intuit.github.io/isl/advanced/pagination#page) and [Cursor](https://intuit.github.io/isl/advanced/pagination#cursor).\n- Utilities for dealing with [Time \u0026 Dates](https://intuit.github.io/isl/types/dates#timedate-processing), [Signatures \u0026 Hashing](https://intuit.github.io/isl/advanced/crypto#cryptography).\n- Support for [parsing XML](https://intuit.github.io/isl/types/xml#xml-processing) and [outputting XML](https://intuit.github.io/isl/types/xml#xml-output),\n  [parsing CSV](https://intuit.github.io/isl/types/csv#csv-processing).\n- Support for advanced String Interpolation `Hi there $name. Today is ${ @.Date.Now() | to.string(\"yyyy MM dd\") }. `.\n- Support for [`find`, `match` and `replace` using Regular Expressions](https://intuit.github.io/isl/language/modifiers#regex-processing).\n\n## Documentation\n\nSee the [ISL Documentation](https://intuit.github.io/isl/) for complete reference.\n\n## Extensibility Points\n\nAs a generic runtime, the runtime is designed to be heavily extensible while maintaining the same\nsimple grammar. Modules, Functions, ISL Modifiers, Custom Functions and Custom Modifiers are a few of\nthe available existing extension points:\n\n### Custom Functions\n\nMost common extensibility is to provide new services/functions to be callable from inside the script.\n\n**Note:** At the moment the expectation is that all registered services as **async coroutines**\nusing the `suspend` keyword.\n\nRegistration (Kotlin):\n\n```kotlin\ncompanion object{\n  fun myExtension(context: FunctionExecuteContext): Any?{\n    // do stuff\n    val value = context.firstParamer;\n    ...\n    return \"result\";\n  }\n}\n\n// register custom extension function.\n// Name has to be in format `Service.Name` and will be callable from code as `@.Service.Name( ... )`\ncontext.registerExtensionMethod(\"MyService.MyMethod\", MyClass::myExtension);\n\n// You can register closure callbacks so you can use any existing state you have\ncontext.registerExtensionMethod(\"MyService.MyMethod\", {\n  // it: params of Array\u003cAny?\u003e all the parameters that were passed\n  myLocalService.DoStuff ( ... )\n});\n```\n\nYou can now call those functions from the script:\n\n```isl\nvalue: @.MyService.MyMethod( parameters );\n```\n\n### Custom Modifiers\n\nIn some situations custom modifiers are more appropriate as they make code more succinct and fluent.\nRegister an extension method with prefix `Modifier`. This will added it to the list of modifiers.\n\n```kotlin\n// register custom extension modifier by using the prefix \"Modifier.\"\ncontext.registerExtensionMethod(\"Modifier.taxAmount\", MyClass::calculateTaxAmount);\n\n// Or you can register just the lambda\ncontext.registerExtensionMethod(\"Modifier.taxAmount\", {\n  // it: params of Array\u003cAny?\u003e all the parameters that were passed\n  return calculatedAmount;\n});\n```\n\nYou now have access to the modifier using the `| modifier` format:\n\n```\nvalue: $price | taxAmount;\n```\n\n**Note:** You can override system modifiers if you really want by overriding by name e.g.\nregistering a modifier with `Modifier.Trim` will override the default `|trim` modifier.\n\n**Note:** Parameters to modifiers are supported. The first parameter you receive in the list of parameters\nis always the left-hand-side of the modifier, then all the other passed in parameters.\n\n## Command Line\nISL-CMD is the command line version of ISL that can validate or transform scripts from the command line.\n\n[Read complete documentation](https://intuit.github.io/isl/cli).\n\n\n## How to use the ISL in your own project:\n\nEmbedding the ISL in your own Java project to add scripting features is straight forward:\n[Java Hello World](https://intuit.github.io/isl/java.start)\n\n## ISL vs JOLT\n\nIn most common scenarios on a 1:1 comparison ISL is about 46% faster than JOLT.\n\nRead the [Detailed benchmark of ISL vs JOLT vs MVEL](https://intuit.github.io/isl/dev/benchmark-report).\n\n| Feature | ISL | JOLT |\n|---------|-----|------|\n| **Custom Functions** | ✅ Reusable helper functions | ❌ No function support |\n| **String Manipulation** | ✅ `trim`, `upperCase`, `lowerCase`, ... | ❌ Limited |\n| **Math Operations** | ✅ `precision`, `Math.sum`, expressions, ... | ❌ No math support |\n| **Conditionals** | ✅ `if/else`, `when/case`, `if`-expressions logic | ⚠️ Complex syntax |\n| **Array Operations** | ✅ `map`, `filter`, `unique`, `sort`, ... | ⚠️ Limited |\n| **Type Conversions** | ✅ `to.string`, `to.decimal`, `to.number`, `to.boolean`, ... | ❌ Manual |\n| **Content Type Conversions** | ✅ `json`, `csv`, `xsl`, `base64`, ... | ❌ Manual |\n| **Crypto Support** | ✅ `hmac`, `sha`, `rsa`,  ... | ❌ Manual |\n| **Date Parsing** | ✅ Full date/time support with formatting | ❌ No date support |\n| **String Templates** | ✅ Native interpolation | ❌ Workarounds needed |\n| **Variables** | ✅ Named variables for clarity | ❌ No variables |\n| **Object Spread** | ✅ Spread syntax for objects | ❌ Not available |\n\nAnd many more features.\n\n\n## Release Strategy\n\nThis repo uses semantic versioning for releases:\n\n- `Impact: Major` \u003e `x.0.0`\n- `Impact: Minor` \u003e `0.x.0`\n- `Impact: Patch` \u003e `0.0.1`\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nEager to contribute to this service? Check out our [Contribution Guidelines](./CONTRIBUTING.md)!\n\nThank you very much to our contributors:\n@corneliutusnea, @arikgdev, @francoisbeaussier, Paulo Miguel Magalhaes, @wilsonchendevelopment, @AaronTheSoftWearEngineer, @andrewPapad and many many others.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintuit%2Fisl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintuit%2Fisl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintuit%2Fisl/lists"}