DEV Community

Art
Art

Posted on

Hot Reload + Native Speed - Why I Built My Own Language for Android (and Desktop)

Sometimes development gives you a perfect timing moment.

I had just tagged and pushed a release... and exactly in that moment the
system told me I had reached the usage limit. Right after the push. Not
before.

That screenshot felt like a small 🎯 bullseye moment.

But the interesting part is not the timing.

The interesting part is the technology behind the project.


A different idea of Android development

In my current project I am experimenting with a scripting language
called SMS (Simple Multiplatform Script).

The idea is simple:

Build a language that feels like scripting, but runs native.


Native compilation

Normally the code is compiled through LLVM IR.

That means the result runs native on Android, not inside a VM.

So compared to many typical setups:

  • no virtual machine
  • no visible memory management
  • no manual malloc / free
  • no garbage collector

LLVM handles the low level details under the hood.

From the developer perspective it feels like writing a script.


Runtime Code via HTTP

Another interesting aspect is how dynamic code is handled.

When code is shipped with the application, it is compiled to native code via LLVM.

However, code that is loaded dynamically via HTTP is executed inside a sandbox and interpreted at runtime.

This makes it possible to extend or modify application behavior without rebuilding the app.

Hot reload during development is just one side effect of this architecture.
The same mechanism can also run safely in production.


Type inference instead of declarations

Another design choice:

The user does not need to declare types.

Types are inferred automatically when values are assigned.

Example idea:

var number = 42
var pi = 3.14
Enter fullscreen mode Exit fullscreen mode

value → type is derived automatically.

So the language keeps the simplicity of scripting while still
producing native code.


Hot Reload via Interpreter

But there is another layer that makes things interesting.

When code is loaded dynamically over HTTP, it is not compiled first.

Instead it is interpreted immediately.

That enables Hot Reload.

Which means:

You can push new code and the running Android app updates its behavior
instantly.

No rebuild.

No reinstall.


Why combine both approaches?

Because each approach has advantages.

Compiled mode

  • maximum performance
  • native execution
  • optimized code

Interpreter mode

  • dynamic updates
  • hot reload
  • instant experimentation

Combining both gives a workflow that feels extremely powerful.


Error feedback - Amiga 500 style

When SMS code fails, the app does not crash silently.

It tells you exactly what went wrong.

If you grew up with an Amiga - you know this feeling.

Except this time the error message is actually useful and you can continue - without scripts running.


The result

An Android development environment that feels like this:

  • scripting speed
  • native performance
  • dynamic updates
  • simple syntax

For me personally, this feels like a very interesting direction for future tooling.


The bigger idea

This language is also part of a broader ecosystem:

  • SML (Simple Multiplatform Language) for UI and structure inspired by QML from Qt, but without the expressions.
  • SMS a Kotlin like language for logic
  • Forge4D Multiplatform Dev Environment based on Godot 4.6

The goal is simple:

Make software development more accessible, without sacrificing
performance.


Current capabilities

At the moment the runtime already provides several building blocks.

UI elements are described with SML (Simple Multiplatform Language).

This currently includes:

  • dialogs
  • standard controls
  • layout structures

Content can also be rendered using Markdown, which makes it easy to build documentation (like in the web stack), books or content-driven apps.

On top of that the runtime exposes a 3D scene powered by the
Godot 4.6 engine.

This allows loading and animating .glb models directly inside the app.

So the platform can already combine:

  • structured UI (SML)
  • rich text content (Markdown)
  • interactive 3D scenes (SML, GLB)

And yes... the release timing was perfect 😄

Sometimes the universe just gives you a small developer joke.

Push release → success → usage limit reached.
(So even the Claude abo for just 20,- € helped)

Perfect timing.

Top comments (0)