Create spring-like behavior with Physics V2 constraints:

// Create spring-like behavior using Physics V2 with a 6DoF constraint

// Create anchor point (static)
const springAnchor = BABYLON.MeshBuilder.CreateSphere("anchor", {diameter: 1}, scene);
springAnchor.position.y = 15;
const anchorAgg = new BABYLON.PhysicsAggregate(
    springAnchor, BABYLON.PhysicsShapeType.SPHERE,
    { mass: 0 }, scene
);

// Create suspended object (dynamic)
const bob = BABYLON.MeshBuilder.CreateSphere("bob", {diameter: 2}, scene);
bob.position.y = 10;
const bobAgg = new BABYLON.PhysicsAggregate(
    bob, BABYLON.PhysicsShapeType.SPHERE,
    { mass: 2, restitution: 0.6 }, scene
);

// Create a 6 degrees of freedom constraint with spring-like limits
const constraint = new BABYLON.Physics6DoFConstraint(
    { pivotA: new BABYLON.Vector3(0, 0, 0), pivotB: new BABYLON.Vector3(0, 5, 0) },
    [{ axis: BABYLON.PhysicsConstraintAxis.LINEAR_DISTANCE,
       minLimit: 0, maxLimit: 8 }],
    scene
);
anchorAgg.body.addConstraint(bobAgg.body, constraint);

// Visualize the spring connection with a line
let springLine = BABYLON.MeshBuilder.CreateLines("springLine", {
    points: [springAnchor.position, bob.position],
    updatable: true
}, scene);

// Update the line in the render loop
scene.onBeforeRenderObservable.add(() => {
    springLine = BABYLON.MeshBuilder.CreateLines("springLine", {
        points: [springAnchor.position, bob.position],
        instance: springLine
    });
});