{"library":"mink","title":"mink - MuJoCo Inverse Kinematics","description":"mink is a Python library for inverse kinematics (IK) based on MuJoCo, designed for robotics applications. It provides a flexible framework for defining kinematic tasks, joint limits, and collision avoidance, then solving for joint configurations. Currently at version 1.1.0, mink maintains an active development pace with recent releases focusing on performance improvements and stability.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install mink"],"cli":null},"imports":["from mink import Configuration","from mink import KinematicTask","from mink import JointLimitTask","from mink import solve_ik","from mink import build_ik"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import mujoco\nfrom mink import Configuration, KinematicTask, solve_ik\nimport numpy as np\n\n# Create a very simple MuJoCo model for demonstration\nmodel_xml = \"\"\"\n<mujoco>\n  <worldbody>\n    <body name=\"link0\" pos=\"0 0 0.1\">\n      <joint name=\"joint0\" type=\"hinge\" axis=\"0 0 1\" pos=\"0 0 0\" />\n      <geom type=\"capsule\" size=\"0.05 0.1\" fromto=\"0 0 0 0 0 0.1\" />\n      <body name=\"link1\" pos=\"0 0 0.1\">\n        <joint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" pos=\"0 0 0\" />\n        <geom type=\"capsule\" size=\"0.05 0.1\" fromto=\"0 0 0 0 0 0.1\" />\n        <body name=\"tip\" pos=\"0 0 0.1\">\n            <geom type=\"sphere\" size=\"0.02\" rgba=\"1 0 0 1\"/>\n        </body>\n      </body>\n    </body>\n  </worldbody>\n</mujoco>\n\"\"\"\nmodel = mujoco.MjModel.from_xml_string(model_xml)\ndata = mujoco.MjData(model)\n\n# Instantiate the configuration wrapper\nconfig = Configuration(model, data)\n\n# Define a kinematic task to reach a target position for the 'tip' body\ntarget_position = np.array([0.0, 0.1, 0.3]) # Target in world coordinates\n\ntasks = [\n    KinematicTask(\n        config=config,\n        body=\"tip\", # Target the 'tip' body defined in the XML\n        target_pos=target_position,\n        weight=1.0,\n    )\n]\n\n# Solve Inverse Kinematics\nq_sol, sol = solve_ik(tasks, config)\n\nprint(f\"IK Solution (joint angles): {q_sol}\")\n\n# Update MuJoCo data with the solution to get the final tip position\nconfig.set_joint_positions(q_sol)\nmujoco.mj_fwdKin(model, data)\nprint(f\"Final end-effector position: {config.get_body_position('tip')}\")","lang":"python","description":"This quickstart demonstrates how to set up a minimal MuJoCo model, define a `Configuration` object, create a `KinematicTask` to reach a target position for a specified body, and use `solve_ik` to find the joint angles. It then updates the MuJoCo data and prints the resulting end-effector position.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"1.1.1","pypi_latest":"1.1.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":40,"avg_install_s":10.2,"avg_import_s":1.35,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"mink","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"mink","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.3,"import_time_s":0.95,"mem_mb":26.4,"disk_size":"285M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"mink","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"mink","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10,"import_time_s":1.51,"mem_mb":28.7,"disk_size":"301M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"mink","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"mink","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.3,"import_time_s":1.55,"mem_mb":28.5,"disk_size":"287M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"mink","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"mink","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10,"import_time_s":1.39,"mem_mb":27.3,"disk_size":"286M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"mink","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"mink","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":6.7,"import_time_s":null,"mem_mb":null,"disk_size":null}]}}