Getting Started

See it running.

From an empty project to something moving on screen.

The C# Difference

One language.
Zero boundaries.

Most engines split you in two: the engine in C++, your scripts behind a binding layer. Prowl removes that wall. Engine and game code are the same language, the same binary.

No FFI overhead

Your game code calls engine code directly. One IL binary.

The engine is readable

Renderer, physics, audio, ECS. Plain C# you can read and change.

Scripts are first-class

Your components match built-in ones. No privileged internal API.

Tooling just works

Prowl projects are standard .NET .csproj files. Rider, VS Code, and Visual Studio open and debug them as-is, no plugin, no special extension, no ceremony.

PlayerController.cs C#
using Prowl.Runtime;

// Your component. Engine component. Same thing.
public class PlayerController : MonoBehaviour
{
    public float speed = 5f;
    private RigidBody3D rb;

    void Start()
    {
        // No reflection magic, direct reference
        rb = GetComponent<RigidBody3D>();
    }

    void FixedUpdate()
    {
        var input = Input.GetAxis("Horizontal");
        rb.AddForce(Vector3.right * input * speed);
    }
}

Come as you are.
The editor works today.

Clone the repo, read the source, open a PR. No gatekeepers, just the code.

Core Engine

Runtime + Editor

Full editor running. PBR, terrain, particles, physics, audio, all functional today.

Scripting

C# 14 .NET 10

Native C# components. No separate runtime. Full .NET access in scripts.

License

MIT

Engine, editor, and all Prowl.* libraries. No royalties, no strings.

Runtime First

No editor?
No problem.

The runtime is an ordinary .NET library. Write a class, run your game. Nothing in your game links against the editor.

Explore the runtime
Program.cs C#
using Prowl.Runtime;

new MyGame().Run("Simple Cube", 1280, 720);

public sealed class MyGame : Game
{
    public override void Initialize()
    {
        var scene = new Scene();
        // camera, light, cube...
        Scene.Load(scene);
    }
}