Forge 4D is an open platform for building applications using SML (Simple Markup Language) and SMS scripting combining 2D UI, 3D scenes and animation timelines, powered by the Godot engine.
Forge 4D is not about avoiding code.
It is about removing unnecessary barriers between ideas and reality.
Today, creating software often means navigating complex toolchains, fragile frameworks, platform-specific quirks, and constant rewrites. This complexity excludes many people and slows down even experienced developers.
Forge exists to change that.
The name Forge 4D describes the environment itself.
Forge can render traditional 2D user interfaces. Inside a viewport it can display interactive 3D scenes.
When you add a timeline for animations and state changes, time becomes the fourth dimension for animation and interaction.
2D + 3D + Time = Forge 4D.
Built with love, coffee, and a stubborn focus on simplicity.
Describe what you want β not how the engine works.
Forge is built around a simple principle:
Structure and intent should be declared. Execution and optimization belong to the runtime.
Instead of writing imperative glue code, creators describe UI, behavior, and structure using a simple, readable, declarative language (SML). The Forge-Runner interprets this description and executes it on the target platform.
- Current Process: CWUP/README.md
- Backlog: BACKLOG.md
- ForgePoser: ForgePoser/README.md
- Contribution model: CONTRIBUTING.md
If you have an idea, a workflow pain point, or a missing feature, please open an issue.
- Feature request: Use the repository's GitHub
Issuestab and prefix the title with[Feature]. - Bug report: Use the repository's GitHub
Issuestab and prefix the title with[Bug].
Clear, concrete examples are the fastest way to shape Forge in the right direction.
When exporting posed/animated characters to .glb and opening them in Blender, the rig can appear as a
"golfball" style armature display. This is a Blender viewport/display issue around armature visualization.
See full guide: docs/blender_armature_workaround.md
Short version:
- Hide
Armaturein Outliner, or setDisplay AstoStick/Octahedral. - Use helper script:
tools/blender_armature_helper.py(Mixamo + Meshy compatible).
SML is intentionally minimal and means Simple Markup Language. β’ No hidden magic β’ No complex expressions β’ No JavaScript or JSON hacks β’ No framework lock-in
SML focuses on: β’ structure β’ hierarchy β’ intent β’ readability
It is designed to be: β’ written by humans β’ generated by tools β’ understood years later
If you can read it, you can reason about it.
Sample shows a minimal Forge application written in SML:
Window {
title: "My First App"
pos: 0, 0
size: 1920, 1080
Label { text: "Hello World" }
}This file alone is enough to start a Forge application.
Forge builds on the full UI system of the Godot engine.
All standard Godot controls and dialogs are available, including buttons, panels, lists, trees, text inputs, menus and more.
Forge extends this foundation with additional components designed for building modern applications and tools.
- DockingHost β main workspace container managing dockable panels
- DockingContainer β dockable panels that can be rearranged by the user
- Window β Forge window element for application layouts
- Markdown β rich text and documentation viewer
- Terminal β integrated terminal for command execution and logs
- Viewport3D β embed interactive 3D scenes inside applications
- Timeline β timeline component for animations and time-based workflows
- PosingEditor β editor for adjusting poses and animation data
These components make Forge suitable not only for traditional user interfaces, but also for building complex tools such as editors, animation workflows, and interactive 3D applications.
To be able to glue SML to the engine we created on very simple Kotlin based script language, we call SMS (Simple Multiplatform Script). SMS is very easy to learn, because it only handles basic instructions.
fun ready() {
var lang = os.getLocale()
var msg = ""
when(lang) {
"de" -> msg = "Hallo Welt!"
"es" -> msg = "Β‘Hola Mundo!"
"fr" -> msg = "Bonjour le monde !"
"pt" -> msg = "OlΓ‘ Mundo!"
else -> msg = "Hello World!"
}
log.info(msg)
}SMS uses a direct event style:
on <id>.<event>(...) { ... }
That means no long dispatcher chains, no if / else if routing blocks, and no event-to-handler glue code you need to maintain manually.
Instead of this:
- receive generic event
- parse ids and event names
- route with if/else
- call business logic
you write this:
MenuBar {
Menu {
id: file
title: "File"
Item { id: saveAs text: "Save As..." }
}
}on saveAs.clicked() {
log.info("Save As clicked")
// your save-as flow here
}
This is one of Forge's strongest UX advantages:
- explicit and readable
- easy for newcomers
- deterministic for tooling/AI
- fast to evolve without architecture noise
Forge enforces a strict separation: β’ Structure & UI β SML β’ Behavior & Logic β native C# code β’ Execution β Forge-Runner
This prevents the common collapse where UI, logic, and state become tangled and unmaintainable.
Forge systems are designed to be: β’ deterministic β’ platform-independent β’ future-proof
SML files are plain text. They can be versioned, diffed, reviewed, archived, and regenerated.
The same SML can be rendered: β’ on Desktop β’ on Mobile β’ on Web β’ inside game engines like Godot
without rewriting the description.
Forge is not a drag-and-drop toy for shallow demos.
It is a professional toolchain for: β’ tools β’ editors β’ applications β’ games β’ books β’ interactive content
Advanced users can extend the system with: β’ native plugins β’ WASM modules β’ custom runners
Without breaking the simplicity of the core.
Forge is not about replacing developers.
It is about: β’ enabling designers to build real software β’ allowing developers to focus on hard problems β’ letting AI generate structure safely β’ giving humans full control and ownership
AI can generate SML. Humans can read it. Runners execute it.
No black boxes.
Forge is designed to survive trends. β’ Frameworks will come and go β’ Languages will change β’ Platforms will disappear
But clear structure, explicit intent, and simple text formats endure.
Forge aims to be: β’ boring in the best way β’ stable β’ understandable β’ adaptable
Forge is a human-first system for building software by describing intent, not fighting tools.
