There are a bunch depending on your needs. My personal favorites (but admittedly based on our use cases) is voxel solutions (including converting back from voxels to meshes) and - this can get quite elaborate to do it nicely -- B-Meshes.
B-Meshes are quite interesting. I had to tinker a bit with the paper's implementation to improve the robustness. I ran into some edge cases at least with the way I implemented the paper (not necessarily a problem with the paper itself), but a lot of it was solved by coming up with the most robust algorithm to generate convex hulls. They resemble ZSpheres in ZBrush in a way.
These assume a user parameter that adjusts the radius of the metaphorical spheres -- associated with the joints between bones -- sort of blended together almost like metaballs (but with a very clean polygon output), to form the final mesh. And that's something I assume you'll need unless your resulting mesh from a bone hierarchy is acceptable with uniform thickness throughout. There's usually some need for user input to say like this part is bigger/thicker, this part is smaller/thinner, but that's all they need to provide for the skeleton/bone hierarchy to get a pretty nice base mesh or even final mesh.
My custom-tailored voxel solution is my favorite if you don't have too many topology concerns over the final output. Basically you rasterize (voxelize?) your skeletal hierarchy writing to a voxel grid (3D Bresenham) that encompasses the volume with a voxel rep that stores the index of the associated bone/joint. Then you can iteratively expand the voxels (make their neighbors copy the same voxel value not too unlike a basic flood fill or breadth-first search) up to some threshold or number of iterations until reaching a desired uniform thickness. And that's an easy solution to adapt with variable maximum thickness for each joint.
Another solution is to treat your bones as signed distance fields (SDFs). You can associate a maximum thickness easily to a bone in your hierarchy (with variable thickness for each bone) that you can treat as a line SDF and render a nice looking thick result that looks very smooth and curvy and round (or even sharp and right-angular using Manhattan distance). The difficulty with this solution along with my preferred one is that you can't just use a straightforward triangle rasterizer to render the results. You have to do things like raymarching. Or you have to convert it back to polygons from SDF->polygons or voxels->polygons which isn't a trivial problem to do really well with results that are much nicer than your stereotypical marching cubes.