Jyro’s Design Philosophy
Jyro is designed a little bit differently. Take a look at some of the decisions that went into solving the challenge of safe, intuititive, and powerful embedded scripting.
-
Jyro uses imperative programming constructs rather than the functional programming approaches common in data transformation languages. Scripts use familiar procedural patterns with explicit state modification, loops, and conditional statements instead of map-reduce operations, lambda expressions, or immutable transformations. This approach allows domain logic to be written in a way that closely matches how stakeholders describe requirements, making scripts more readable and maintainable for business-oriented development teams.
-
Traditional sandboxing approaches start with full-featured languages and attempt to restrict capabilities through allow-then-deny security models, creating attack surfaces where restrictions may be bypassed. Jyro inverts this paradigm by designing isolation as a foundational architectural principle rather than a retrofitted constraint. The execution environment provides no inherent access to system resources, file systems, network connections, or external APIs - these capabilities simply do not exist within the language runtime.
Scripts operate exclusively within the boundaries of the provided data context, with no mechanisms for accessing system namespaces or escalating privileges. This deny-by-default architecture eliminates entire categories of security vulnerabilities that plague traditional embedded scripting solutions, enabling confident deployment of untrusted user-generated code in multi-tenant applications where security breaches could compromise multiple customers or systems.
-
Jyro uses familiar programming constructs with clear, unambiguous syntax that prioritizes readability over brevity. Control flow statements use explicit keywords like if-then-else, foreach-in-do-end, and switch-case rather than symbolic operators or implicit behaviors. The language avoids syntactic sugar, operator overloading, and ambiguous parsing scenarios that can create confusion or unexpected behavior during script execution.
-
The language uses JSON-compatible syntax for all data literals, eliminating the learning curve for developers already working with JSON structures. Object and array notation follows standard JSON conventions enhanced with procedural programming constructs. This design choice prioritizes interoperability and reduces cognitive overhead while maintaining direct compatibility with existing data interchange formats.
-
Scripts operate on a single mutable data context provided by the host application, modifying data structures directly rather than creating new objects or managing return values. This approach eliminates object creation overhead, memory management complexity, and garbage collection pressure while providing natural error handling through the data context itself. The pattern scales efficiently from simple property updates to comprehensive data restructuring operations
-
Jyro delivers predictable execution characteristics by deliberately omitting user-defined functions, dynamic code evaluation, and complex object hierarchies that can introduce unpredictable behavior and security vulnerabilities. This approach encourages clean separation between reusable logic implemented as host functions and data transformation logic implemented in scripts.