Project Info
Design engineers are the latest trend in the tech space, but nobody is talking about engineer designers. We're here to change that. Unreal EngJam (working title) is a concerningly robust, from-scratch programming language and game engine, designed from the ground up to be programmed in a Figma FigJam whiteboard. With our incredibly high quality and extremely spaghetti programming language, you can program such things as classic single-player pong... ... and even render 3D models inside Figma: Think of All the Benefits Why be limited to syntax highlighting when you can color-code your software? Whiteboard out math and algorithms in the same space as your business logic The visual programming appeal of Scratch, with the power and robustness of a real programming language Comments are first-class, graphical, and move around as you refactor (and refactoring is as easy as drag-and-drop) Clippy Make a mistake? Your favorite office assistant will hover above the relevant code and help you out: How We Built It We wrote the programming language entirely from scratch (no dependencies) in TypeScript. We use Figma's plugin API to traverse the document and generate an AST which we can then interpret. We provide the programmer with access to render to and manipulate a "game window" inside Figma. It is important to sufficiently emphasize that this is a full, statically-typed, dynamically-bound novel programming language designed explicitly for the medium of Figma flowcharts. For example, to define a variable you draw a box. To store values, you can draw an arrow to the box, and to read values you draw an arrow from the box. With arrows, nothing needs to be referenced by name and refactoring is easy. The assignment of function and infix operator arguments are inferred first by applied name and then internal type. Challenges We Ran Into Figma runs plugins in WASM which means it is extremely difficult to debug code, and simple bugs like stack overflows often result in cryptic low-level memory leak errors. Also, 3D models are hard to get right :)
Unreal EngJam (Working Title)
Design engineers are the latest trend in the tech space, but nobody is talking about engineer designers. We're here to change that.
Unreal EngJam is a concerningly robust, from-scratch programming language and game engine, designed from the ground up to be programmed in a Figma FigJam whiteboard.
With our incredibly high quality and extremely spaghetti programming language, you can program such things as classic single-player pong...

... and even render 3D models inside Figma:

Think of All the Benefits
- Why be limited to syntax highlighting when you can color-code your software?
- Whiteboard out math and algorithms in the same space as your business logic
- The visual programming appeal of Scratch, with the power and robustness of a real programming language
- Comments are first-class, graphical, and move around as you refactor (and refactoring is as easy as drag-and-drop)
Clippy
Make a mistake? Your favorite office assistant will hover above the relevant code and help you out:


How We Built It
We wrote the programming language entirely from scratch (no dependencies) in TypeScript. We use Figma's plugin API to traverse the document and generate an AST which we can then interpret. We provide the programmer with access to render to and manipulate a "game window" inside Figma.
It is important to sufficiently emphasize that this is a full, statically-typed, dynamically-bound novel programming language designed explicitly for the medium of Figma flowcharts. For example, to define a variable you draw a box. To store values, you can draw an arrow to the box, and to read values you draw an arrow from the box. With arrows, nothing needs to be referenced by name and refactoring is easy.
The assignment of function and infix operator arguments are inferred first by applied name and then internal type.
Challenges We Ran Into
Figma runs plugins in WASM which means it is extremely difficult to debug code, and simple bugs like stack overflows often result in cryptic low-level memory leak errors.
Also, 3D models are hard to get right :)

Analysis
View
Metric
- 2
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- HTMLIn code
- JavaScriptIn code
- TypeScriptIn code
3 of 3 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
98 KB
Source files
11
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
kognise/aldente
18 files · 183 KB · @ f7ffb36
Structure
Interface
1 file · 6%Screens, components and styles rendered to the user.
Application logic
10 files · 56%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript96%
- Markdown2%
- HTML1%
- JavaScript0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 99 development-only dependencies.
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Argument assignment inferred by name then by typeVerified
Function and infix operator arguments are inferred first by applied name and then internal type
Claimed on Devposthigh confidencesrc/eval.ts:248— pickArgs matches named arguments first, then falls back to type matching via typesEq
AST interpreter / execution engineVerified
We interpret the generated AST to run programs
Claimed on readmehigh confidencesrc/eval.ts:412— runInstructions executes the instruction linked list, handling next-pointers and match armssrc/eval.ts:443— play() runs setup once then loops the program at 60fps via setInterval
Clippy office-assistant error/warning helperVerified
Clippy hovers above the relevant code and helps when you make a mistake
Claimed on readmehigh confidencesrc/debug.ts:36— makeClippyMessage draws the Clippy image plus a message shape positioned above the offending nodesrc/debug.ts:16— getClippy loads the embedded Clippy PNG bytes into a Figma imagesrc/eval.ts:467— Setup/loop eval errors trigger makeClippyMessage('ERROR', ...) on the error node
Figma plugin traverses document to generate an ASTVerified
Uses Figma's plugin API to traverse the document and generate an AST
Claimed on readmehigh confidencesrc/ast.ts:125— Iterates figma.currentPage.children, compiling SECTION nodes into WindowAstsrc/ast.ts:148— getConnections walks node.attachedConnectors to build the flow graph from Figma connectorsmanifest.json:1— Figma FigJam plugin manifest (editorType figjam, dynamic-page document access)
From-scratch programming language with no dependenciesVerified
The programming language was written entirely from scratch in TypeScript with no dependencies
Claimed on readmehigh confidencepackage.json:26— "dependencies": {} — no runtime dependencies; only build/lint devDependenciessrc/ast.ts:118— compilePage builds a full AST of Window/Flow/Instruction/Infix/Variable/Property nodes from scratchsrc/eval.ts:287— getInstructionValue interprets the AST, implementing the language runtime without external libs
Game window rendered and manipulable inside FigmaVerified
The programmer can render to and manipulate a game window inside Figma
Claimed on readmehigh confidencesrc/engine.ts:27— makeWindow wraps a Figma SectionNode in a Proxy exposing width/height that resize the sectionsrc/engine.ts:58— addSprite clones a graphic into the window and proxies x/y to move itsrc/eval.ts:446— clearWindow/play/stop drive the game window lifecycle
Infix operatorsVerified
Infix operators with inferred operand assignment
Claimed on Devposthigh confidencesrc/ast.ts:330— Instruction text is split on infix operators to build INFIX AST nodessrc/eval.ts:523— infixOperatorImpls implements /, %, -, *, +, <, >, <=, >= over numbers
Keyboard input controlsVerified
Interactive single-player games use keyboard controls (implied by single-player pong)
Claimed on readmehigh confidencesrc/input.ts:7— interpretBrowserKeys maps arrow keys and updatePressedKeys tracks pressed stateui.html:22— UI captures keydown/keyup and posts pressed keys to the pluginsrc/eval.ts:745— 'inputs' builtin exposes currently pressed keys as an enum to programs
Refactor-by-drag: references by arrow, not by nameVerified
With arrows nothing needs to be referenced by name, making refactoring as easy as drag-and-drop
Claimed on Devpostmedium confidencesrc/eval.ts:381— Variables are keyed by the Figma node id (output.at.id), not by name, so moving/renaming preserves referencessrc/ast.ts:141— getConnections resolves relationships purely through connector endpoint node ids
Static type systemVerified
A full, statically-typed language
Claimed on Devpostmedium confidencesrc/eval.ts:70— Type union (Number/String/Sprite/Enum/Graphic/Flow/Array/Any) defines the type systemsrc/eval.ts:235— typesEq performs structural type comparison used to dispatch arguments; typing is enforced at eval time, not a separate static pass
Variables as boxes, values stored/read via arrowsVerified
Define a variable by drawing a box; store values via an arrow to the box, read via an arrow from the box
Claimed on Devposthigh confidencesrc/ast.ts:185— SHAPE_WITH_TEXT of shapeType SQUARE compiles to a VARIABLE AST nodesrc/ast.ts:507— getInputsAndOutputs uses incoming/outgoing arrows as reads (inputs) and writes (outputs)src/eval.ts:380— setOutputs writes to variables keyed by the box node id; getDataValue reads them back
3D model rendering inside FigmaCode-supported
Render 3D models inside Figma
Claimed on readmemedium confidencesrc/eval.ts:815— 'parse obj faces' parses OBJ 'f' lines into face index arrayssrc/eval.ts:851— 'parse obj vertices' parses OBJ 'v' lines into vertex coordinate arrayssrc/eval.ts:664— 'add line' draws line connectors, enabling wireframe rendering; but no projection/render pipeline is in code (that logic lives in the Figma-authored program)
Single-player Pong gameCode-supported
You can program classic single-player pong
Claimed on readmemedium confidencesrc/eval.ts:756— 'colliding' builtin implements AABB collision detection between sprites, a Pong primitivesrc/eval.ts:638— 'add sprite' plus keyboard 'inputs' provide the primitives to build Pong, but no Pong program artifact ships in the repo (games are authored in Figma)
Comments are first-class and graphicalClaimed only
Comments are first-class, graphical, and move around as you refactor
Claimed on readmelow confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.