<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Austin Lehman</title>
    <description>The latest articles on DEV Community by Austin Lehman (@cup_of_code).</description>
    <link>https://dev.to/cup_of_code</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4034419%2Fa32702d5-e4ba-4d45-b896-1d13698a34d6.jpeg</url>
      <title>DEV Community: Austin Lehman</title>
      <link>https://dev.to/cup_of_code</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cup_of_code"/>
    <language>en</language>
    <item>
      <title>Why Aussom?</title>
      <dc:creator>Austin Lehman</dc:creator>
      <pubDate>Sat, 18 Jul 2026 03:02:50 +0000</pubDate>
      <link>https://dev.to/cup_of_code/why-aussom-3mmk</link>
      <guid>https://dev.to/cup_of_code/why-aussom-3mmk</guid>
      <description>&lt;p&gt;You have a Java application, and now you need it to do something Java is awkward at. Maybe you want to let users script your app without recompiling it. Maybe you want to change a piece of business logic without a full redeploy. Maybe you just want to run a quick, throwaway script and not stand up a whole build. Java is a phenomenal language and runtime, but these are the edges where it starts to feel heavy. That is exactly the space Aussom is built for.&lt;/p&gt;

&lt;p&gt;I started using Java almost 20 years ago and have loved every bit of it. I'm proud of all the recent momentum in the Java space and I hope it continues. Java does so much so well. But every great tool has an edge where it stops being the right one, and reaching for another language there isn't a betrayal of Java. It's how the best ecosystems work.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful comparison: C and Python
&lt;/h2&gt;

&lt;p&gt;Look at C. C is clearly important. Even after a lifetime of use it's still the foundation for new projects today, and new competitors such as Rust haven't been able to meaningfully displace it. C is fast and powerful on its own, but it isn't great for simple tasks. It's poor for throwaway code and quick scripts, it isn't very portable, and it hands you plenty of footguns. It's also a poor choice when you want to offer a scripting interface.&lt;/p&gt;

&lt;p&gt;Enter Python. Python is everywhere today because the barrier to entry is so low and it's genuinely useful. But Python leans on C. It's written in C, and much of its power comes from existing C libraries, whether they're UI frameworks, AI inference engines, or anything in between. C is efficient but poor at simple dynamic work; Python is dynamic and simple but poor at raw power and efficiency. Neither replaced the other. They endure together because they complement each other's weaknesses.&lt;/p&gt;

&lt;p&gt;That is the case I make for Aussom. &lt;strong&gt;Aussom is to Java as Python is to C.&lt;/strong&gt; It doesn't compete with Java, it complements it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes Aussom different from other JVM languages
&lt;/h2&gt;

&lt;p&gt;This is where Aussom parts ways with most of its neighbors. Kotlin, Scala, Groovy, Clojure, and friends compile to JVM bytecode. However different their syntax, they ultimately produce bytecode that's handed to the JVM to run, so they live inside the JVM's rules.&lt;/p&gt;

&lt;p&gt;Aussom does not compile to bytecode. The Aussom &lt;em&gt;runtime&lt;/em&gt; is compiled and starts up on the JVM, but your Aussom program is never compiled. The runtime parses it on the fly and interprets it directly. There's no compile step, and the JVM's rules don't apply to your code. Because a program is just text until the moment it runs, Aussom can load and unload code at runtime, in real time.&lt;/p&gt;

&lt;p&gt;For a Java developer, that means you can hand Aussom a string, run it, throw it away, and hand it another one, all inside a running JVM process.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;

&lt;p&gt;For quick work, an Aussom script is just a &lt;code&gt;.auss&lt;/code&gt; file of top-level statements. No class, no &lt;code&gt;main&lt;/code&gt;, no ceremony. Read some input, print some output, and you're done:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;include os;

name = os.readLine("Your name: ");
os.printf("Hello, {}!\n", name);

// Uppercase whatever is piped in: echo hi | ./shout.auss
text = os.readAll();
os.out(text.toUpper());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The language will still feel familiar. Lists and maps have first-class literals, &lt;code&gt;try&lt;/code&gt;/&lt;code&gt;catch&lt;/code&gt; works the way you'd expect, and the standard library covers the everyday scripting jobs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;include os;
include http;

res = new Http().get("https://api.example.com/status");
if (!res.info.isSuccessful) {
    os.outErr("request failed: " + res.info.responseCode);
    os.exit(1);
}

data = json.parse(res.body);
os.printf("state: {}\n", data.get("state"));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a script grows up into something bigger, the same language scales into classes, methods, and modules, so nothing you learn in script mode is thrown away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embedding it in your Java app
&lt;/h2&gt;

&lt;p&gt;Here's the part that matters most for a Java shop. You embed the interpreter directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Engine&lt;/span&gt; &lt;span class="n"&gt;eng&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Engine&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SecurityManagerImpl&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="n"&gt;eng&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseFile&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"script.aus"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;eng&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole integration. The script is data, so it can come from a file, a database row, a text field in your admin UI, or a request body. You decide where the code lives and when it runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The security model
&lt;/h2&gt;

&lt;p&gt;Letting arbitrary code run inside your process should make you nervous, and that's precisely why Aussom is built around a security manager. The &lt;code&gt;Engine&lt;/code&gt; takes a &lt;code&gt;SecurityManagerInt&lt;/code&gt;, and sensitive actions are gated by named properties such as &lt;code&gt;reflect.eval.string&lt;/code&gt; (run code built at runtime), &lt;code&gt;current.path.view&lt;/code&gt; (see the working directory), or &lt;code&gt;os.info.view&lt;/code&gt; (read details about the host). The built-in &lt;code&gt;SecurityManagerImpl&lt;/code&gt; denies these by default, so you opt in to exactly what you're comfortable granting, and you can supply your own implementation for finer control. That makes Aussom a real option for a user-facing scripting interface, not just internal glue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use X?
&lt;/h2&gt;

&lt;p&gt;A fair question. JShell and scripting engines such as Nashorn or GraalVM's JavaScript can evaluate code at runtime too, and Groovy has long been the go-to for JVM scripting. Aussom's distinction is the combination: pure interpretation with no compile step, true load-and-unload of code at runtime, a small and familiar syntax, and a built-in, property-based security model designed for handing scripting to your users. It's aiming to be the simple, dynamic complement to Java, not another way to write Java.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Java isn't bad at these tasks; it's just built for something else. When you need something simple, dynamic, and safely embeddable, that's where Aussom shines.&lt;/p&gt;

&lt;p&gt;The easiest way to get a feel for it is the online playground. No install, no setup, just write a script and run it right in your browser:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://playground.aussom-lang.com/" rel="noopener noreferrer"&gt;https://playground.aussom-lang.com/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Try a few lines, then imagine that same interpreter embedded in your own Java app. I think you'll see the fit.&lt;/p&gt;

</description>
      <category>aussom</category>
      <category>java</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
