Skip to content

CrowdWare/Forge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

292 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧭 The Forge Vision

Manifest CI Release License: GPLv3

Forge is not about avoiding code. It is about removing unnecessary barriers between ideas and reality.

Today, creating software often requires 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.

Built with love, coffee, and a stubborn focus on simplicity.

screenprint


🧠 Core Idea

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.


📌 Project Status


💡 Feature Requests & Feedback

If you have an idea, a workflow pain point, or a missing feature, please open an issue.

  • Feature request: Use the repository's GitHub Issues tab and prefix the title with [Feature].
  • Bug report: Use the repository's GitHub Issues tab and prefix the title with [Bug].

Clear, concrete examples are the fastest way to shape Forge in the right direction.


Known Bugs (Blender Import)

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 Armature in Outliner, or set Display As to Stick/Octahedral.
  • Use helper script: tools/blender_armature_helper.py (Mixamo + Meshy compatible).

📐 SML: Simple, Explicit, Honest

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:

Window {
	title: "My First App
	pos: 0, 0
    size: 1920, 1080

	Label { text: "Hello World" }
}

⚡ Event-First Scripting (No Dispatcher Boilerplate)

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

🔒 Separation of Concerns (By Design)

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.


🧱 Deterministic, Portable, Durable

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 Toy

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.


🤝 Empowering Humans, Not Replacing Them

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.


⏳ A Long-Term Perspective

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


🧩 In One Sentence

Forge is a human-first system for building software by describing intent, not fighting tools.

About

Open framework for building structured applications with Godot, powered by a custom markup language and a Kotlin-based scripting system.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors