Platformer Development in 2024: Why I'm Tired of the Same Conversations
I've been making games since the Flash era, and lately I keep running into people asking about this thing called Justa Platformer as if it's some magical solution to every design problem. It isn't. Let me explain what it actually does, what it doesn't do, and why you might still want to look at it. Justa Platformer is a node-based level editor and runtime framework for 2D platformers. The selling point is that it lets you build levels without touching code if you don't want to. The honest truth is that you will end up touching code eventually. Every project does. The question is whether the node system gets you far enough that the code you write is small and focused, or whether you're fighting the editor more than the engine. Here's the counter-intuitive part that nobody mentions: the node system works best when you deliberately avoid connecting every single mechanic. I spent three weeks trying to build a complete movement system inside Justa before realizing that the jump physics were fighting the variable-height ground tiles. The workaround was simple but stupidly obvious—I disconnected the ground collision nodes and wrote a 40-line script to handle gravity and tile intersection manually. Suddenly the editor became useful again instead of an obstacle.
The download link is on their GitHub repository. It's free for non-commercial use. Commercial licenses run about $150 if you need to redistribute the runtime without attribution, which most indie devs don't need until they actually sign a deal.
What Actually Works in Practice
The level editor handles tilemaps better than I expected. You can set tile properties through nodes, and the built-in lighting system responds to those properties without extra setup. For a small team making a single-platformer, this cuts level iteration time from roughly 30 minutes per pass down to maybe 8 minutes. Not magic, but real. Animation blending between states is where Justa shows its age. The node graph handles state transitions, but when you cross between sprint-to-slide or climb-to-dive, the blend weights fight each other. I found that disabling the automatic blend in the input handler and writing explicit lerp curves solved 90 percent of the stutter. The remaining 10 percent came from sprite sheet timing mismatches, which no engine fixes automatically. The physics are Arcade-style by default. That means no continuous collision detection, which keeps frame rates high on low-end hardware. If your platformer involves precise pixel-perfect jump testing or tight vertical gap navigation, you'll hit the CCD gap immediately. Some developers work around this by reducing physics ticks to fixed intervals, but that introduces its own problems with fast-moving projectiles.
Get the Full Details

When It Completely Fails
If you're building a roguelike with procedural generation that needs to validate level solvability before rendering, Justa has no built-in solver. I tried using the node graph to create a pathfinding validator, but the graph traversal time exploded past 200ms on levels larger than 64x64 tiles. The workaround was writing a separate Dijkstra implementation outside the editor entirely. Two hours of development, saved three days of debugging later. Multiplayer synchronization is another area where the framework silently drops. The node system assumes single-player execution, so when you add networked input with frame rollback, the latency compensation becomes a manual exercise. If your platformer involves competitive speedrunning or co-op jump sequences, the netcode will eat you alive without explicit lag compensation. I recommend looking at alternatives like Phosphor Engine if your project depends on consistent tick synchronization. The documentation is 400 pages. Half of it describes features from the 2019 version that were removed in 2022. The rest is API reference. There's no tutorial for the new scene system. If you're starting fresh, you'll spend about 4 hours understanding what actually works versus what the docs claim works.
Technical Specifics for People Who Want Them
The export pipeline produces HTML5, WebGL, and native executable builds. HTML5 exports include the full runtime compressed to about 2.3MB if you strip unused nodes. WebGL exports require a minimum GPU with shader model 3.0 support, which excludes mobile devices older than 2018. Native exports run the executable compiled to 64-bit Windows and Linux only. Mac support exists but requires manual signing certificates. Memory usage peaks at roughly 450MB during scene editing. Runtime execution drops to about 120MB after garbage collection completes. If your platformer involves large tilemaps or animated backgrounds, the renderer will eat you alive without explicit texture atlasing. Some developers work around this by reducing tile count to fixed intervals, but that introduces visual fidelity problems. The input handler supports both keyboard and controller input through node configuration. Keyboard mapping runs 12ms latency. Controller input adds about 8ms of polling overhead. If your platformer involves competitive speedrunning or precision jump testing, the input lag will matter. I recommend writing explicit input buffer management instead of relying on the built-in handler.
My Actual Recommendation
Justa Platformer is worth investigating if you're making a single-player 2D platformer under 100MB total size with basic tilemap mechanics. The node system saves about 6 hours of setup time compared to vanilla Godot or Unity for simple movement patterns. If your project involves complex jump physics, multiplayer, or procedural generation, the time savings disappear quickly. For commercial projects, I'd suggest evaluating Phosphor Engine first. The learning curve is steeper, but the performance characteristics are more predictable. Justa's node system introduces hidden dependencies that compound over time. I've seen projects that ran fine in development fail in export due to circular node references that the editor silently accepted. The community is small. There are roughly 300 active contributors on the GitHub repository. Stack Overflow has about 40 questions tagged with Justa Platformer. Discord has 1200 members, but only about 15 post weekly. If you hit a bug, expect to wait 3 to 5 business days for a response from the maintainers.

The Edge Case That Changed My Workflow
Three months ago, I encountered a collision detection failure with variable-height ground tiles combined with wall slides. The node graph treated the ground collision as a single rigid body, which caused the player to clip through tiles during fast descent. I disabled the automatic collision in the physics handler and wrote a custom SAT (Separating Axis Theorem) implementation outside the editor. The code was 85 lines. It ran at 60fps without stutter. The maintainers acknowledged this issue in the changelog six weeks later. They added a separate ground tile layer node type that handles variable height correctly. The workaround I discovered became official documentation. If you're using version 2.4.1 or earlier, upgrade immediately or apply the patch manually from the repository. Tilemap optimization is the area where Justa shows the most growth. The built-in occlusion culling reduces rendering time by about 40 percent on complex scenes. However, the culling nodes introduce 8ms of overhead during scene transitions. For real-time platformers, this matters more than the documentation claims. I found that disabling occlusion culling during cutscenes and re-enabling it after fixed intervals solved the problem without visual degradation.
What I Wish I Knew Before Starting
The project file structure is deeply nested. Scenes live in one directory, nodes in another, assets in a third. Export configurations add a fourth layer. After six months of use, I learned to organize files by mechanic instead of type. This reduced file navigation time from roughly 4 minutes to about 10 seconds per scene transition. The editor doesn't enforce this organization, but your sanity will benefit. Version control conflicts occur frequently with node graphs. The JSON representation of node connections changes with every editor update. I recommend storing node graphs as raw text files in your repository instead of relying on the binary export format. This increases merge conflict resolution time from about 20 minutes to roughly 5 minutes per conflict. The asset pipeline expects PNG files with specific naming conventions. Sprite sheets must follow the pattern [name]_[frame]_[state].png. Deviations cause runtime loading failures that produce no error messages. I spent four hours debugging a sprite sheet naming issue before realizing the font handler was rejecting invalid characters. The workaround was renaming all files to lowercase with underscores only. Took 15 minutes.