I’m excited to share Upside Engine v3, a ground-up refresh that makes 2D development on Roblox smoother, faster and more expressive. After two years of work and a focused year of reengineering, v3 brings a cleaner core, better performance and a set of creative tools that let your ideas come to life.
Join our Discord to ask questions, share feedback, or show what you build. I can’t wait to see what you create with v3, really, thank you very much for being part of the journey :)!
This looks absolutely incredible. 2D games on Roblox will reach a new level. Thank you for this community resource—I can’t believe this is free! Keep up the great work!
This update introduces a comprehensive authority management system for multiplayer functionality, significantly improving the replication system and network synchronization capabilities. The new AuthorityService provides fine-grained control over which client or server has authority over specific objects, essential for preventing conflicts in multiplayer environments.
Additionally, this update includes important type definition fixes and improvements, particularly for TypeScript users, ensuring better type safety and developer experience.
Key Features:
Authority management system (AuthorityService)
Enhanced replication system with better client-server communication
Improved type definitions with bug fixes
Better property categorization and management
New geometry utilities for improved raycasting
Added
New Services
AuthorityService: New service for managing authority assignments in multiplayer environments
Controls which client or server has authority over specific objects
Provides SetAuthority() method to assign authority to objects (Server/Client)
Provides GetAuthority() method to retrieve current authority assignments
Defaults to “Server” authority when not explicitly set
Only server can manage authority assignments
New Types
AuthorityType: New type definition for authority management (“Server” | “Client”)
Added to both Luau and TypeScript type definitions
New Utilities
GetCorners.luau: New geometry utility function for calculating corners of objects
Added to src/Lib/Util/Geometry/ directory
New Replication System
NetworkingService:
Now the ReplicationRequest event is only fired when the request comes from a client, so it should only be used on the server side. Once you accept the request, the object will no longer be replicated again unless authority is granted to the client using the AuthorityService.
Handlers.luau: New replication handlers module
Handles object data updates from clients
Processes property changes and replication
New Properties file
Properties.luau: Replaces EssentialProperties.luau with expanded functionality
Added NonReplicable property category for properties that should not be replicated
Added Replicable property category for properties that can be replicated
Includes comprehensive property lists for all object types (StaticObject, Sprite, PhysicalObject, Instance)
Better organization of property metadata
Changed
Scene Class Enhancements
Enhanced Scene:Raycast2d() method with improved corner detection using new GetCorners utility
Added visibility bounds calculation for raycasting
Added circle shape support in raycasting
Improved raycast filtering and collision detection logic
Better handling of object dimensions and corners in raycast operations
NetworkingService Improvements
Added ServerReplication property (boolean, defaults to true) to control server-side replication
Added RequestsCache property for storing replication requests indexed by client UserId
Improved Cache property documentation - now explicitly stores cached object data for change detection
Enhanced object replication logic
Better handling of client-server communication
Improved data synchronization between clients
Networking Runtime
Refactored remote event handling with new handler system
Integrated new replication handlers for client requests
This looks pretty interesting. I was wondering if there is any available documentation I could read up on to see what the engine is fully capable of and compare its implementation complexity to Roblox’s default 3D engine.
I came across this guide but I wasn’t sure if it was up to date. The Upside Engine download link downloads the V2 version of the engine instead of V3, and the Client script from the tutorial steps in StarterPlayerScripts is different to that of the Client script in the Space Fighter game. Overall the code looks a lot cleaner in the Space Fighter game so I just want to make sure that the tutorial is up to date before progressing with the engine.
I guess you are talking about the Getting Started guide. This is the demo of v2, but it still works in v3. Maybe the module isn’t updated to the latest version in the place, but it should be compatible with v3. And it’s not possible that you’re downloading v2, because the only way to download v2 nowadays is by downloading it using the specific commit. All the download buttons by default download the latest version.
I recommend that you play around with the v3 demo, which is Space Fighter, since it includes the best practices for creating a game today with Upside Engine. Unfortunately, there isn’t a step-by-step guide for Space Fighter since it would be too long, but the current Getting Started guide should be enough to learn the basics.