BRE (Blueprint Roblox Editor) is an open-source project that allows users to use Python or the editor (the web application) to program in Luau, the language used by Roblox, derived from Lua.
The goal is to replicate the same programming system as Unreal Engine 5’s Blueprint, so that programming is done not with lines of code but with blocks. This can also attract people who want to learn programming.
BRE can be customized using block definitions that you can create yourself! Read the documentation to learn more.
Please send bugs to Report a Bug (Issues) and proposals to Propose a Node (Issues).
To help the project evolve, you can report vulnerabilities/bugs, whether on the site or in the backend (API).
Additionally, it is possible to propose your own node. Please follow the format below:
{
"type": "METHOD",
"title": "My Node",
"inputs": {
"input_name": {
"defaultValue": "default_input_value"
}
},
"outputs": [
"output_name"
]
}Note: outputs and inputs can be empty:
{
"type": "METHOD",
"title": "My Node",
"inputs": {},
"outputs": []
}- METHOD = exec connection
- FUNCTION = no exec connection
- EVENT = one exec output
Once that's done you need to create the node in Python on the backend, create a file in src/models, you need to complete the toLuau function and indicate your .json file in the constructor then the type of the node.
from src.Node import Node, NodeType
class MyNode(Node):
def __init__(self):
super().__init__("nodes/MyNode.json")
def toLuau(self):
return "My node"Note: If you create custom events and there is "more than 1 event" in your node, like CharacterAdded, make sure to give a value to events_count, example:
from typing import Optional
from src.Node import Node
class PlayerAdded(Node):
def __init__(self) -> None:
super().__init__("nodes/events/playeradded.json")
self.events_count = 1 # here, PlayerAdded is "one event"
def toLuau(self) -> Optional[str]:
output_names = [o.name for o in self.outputs]
args = ", ".join(output_names)
r = f'game:GetService("Players").PlayerAdded:Connect(function({args})'
return rfrom typing import Optional
from src.Node import Node
class CharacterAdded(Node):
def __init__(self) -> None:
super().__init__("nodes/events-characteradded.json")
self.event_count = 2 # there is PlayerAdded and CharacterAdded events
def toLuau(self) -> Optional[str]:
r = (f'game:GetService("Players").PlayerAdded:Connect(function(Player)\n'
f'Player.CharacterAdded:Connect(function(Character)')
return rYou can implement several things in the "translation" function, I advise you to look at the already existing nodes.
WARNING: If you create custom statement, like if, loops etc. make sure to have a "exec output" named "Continue" ! Example (for range):
{
"title": "For (Range)",
"color": [200,200,200],
"type": "METHOD",
"inputs": {
"variable": {
"defaultValue": "i"
},
"start": {
"defaultValue": 1
},
"end": {
"defaultValue": 10
},
"step": {
"defaultValue": 1
}
},
"exec": [
"Loop Body",
"Continue"
],
"outputs": []
}Run the following commands in a folder where you want the project to be located:
Linux:
git clone https://github.com/Program132/BlueprintRobloxEditor.git
cd BlueprintRobloxEditor
python3 -m venv env
source env/bin/activate
python3 -m pip install -r webeditor/requirements.txt
python3 webditor/app.pyWindows:
git clone https://github.com/Program132/BlueprintRobloxEditor.git
cd BlueprintRobloxEditor
py -m venv env
env/bin/activate
py -m pip install -r webeditor/requirements.txt
py webditor/app.pyNow move to http://127.0.0.1:80/
Download the lastest release if you want something stable:
git clone https://github.com/Program132/BlueprintRobloxEditor.git
cd BlueprintRobloxEditor
git fetch --tags
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)Read README.
You can read as well the post from the devforum: Roblox DevForum Post