<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/sandboxing-script-extensions-with-graalvm-yksnjrczv" -->

---
title: Sandboxing Script Extensions with GraalVM | daily.dev
description: GraalVM provides four sandbox policy levels for executing untrusted scripts in JVM applications: TRUSTED (no restrictions), CONSTRAINED (limits host access),...
canonical: https://daily.dev/posts/sandboxing-script-extensions-with-graalvm-yksnjrczv
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Sandboxing Script Extensions with GraalVM | daily.dev
og:description: GraalVM provides four sandbox policy levels for executing untrusted scripts in JVM applications: TRUSTED (no restrictions), CONSTRAINED (limits host access),...
og:url: https://daily.dev/posts/sandboxing-script-extensions-with-graalvm-yksnjrczv
og:image: https://api.daily.dev/og/posts/yKsNJRCZV.png
og:image:alt: Sandboxing Script Extensions with GraalVM
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Sandboxing Script Extensions with GraalVM

**[GraalVM Blog](https://daily.dev/sources/graalvm-blog)** · 16 min read · 0 upvotes · 0 comments

## Summary

GraalVM provides four sandbox policy levels for executing untrusted scripts in JVM applications: TRUSTED (no restrictions), CONSTRAINED (limits host access), ISOLATED (separate heap/GC/JIT with CPU and memory limits), and UNTRUSTED (full adversarial defenses including JIT-spraying mitigations and speculative-execution barriers). Using a JavaScript discount-rule example, the post walks through progressively hardening a script extension system — restricting host API exposure via @HostAccess.Export, enforcing resource limits, handling cross-heap reference cycles with scoped callback values, and sharing compiled code across contexts via explicit Engine instances. Production deployments at NetSuite, Oracle Database MLE, and Picnic (38M rules/day) validate the approach. GraalVM 25.1 Community Edition makes these capabilities broadly available for JavaScript and WebAssembly, with Python sandbox support in development.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://medium.com/graalvm/sandboxing-script-extensions-with-graalvm-f192a8fb0c5f>

## Similar posts on daily.dev

- [Scripting in small apps: you don’t need a container for a macro](https://daily.dev/posts/scripting-in-small-apps-you-don-t-need-a-container-for-a-macro-qdx4d72pt) · Foojay.io · 1 upvotes · 0 comments
- [GraalJS 25.1: Modern JavaScript on GraalVM](https://daily.dev/posts/graaljs-25-1-modern-javascript-on-graalvm-be3ltskfy) · GraalVM Blog · 32 upvotes · 2 comments
- [Let's discuss sandbox isolation](https://daily.dev/posts/let-s-discuss-sandbox-isolation-qguovwl1h) · Hacker News · 0 upvotes · 0 comments
- [Vercel Sandbox tutorial: run untrusted code safely](https://daily.dev/posts/vercel-sandbox-tutorial-run-untrusted-code-safely-ycdiv657b) · Flavio Copes · 1 upvotes · 1 comments
- [The Untrusted Autonomous Workload and AI Sandboxes](https://daily.dev/posts/the-untrusted-autonomous-workload-and-ai-sandboxes-cotb1iovu) · Docker · 4 upvotes · 0 comments

---

Tags: [#security](https://daily.dev/tags/security), [#javascript](https://daily.dev/tags/javascript), [#java](https://daily.dev/tags/java)

[View this post on daily.dev](https://daily.dev/posts/sandboxing-script-extensions-with-graalvm-yksnjrczv)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Sandboxing Script Extensions with GraalVM","url":"https://daily.dev/posts/sandboxing-script-extensions-with-graalvm-yksnjrczv","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/sandboxing-script-extensions-with-graalvm-yksnjrczv"},"datePublished":"2026-07-22T22:42:09.852Z","dateModified":"2026-07-22T22:42:38.870Z","description":"GraalVM provides four sandbox policy levels for executing untrusted scripts in JVM applications: TRUSTED (no restrictions), CONSTRAINED (limits host access),...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e7a6195b4e00b64b1965e0e8b2218e3e?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e7a6195b4e00b64b1965e0e8b2218e3e?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"GraalVM Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"GraalVM Blog","logo":"https://media.daily.dev/image/upload/s--_41mLjjc--/f_auto,q_auto/v1773657235/logos/graalvm-blog?_a=BAMAMiiu0","url":"https://daily.dev/sources/graalvm-blog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/sandboxing-script-extensions-with-graalvm-yksnjrczv","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"security,javascript,java","timeRequired":"PT16M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"GraalVM Blog","item":"https://daily.dev/sources/graalvm-blog"},{"@type":"ListItem","position":3,"name":"Sandboxing Script Extensions with GraalVM"}]}
```

