Getting a Roblox R6 Rig Working
The R6 rig is the older, six-bone skeleton that Roblox still supports. It has a head, torso, two upper arms, two lower arms, two upper legs, and two lower legs. No fingers, no neck joint, no separate hips. That's it. The newer R15 rig adds more joints for finer animation, but R6 is still used because it's lighter, simpler, and some tools or places just expect it. To build or edit one, you'll need a 3D modeling program that supports rigging. Blender is the most common free option. You also need Roblox Studio for testing, and optionally Mixamo or another motion-capture source if you want pre-made animations. The actual rig itself is a mesh body paired with a bone hierarchy that matches the R6 joint layout. The first thing most people get wrong is the joint order. In R6, the arm chain goes from UpperTorso down through UpperArm, LowerArm, and then Hand. The leg chain goes from LowerTorso through UpperLeg, LowerLeg, and Foot. If you swap the order or add an extra joint, Roblox will reject the rig or the animations will bend in impossible ways. I learned this the hard way when a client sent me a character that had been converted from R15 back to R6 without removing the neck joint. The model loaded, but every time I played an animation, the torso and head separated and slid apart. The fix was cutting the neck bone entirely and re-parenting the head directly under UpperTorso, then baking the animation bones to match.
Another detail people overlook is that the R6 Hand bone isn't a visible part. It's an invisible control point at the end of the lower arm chain. If you leave a visible mesh hanging off it without scaling the mesh correctly, the hand mesh will stretch or float away from the forearm during animations. I once spent about forty-five minutes debugging a character whose hands were floating three stud inches away from the forearms. The issue wasn't in Roblox at all. It was that the bind pose in Blender had the Hand bone positioned above the forearm tip instead of flush with it. Resetting the bone roll and snapping the Hand to the tip fixed it immediately. Here is the basic workflow for creating one from scratch: Model the body mesh in Blender. Keep the vertex count reasonable. An R6 character doesn't need more than two or three thousand triangles total unless you are going for high detail, and even then you will pay for it in load times. UV unwrap the mesh. Add the R6 bone skeleton using the exact joint names Roblox expects: Head, Torso, LeftArm, LeftLowerArm, RightArm, RightLowerArm, LeftLeg, LeftLowerLeg, RightLeg, RightLowerLeg.
Once the bones are placed, parent the mesh to the skeleton with automatic weights. Use proportional editing or the weight paint mode to clean up the areas around the shoulders and hips. These are the joints that stretch the most during animation, and bad weighting shows up as weird bulging or collapsing. After weighting, test with a simple walk cycle animation before importing anything into Roblox. Export the model as an FBX file. In Roblox Studio, create a new model, insert a MeshPart or use the importer, and set the rig type to R6. Make sure your LocalScript or animation controller is set to handle R6 joints. This is where a lot of tutorials skip ahead too fast. If you try to run an R15 animation script on an R6 rig, it will break because the joint names don't match. You either need an R6-specific animation set or a conversion tool that remaps the joint names.
Get the Full Details

Practical Details About Using a Roblox R6 Rig
The R6 rig has a real advantage in performance. It uses fewer bones, which means fewer skinning calculations per frame. On mobile devices or lower-end hardware, this can be noticeable. A well-optimized R6 character with simple animations will run smoother than an R15 character with the same complexity, especially when you have twenty or more of them on screen at once. But there is a tradeoff. Because R6 has only six major body segments per side, complex movements like subtle finger gestures, neck tilts, or hip isolations are impossible. If your game depends on detailed character acting, R6 will hold you back. For simple running, jumping, and attacking, it is perfectly fine. Another limitation is that many modern Roblox animation tools and mixers assume R15 by default. The open-source rigs you find on DevForum or in the toolbox often come as R15. Converting them to R6 requires either a manual retargeting process or a script that maps the joint hierarchy. The conversion is not lossless. Some animation data gets lost or misaligned, so you should always test the converted animations in a blank place before committing to them.
If you already have a Roblox R6 Rig character and you want to update it, the easiest approach is to keep the skeleton structure intact and swap only the mesh. Changing the bone layout mid-project causes far more problems than it solves. I would rather rebuild the mesh than risk breaking an entire animation pipeline. One more thing. If you are exporting from Blender, make sure your armature is centered at the origin and that your scale is applied. Roblox does not handle non-uniform scale well, and an exported mesh with a scale of 2, 1, 1 will look stretched and misproportioned no matter how carefully you aligned the bones. Ctrl-A to apply scale before export. This step takes about ten seconds and prevents an hour of debugging later.