How to View a URDF Robot in Your Browser (No ROS Install)
You can view a URDF robot in your browser in about a minute — no ROS install, no RViz, no Linux box, no GPU. If you have ever cloned a robot repository just to see what an arm looks like, or fought with ros2 launch and a display server to render a single model, this is the shortcut. We will use Yugma as a URDF viewer online: load a robot, read its TF tree, and drag its joints with live forward kinematics.
# What is a URDF?
URDF stands for Unified Robot Description Format — an XML file that describes a robot as a tree of links connected by joints. Three concepts do all the work:
- Links are the rigid parts: a base, an upper arm, a forearm, a wrist, a gripper. Each link carries visual meshes, collision geometry, and inertial properties.
- Joints are the connections between links. A joint is
revolute(rotates within limits),continuous(rotates without limits),prismatic(slides), orfixed. Each names a parent link, a child link, an axis, and its limits. - Kinematics is what you get when you chain those joints from the base outward. Assign an angle to every joint and you can compute where every link sits in space. That calculation is forward kinematics, or FK.
That link-and-joint tree is exactly what a viewer needs to draw the robot and let you pose it.
# Why finding and viewing a URDF is harder than it should be
Two problems stack up. First, good URDFs are scarce. Authoring one by hand means writing XML, wiring up xacro macros, and getting every mesh path and joint axis correct. The public supply is thin, too: one arXiv survey of openly available robot descriptions counted only around 195 usable URDF models for the entire field. When you do find one, it is often bolted to a specific ROS package layout, so it will not render until you reconstruct that environment.
Second, viewing one traditionally means installing the whole stack. The default path is ROS 2 plus RViz on Linux — a heavy toolchain to render a single arm, and one that does not travel. You cannot paste an RViz window into a message, and a teammate on Windows or a Mac cannot open it at all without the same setup.
# Your options for a URDF viewer online
| Option | Install needed | Best for | The catch |
|---|---|---|---|
| RViz (ROS 2) | Full ROS 2 + Linux + display | Engineers already on ROS | Desktop only, heavy, not shareable |
| DIY three.js + urdf-loader | Node project + build step | Custom web apps | You handle meshes, TF, and Z-up to Y-up yourself |
| Foxglove | Desktop or web app | Live telemetry and panels | Data-viz focused; you supply the files |
| Yugma | None — any browser | A fast look, pose, and share | Concept and visualization, not a full physics sim |
If your goal is simply to see a robot, pose it, and send it to someone, a browser viewer wins. Here is the concrete walkthrough. For a side-by-side of the desktop tools, see RViz vs Foxglove vs a browser.
# View a URDF robot in your browser: step-by-step
- Open the studio. Go to Yugma Studio in any browser — laptop, Chromebook, or phone. There is nothing to install and no RTX GPU requirement.
- Pick a robot from the catalog. Open the Catalog tab and browse the 1,315-model industrial library by category or manufacturer — six-axis arms, cobots, grippers, and positioners. Each entry is a
.ygmcontainer that bundles kinematics, physical specs, and meshes. Click Add and the robot drops into the scene. Bringing your own robot described by a URDF follows the same kinematic pipeline. - Read the TF tree. The robot renders with its transform hierarchy intact — base to shoulder to elbow to wrist to tool. This is the same parent-child chain a URDF encodes, so the link names line up with what you would see in ROS.
- Drag the joint sliders. Open the Joints panel and move a slider. The arm re-poses in real time because Yugma runs forward kinematics in the browser at 60fps. This is the fastest way to sanity-check joint axes, limits, and rough reach without writing any code.
- Optionally run physics. Flip Run physics and the same joint model is handed to Rapier, a WebAssembly physics engine, so the robot responds to gravity and joint limits. It runs on the same live scene graph the AI Director composes — see how it works. This is a feel of motion, not a contact-rich dynamics sim.
- Share a link. Export a read-only viewer URL and drop it in Slack, Jira, or email. Whoever opens it sees the same posed robot in their browser, with nothing to install on their end.
# The Z-up vs Y-up gotcha that breaks DIY viewers
Here is the single detail that trips up almost every hand-rolled viewer. ROS and URDF follow REP-103: the world is Z-up. Three.js, the engine most browser viewers build on, is Y-up. Load a URDF mesh straight into a naive three.js scene and the robot lies on its side, or its joint axes point the wrong way and FK produces nonsense.
The fix is a coordinate conversion at the root of the model: rotate the whole robot from Z-up into Y-up while keeping each child node Z-up-local, so joint re-actuation still computes correctly. Yugma does this conversion for you at load time. If you build your own viewer, budget real engineering time for this step — it is the difference between a robot that stands up and one that does not.
# FAQ
Do I need ROS or Linux to view a URDF?
No. A browser viewer renders the robot from its kinematic description without a ROS installation, a Linux machine, or a display server. You open a URL and the robot is there, on whatever device you already have.
Can I pose the robot, or is it just a static render?
You can pose it. Joint sliders drive live forward kinematics, so dragging a slider re-poses the arm instantly. That lets you check joint limits and rough reach interactively, which a static screenshot cannot show.
Is this a physics simulator?
Not a full one. The optional Rapier pass gives you rigid-body motion under gravity and joint limits, which is enough to feel how a mechanism moves. For contact-rich dynamics — grasping, friction, deformable parts — use Gazebo or Isaac Sim.
Once a single robot renders, the natural next step is arranging several into a work cell.