You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by gi...@apache.org on 2025/12/03 22:20:59 UTC

(tvm-site) branch asf-site updated: deploying ffi docs

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/tvm-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 9a1f98a775 deploying ffi docs
9a1f98a775 is described below

commit 9a1f98a7757d1bb9aa5d165534324faf7f568158
Author: tvm-bot <95...@users.noreply.github.com>
AuthorDate: Wed Dec 3 22:20:53 2025 +0000

    deploying ffi docs
---
 ffi/.buildinfo                                     |    2 +-
 ffi/_modules/index.html                            |  138 +-
 ffi/_modules/tvm_ffi/_convert.html                 |  137 +-
 ffi/_modules/tvm_ffi/_dtype.html                   |  137 +-
 ffi/_modules/tvm_ffi/_tensor.html                  |  137 +-
 ffi/_modules/tvm_ffi/access_path.html              |  137 +-
 ffi/_modules/tvm_ffi/container.html                |  137 +-
 ffi/_modules/tvm_ffi/cpp/extension.html            |  340 ++++-
 ffi/_modules/tvm_ffi/cpp/nvrtc.html                | 1228 +++++++++++++++
 ffi/_modules/tvm_ffi/error.html                    |  137 +-
 ffi/_modules/tvm_ffi/module.html                   |  244 ++-
 ffi/_modules/tvm_ffi/registry.html                 |  137 +-
 ffi/_modules/tvm_ffi/serialization.html            |  137 +-
 ffi/_modules/tvm_ffi/stream.html                   |  137 +-
 ffi/_sources/get_started/quickstart.rst            |    3 +-
 ffi/_sources/guides/compiler_integration.md        |   10 +-
 ffi/_sources/guides/cpp_guide.md                   |   47 +-
 ffi/_sources/guides/cubin_launcher.rst             |  422 +++++
 ffi/_sources/guides/kernel_library_guide.rst       |   15 +
 ffi/_sources/index.rst                             |    1 +
 .../generated/classtvm_1_1ffi_1_1CubinKernel.rst   |   17 +
 .../generated/classtvm_1_1ffi_1_1CubinModule.rst   |   17 +
 ...ncher_8h_1a99736a44462543179cb434ebd4512ade.rst |   14 +
 ...ncher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.rst |   14 +
 ...2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.rst |   14 +
 ...ction_8h_1a78c6d17c063fba9ca07175f150838046.rst |   14 +
 ...ction_8h_1af84cdf62b6c193275db7e63e3bffc8bd.rst |   14 +
 .../reference/cpp/generated/dir_tvm_ffi_extra.rst  |    6 +
 .../cpp/generated/dir_tvm_ffi_extra_cuda.rst       |   23 +
 .../cpp/generated/file_tvm_ffi_base_details.h.rst  |    2 +
 .../cpp/generated/file_tvm_ffi_c_api.h.rst         |    2 +
 .../generated/file_tvm_ffi_container_array.h.rst   |    2 +
 .../cpp/generated/file_tvm_ffi_container_map.h.rst |    2 +
 .../cpp/generated/file_tvm_ffi_error.h.rst         |    6 +
 .../generated/file_tvm_ffi_extra_c_env_api.h.rst   |    6 +
 .../generated/file_tvm_ffi_extra_cuda_base.h.rst   |   69 +
 .../file_tvm_ffi_extra_cuda_cubin_launcher.h.rst   |   98 ++
 .../file_tvm_ffi_extra_cuda_device_guard.h.rst     |   59 +
 .../cpp/generated/file_tvm_ffi_extra_module.h.rst  |    2 +
 .../cpp/generated/file_tvm_ffi_extra_stl.h.rst     |  104 ++
 .../cpp/generated/file_tvm_ffi_function.h.rst      |    8 +
 .../cpp/generated/file_tvm_ffi_object.h.rst        |    2 +
 .../cpp/generated/file_tvm_ffi_string.h.rst        |    2 +
 .../cpp/generated/file_tvm_ffi_type_traits.h.rst   |    2 +
 .../reference/cpp/generated/namespace_tvm__ffi.rst |   12 +-
 .../cpp/generated/namespace_tvm__ffi__symbol.rst   |    2 +
 .../program_listing_file_tvm_ffi_c_api.h.rst       |    2 +-
 ...rogram_listing_file_tvm_ffi_container_map.h.rst |    3 +
 ...gram_listing_file_tvm_ffi_extra_cuda_base.h.rst |   54 +
 ...ng_file_tvm_ffi_extra_cuda_cubin_launcher.h.rst |  236 +++
 ...ting_file_tvm_ffi_extra_cuda_device_guard.h.rst |   62 +
 ...program_listing_file_tvm_ffi_extra_module.h.rst |    1 +
 .../program_listing_file_tvm_ffi_extra_stl.h.rst   |  646 ++++++++
 .../program_listing_file_tvm_ffi_function.h.rst    |   72 +-
 ...ram_listing_file_tvm_ffi_function_details.h.rst |    1 +
 .../structtvm_1_1ffi_1_1CUDADeviceGuard.rst        |   17 +
 .../cpp/generated/structtvm_1_1ffi_1_1dim3.rst     |   17 +
 .../reference/cpp/generated/unabridged_orphan.rst  |   25 +
 ...odule_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.rst |   14 +
 .../generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.rst  |    6 +
 .../reference/python/generated/tvm_ffi.Module.rst  |    2 +
 ffi/_sources/reference/python/index.rst            |    7 +
 ffi/_static/basic.css                              |    8 -
 ffi/_static/documentation_options.js               |    2 +-
 .../downloads/mermaid-layout-elk.esm.min.mjs       |    2 +-
 ffi/_static/searchtools.js                         |   13 +-
 ffi/concepts/abi_overview.html                     |   18 +-
 ffi/genindex.html                                  |  206 ++-
 ffi/get_started/quickstart.html                    |   21 +-
 ffi/get_started/stable_c_abi.html                  |   18 +-
 ffi/guides/build_from_source.html                  |   18 +-
 ffi/guides/compiler_integration.html               |   34 +-
 ffi/guides/cpp_guide.html                          |   62 +-
 ffi/guides/cpp_packaging.html                      |   18 +-
 ffi/guides/cubin_launcher.html                     | 1608 ++++++++++++++++++++
 ffi/guides/kernel_library_guide.html               |   32 +-
 ffi/guides/python_guide.html                       |   18 +-
 ffi/guides/python_packaging.html                   |   18 +-
 ffi/guides/rust_guide.html                         |   24 +-
 ffi/index.html                                     |   19 +-
 ffi/objects.inv                                    |  Bin 123133 -> 129364 bytes
 ffi/py-modindex.html                               |  137 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Any.html      |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1AnyView.html  |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Array.html    |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Bytes.html    |   24 +-
 ...bj.html => classtvm_1_1ffi_1_1CubinKernel.html} |  289 ++--
 ...es.html => classtvm_1_1ffi_1_1CubinModule.html} |  251 +--
 .../generated/classtvm_1_1ffi_1_1DenseMapObj.html  |   24 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Error.html    |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Function.html |   18 +-
 .../generated/classtvm_1_1ffi_1_1FunctionObj.html  |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Map.html      |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1MapObj.html   |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Module.html   |   18 +-
 .../generated/classtvm_1_1ffi_1_1ModuleObj.html    |   59 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Object.html   |   18 +-
 .../generated/classtvm_1_1ffi_1_1ObjectPtr.html    |   18 +-
 .../generated/classtvm_1_1ffi_1_1ObjectRef.html    |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Optional.html |   18 +-
 .../generated/classtvm_1_1ffi_1_1PackedArgs.html   |   18 +-
 .../generated/classtvm_1_1ffi_1_1RValueRef.html    |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Shape.html    |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1ShapeObj.html |   18 +-
 .../generated/classtvm_1_1ffi_1_1ShapeView.html    |   18 +-
 .../generated/classtvm_1_1ffi_1_1SmallMapObj.html  |   18 +-
 .../generated/classtvm_1_1ffi_1_1StrictBool.html   |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1String.html   |   18 +-
 .../classtvm_1_1ffi_1_1StructuralEqual.html        |   18 +-
 .../classtvm_1_1ffi_1_1StructuralHash.html         |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Tensor.html   |   18 +-
 .../generated/classtvm_1_1ffi_1_1TensorObj.html    |   18 +-
 .../generated/classtvm_1_1ffi_1_1TensorView.html   |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Tuple.html    |   18 +-
 .../classtvm_1_1ffi_1_1TypedFunction.html          |   18 +-
 ...i_1_1TypedFunction_3_01R_07Args_8_8_8_08_4.html |   18 +-
 .../cpp/generated/classtvm_1_1ffi_1_1Variant.html  |   18 +-
 .../classtvm_1_1ffi_1_1WeakObjectPtr.html          |   18 +-
 ...lasstvm_1_1ffi_1_1reflection_1_1AccessPath.html |   18 +-
 ...stvm_1_1ffi_1_1reflection_1_1AccessPathObj.html |   18 +-
 ...lasstvm_1_1ffi_1_1reflection_1_1AccessStep.html |   18 +-
 ...stvm_1_1ffi_1_1reflection_1_1AccessStepObj.html |   18 +-
 ...vm_1_1ffi_1_1reflection_1_1AttachFieldFlag.html |   18 +-
 ...sstvm_1_1ffi_1_1reflection_1_1DefaultValue.html |   18 +-
 ...asstvm_1_1ffi_1_1reflection_1_1FieldGetter.html |   18 +-
 ...asstvm_1_1ffi_1_1reflection_1_1FieldSetter.html |   18 +-
 ...classtvm_1_1ffi_1_1reflection_1_1GlobalDef.html |   18 +-
 .../classtvm_1_1ffi_1_1reflection_1_1Metadata.html |   18 +-
 ...stvm_1_1ffi_1_1reflection_1_1ObjectCreator.html |   18 +-
 ...classtvm_1_1ffi_1_1reflection_1_1ObjectDef.html |   18 +-
 ...tvm_1_1ffi_1_1reflection_1_1TypeAttrColumn.html |   18 +-
 ...asstvm_1_1ffi_1_1reflection_1_1TypeAttrDef.html |   18 +-
 ..._api_8h_1a01871644eed04162005df7faa5442f92.html |   18 +-
 ..._api_8h_1a4241f838270253b885e1de02534bc273.html |   18 +-
 ..._api_8h_1a42634cb2690dce4d9af6c2a402fc903c.html |   18 +-
 ..._api_8h_1a717daddad98d127813ba8ff5a715e929.html |   18 +-
 ...her_8h_1a99736a44462543179cb434ebd4512ade.html} |  169 +-
 ...her_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html} |  112 +-
 ...ase_8h_1a8b7e871d0d7206eacc60705f11827ee1.html} |   64 +-
 ...dian_8h_1a2ebd9542b313b3b45b2892f2b3d4f26d.html |   18 +-
 ...dian_8h_1a912dbc7a68913612c723f877acaa8105.html |   18 +-
 ...rror_8h_1a1a94c8b78e74adec05051abb9055e7b8.html |   18 +-
 ...rror_8h_1a26827bb8bc9e39255060f6be1d2a37fb.html |   18 +-
 ...rror_8h_1a288653475dd42db1c715a11ab2972578.html |   18 +-
 ...rror_8h_1a386641a33bb14802830471a2442ddd7d.html |   18 +-
 ...rror_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html |   18 +-
 ...rror_8h_1a64c939463f90816ffc2b70bc89ea3e43.html |   24 +-
 ...rror_8h_1a6c01470f76c6437edf93ac668ea6242a.html |   24 +-
 ...rror_8h_1a7205bbaef1c45e57f939af6deefb6449.html |   18 +-
 ...rror_8h_1a83986fc775d68d4abcc209c2f67dde6e.html |   18 +-
 ...rror_8h_1a8df4e0ff8a6195274c6f7c031a4f0db4.html |   18 +-
 ...rror_8h_1a927d4ae2bbf7a08723643993e780f183.html |   18 +-
 ...rror_8h_1aade00b2e0a9789e3e8bf33441d651455.html |   18 +-
 ...rror_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html |   24 +-
 ...rror_8h_1ae5be195e80d32413cbe5e2ad11e146f7.html |   18 +-
 ...rror_8h_1af1f84686ce5635b3a378567368e89e4d.html |   18 +-
 ...rror_8h_1afcd5778e656fa2c20aa0b81fbcebc497.html |   18 +-
 ...tion_8h_1a01777f12f8f99771331d679a0c1d2ed4.html |   39 +-
 ...tion_8h_1a10bd932564c8e71a3978a061fbb82360.html |   18 +-
 ...tion_8h_1a14328d95ccda4b1691b9874645aef4bd.html |   18 +-
 ...ion_8h_1a78c6d17c063fba9ca07175f150838046.html} |   64 +-
 ...tion_8h_1ae3c016c4bf383aa205b4485edd7ca17c.html |   18 +-
 ...ion_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html} |   90 +-
 ...ject_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html |   24 +-
 ...ject_8h_1a438ff7ee1fc503216d35e156081280c0.html |   18 +-
 ...ject_8h_1a4ac33631a9b51877808ec7edf010f0d2.html |   18 +-
 ...ject_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html |   18 +-
 ...ject_8h_1a9d1c42071de0440f70c7bb5e0bd0f325.html |   18 +-
 ...ject_8h_1ac593f4065568c8f61cf38d00d585befd.html |   18 +-
 ffi/reference/cpp/generated/dir_tvm.html           |   18 +-
 ffi/reference/cpp/generated/dir_tvm_ffi.html       |   18 +-
 .../cpp/generated/dir_tvm_ffi_container.html       |   18 +-
 ffi/reference/cpp/generated/dir_tvm_ffi_extra.html |   27 +-
 ...reflection.html => dir_tvm_ffi_extra_cuda.html} |   41 +-
 .../cpp/generated/dir_tvm_ffi_reflection.html      |   18 +-
 ..._api_8h_1a1925bb5d568a3f5c92a6c28934c9bcc2.html |   18 +-
 ..._api_8h_1a8eb3fb55f6ec3c46b6e57740af4ca58a.html |   18 +-
 ..._api_8h_1ad5a608f648c4f86cafdc8dc09f870bc5.html |   18 +-
 ..._api_8h_1ad6a441d28d4a6406418489609e975a19.html |   18 +-
 ..._api_8h_1aea0f30bf60e26c1322e525e246ef5be9.html |   18 +-
 ...type_8h_1a16f66b97fa44d7bd6114324c8b8e1bed.html |   18 +-
 ...lection_1a9c2cd4d683e7c7065942e36e628a2517.html |   18 +-
 .../cpp/generated/file_tvm_ffi_any.h.html          |   18 +-
 .../cpp/generated/file_tvm_ffi_base_details.h.html |   19 +-
 .../cpp/generated/file_tvm_ffi_c_api.h.html        |   19 +-
 .../cpp/generated/file_tvm_ffi_cast.h.html         |   18 +-
 .../generated/file_tvm_ffi_container_array.h.html  |   19 +-
 ...file_tvm_ffi_container_container_details.h.html |   18 +-
 .../generated/file_tvm_ffi_container_map.h.html    |   19 +-
 .../generated/file_tvm_ffi_container_shape.h.html  |   18 +-
 .../generated/file_tvm_ffi_container_tensor.h.html |   18 +-
 .../generated/file_tvm_ffi_container_tuple.h.html  |   18 +-
 .../file_tvm_ffi_container_variant.h.html          |   18 +-
 .../cpp/generated/file_tvm_ffi_dtype.h.html        |   18 +-
 .../cpp/generated/file_tvm_ffi_endian.h.html       |   18 +-
 .../cpp/generated/file_tvm_ffi_error.h.html        |   21 +-
 .../cpp/generated/file_tvm_ffi_extra_base.h.html   |   18 +-
 .../cpp/generated/file_tvm_ffi_extra_base64.h.html |   18 +-
 .../generated/file_tvm_ffi_extra_c_env_api.h.html  |   31 +-
 ....h.html => file_tvm_ffi_extra_cuda_base.h.html} |   70 +-
 ... file_tvm_ffi_extra_cuda_cubin_launcher.h.html} |  110 +-
 ...=> file_tvm_ffi_extra_cuda_device_guard.h.html} |   51 +-
 .../cpp/generated/file_tvm_ffi_extra_json.h.html   |   18 +-
 .../cpp/generated/file_tvm_ffi_extra_module.h.html |   19 +-
 .../file_tvm_ffi_extra_serialization.h.html        |   18 +-
 ...string.h.html => file_tvm_ffi_extra_stl.h.html} |  112 +-
 .../file_tvm_ffi_extra_structural_equal.h.html     |   18 +-
 .../file_tvm_ffi_extra_structural_hash.h.html      |   18 +-
 .../cpp/generated/file_tvm_ffi_function.h.html     |   22 +-
 .../generated/file_tvm_ffi_function_details.h.html |   18 +-
 .../cpp/generated/file_tvm_ffi_memory.h.html       |   18 +-
 .../cpp/generated/file_tvm_ffi_object.h.html       |   19 +-
 .../cpp/generated/file_tvm_ffi_optional.h.html     |   18 +-
 .../file_tvm_ffi_reflection_access_path.h.html     |   18 +-
 .../file_tvm_ffi_reflection_accessor.h.html        |   18 +-
 .../file_tvm_ffi_reflection_creator.h.html         |   18 +-
 .../file_tvm_ffi_reflection_registry.h.html        |   18 +-
 .../cpp/generated/file_tvm_ffi_rvalue_ref.h.html   |   18 +-
 .../cpp/generated/file_tvm_ffi_string.h.html       |   19 +-
 .../cpp/generated/file_tvm_ffi_type_traits.h.html  |   19 +-
 ...tion_8h_1a111e2ed7444eb220e19c7624d0932d89.html |   18 +-
 ...rray_8h_1a3b56317c7cfb2760cf6c09c303840967.html |   18 +-
 ...rray_8h_1af5983fd2a31e79635307875b3a216472.html |   18 +-
 ...se64_8h_1a279b4ba2f4c7ea16291ef24b73e43963.html |   18 +-
 ...se64_8h_1aa5b2a4531449585b9f079cb170a79f0b.html |   18 +-
 ...se64_8h_1acb849cdb1d9b9620be10bbcda0257afa.html |   18 +-
 ...se64_8h_1ae1d4736f7dc56b224acd303ba7bf7a45.html |   18 +-
 ..._api_8h_1a0d3dcd6ceff356614a6924201c02cf97.html |   18 +-
 ..._api_8h_1a0ee6d2da9a72749561838bf503f62f93.html |   18 +-
 ..._api_8h_1a1162f2cbaf1a7628a03ed9488cff858b.html |   18 +-
 ..._api_8h_1a145f2694254410fd4814541e2cde99c1.html |   18 +-
 ..._api_8h_1a177d080127ef8f3e338beb7dba4c04fd.html |   18 +-
 ..._api_8h_1a1a99289a314c6c3de865721bd3efb525.html |   18 +-
 ..._api_8h_1a1ac76d88e0d79843403ce2e0239d7fe2.html |   18 +-
 ..._api_8h_1a1dd5584d94f6e00a18f4cfa003dfb93a.html |   18 +-
 ..._api_8h_1a268d0b5dc89146020c09f77fa0eb8f67.html |   18 +-
 ..._api_8h_1a31a317a32bfa641180eed1bfb3d5cf01.html |   18 +-
 ..._api_8h_1a3253bbf35e2ad1361b2ce1de13d2c9b2.html |   18 +-
 ..._api_8h_1a3479c144d165e717d1464b7b4df84897.html |   18 +-
 ..._api_8h_1a3bf47f6e1229627902c80217d674ed29.html |   18 +-
 ..._api_8h_1a3f859b60d99c85f43fce8226c69f3c5e.html |   18 +-
 ..._api_8h_1a402f64dec7a665f281e55cf946a7481b.html |   18 +-
 ..._api_8h_1a44604b1d0db208ed82cbc7cf0fd0f47c.html |   18 +-
 ..._api_8h_1a4ce84fc667040bba425664c78b5f2c69.html |   18 +-
 ..._api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html |   18 +-
 ..._api_8h_1a53c5ec2971806966ed96a6add32b5238.html |   18 +-
 ..._api_8h_1a56ce10d1e6fc2d34a1a496bdace4af33.html |   18 +-
 ..._api_8h_1a5a7e3fe8a94e066bc1bf897fbf736651.html |   18 +-
 ..._api_8h_1a63149ed43a6ecffa2146f92914c0bc7b.html |   18 +-
 ..._api_8h_1a6415c088928d62af8749f3dc57dcf23b.html |   18 +-
 ..._api_8h_1a724b0d386cf3d50c7d141ca37be19092.html |   18 +-
 ..._api_8h_1a74c26efdd74840abc3e1581c73a38bfa.html |   18 +-
 ..._api_8h_1a762fc5c881dc5f66066eb45b65a5781f.html |   18 +-
 ..._api_8h_1aa26fa16c024c6f2fa15e46aa1333fdb9.html |   18 +-
 ..._api_8h_1aa2a81275b69ba0f61ce556df85517ef9.html |   18 +-
 ..._api_8h_1ab691fd5bc4442c631c1f70985a962f50.html |   18 +-
 ..._api_8h_1aba50ba2cee84b1ef7a718211ab349031.html |   18 +-
 ..._api_8h_1ac0e2d59d3a8ba7f2b32eac47b1c6fc5d.html |   18 +-
 ..._api_8h_1ac5a4f48eacde3c69ad3154b6aa39fa3c.html |   18 +-
 ..._api_8h_1ac64df2793c84fc8ba5d24968d60bcada.html |   18 +-
 ..._api_8h_1ac66c1d142240be0cdf65c8ba38770eb6.html |   18 +-
 ..._api_8h_1adaf9a5ab3d30bb3eca58b430f2592fc0.html |   18 +-
 ..._api_8h_1adec9f8a8f0683caeb9dd194d9a3c62d5.html |   18 +-
 ..._api_8h_1aedd89f80f73d54dd5904d943dd0690c6.html |   18 +-
 ..._api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html |   18 +-
 ..._api_8h_1af108ca4da596c634b4cb9e82c8bec1ce.html |   18 +-
 ..._api_8h_1af1b8a29eb3f9405982c344f5e572dd65.html |   18 +-
 ..._api_8h_1afee5a803e22f9baf5ee2ff1f0ace6429.html |   18 +-
 ..._api_8h_1a0e01ad3ed44c0240f1b76dbed7014234.html |   18 +-
 ..._api_8h_1a36c15024744584acceaf0233947f9505.html |   18 +-
 ..._api_8h_1a683191d48d3fdebc98b68f3b717baf6a.html |   18 +-
 ..._api_8h_1a7451ab18593d70d30a6214d622e200d2.html |   18 +-
 ..._api_8h_1a8ce2ba89ca1d010a084b4c36ed6b2965.html |   18 +-
 ..._api_8h_1a9b142b59ab84bc06e4a0f66a3510e8f7.html |   18 +-
 ..._api_8h_1aaf8960c33546788950b8e35ac18efe39.html |   18 +-
 ..._api_8h_1abcbbccfc02c57418e757033afce42ece.html |   18 +-
 ..._api_8h_1ac8f7894c4f205756b7aee01108ab8e84.html |   18 +-
 ..._api_8h_1ae24b47945440d1c0aca13af13bdaf916.html |   18 +-
 ...cast_8h_1a3c5fed9bb23b4804b61037c8ac4874f1.html |   18 +-
 ...cast_8h_1a4dba749dd934d8a7891ad126a8fdcc1f.html |   18 +-
 ...type_8h_1a8a71c64237efaa13a8d40dfacd6c3165.html |   18 +-
 ...type_8h_1a94787950883e5a7e97b764ddd342afc3.html |   18 +-
 ...dian_8h_1ab4e0ed8000c632cd2c7cd089c0a0d1af.html |   18 +-
 ...json_8h_1a2cd33b0fbc0194eaa803b8a476670587.html |   18 +-
 ...json_8h_1a86217bda8bfebd85f8265878bc8a59b8.html |   18 +-
 ..._map_8h_1a611844db41026b7a95846dd316b435af.html |   18 +-
 ...mory_8h_1a801e8ecc2e3adbc1dac52c714e7cef11.html |   18 +-
 ...mory_8h_1a8892f2a3cad8dbc51930c464f2ab863b.html |   18 +-
 ...lection_1a32d91001c82e10566c69e237ab0de50a.html |   18 +-
 ...lection_1a6b1f837cf822ded72a31f343ce987f4c.html |   18 +-
 ...lection_1a735285a70c7c4308816450a5b27f03f2.html |   18 +-
 ...lection_1a80c4984a43d14113b20a67c966833709.html |   18 +-
 ...lection_1aba4d7fd771bea88a32803dda191b7044.html |   18 +-
 ...lection_1ac902a725008e348254ee7a2d07c8a95a.html |   18 +-
 ...lection_1acc0ded3ead1cc6ffc836005d3bb2cc9c.html |   18 +-
 ...ject_8h_1a0d6e075f219808c4ff7adebd99210a7b.html |   18 +-
 ...tion_8h_1a24d1febeb5c1026e7fd66dee9dd9915f.html |   18 +-
 ...tion_8h_1a56baa5d1ca415dbdebf19ac1f54bd5b7.html |   18 +-
 ...ring_8h_1aa190eed2516ff9a633009cc62f660502.html |   18 +-
 ...ring_8h_1ad045700080c053c50d68cde298b2b4b2.html |   18 +-
 ...nsor_8h_1a011d0a2dcbe5702156124d7a7223b3dd.html |   18 +-
 ...nsor_8h_1a226723176642cde5996498e7da6a6368.html |   18 +-
 ...nsor_8h_1a65b3a61c540c72d9410150a3a7a76dde.html |   18 +-
 ...nsor_8h_1a71e4a492b5a03a19a95087771a7e9ed1.html |   18 +-
 ...nsor_8h_1a93094b6b3f20c2cd5aa1c1c2522bc3e4.html |   18 +-
 ...nsor_8h_1aa79cf4e1e3873d8947050b3cee41153a.html |   18 +-
 ...nsor_8h_1aab70a15ca1dde710bc3052c5ce1f6fbd.html |   18 +-
 ffi/reference/cpp/generated/index.html             |  164 +-
 ffi/reference/cpp/generated/namespace_tvm.html     |   18 +-
 .../cpp/generated/namespace_tvm__ffi.html          |   24 +-
 .../cpp/generated/namespace_tvm__ffi__json.html    |   18 +-
 .../generated/namespace_tvm__ffi__reflection.html  |   18 +-
 .../cpp/generated/namespace_tvm__ffi__symbol.html  |   19 +-
 .../program_listing_file_tvm_ffi_any.h.html        |   18 +-
 ...rogram_listing_file_tvm_ffi_base_details.h.html |   18 +-
 .../program_listing_file_tvm_ffi_c_api.h.html      |   20 +-
 .../program_listing_file_tvm_ffi_cast.h.html       |   18 +-
 ...ram_listing_file_tvm_ffi_container_array.h.html |   18 +-
 ...file_tvm_ffi_container_container_details.h.html |   18 +-
 ...ogram_listing_file_tvm_ffi_container_map.h.html |   21 +-
 ...ram_listing_file_tvm_ffi_container_shape.h.html |   18 +-
 ...am_listing_file_tvm_ffi_container_tensor.h.html |   18 +-
 ...ram_listing_file_tvm_ffi_container_tuple.h.html |   18 +-
 ...m_listing_file_tvm_ffi_container_variant.h.html |   18 +-
 .../program_listing_file_tvm_ffi_dtype.h.html      |   18 +-
 .../program_listing_file_tvm_ffi_endian.h.html     |   18 +-
 .../program_listing_file_tvm_ffi_error.h.html      |   18 +-
 .../program_listing_file_tvm_ffi_extra_base.h.html |   18 +-
 ...rogram_listing_file_tvm_ffi_extra_base64.h.html |   18 +-
 ...ram_listing_file_tvm_ffi_extra_c_env_api.h.html |   18 +-
 ...am_listing_file_tvm_ffi_extra_cuda_base.h.html} |   67 +-
 ..._file_tvm_ffi_extra_cuda_cubin_launcher.h.html} |  314 ++--
 ...ng_file_tvm_ffi_extra_cuda_device_guard.h.html} |   78 +-
 .../program_listing_file_tvm_ffi_extra_json.h.html |   18 +-
 ...rogram_listing_file_tvm_ffi_extra_module.h.html |   19 +-
 ...listing_file_tvm_ffi_extra_serialization.h.html |   18 +-
 .../program_listing_file_tvm_ffi_extra_stl.h.html  | 1375 +++++++++++++++++
 ...ting_file_tvm_ffi_extra_structural_equal.h.html |   18 +-
 ...sting_file_tvm_ffi_extra_structural_hash.h.html |   18 +-
 .../program_listing_file_tvm_ffi_function.h.html   |   90 +-
 ...am_listing_file_tvm_ffi_function_details.h.html |   19 +-
 .../program_listing_file_tvm_ffi_memory.h.html     |   18 +-
 .../program_listing_file_tvm_ffi_object.h.html     |   18 +-
 .../program_listing_file_tvm_ffi_optional.h.html   |   18 +-
 ...ting_file_tvm_ffi_reflection_access_path.h.html |   18 +-
 ...listing_file_tvm_ffi_reflection_accessor.h.html |   18 +-
 ..._listing_file_tvm_ffi_reflection_creator.h.html |   18 +-
 ...listing_file_tvm_ffi_reflection_registry.h.html |   18 +-
 .../program_listing_file_tvm_ffi_rvalue_ref.h.html |   18 +-
 .../program_listing_file_tvm_ffi_string.h.html     |   18 +-
 ...program_listing_file_tvm_ffi_type_traits.h.html |   18 +-
 ffi/reference/cpp/generated/structTVMFFIAny.html   |   18 +-
 .../cpp/generated/structTVMFFIByteArray.html       |   18 +-
 .../cpp/generated/structTVMFFIErrorCell.html       |   18 +-
 .../cpp/generated/structTVMFFIFieldInfo.html       |   18 +-
 .../cpp/generated/structTVMFFIFunctionCell.html    |   18 +-
 .../cpp/generated/structTVMFFIMethodInfo.html      |   18 +-
 .../cpp/generated/structTVMFFIObject.html          |   18 +-
 .../generated/structTVMFFIOpaqueObjectCell.html    |   18 +-
 .../cpp/generated/structTVMFFIShapeCell.html       |   18 +-
 .../cpp/generated/structTVMFFITypeAttrColumn.html  |   18 +-
 .../cpp/generated/structTVMFFITypeInfo.html        |   18 +-
 .../cpp/generated/structTVMFFITypeMetadata.html    |   18 +-
 .../cpp/generated/structTVMFFIVersion.html         |   18 +-
 .../generated/structtvm_1_1ffi_1_1AnyEqual.html    |   18 +-
 .../cpp/generated/structtvm_1_1ffi_1_1AnyHash.html |   24 +-
 ...ml => structtvm_1_1ffi_1_1CUDADeviceGuard.html} |  123 +-
 .../structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html  |   24 +-
 ...tructtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html |   18 +-
 ...tructtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html |   24 +-
 .../structtvm_1_1ffi_1_1EnvErrorAlreadySet.html    |   24 +-
 ...structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html |   18 +-
 .../structtvm_1_1ffi_1_1ObjectPtrEqual.html        |   18 +-
 .../structtvm_1_1ffi_1_1ObjectPtrHash.html         |   18 +-
 ..._1_1ffi_1_1ObjectRefWithFallbackTraitsBase.html |   18 +-
 .../structtvm_1_1ffi_1_1StaticTypeKey.html         |   18 +-
 ...cttvm_1_1ffi_1_1TypeToFieldStaticTypeIndex.html |   18 +-
 ...structtvm_1_1ffi_1_1TypeToRuntimeTypeIndex.html |   18 +-
 .../generated/structtvm_1_1ffi_1_1UnsafeInit.html  |   18 +-
 ...ItemType.html => structtvm_1_1ffi_1_1dim3.html} |  134 +-
 .../structtvm_1_1ffi_1_1is__valid__iterator.html   |   18 +-
 ...valid__iterator_3_01Any_00_01IterType_01_4.html |   18 +-
 ...3_01Optional_3_01T_01_4_00_01IterType_01_4.html |   18 +-
 ...m_1_1ffi_1_1reflection_1_1FieldInfoBuilder.html |   18 +-
 ...tructtvm_1_1ffi_1_1reflection_1_1InfoTrait.html |   18 +-
 ..._1_1ffi_1_1reflection_1_1MethodInfoBuilder.html |   18 +-
 .../structtvm_1_1ffi_1_1reflection_1_1init.html    |   18 +-
 ..._api_8h_1a19fdd3c500a70abb3def842c73694548.html |   18 +-
 ..._api_8h_1a9eee5afddb1b39723847d67d109c03fe.html |   18 +-
 ..._api_8h_1aa0abef2444fde82d76337218e5c13b3f.html |   18 +-
 ..._api_8h_1aba6bf585b03799369fb535db4a5d2e79.html |   18 +-
 ..._api_8h_1ae22f1a87cbaf7f744d9201948c05d2a5.html |   18 +-
 ..._api_8h_1aa7abccefa41ac9d3040df689c0c72fa4.html |   18 +-
 ...json_8h_1a74ca72d0b686c114af683d63e96f2998.html |   18 +-
 ...json_8h_1a8e808548bb6a99d0a6093ab3e2229ad3.html |   18 +-
 ...json_8h_1aeb9cdccfbc28034e94e46f9f6bd8d92a.html |   18 +-
 ...mory_8h_1a65bf625279df21dec5c8097264415113.html |   18 +-
 ...lection_1a32b044a71a094de492867144ca299c15.html |   18 +-
 ...lection_1a96513314d45b43eada132d9b96653d9a.html |   18 +-
 ...ject_8h_1a7ba296d84188e5970ba854332a1f04a6.html |   18 +-
 ...ject_8h_1ae125f5f5a8a94c7340577c1959805295.html |   18 +-
 ffi/reference/cpp/generated/unabridged_orphan.html |   87 +-
 ...rray_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html |   24 +-
 ...dule_8h_1a07576e172e0788da4982148edcf53b05.html |   18 +-
 ...ule_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html} |   48 +-
 ...dule_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html |   18 +-
 ...dule_8h_1aae0405c7615139afd4f68b72a862cffe.html |   24 +-
 ...dule_8h_1ac261d9ce6ffb49dd9878610ce217075e.html |   18 +-
 ...dule_8h_1ad9c186f1359987cef9278993037b3f66.html |   18 +-
 ffi/reference/cpp/index.html                       |   18 +-
 .../python/cpp/generated/tvm_ffi.cpp.build.html    |   26 +-
 .../cpp/generated/tvm_ffi.cpp.build_inline.html    |   36 +-
 .../python/cpp/generated/tvm_ffi.cpp.load.html     |   20 +-
 .../cpp/generated/tvm_ffi.cpp.load_inline.html     |   34 +-
 ...d.html => tvm_ffi.cpp.nvrtc.nvrtc_compile.html} |  166 +-
 ffi/reference/python/generated/tvm_ffi.Array.html  |   22 +-
 .../python/generated/tvm_ffi.DLDeviceType.html     |   24 +-
 .../python/generated/tvm_ffi.Device_class.html     |   24 +-
 .../python/generated/tvm_ffi.Function.html         |   28 +-
 ffi/reference/python/generated/tvm_ffi.Map.html    |   22 +-
 ffi/reference/python/generated/tvm_ffi.Module.html |  134 +-
 ffi/reference/python/generated/tvm_ffi.Object.html |   22 +-
 .../generated/tvm_ffi.ObjectConvertible.html       |   22 +-
 ffi/reference/python/generated/tvm_ffi.Shape.html  |   20 +-
 .../python/generated/tvm_ffi.StreamContext.html    |   22 +-
 ffi/reference/python/generated/tvm_ffi.Tensor.html |   26 +-
 .../generated/tvm_ffi.access_path.AccessKind.html  |   24 +-
 .../generated/tvm_ffi.access_path.AccessPath.html  |   32 +-
 .../generated/tvm_ffi.access_path.AccessStep.html  |   28 +-
 .../python/generated/tvm_ffi.convert.html          |   18 +-
 .../python/generated/tvm_ffi.device_function.html  |   18 +-
 ffi/reference/python/generated/tvm_ffi.dtype.html  |   34 +-
 .../python/generated/tvm_ffi.from_dlpack.html      |   20 +-
 .../python/generated/tvm_ffi.get_global_func.html  |   18 +-
 .../tvm_ffi.get_global_func_metadata.html          |   18 +-
 .../python/generated/tvm_ffi.get_raw_stream.html   |   18 +-
 .../python/generated/tvm_ffi.init_ffi_api.html     |   18 +-
 .../python/generated/tvm_ffi.load_module.html      |   18 +-
 .../python/generated/tvm_ffi.register_error.html   |   18 +-
 .../generated/tvm_ffi.register_global_func.html    |   18 +-
 .../python/generated/tvm_ffi.register_object.html  |   18 +-
 .../generated/tvm_ffi.remove_global_func.html      |   18 +-
 .../tvm_ffi.serialization.from_json_graph_str.html |   24 +-
 .../tvm_ffi.serialization.to_json_graph_str.html   |   18 +-
 .../python/generated/tvm_ffi.system_lib.html       |   18 +-
 .../python/generated/tvm_ffi.use_raw_stream.html   |   18 +-
 .../python/generated/tvm_ffi.use_torch_stream.html |   18 +-
 ffi/reference/python/index.html                    |   58 +-
 ffi/reference/rust/index.html                      |   18 +-
 ffi/search.html                                    |  137 +-
 ffi/searchindex.js                                 |    2 +-
 453 files changed, 15765 insertions(+), 2799 deletions(-)

diff --git a/ffi/.buildinfo b/ffi/.buildinfo
index f767d49227..d233634bf8 100644
--- a/ffi/.buildinfo
+++ b/ffi/.buildinfo
@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: b0ef66ba57dceb419f3dd2f4cc3bd9f8
+config: 98bb29957e8aa479d975c1b03e2b7cfd
 tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/ffi/_modules/index.html b/ffi/_modules/index.html
index 303eea819c..5a12c0cae2 100644
--- a/ffi/_modules/index.html
+++ b/ffi/_modules/index.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../_static/doctools.js?v=9bcbadda"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/index';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -885,6 +964,7 @@ document.write(`
 <li><a href="tvm_ffi/container.html">tvm_ffi.container</a></li>
 <li><a href="tvm_ffi/core.html">tvm_ffi.core</a></li>
 <li><a href="tvm_ffi/cpp/extension.html">tvm_ffi.cpp.extension</a></li>
+<li><a href="tvm_ffi/cpp/nvrtc.html">tvm_ffi.cpp.nvrtc</a></li>
 <li><a href="tvm_ffi/error.html">tvm_ffi.error</a></li>
 <li><a href="tvm_ffi/module.html">tvm_ffi.module</a></li>
 <li><a href="tvm_ffi/registry.html">tvm_ffi.registry</a></li>
@@ -930,7 +1010,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/_convert.html b/ffi/_modules/tvm_ffi/_convert.html
index 2f719e613c..1edf01fe7e 100644
--- a/ffi/_modules/tvm_ffi/_convert.html
+++ b/ffi/_modules/tvm_ffi/_convert.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/_convert';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1061,7 +1140,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/_dtype.html b/ffi/_modules/tvm_ffi/_dtype.html
index cdc76a61aa..495132a5dd 100644
--- a/ffi/_modules/tvm_ffi/_dtype.html
+++ b/ffi/_modules/tvm_ffi/_dtype.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/_dtype';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1278,7 +1357,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/_tensor.html b/ffi/_modules/tvm_ffi/_tensor.html
index 65676bfc61..4a32178f46 100644
--- a/ffi/_modules/tvm_ffi/_tensor.html
+++ b/ffi/_modules/tvm_ffi/_tensor.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/_tensor';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1031,7 +1110,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/access_path.html b/ffi/_modules/tvm_ffi/access_path.html
index 6c9516bf3f..61b70f45dd 100644
--- a/ffi/_modules/tvm_ffi/access_path.html
+++ b/ffi/_modules/tvm_ffi/access_path.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/access_path';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1217,7 +1296,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/container.html b/ffi/_modules/tvm_ffi/container.html
index ef1d7e981a..365d47ab7e 100644
--- a/ffi/_modules/tvm_ffi/container.html
+++ b/ffi/_modules/tvm_ffi/container.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/container';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1304,7 +1383,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/cpp/extension.html b/ffi/_modules/tvm_ffi/cpp/extension.html
index ccc7558533..7541761f8f 100644
--- a/ffi/_modules/tvm_ffi/cpp/extension.html
+++ b/ffi/_modules/tvm_ffi/cpp/extension.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/cpp/extension';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -907,6 +986,7 @@ document.write(`
 <span class="kn">from</span><span class="w"> </span><span class="nn">collections.abc</span><span class="w"> </span><span class="kn">import</span> <span class="n">Mapping</span><span class="p">,</span> <span class="n">Sequence</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">contextlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">nullcontext</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Any</span>
 
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm_ffi.libinfo</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_dlpack_include_path</span><span class="p">,</span> <span class="n">find_include_path</span><span class="p">,</span> <span class="n">find_libtvm_ffi</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm_ffi.module</span><span class="w"> </span><span class="kn">import</span> <span class="n">Module</span><span class="p">,</span> <span class="n">load_module</span>
@@ -925,35 +1005,48 @@ document.write(`
     <span class="n">extra_cuda_cflags</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
     <span class="n">extra_ldflags</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
     <span class="n">extra_include_paths</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
+    <span class="n">embed_cubin</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
 <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
 <span class="w">    </span><span class="sd">&quot;&quot;&quot;Generate a unique hash for the given sources and functions.&quot;&quot;&quot;</span>
     <span class="n">m</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">()</span>
 
-    <span class="k">def</span><span class="w"> </span><span class="nf">_maybe_hash_string</span><span class="p">(</span><span class="n">source</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="k">if</span> <span class="n">source</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">source</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
-
-    <span class="k">def</span><span class="w"> </span><span class="nf">_hash_sequence</span><span class="p">(</span><span class="n">seq</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">seq</span><span class="p">:</span>
-            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
-
-    <span class="k">def</span><span class="w"> </span><span class="nf">_hash_mapping</span><span class="p">(</span><span class="n">mapping</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">mapping</span><span class="p">):</span>
-            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
-            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">mapping</span><span class="p">[</span><span class="n">key</span><span class="p">]</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
-
-    <span class="n">_maybe_hash_string</span><span class="p">(</span><span class="n">cpp_source</span><span class="p">)</span>
-    <span class="n">_maybe_hash_string</span><span class="p">(</span><span class="n">cuda_source</span><span class="p">)</span>
-    <span class="n">_hash_sequence</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">cpp_files</span> <span class="ow">or</span> <span class="p">[]))</span>
-    <span class="n">_hash_sequence</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">cuda_files</span> <span class="ow">or</span> <span class="p">[]))</span>
-    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">functions</span><span class="p">,</span> <span class="n">Mapping</span><span class="p">):</span>
-        <span class="n">_hash_mapping</span><span class="p">(</span><span class="n">functions</span><span class="p">)</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="n">_hash_sequence</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">functions</span><span class="p">))</span>
-    <span class="n">_hash_sequence</span><span class="p">(</span><span class="n">extra_cflags</span><span class="p">)</span>
-    <span class="n">_hash_sequence</span><span class="p">(</span><span class="n">extra_cuda_cflags</span><span class="p">)</span>
-    <span class="n">_hash_sequence</span><span class="p">(</span><span class="n">extra_ldflags</span><span class="p">)</span>
-    <span class="n">_hash_sequence</span><span class="p">(</span><span class="n">extra_include_paths</span><span class="p">)</span>
+    <span class="k">def</span><span class="w"> </span><span class="nf">_hash</span><span class="p">(</span><span class="n">obj</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;None&quot;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
+            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;str&quot;</span><span class="p">)</span>
+            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span>
+            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;bytes&quot;</span><span class="p">)</span>
+            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Mapping</span><span class="p">):</span>
+            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;Mapping&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
+                <span class="n">item</span> <span class="o">=</span> <span class="n">obj</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+                <span class="n">_hash</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+                <span class="n">_hash</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Sequence</span><span class="p">):</span>
+            <span class="n">m</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;Sequence&quot;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">:</span>
+                <span class="n">_hash</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unsupported type: </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+
+    <span class="n">_hash</span><span class="p">(</span>
+        <span class="p">(</span>
+            <span class="n">cpp_source</span><span class="p">,</span>
+            <span class="n">cuda_source</span><span class="p">,</span>
+            <span class="nb">sorted</span><span class="p">(</span><span class="n">cpp_files</span><span class="p">)</span> <span class="k">if</span> <span class="n">cpp_files</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="nb">sorted</span><span class="p">(</span><span class="n">cuda_files</span><span class="p">)</span> <span class="k">if</span> <span class="n">cuda_files</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+            <span class="n">functions</span><span class="p">,</span>
+            <span class="n">extra_cflags</span><span class="p">,</span>
+            <span class="n">extra_cuda_cflags</span><span class="p">,</span>
+            <span class="n">extra_ldflags</span><span class="p">,</span>
+            <span class="n">extra_include_paths</span><span class="p">,</span>
+            <span class="n">embed_cubin</span><span class="p">,</span>
+        <span class="p">)</span>
+    <span class="p">)</span>
+
     <span class="k">return</span> <span class="n">m</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()[:</span><span class="mi">16</span><span class="p">]</span>
 
 
@@ -1087,7 +1180,7 @@ document.write(`
         <span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">e</span>
 
 
-<span class="k">def</span><span class="w"> </span><span class="nf">_generate_ninja_build</span><span class="p">(</span>  <span class="c1"># noqa: PLR0915</span>
+<span class="k">def</span><span class="w"> </span><span class="nf">_generate_ninja_build</span><span class="p">(</span>  <span class="c1"># noqa: PLR0915, PLR0912</span>
     <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
     <span class="n">with_cuda</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
     <span class="n">extra_cflags</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
@@ -1096,6 +1189,7 @@ document.write(`
     <span class="n">extra_include_paths</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
     <span class="n">cpp_files</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
     <span class="n">cuda_files</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
+    <span class="n">embed_cubin</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
 <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
 <span class="w">    </span><span class="sd">&quot;&quot;&quot;Generate the content of build.ninja for building the module.&quot;&quot;&quot;</span>
     <span class="n">default_include_paths</span> <span class="o">=</span> <span class="p">[</span><span class="n">find_include_path</span><span class="p">(),</span> <span class="n">find_dlpack_include_path</span><span class="p">()]</span>
@@ -1135,7 +1229,7 @@ document.write(`
             <span class="n">default_cuda_cflags</span> <span class="o">+=</span> <span class="p">[</span><span class="n">_get_cuda_target</span><span class="p">()]</span>
             <span class="n">default_ldflags</span> <span class="o">+=</span> <span class="p">[</span>
                 <span class="s2">&quot;-L</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">Path</span><span class="p">(</span><span class="n">_find_cuda_home</span><span class="p">())</span> <span class="o">/</span> <span class="s2">&quot;lib64&quot;</span><span class="p">)),</span>
-                <span class="s2">&quot;-lcudart&quot;</span><span class="p">,</span>
+                <span class="s2">&quot;-lcudart&quot;</span><span class="p">,</span>  <span class="c1"># cuda runtime library</span>
             <span class="p">]</span>
 
     <span class="n">cflags</span> <span class="o">=</span> <span class="n">default_cflags</span> <span class="o">+</span> <span class="p">[</span><span class="n">flag</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">flag</span> <span class="ow">in</span> <span class="n">extra_cflags</span><span class="p">]</span>
@@ -1181,6 +1275,19 @@ document.write(`
         <span class="p">)</span>
         <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
 
+    <span class="c1"># Add rules for object merging and cubin embedding (Unix only)</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">IS_WINDOWS</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">embed_cubin</span><span class="p">:</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;rule merge_objects&quot;</span><span class="p">)</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;  command = ld -r -o $out $in&quot;</span><span class="p">)</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;rule embed_cubin&quot;</span><span class="p">)</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">&quot;  command = </span><span class="si">{</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="si">}</span><span class="s2"> -m tvm_ffi.utils.embed_cubin --output-obj $out --input-obj $in --cubin $cubin --name $name&quot;</span>
+            <span class="p">)</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+
     <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;rule link&quot;</span><span class="p">)</span>
     <span class="k">if</span> <span class="n">IS_WINDOWS</span><span class="p">:</span>
         <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;  command = $cxx $in /link $ldflags /out:$out&quot;</span><span class="p">)</span>
@@ -1189,22 +1296,54 @@ document.write(`
     <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
 
     <span class="c1"># build targets</span>
-    <span class="n">link_files</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">obj_files</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
     <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">cpp_path</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">cpp_files</span><span class="p">)):</span>
         <span class="n">obj_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;cpp_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">.o&quot;</span>
         <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;build </span><span class="si">{}</span><span class="s2">: compile </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">obj_name</span><span class="p">,</span> <span class="n">cpp_path</span><span class="o">.</span><span class="n">replace</span><span cla [...]
-        <span class="n">link_files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
+        <span class="n">obj_files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
 
     <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">cuda_path</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">cuda_files</span><span class="p">)):</span>
         <span class="n">obj_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;cuda_</span><span class="si">{</span><span class="n">i</span><span class="si">}</span><span class="s2">.o&quot;</span>
         <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;build </span><span class="si">{}</span><span class="s2">: compile_cuda </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">obj_name</span><span class="p">,</span> <span class="n">cuda_path</span><span class="o">.</span><span class="n">replace</span><sp [...]
-        <span class="n">link_files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
+        <span class="n">obj_files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
 
     <span class="c1"># Use appropriate extension based on platform</span>
     <span class="n">ext</span> <span class="o">=</span> <span class="s2">&quot;.dll&quot;</span> <span class="k">if</span> <span class="n">IS_WINDOWS</span> <span class="k">else</span> <span class="s2">&quot;.so&quot;</span>
-    <span class="n">link_name</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">link_files</span><span class="p">)</span>
-    <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;build </span><span class="si">{</span><span class="n">name</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">: link </span><span class="si">{</span><span class="n">link_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-    <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+
+    <span class="c1"># For Unix systems with embed_cubin, use a 3-step process:</span>
+    <span class="c1"># 1. Merge all object files into a unified object file</span>
+    <span class="c1"># 2. Embed each cubin into the unified object file (chain them)</span>
+    <span class="c1"># 3. Link the final object file into a shared library</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">IS_WINDOWS</span> <span class="ow">and</span> <span class="n">embed_cubin</span><span class="p">:</span>
+        <span class="c1"># Step 1: Merge object files into unified.o</span>
+        <span class="n">unified_obj</span> <span class="o">=</span> <span class="s2">&quot;unified.o&quot;</span>
+        <span class="n">obj_files_str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">obj_files</span><span class="p">)</span>
+        <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;build </span><span class="si">{</span><span class="n">unified_obj</span><span class="si">}</span><span class="s2">: merge_objects </span><span class="si">{</span><span class="n">obj_files_str</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+        <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+
+        <span class="c1"># Step 2: Chain embed_cubin operations for each cubin</span>
+        <span class="n">current_obj</span> <span class="o">=</span> <span class="n">unified_obj</span>
+        <span class="k">for</span> <span class="n">cubin_name</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">embed_cubin</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
+            <span class="c1"># Create next object file name</span>
+            <span class="n">next_obj</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;unified_with_</span><span class="si">{</span><span class="n">cubin_name</span><span class="si">}</span><span class="s2">.o&quot;</span>
+            <span class="n">cubin_file</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">cubin_name</span><span class="si">}</span><span class="s2">.cubin&quot;</span>
+
+            <span class="c1"># Add ninja build rule</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;build </span><span class="si">{</span><span class="n">next_obj</span><span class="si">}</span><span class="s2">: embed_cubin </span><span class="si">{</span><span class="n">current_obj</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;  cubin = </span><span class="si">{</span><span class="n">cubin_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;  name = </span><span class="si">{</span><span class="n">cubin_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+
+            <span class="n">current_obj</span> <span class="o">=</span> <span class="n">next_obj</span>
+
+        <span class="c1"># Step 3: Link the final object file</span>
+        <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;build </span><span class="si">{</span><span class="n">name</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">: link </span><span class="si">{</span><span class="n">current_obj</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+        <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c1"># Original behavior: directly link object files (for Windows or no cubin embedding)</span>
+        <span class="n">link_files_str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">obj_files</span><span class="p">)</span>
+        <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;build </span><span class="si">{</span><span class="n">name</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">: link </span><span class="si">{</span><span class="n">link_files_str</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+        <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
 
     <span class="c1"># default target</span>
     <span class="n">ninja</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;default </span><span class="si">{</span><span class="n">name</span><span class="si">}{</span><span class="n">ext</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
@@ -1233,6 +1372,23 @@ document.write(`
         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msg</span><span class="p">))</span>
 
 
+<span class="c1"># Translation table for escaping C++ string literals</span>
+<span class="n">_CPP_ESCAPE_TABLE</span> <span class="o">=</span> <span class="nb">str</span><span class="o">.</span><span class="n">maketrans</span><span class="p">(</span>
+    <span class="p">{</span>
+        <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">,</span>
+        <span class="s1">&#39;&quot;&#39;</span><span class="p">:</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&quot;&#39;</span><span class="p">,</span>
+        <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">n&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">r&quot;</span><span class="p">,</span>
+        <span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">:</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">t&quot;</span><span class="p">,</span>
+    <span class="p">}</span>
+<span class="p">)</span>
+
+
+<span class="k">def</span><span class="w"> </span><span class="nf">_escape_cpp_string_literal</span><span class="p">(</span><span class="n">s</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Escape special characters for C++ string literals.&quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">s</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">_CPP_ESCAPE_TABLE</span><span class="p">)</span>
+
+
 <span class="k">def</span><span class="w"> </span><span class="nf">_decorate_with_tvm_ffi</span><span class="p">(</span><span class="n">source</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">functions</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str< [...]
 <span class="w">    </span><span class="sd">&quot;&quot;&quot;Decorate the given source code with TVM FFI export macros.&quot;&quot;&quot;</span>
     <span class="n">sources</span> <span class="o">=</span> <span class="p">[</span>
@@ -1247,7 +1403,11 @@ document.write(`
 
     <span class="k">for</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">func_doc</span> <span class="ow">in</span> <span class="n">functions</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
         <span class="n">sources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;TVM_FFI_DLL_EXPORT_TYPED_FUNC(</span><span class="si">{</span><span class="n">func_name</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">func_name</span><span class="si">}</span><span class="s2">);&quot;</span><span class="p">)</span>
-        <span class="n">_</span> <span class="o">=</span> <span class="n">func_doc</span>  <span class="c1"># todo: add support to embed function docstring to the tvm ffi functions.</span>
+
+        <span class="k">if</span> <span class="n">func_doc</span><span class="p">:</span>
+            <span class="c1"># Escape the docstring for C++ string literal</span>
+            <span class="n">escaped_doc</span> <span class="o">=</span> <span class="n">_escape_cpp_string_literal</span><span class="p">(</span><span class="n">func_doc</span><span class="p">)</span>
+            <span class="n">sources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC(</span><span class="si">{</span><span class="n">func_name</span><span class="si">}</span><span class="s1">, &quot;</span><span class="si">{</span><span class="n">escaped_doc</span><span class="si">}</span><span class="s1">&quot;);&#39;</span><span class="p">)</span>
 
     <span class="n">sources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
 
@@ -1273,6 +1433,7 @@ document.write(`
     <span class="n">extra_include_paths</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
     <span class="n">build_directory</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
     <span class="n">need_lock</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+    <span class="n">embed_cubin</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
 <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
 <span class="w">    </span><span class="sd">&quot;&quot;&quot;Real implementation of build function.&quot;&quot;&quot;</span>
     <span class="c1"># need to resolve the path to make it unique</span>
@@ -1300,12 +1461,24 @@ document.write(`
             <span class="n">extra_cuda_cflags_list</span><span class="p">,</span>
             <span class="n">extra_ldflags_list</span><span class="p">,</span>
             <span class="n">extra_include_paths_list</span><span class="p">,</span>
+            <span class="n">embed_cubin</span><span class="p">,</span>
         <span class="p">)</span>
         <span class="n">build_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">cache_dir</span><span class="p">)</span><span class="o">.</span><span class="n">expanduser</span><span class="p">()</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">source_hash</ [...]
     <span class="k">else</span><span class="p">:</span>
         <span class="n">build_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">build_directory</span><span class="p">)</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
     <span class="n">build_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 
+    <span class="c1"># CUBIN embedding is only supported on Unix systems</span>
+    <span class="k">if</span> <span class="n">embed_cubin</span> <span class="ow">and</span> <span class="n">IS_WINDOWS</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s2">&quot;CUBIN embedding is not yet supported on Windows&quot;</span><span class="p">)</span>
+
+    <span class="c1"># Write CUBIN files to build directory if needed (for Unix systems)</span>
+    <span class="c1"># These will be embedded using the embed_cubin utility during ninja build</span>
+    <span class="k">if</span> <span class="n">embed_cubin</span><span class="p">:</span>
+        <span class="k">for</span> <span class="n">cubin_name</span><span class="p">,</span> <span class="n">cubin_bytes</span> <span class="ow">in</span> <span class="n">embed_cubin</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+            <span class="n">cubin_path</span> <span class="o">=</span> <span class="n">build_dir</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">cubin_name</span><span class="si">}</span><span class="s2">.cubin&quot;</span>
+            <span class="n">cubin_path</span><span class="o">.</span><span class="n">write_bytes</span><span class="p">(</span><span class="n">cubin_bytes</span><span class="p">)</span>
+
     <span class="c1"># generate build.ninja</span>
     <span class="n">ninja_source</span> <span class="o">=</span> <span class="n">_generate_ninja_build</span><span class="p">(</span>
         <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
@@ -1316,6 +1489,7 @@ document.write(`
         <span class="n">extra_include_paths</span><span class="o">=</span><span class="n">extra_include_paths_list</span><span class="p">,</span>
         <span class="n">cpp_files</span><span class="o">=</span><span class="n">cpp_path_list</span><span class="p">,</span>
         <span class="n">cuda_files</span><span class="o">=</span><span class="n">cuda_path_list</span><span class="p">,</span>
+        <span class="n">embed_cubin</span><span class="o">=</span><span class="n">embed_cubin</span><span class="p">,</span>
     <span class="p">)</span>
 
     <span class="c1"># may not hold lock when build_directory is specified, prevent deadlock</span>
@@ -1342,6 +1516,7 @@ document.write(`
     <span class="n">extra_ldflags</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
     <span class="n">extra_include_paths</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
     <span class="n">build_directory</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+    <span class="n">embed_cubin</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
 <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
 <span class="w">    </span><span class="sd">&quot;&quot;&quot;Compile and build a C++/CUDA module from inline source code.</span>
 
@@ -1378,11 +1553,12 @@ document.write(`
 <span class="sd">        The CUDA source code. It can be a list of sources or a single source.</span>
 <span class="sd">    functions</span>
 <span class="sd">        The functions in cpp_sources or cuda_source that will be exported to the tvm ffi module. When a mapping is</span>
-<span class="sd">        given, the keys are the names of the exported functions, and the values are docstrings for the functions. When</span>
-<span class="sd">        a sequence or a single string is given, they are the functions needed to be exported, and the docstrings are set</span>
-<span class="sd">        to empty strings. A single function name can also be given as a string. When cpp_sources is given, the functions</span>
-<span class="sd">        must be declared (not necessarily defined) in the cpp_sources. When cpp_sources is not given, the functions</span>
-<span class="sd">        must be defined in the cuda_sources. If not specified, no function will be exported.</span>
+<span class="sd">        given, the keys are the names of the exported functions, and the values are docstrings for the functions</span>
+<span class="sd">        (use an empty string to skip documentation for specific functions). When a sequence or a single string is given, they are</span>
+<span class="sd">        the functions needed to be exported, and the docstrings are set to empty strings. A single function name can</span>
+<span class="sd">        also be given as a string. When cpp_sources is given, the functions must be declared (not necessarily defined)</span>
+<span class="sd">        in the cpp_sources. When cpp_sources is not given, the functions must be defined in the cuda_sources. If not</span>
+<span class="sd">        specified, no function will be exported.</span>
 <span class="sd">    extra_cflags</span>
 <span class="sd">        The extra compiler flags for C++ compilation.</span>
 <span class="sd">        The default flags are:</span>
@@ -1408,6 +1584,13 @@ document.write(`
 <span class="sd">        cache directory is ``~/.cache/tvm-ffi``. You can also set the ``TVM_FFI_CACHE_DIR`` environment variable to</span>
 <span class="sd">        specify the cache directory.</span>
 
+<span class="sd">    embed_cubin: Mapping[str, bytes], optional</span>
+<span class="sd">        A mapping from CUBIN module names to CUBIN binary data. TVM-FFI provides a macro `TVM_FFI_EMBED_CUBIN(name)` to embed</span>
+<span class="sd">        CUBIN data into the compiled shared library. The keys should match the names used in `TVM_FFI_EMBED_CUBIN(name)` calls</span>
+<span class="sd">        in the C++ source code. The values are the CUBIN binary data bytes. The embedded CUBIN kernels can be accessed by</span>
+<span class="sd">        the macro `TVM_FFI_EMBED_CUBIN_GET_KERNEL(name, kernel_name)` defined in the `tvm/ffi/extra/cuda/cubin_launcher.h` header.</span>
+<span class="sd">        See the `examples/cubin_launcher` directory for examples how to use cubin launcher to launch CUBIN kernels in TVM-FFI.</span>
+
 <span class="sd">    Returns</span>
 <span class="sd">    -------</span>
 <span class="sd">    lib_path: str</span>
@@ -1486,7 +1669,6 @@ document.write(`
     <span class="k">else</span><span class="p">:</span>
         <span class="n">cpp_source</span> <span class="o">=</span> <span class="n">_decorate_with_tvm_ffi</span><span class="p">(</span><span class="n">cpp_source</span><span class="p">,</span> <span class="p">{})</span>
         <span class="n">cuda_source</span> <span class="o">=</span> <span class="n">_decorate_with_tvm_ffi</span><span class="p">(</span><span class="n">cuda_source</span><span class="p">,</span> <span class="n">function_map</span><span class="p">)</span>
-
     <span class="c1"># determine the cache dir for the built module</span>
     <span class="n">build_dir</span><span class="p">:</span> <span class="n">Path</span>
     <span class="k">if</span> <span class="n">build_directory</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
@@ -1501,6 +1683,7 @@ document.write(`
             <span class="n">extra_cuda_cflags_list</span><span class="p">,</span>
             <span class="n">extra_ldflags_list</span><span class="p">,</span>
             <span class="n">extra_include_paths_list</span><span class="p">,</span>
+            <span class="n">embed_cubin</span><span class="p">,</span>
         <span class="p">)</span>
         <span class="n">build_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">cache_dir</span><span class="p">)</span><span class="o">.</span><span class="n">expanduser</span><span class="p">()</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">source_hash</ [...]
     <span class="k">else</span><span class="p">:</span>
@@ -1526,6 +1709,7 @@ document.write(`
             <span class="n">extra_include_paths</span><span class="o">=</span><span class="n">extra_include_paths_list</span><span class="p">,</span>
             <span class="n">build_directory</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">build_dir</span><span class="p">),</span>
             <span class="n">need_lock</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>  <span class="c1"># already hold the lock</span>
+            <span class="n">embed_cubin</span><span class="o">=</span><span class="n">embed_cubin</span><span class="p">,</span>
         <span class="p">)</span></div>
 
 
@@ -1543,6 +1727,7 @@ document.write(`
     <span class="n">extra_ldflags</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
     <span class="n">extra_include_paths</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
     <span class="n">build_directory</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+    <span class="n">embed_cubin</span><span class="p">:</span> <span class="n">Mapping</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
 <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Module</span><span class="p">:</span>
 <span class="w">    </span><span class="sd">&quot;&quot;&quot;Compile, build and load a C++/CUDA module from inline source code.</span>
 
@@ -1579,11 +1764,12 @@ document.write(`
 <span class="sd">        The CUDA source code. It can be a list of sources or a single source.</span>
 <span class="sd">    functions: Mapping[str, str] | Sequence[str] | str, optional</span>
 <span class="sd">        The functions in cpp_sources or cuda_source that will be exported to the tvm ffi module. When a mapping is</span>
-<span class="sd">        given, the keys are the names of the exported functions, and the values are docstrings for the functions. When</span>
-<span class="sd">        a sequence or a single string is given, they are the functions needed to be exported, and the docstrings are set</span>
-<span class="sd">        to empty strings. A single function name can also be given as a string. When cpp_sources is given, the functions</span>
-<span class="sd">        must be declared (not necessarily defined) in the cpp_sources. When cpp_sources is not given, the functions</span>
-<span class="sd">        must be defined in the cuda_sources. If not specified, no function will be exported.</span>
+<span class="sd">        given, the keys are the names of the exported functions, and the values are docstrings for the functions</span>
+<span class="sd">        (use an empty string to skip documentation for specific functions). When a sequence or a single string is given, they are</span>
+<span class="sd">        the functions needed to be exported, and the docstrings are set to empty strings. A single function name can</span>
+<span class="sd">        also be given as a string. When cpp_sources is given, the functions must be declared (not necessarily defined)</span>
+<span class="sd">        in the cpp_sources. When cpp_sources is not given, the functions must be defined in the cuda_sources. If not</span>
+<span class="sd">        specified, no function will be exported.</span>
 <span class="sd">    extra_cflags: Sequence[str], optional</span>
 <span class="sd">        The extra compiler flags for C++ compilation.</span>
 <span class="sd">        The default flags are:</span>
@@ -1609,6 +1795,11 @@ document.write(`
 <span class="sd">        cache directory is ``~/.cache/tvm-ffi``. You can also set the ``TVM_FFI_CACHE_DIR`` environment variable to</span>
 <span class="sd">        specify the cache directory.</span>
 
+<span class="sd">    embed_cubin: Mapping[str, bytes], optional</span>
+<span class="sd">        A mapping from CUBIN module names to CUBIN binary data. When provided, the CUBIN data will be embedded</span>
+<span class="sd">        into the compiled shared library using objcopy, making it accessible via the TVM_FFI_EMBED_CUBIN macro.</span>
+<span class="sd">        The keys should match the names used in TVM_FFI_EMBED_CUBIN calls in the C++ source code.</span>
+
 <span class="sd">    Returns</span>
 <span class="sd">    -------</span>
 <span class="sd">    mod: Module</span>
@@ -1665,6 +1856,7 @@ document.write(`
             <span class="n">extra_ldflags</span><span class="o">=</span><span class="n">extra_ldflags</span><span class="p">,</span>
             <span class="n">extra_include_paths</span><span class="o">=</span><span class="n">extra_include_paths</span><span class="p">,</span>
             <span class="n">build_directory</span><span class="o">=</span><span class="n">build_directory</span><span class="p">,</span>
+            <span class="n">embed_cubin</span><span class="o">=</span><span class="n">embed_cubin</span><span class="p">,</span>
         <span class="p">)</span>
     <span class="p">)</span></div>
 
@@ -1991,7 +2183,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/cpp/nvrtc.html b/ffi/_modules/tvm_ffi/cpp/nvrtc.html
new file mode 100644
index 0000000000..02b24c984f
--- /dev/null
+++ b/ffi/_modules/tvm_ffi/cpp/nvrtc.html
@@ -0,0 +1,1228 @@
+
+<!DOCTYPE html>
+
+
+<html lang="en" data-content_root="../../../" >
+
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>tvm_ffi.cpp.nvrtc &#8212; tvm-ffi</title>
+  
+  
+  
+  <script data-cfasync="false">
+    document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
+    document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
+  </script>
+  
+  <!-- Loaded before other Sphinx assets -->
+  <link href="../../../_static/styles/theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
+<link href="../../../_static/styles/bootstrap.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
+<link href="../../../_static/styles/pydata-sphinx-theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
+
+  
+  <link href="../../../_static/vendor/fontawesome/6.5.2/css/all.min.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
+  <link rel="preload" as="font" type="font/woff2" crossorigin href="../../../_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.woff2" />
+<link rel="preload" as="font" type="font/woff2" crossorigin href="../../../_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.woff2" />
+<link rel="preload" as="font" type="font/woff2" crossorigin href="../../../_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.woff2" />
+
+    <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=03e43079" />
+    <link rel="stylesheet" type="text/css" href="../../../_static/styles/sphinx-book-theme.css?v=eba8b062" />
+    <link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css?v=76b2166b" />
+    <link rel="stylesheet" type="text/css" href="../../../_static/sphinx-design.min.css?v=95c83b7e" />
+    <link rel="stylesheet" type="text/css" href="../../../_static/collapsible-lists/css/tree_view.css?v=a885cde7" />
+    <link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=38aa6179" />
+  
+  <!-- Pre-loaded scripts that we'll load fully later -->
+  <link rel="preload" as="script" href="../../../_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b" />
+<link rel="preload" as="script" href="../../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
+  <script src="../../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
+
+    <script src="../../../_static/documentation_options.js?v=5f86a092"></script>
+    <script src="../../../_static/doctools.js?v=9bcbadda"></script>
+    <script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="../../../_static/clipboard.min.js?v=a7894cd8"></script>
+    <script src="../../../_static/copybutton.js?v=f281be69"></script>
+    <script src="../../../_static/scripts/sphinx-book-theme.js?v=887ef09a"></script>
+    <script src="../../../_static/design-tabs.js?v=f930bc37"></script>
+    <script src="../../../_static/collapsible-lists/js/CollapsibleLists.compressed.js?v=73120307"></script>
+    <script src="../../../_static/collapsible-lists/js/apply-collapsible-lists.js?v=660e4f45"></script>
+    <script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="../../../_static/downloads/require.min.js"></script>
+    <script type="module" src="../../../_static/downloads/mermaid.esm.min.mjs"></script>
+    <script type="module" src="../../../_static/downloads/mermaid-layout-elk.esm.min.mjs"></script>
+    <script type="module">import mermaid from "../../../_static/downloads/mermaid.esm.min.mjs";import elkLayouts from "../../../_static/downloads/mermaid-layout-elk.esm.min.mjs";mermaid.registerLayoutLoaders(elkLayouts);mermaid.initialize({startOnLoad:false});</script>
+    <script src="../../../_static/downloads/d3.min.js"></script>
+    <script type="module">import mermaid from "../../../_static/downloads/mermaid.esm.min.mjs";
+
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
+    width: 100%;
+}
+
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
+.mermaid-fullscreen-btn {
+    width: 28px;
+    height: 28px;
+    background: rgba(255, 255, 255, 0.95);
+    border: 1px solid rgba(0, 0, 0, 0.3);
+    border-radius: 4px;
+    cursor: pointer;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    transition: all 0.2s;
+    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
+    font-size: 14px;
+    line-height: 1;
+    padding: 0;
+    color: #333;
+}
+
+.mermaid-fullscreen-btn:hover {
+    opacity: 100% !important;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
+    transform: scale(1.1);
+}
+
+.mermaid-fullscreen-btn.dark-theme {
+    background: rgba(50, 50, 50, 0.95);
+    border: 1px solid rgba(255, 255, 255, 0.3);
+    color: #e0e0e0;
+}
+
+.mermaid-fullscreen-btn.dark-theme:hover {
+    background: rgba(60, 60, 60, 1);
+    box-shadow: 0 3px 10px rgba(255, 255, 255, 0.2);
+}
+
+.mermaid-fullscreen-modal {
+    display: none;
+    position: fixed !important;
+    top: 0 !important;
+    left: 0 !important;
+    width: 95vw;
+    height: 100vh;
+    background: rgba(255, 255, 255, 0.98);
+    z-index: 9999;
+    padding: 20px;
+    overflow: auto;
+}
+
+.mermaid-fullscreen-modal.dark-theme {
+    background: rgba(0, 0, 0, 0.98);
+}
+
+.mermaid-fullscreen-modal.active {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.mermaid-container-fullscreen {
+    position: relative;
+    width: 95vw;
+    height: 90vh;
+    max-width: 95vw;
+    max-height: 90vh;
+    background: white;
+    border-radius: 8px;
+    padding: 20px;
+    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
+    overflow: auto;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.mermaid-container-fullscreen.dark-theme {
+    background: #1a1a1a;
+    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
+}
+
+.mermaid-container-fullscreen pre.mermaid {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
+    cursor: grab;
+}
+
+.mermaid-fullscreen-close {
+    position: fixed !important;
+    top: 20px !important;
+    right: 20px !important;
+    width: 40px;
+    height: 40px;
+    background: rgba(255, 255, 255, 0.95);
+    border: 1px solid rgba(0, 0, 0, 0.2);
+    border-radius: 50%;
+    cursor: pointer;
+    z-index: 10000;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+    transition: all 0.2s;
+    font-size: 24px;
+    line-height: 1;
+    color: #333;
+}
+
+.mermaid-fullscreen-close:hover {
+    background: white;
+    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);
+    transform: scale(1.1);
+}
+
+.mermaid-fullscreen-close.dark-theme {
+    background: rgba(50, 50, 50, 0.95);
+    border: 1px solid rgba(255, 255, 255, 0.2);
+    color: #e0e0e0;
+}
+
+.mermaid-fullscreen-close.dark-theme:hover {
+    background: rgba(60, 60, 60, 1);
+    box-shadow: 0 6px 16px rgba(255, 255, 255, 0.2);
+}
+
+.mermaid-fullscreen-modal .mermaid-fullscreen-btn {
+    display: none !important;
+}`;
+document.head.appendChild(fullscreenStyle);
+
+// Detect if page has dark background
+const isDarkTheme = () => {
+    const bgColor = window.getComputedStyle(document.body).backgroundColor;
+    const match = bgColor.match(/rgb\((\d+),\s*(\d+),\s*(\d+)/);
+    if (match) {
+        const r = parseInt(match[1]);
+        const g = parseInt(match[2]);
+        const b = parseInt(match[3]);
+        const brightness = (r * 299 + g * 587 + b * 114) / 1000;
+        return brightness < 128;
+    }
+    return false;
+};
+
+const load = async () => {
+    await mermaid.run();
+
+    const all_mermaids = document.querySelectorAll(".mermaid");
+    const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
+
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
+        // Wait for mermaid to process all diagrams
+        setTimeout(load, 200);
+        return;
+    }
+
+    const darkTheme = isDarkTheme();
+
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
+    const modal = document.createElement('div');
+    modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
+    modal.setAttribute('role', 'dialog');
+    modal.setAttribute('aria-modal', 'true');
+    modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
+    modal.innerHTML = `
+        <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
+    `;
+    document.body.appendChild(modal);
+
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
+    const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
+
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
+    const closeModal = () => {
+        modal.classList.remove('active');
+        modalContent.innerHTML = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
+    };
+
+    closeBtn.addEventListener('click', closeModal);
+    modal.addEventListener('click', (e) => {
+        if (e.target === modal) closeModal();
+    });
+    document.addEventListener('keydown', (e) => {
+        if (e.key === 'Escape' && modal.classList.contains('active')) {
+            closeModal();
+        }
+    });
+
+    const allButtons = [];
+
+    document.querySelectorAll('.mermaid').forEach((mermaidDiv) => {
+        if (mermaidDiv.parentNode.classList.contains('mermaid-container') ||
+            mermaidDiv.closest('.mermaid-fullscreen-modal')) {
+            return;
+        }
+
+        const container = document.createElement('div');
+        container.className = 'mermaid-container';
+        mermaidDiv.parentNode.insertBefore(container, mermaidDiv);
+        container.appendChild(mermaidDiv);
+
+        const fullscreenBtn = document.createElement('button');
+        fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
+        fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
+        fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
+
+        // Calculate dynamic position based on diagram's margin and padding
+        const diagramStyle = window.getComputedStyle(mermaidDiv);
+        const marginTop = parseFloat(diagramStyle.marginTop) || 0;
+        const marginRight = parseFloat(diagramStyle.marginRight) || 0;
+        const paddingTop = parseFloat(diagramStyle.paddingTop) || 0;
+        const paddingRight = parseFloat(diagramStyle.paddingRight) || 0;
+        fullscreenBtn.style.top = `${marginTop + paddingTop + 4}px`;
+        fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
+
+        fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
+            const clone = mermaidDiv.cloneNode(true);
+            modalContent.innerHTML = '';
+            modalContent.appendChild(clone);
+
+            const svg = clone.querySelector('svg');
+            if (svg) {
+                svg.removeAttribute('width');
+                svg.removeAttribute('height');
+                svg.style.width = '100%';
+                svg.style.height = 'auto';
+                svg.style.maxWidth = '100%';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
+            }
+
+            modal.classList.add('active');
+            document.body.style.overflow = 'hidden';
+        });
+
+        container.appendChild(fullscreenBtn);
+        allButtons.push(fullscreenBtn);
+    });
+
+    // Update theme classes when theme changes
+    const updateTheme = () => {
+        const dark = isDarkTheme();
+        allButtons.forEach(btn => {
+            if (dark) {
+                btn.classList.add('dark-theme');
+            } else {
+                btn.classList.remove('dark-theme');
+            }
+        });
+        if (dark) {
+            modal.classList.add('dark-theme');
+            modalContent.classList.add('dark-theme');
+            closeBtn.classList.add('dark-theme');
+        } else {
+            modal.classList.remove('dark-theme');
+            modalContent.classList.remove('dark-theme');
+            closeBtn.classList.remove('dark-theme');
+        }
+    };
+
+    // Watch for theme changes
+    const observer = new MutationObserver(updateTheme);
+    observer.observe(document.documentElement, {
+        attributes: true,
+        attributeFilter: ['class', 'style', 'data-theme']
+    });
+    observer.observe(document.body, {
+        attributes: true,
+        attributeFilter: ['class', 'style']
+    });
+};
+
+window.addEventListener("load", load);
+</script>
+    <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/cpp/nvrtc';</script>
+    <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+  <meta name="viewport" content="width=device-width, initial-scale=1"/>
+  <meta name="docsearch:language" content="en"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
+  </head>
+  
+  
+  <body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
+
+  
+  
+  <div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
+  
+  <div id="pst-scroll-pixel-helper"></div>
+  
+  <button type="button" class="btn rounded-pill" id="pst-back-to-top">
+    <i class="fa-solid fa-arrow-up"></i>Back to top</button>
+
+  
+  <input type="checkbox"
+          class="sidebar-toggle"
+          id="pst-primary-sidebar-checkbox"/>
+  <label class="overlay overlay-primary" for="pst-primary-sidebar-checkbox"></label>
+  
+  <input type="checkbox"
+          class="sidebar-toggle"
+          id="pst-secondary-sidebar-checkbox"/>
+  <label class="overlay overlay-secondary" for="pst-secondary-sidebar-checkbox"></label>
+  
+  <div class="search-button__wrapper">
+    <div class="search-button__overlay"></div>
+    <div class="search-button__search-container">
+<form class="bd-search d-flex align-items-center"
+      action="../../../search.html"
+      method="get">
+  <i class="fa-solid fa-magnifying-glass"></i>
+  <input type="search"
+         class="form-control"
+         name="q"
+         id="search-input"
+         placeholder="Search..."
+         aria-label="Search..."
+         autocomplete="off"
+         autocorrect="off"
+         autocapitalize="off"
+         spellcheck="false"/>
+  <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
+</form></div>
+  </div>
+
+  <div class="pst-async-banner-revealer d-none">
+  <aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
+</div>
+
+  
+    <header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
+    </header>
+  
+
+  <div class="bd-container">
+    <div class="bd-container__inner bd-page-width">
+      
+      
+      
+        
+      
+      <div class="bd-sidebar-primary bd-sidebar">
+        
+
+  
+  <div class="sidebar-header-items sidebar-primary__section">
+    
+    
+    
+    
+  </div>
+  
+    <div class="sidebar-primary-items__start sidebar-primary__section">
+        <div class="sidebar-primary-item">
+
+  
+    
+  
+
+<a class="navbar-brand logo" href="../../../index.html">
+  
+  
+  
+  
+  
+  
+    <p class="title logo__title">tvm-ffi</p>
+  
+</a></div>
+        <div class="sidebar-primary-item">
+
+ <script>
+ document.write(`
+   <button class="btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+    <i class="fa-solid fa-magnifying-glass"></i>
+    <span class="search-button__default-text">Search</span>
+    <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
+   </button>
+ `);
+ </script></div>
+        <div class="sidebar-primary-item"><nav class="bd-links bd-docs-nav" aria-label="Main">
+    <div class="bd-toc-item navbar-nav active">
+        <p aria-level="2" class="caption" role="heading"><span class="caption-text">Get Started</span></p>
+<ul class="nav bd-sidenav">
+<li class="toctree-l1"><a class="reference internal" href="../../../get_started/quickstart.html">Quick Start</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../get_started/stable_c_abi.html">Stable C ABI</a></li>
+</ul>
+<p aria-level="2" class="caption" role="heading"><span class="caption-text">Guides</span></p>
+<ul class="nav bd-sidenav">
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/python_packaging.html">Python Binding and Packaging</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/cpp_packaging.html">C++ Packaging and Distribution</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/cpp_guide.html">C++ Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/python_guide.html">Python Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/compiler_integration.html">Compiler Integration</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/build_from_source.html">Build from Source</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
+</ul>
+<p aria-level="2" class="caption" role="heading"><span class="caption-text">Concepts</span></p>
+<ul class="nav bd-sidenav">
+<li class="toctree-l1"><a class="reference internal" href="../../../concepts/abi_overview.html">ABI Overview</a></li>
+</ul>
+<p aria-level="2" class="caption" role="heading"><span class="caption-text">Reference</span></p>
+<ul class="nav bd-sidenav">
+<li class="toctree-l1 has-children"><a class="reference internal" href="../../../reference/python/index.html">Python API</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Object.html">tvm_ffi.Object</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Tensor.html">tvm_ffi.Tensor</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.from_dlpack.html">tvm_ffi.from_dlpack</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Shape.html">tvm_ffi.Shape</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.dtype.html">tvm_ffi.dtype</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Device_class.html">tvm_ffi.Device</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.DLDeviceType.html">tvm_ffi.DLDeviceType</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.device_function.html">tvm_ffi.device</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Function.html">tvm_ffi.Function</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Module.html">tvm_ffi.Module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.system_lib.html">tvm_ffi.system_lib</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.load_module.html">tvm_ffi.load_module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Array.html">tvm_ffi.Array</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.Map.html">tvm_ffi.Map</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.register_error.html">tvm_ffi.register_error</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.register_object.html">tvm_ffi.register_object</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.register_global_func.html">tvm_ffi.register_global_func</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.get_global_func.html">tvm_ffi.get_global_func</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.get_global_func_metadata.html">tvm_ffi.get_global_func_metadata</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.init_ffi_api.html">tvm_ffi.init_ffi_api</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.remove_global_func.html">tvm_ffi.remove_global_func</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.StreamContext.html">tvm_ffi.StreamContext</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.use_torch_stream.html">tvm_ffi.use_torch_stream</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.use_raw_stream.html">tvm_ffi.use_raw_stream</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.get_raw_stream.html">tvm_ffi.get_raw_stream</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.load_inline.html">tvm_ffi.cpp.load_inline</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.access_path.AccessPath.html">tvm_ffi.access_path.AccessPath</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.access_path.AccessStep.html">tvm_ffi.access_path.AccessStep</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.convert.html">tvm_ffi.convert</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../../reference/python/generated/tvm_ffi.ObjectConvertible.html">tvm_ffi.ObjectConvertible</a></li>
+</ul>
+</details></li>
+<li class="toctree-l1 has-children"><a class="reference internal" href="../../../reference/cpp/index.html">C++ API</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
+<li class="toctree-l2 has-children"><a class="reference internal" href="../../../reference/cpp/generated/index.html">Full API Index</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/namespace_tvm.html">Namespace tvm</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/namespace_tvm__ffi.html">Namespace tvm::ffi</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/namespace_tvm__ffi__json.html">Namespace tvm::ffi::json</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/namespace_tvm__ffi__reflection.html">Namespace tvm::ffi::reflection</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator_3_01Any_00_01IterType_01_4.html">Template Struct is_valid_iterator&lt; Any, IterType &gt;</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator_3_01Optional_3_01T_01_4_00_01IterType_01_4.html">Template Struct is_valid_iterator&lt; Optional&lt; T &gt;, IterType &gt;</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1ObjectPtrEqual.html">Struct ObjectPtrEqual</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1ObjectPtrHash.html">Struct ObjectPtrHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1ObjectRefWithFallbackTraitsBase.html">Template Struct ObjectRefWithFallbackTraitsBase</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1reflection_1_1FieldInfoBuilder.html">Struct FieldInfoBuilder</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1reflection_1_1InfoTrait.html">Struct InfoTrait</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1reflection_1_1init.html">Template Struct init</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1reflection_1_1MethodInfoBuilder.html">Struct MethodInfoBuilder</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1StaticTypeKey.html">Struct StaticTypeKey</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1TypeToFieldStaticTypeIndex.html">Template Struct TypeToFieldStaticTypeIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1TypeToRuntimeTypeIndex.html">Template Struct TypeToRuntimeTypeIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structtvm_1_1ffi_1_1UnsafeInit.html">Struct UnsafeInit</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIAny.html">Struct TVMFFIAny</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIByteArray.html">Struct TVMFFIByteArray</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIErrorCell.html">Struct TVMFFIErrorCell</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIFieldInfo.html">Struct TVMFFIFieldInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIFunctionCell.html">Struct TVMFFIFunctionCell</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIMethodInfo.html">Struct TVMFFIMethodInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIObject.html">Struct TVMFFIObject</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIOpaqueObjectCell.html">Struct TVMFFIOpaqueObjectCell</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIShapeCell.html">Struct TVMFFIShapeCell</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFITypeAttrColumn.html">Struct TVMFFITypeAttrColumn</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFITypeInfo.html">Struct TVMFFITypeInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFITypeMetadata.html">Struct TVMFFITypeMetadata</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/structTVMFFIVersion.html">Struct TVMFFIVersion</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Any.html">Class Any</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1AnyView.html">Class AnyView</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Function.html">Class Function</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1FunctionObj.html">Class FunctionObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Map.html">Template Class Map</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1MapObj.html">Class MapObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Module.html">Class Module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ModuleObj.html">Class ModuleObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Object.html">Class Object</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ObjectPtr.html">Template Class ObjectPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ObjectRef.html">Class ObjectRef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Optional.html">Template Class Optional</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1PackedArgs.html">Class PackedArgs</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1AccessPath.html">Class AccessPath</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1AccessPathObj.html">Class AccessPathObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1AccessStep.html">Class AccessStep</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1AccessStepObj.html">Class AccessStepObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1AttachFieldFlag.html">Class AttachFieldFlag</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1DefaultValue.html">Class DefaultValue</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1FieldGetter.html">Class FieldGetter</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1FieldSetter.html">Class FieldSetter</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1GlobalDef.html">Class GlobalDef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1Metadata.html">Class Metadata</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1ObjectCreator.html">Class ObjectCreator</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1ObjectDef.html">Template Class ObjectDef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1TypeAttrColumn.html">Class TypeAttrColumn</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1TypeAttrDef.html">Template Class TypeAttrDef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1RValueRef.html">Template Class RValueRef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Shape.html">Class Shape</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ShapeObj.html">Class ShapeObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1ShapeView.html">Class ShapeView</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1SmallMapObj.html">Class SmallMapObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1StrictBool.html">Class StrictBool</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1String.html">Class String</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1StructuralEqual.html">Class StructuralEqual</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1StructuralHash.html">Class StructuralHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Tensor.html">Class Tensor</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1TensorObj.html">Class TensorObj</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1TensorView.html">Class TensorView</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Tuple.html">Template Class Tuple</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1TypedFunction.html">Template Class TypedFunction</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1TypedFunction_3_01R_07Args_8_8_8_08_4.html">Template Class TypedFunction&lt; R(Args…) &gt;</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1Variant.html">Template Class Variant</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/classtvm_1_1ffi_1_1WeakObjectPtr.html">Template Class WeakObjectPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/enum_dtype_8h_1a16f66b97fa44d7bd6114324c8b8e1bed.html">Enum DLExtDataTypeCode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/enum_namespacetvm_1_1ffi_1_1reflection_1a9c2cd4d683e7c7065942e36e628a2517.html">Enum AccessKind</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/enum_c__api_8h_1ad6a441d28d4a6406418489609e975a19.html">Enum TVMFFIBacktraceUpdateMode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/enum_c__api_8h_1ad5a608f648c4f86cafdc8dc09f870bc5.html">Enum TVMFFIFieldFlagBitMask</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/enum_c__api_8h_1a8eb3fb55f6ec3c46b6e57740af4ca58a.html">Enum TVMFFIObjectDeleterFlagBitMask</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/enum_c__api_8h_1aea0f30bf60e26c1322e525e246ef5be9.html">Enum TVMFFISEqHashKind</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/enum_c__api_8h_1a1925bb5d568a3f5c92a6c28934c9bcc2.html">Enum TVMFFITypeIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_base64_8h_1ae1d4736f7dc56b224acd303ba7bf7a45.html">Function tvm::ffi::Base64Decode(TVMFFIByteArray)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_base64_8h_1acb849cdb1d9b9620be10bbcda0257afa.html">Function tvm::ffi::Base64Decode(const String&amp;)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_base64_8h_1aa5b2a4531449585b9f079cb170a79f0b.html">Function tvm::ffi::Base64Encode(TVMFFIByteArray)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_base64_8h_1a279b4ba2f4c7ea16291ef24b73e43963.html">Function tvm::ffi::Base64Encode(const Bytes&amp;)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_endian_8h_1ab4e0ed8000c632cd2c7cd089c0a0d1af.html">Function tvm::ffi::ByteSwap</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_array_8h_1af5983fd2a31e79635307875b3a216472.html">Template Function tvm::ffi::Concat</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_dtype_8h_1a94787950883e5a7e97b764ddd342afc3.html">Function tvm::ffi::DLDataTypeToString</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_string_8h_1aa190eed2516ff9a633009cc62f660502.html">Function tvm::ffi::EscapeString</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_serialization_8h_1a56baa5d1ca415dbdebf19ac1f54bd5b7.html">Function tvm::ffi::FromJSONGraph</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_tensor_8h_1a71e4a492b5a03a19a95087771a7e9ed1.html">Function tvm::ffi::GetDataSize(size_t, DLDataType)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_tensor_8h_1a226723176642cde5996498e7da6a6368.html">Function tvm::ffi::GetDataSize(const DLTensor&amp;)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_tensor_8h_1a011d0a2dcbe5702156124d7a7223b3dd.html">Function tvm::ffi::GetDataSize(const Tensor&amp;)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_tensor_8h_1a65b3a61c540c72d9410150a3a7a76dde.html">Function tvm::ffi::GetDataSize(const TensorView&amp;)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_cast_8h_1a4dba749dd934d8a7891ad126a8fdcc1f.html">Template Function tvm::ffi::GetObjectPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_cast_8h_1a3c5fed9bb23b4804b61037c8ac4874f1.html">Template Function tvm::ffi::GetRef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_tensor_8h_1aa79cf4e1e3873d8947050b3cee41153a.html">Function tvm::ffi::IsAligned</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_tensor_8h_1a93094b6b3f20c2cd5aa1c1c2522bc3e4.html">Function tvm::ffi::IsContiguous</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_tensor_8h_1aab70a15ca1dde710bc3052c5ce1f6fbd.html">Function tvm::ffi::IsDirectAddressDevice</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_json_8h_1a86217bda8bfebd85f8265878bc8a59b8.html">Function tvm::ffi::json::Parse</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_json_8h_1a2cd33b0fbc0194eaa803b8a476670587.html">Function tvm::ffi::json::Stringify</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_memory_8h_1a801e8ecc2e3adbc1dac52c714e7cef11.html">Template Function tvm::ffi::make_inplace_array_object</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_array_8h_1a3b56317c7cfb2760cf6c09c303840967.html">Specialized Template Function tvm::ffi::make_object()</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_memory_8h_1a8892f2a3cad8dbc51930c464f2ab863b.html">Template Function tvm::ffi::make_object(Args&amp;&amp;…)</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_map_8h_1a611844db41026b7a95846dd316b435af.html">Template Function tvm::ffi::Merge</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_namespacetvm_1_1ffi_1_1reflection_1a735285a70c7c4308816450a5b27f03f2.html">Function tvm::ffi::reflection::EnsureTypeAttrColumn</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_namespacetvm_1_1ffi_1_1reflection_1a32d91001c82e10566c69e237ab0de50a.html">Template Function tvm::ffi::reflection::ForEachFieldInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_namespacetvm_1_1ffi_1_1reflection_1acc0ded3ead1cc6ffc836005d3bb2cc9c.html">Template Function tvm::ffi::reflection::ForEachFieldInfoWithEarlyStop</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_namespacetvm_1_1ffi_1_1reflection_1a6b1f837cf822ded72a31f343ce987f4c.html">Template Function tvm::ffi::reflection::GetFieldByteOffsetToObject</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_namespacetvm_1_1ffi_1_1reflection_1a80c4984a43d14113b20a67c966833709.html">Function tvm::ffi::reflection::GetFieldInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_namespacetvm_1_1ffi_1_1reflection_1aba4d7fd771bea88a32803dda191b7044.html">Function tvm::ffi::reflection::GetMethod</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_namespacetvm_1_1ffi_1_1reflection_1ac902a725008e348254ee7a2d07c8a95a.html">Function tvm::ffi::reflection::GetMethodInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_dtype_8h_1a8a71c64237efaa13a8d40dfacd6c3165.html">Function tvm::ffi::StringToDLDataType</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_serialization_8h_1a24d1febeb5c1026e7fd66dee9dd9915f.html">Function tvm::ffi::ToJSONGraph</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_string_8h_1ad045700080c053c50d68cde298b2b4b2.html">Function tvm::ffi::ToStringView</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_object_8h_1a0d6e075f219808c4ff7adebd99210a7b.html">Function tvm::ffi::TypeIndexToTypeKey</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_8h_1a111e2ed7444eb220e19c7624d0932d89.html">Function tvm::ffi::TypeKeyToIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a63149ed43a6ecffa2146f92914c0bc7b.html">Function TVMFFIAnyViewToOwnedAny</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1ac0e2d59d3a8ba7f2b32eac47b1c6fc5d.html">Function TVMFFIBacktrace</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1aa2a81275b69ba0f61ce556df85517ef9.html">Function TVMFFIBytesFromByteArray</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a1dd5584d94f6e00a18f4cfa003dfb93a.html">Function TVMFFIBytesGetByteArrayPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a44604b1d0db208ed82cbc7cf0fd0f47c.html">Function TVMFFIDataTypeFromString</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a402f64dec7a665f281e55cf946a7481b.html">Function TVMFFIDataTypeToString</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a762fc5c881dc5f66066eb45b65a5781f.html">Function TVMFFIDLDeviceFromIntPair</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1a0e01ad3ed44c0240f1b76dbed7014234.html">Function TVMFFIEnvCheckSignals</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1ac8f7894c4f205756b7aee01108ab8e84.html">Function TVMFFIEnvGetDLPackManagedTensorAllocator</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1a8ce2ba89ca1d010a084b4c36ed6b2965.html">Function TVMFFIEnvGetStream</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1abcbbccfc02c57418e757033afce42ece.html">Function TVMFFIEnvModLookupFromImports</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1a7451ab18593d70d30a6214d622e200d2.html">Function TVMFFIEnvModRegisterContextSymbol</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1a9b142b59ab84bc06e4a0f66a3510e8f7.html">Function TVMFFIEnvModRegisterSystemLibSymbol</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1a36c15024744584acceaf0233947f9505.html">Function TVMFFIEnvRegisterCAPI</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1aaf8960c33546788950b8e35ac18efe39.html">Function TVMFFIEnvSetDLPackManagedTensorAllocator</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1ae24b47945440d1c0aca13af13bdaf916.html">Function TVMFFIEnvSetStream</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__env__api_8h_1a683191d48d3fdebc98b68f3b717baf6a.html">Function TVMFFIEnvTensorAlloc</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a3479c144d165e717d1464b7b4df84897.html">Function TVMFFIErrorCreate</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a0ee6d2da9a72749561838bf503f62f93.html">Function TVMFFIErrorGetCellPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a268d0b5dc89146020c09f77fa0eb8f67.html">Function TVMFFIErrorMoveFromRaised</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1af108ca4da596c634b4cb9e82c8bec1ce.html">Function TVMFFIErrorSetRaised</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1aedd89f80f73d54dd5904d943dd0690c6.html">Function TVMFFIErrorSetRaisedFromCStr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a56ce10d1e6fc2d34a1a496bdace4af33.html">Function TVMFFIErrorSetRaisedFromCStrParts</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a1ac76d88e0d79843403ce2e0239d7fe2.html">Function TVMFFIFunctionCall</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a4ce84fc667040bba425664c78b5f2c69.html">Function TVMFFIFunctionCreate</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a0d3dcd6ceff356614a6924201c02cf97.html">Function TVMFFIFunctionGetCellPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a3bf47f6e1229627902c80217d674ed29.html">Function TVMFFIFunctionGetGlobal</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a177d080127ef8f3e338beb7dba4c04fd.html">Function TVMFFIFunctionSetGlobal</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1aa26fa16c024c6f2fa15e46aa1333fdb9.html">Function TVMFFIFunctionSetGlobalFromMethodInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a53c5ec2971806966ed96a6add32b5238.html">Function TVMFFIGetTypeAttrColumn</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1afee5a803e22f9baf5ee2ff1f0ace6429.html">Function TVMFFIGetTypeInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a145f2694254410fd4814541e2cde99c1.html">Function TVMFFIGetVersion</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a6415c088928d62af8749f3dc57dcf23b.html">Function TVMFFIObjectCreateOpaque</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1aba50ba2cee84b1ef7a718211ab349031.html">Function TVMFFIObjectDecRef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a31a317a32bfa641180eed1bfb3d5cf01.html">Function TVMFFIObjectGetTypeIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1ac66c1d142240be0cdf65c8ba38770eb6.html">Function TVMFFIObjectIncRef</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a3253bbf35e2ad1361b2ce1de13d2c9b2.html">Function TVMFFIOpaqueObjectGetCellPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a74c26efdd74840abc3e1581c73a38bfa.html">Function TVMFFIShapeGetCellPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a724b0d386cf3d50c7d141ca37be19092.html">Function TVMFFISmallBytesGetContentByteArray</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a5a7e3fe8a94e066bc1bf897fbf736651.html">Function TVMFFIStringFromByteArray</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1af1b8a29eb3f9405982c344f5e572dd65.html">Function TVMFFITensorFromDLPack</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1adaf9a5ab3d30bb3eca58b430f2592fc0.html">Function TVMFFITensorFromDLPackVersioned</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1ab691fd5bc4442c631c1f70985a962f50.html">Function TVMFFITensorGetDLTensorPtr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1adec9f8a8f0683caeb9dd194d9a3c62d5.html">Function TVMFFITensorToDLPack</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a1162f2cbaf1a7628a03ed9488cff858b.html">Function TVMFFITensorToDLPackVersioned</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a3f859b60d99c85f43fce8226c69f3c5e.html">Function TVMFFITypeGetOrAllocIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1ac64df2793c84fc8ba5d24968d60bcada.html">Function TVMFFITypeKeyToIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1ac5a4f48eacde3c69ad3154b6aa39fa3c.html">Function TVMFFITypeRegisterAttr</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a1a99289a314c6c3de865721bd3efb525.html">Function TVMFFITypeRegisterField</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1a07576e172e0788da4982148edcf53b05.html">Variable tvm::ffi::symbol::tvm_ffi_metadata_prefix</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/variable_module_8h_1ac261d9ce6ffb49dd9878610ce217075e.html">Variable tvm::ffi::symbol::tvm_ffi_symbol_prefix</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1ac593f4065568c8f61cf38d00d585befd.html">Define TVM_FFI_DECLARE_OBJECT_INFO_FINAL</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a9d1c42071de0440f70c7bb5e0bd0f325.html">Define TVM_FFI_DECLARE_OBJECT_INFO_PREDEFINED_TYPE_KEY</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1ae5be195e80d32413cbe5e2ad11e146f7.html">Define TVM_FFI_ICHECK_GE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1af1f84686ce5635b3a378567368e89e4d.html">Define TVM_FFI_ICHECK_GT</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1aade00b2e0a9789e3e8bf33441d651455.html">Define TVM_FFI_ICHECK_LE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a1a94c8b78e74adec05051abb9055e7b8.html">Define TVM_FFI_ICHECK_LT</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1afcd5778e656fa2c20aa0b81fbcebc497.html">Define TVM_FFI_ICHECK_NE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a26827bb8bc9e39255060f6be1d2a37fb.html">Define TVM_FFI_ICHECK_NOTNULL</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_endian_8h_1a2ebd9542b313b3b45b2892f2b3d4f26d.html">Define TVM_FFI_IO_NO_ENDIAN_SWAP</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_endian_8h_1a912dbc7a68913612c723f877acaa8105.html">Define TVM_FFI_IO_USE_LITTLE_ENDIAN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a927d4ae2bbf7a08723643993e780f183.html">Define TVM_FFI_LOG_AND_THROW</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1a10bd932564c8e71a3978a061fbb82360.html">Define TVM_FFI_SAFE_CALL_BEGIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_function_8h_1ae3c016c4bf383aa205b4485edd7ca17c.html">Define TVM_FFI_SAFE_CALL_END</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a8df4e0ff8a6195274c6f7c031a4f0db4.html">Define TVM_FFI_THROW</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_error_8h_1a386641a33bb14802830471a2442ddd7d.html">Define TVM_FFI_USE_LIBBACKTRACE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_c__api_8h_1a4241f838270253b885e1de02534bc273.html">Define TVM_FFI_VERSION_MAJOR</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_c__api_8h_1a717daddad98d127813ba8ff5a715e929.html">Define TVM_FFI_VERSION_MINOR</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_c__api_8h_1a42634cb2690dce4d9af6c2a402fc903c.html">Define TVM_FFI_VERSION_PATCH</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/define_c__api_8h_1a01871644eed04162005df7faa5442f92.html">Define TVM_FFI_WEAK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_memory_8h_1a65bf625279df21dec5c8097264415113.html">Typedef tvm::ffi::FObjectDeleter</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_json_8h_1aeb9cdccfbc28034e94e46f9f6bd8d92a.html">Typedef tvm::ffi::json::Array</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_json_8h_1a74ca72d0b686c114af683d63e96f2998.html">Typedef tvm::ffi::json::Object</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_json_8h_1a8e808548bb6a99d0a6093ab3e2229ad3.html">Typedef tvm::ffi::json::Value</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_namespacetvm_1_1ffi_1_1reflection_1a96513314d45b43eada132d9b96653d9a.html">Typedef tvm::ffi::reflection::_MetadataType</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_namespacetvm_1_1ffi_1_1reflection_1a32b044a71a094de492867144ca299c15.html">Typedef tvm::ffi::reflection::AccessPathPair</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_object_8h_1a7ba296d84188e5970ba854332a1f04a6.html">Typedef tvm::ffi::TypeIndex</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_object_8h_1ae125f5f5a8a94c7340577c1959805295.html">Typedef tvm::ffi::TypeInfo</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_c__api_8h_1ae22f1a87cbaf7f744d9201948c05d2a5.html">Typedef TVMFFIFieldGetter</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_c__api_8h_1aba6bf585b03799369fb535db4a5d2e79.html">Typedef TVMFFIFieldSetter</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_c__api_8h_1a19fdd3c500a70abb3def842c73694548.html">Typedef TVMFFIObjectCreator</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_c__api_8h_1aa0abef2444fde82d76337218e5c13b3f.html">Typedef TVMFFIObjectHandle</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_c__api_8h_1a9eee5afddb1b39723847d67d109c03fe.html">Typedef TVMFFISafeCallType</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../../reference/cpp/generated/typedef_c__env__api_8h_1aa7abccefa41ac9d3040df689c0c72fa4.html">Typedef TVMFFIStreamHandle</a></li>
+</ul>
+</details></li>
+</ul>
+</details></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/rust/index.html">Rust API</a></li>
+</ul>
+
+    </div>
+</nav></div>
+    </div>
+  
+  
+  <div class="sidebar-primary-items__end sidebar-primary__section">
+  </div>
+  
+  <div id="rtd-footer-container"></div>
+
+
+      </div>
+      
+      <main id="main-content" class="bd-main" role="main">
+        
+        
+
+<div class="sbt-scroll-pixel-helper"></div>
+
+          <div class="bd-content">
+            <div class="bd-article-container">
+              
+              <div class="bd-header-article d-print-none">
+<div class="header-article-items header-article__inner">
+  
+    <div class="header-article-items__start">
+      
+        <div class="header-article-item"><button class="sidebar-toggle primary-toggle btn btn-sm" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
+  <span class="fa-solid fa-bars"></span>
+</button></div>
+      
+    </div>
+  
+  
+    <div class="header-article-items__end">
+      
+        <div class="header-article-item">
+
+<div class="article-header-buttons">
+
+
+<a href="https://github.com/apache/tvm-ffi" target="_blank"
+   class="btn btn-sm btn-source-repository-button"
+   title="Source repository"
+   data-bs-placement="bottom" data-bs-toggle="tooltip"
+>
+  
+
+<span class="btn__icon-container">
+  <i class="fab fa-github"></i>
+  </span>
+
+</a>
+
+
+
+
+<button onclick="toggleFullScreen()"
+  class="btn btn-sm btn-fullscreen-button"
+  title="Fullscreen mode"
+  data-bs-placement="bottom" data-bs-toggle="tooltip"
+>
+  
+
+<span class="btn__icon-container">
+  <i class="fas fa-expand"></i>
+  </span>
+
+</button>
+
+
+
+<script>
+document.write(`
+  <button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
+    <i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light"></i>
+    <i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark"></i>
+    <i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto"></i>
+  </button>
+`);
+</script>
+
+
+<script>
+document.write(`
+  <button class="btn btn-sm pst-navbar-icon search-button search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
+    <i class="fa-solid fa-magnifying-glass fa-lg"></i>
+  </button>
+`);
+</script>
+
+</div></div>
+      
+    </div>
+  
+</div>
+</div>
+              
+              
+
+<div id="jb-print-docs-body" class="onlyprint">
+    <h1></h1>
+    <!-- Table of contents -->
+    <div id="print-main-content">
+        <div id="jb-print-toc">
+            
+        </div>
+    </div>
+</div>
+
+              
+                
+<div id="searchbox"></div>
+                <article class="bd-article">
+                  
+  <h1>Source code for tvm_ffi.cpp.nvrtc</h1><div class="highlight"><pre>
+<span></span><span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
+<span class="c1"># or more contributor license agreements.  See the NOTICE file</span>
+<span class="c1"># distributed with this work for additional information</span>
+<span class="c1"># regarding copyright ownership.  The ASF licenses this file</span>
+<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
+<span class="c1"># &quot;License&quot;); you may not use this file except in compliance</span>
+<span class="c1"># with the License.  You may obtain a copy of the License at</span>
+<span class="c1">#</span>
+<span class="c1">#   http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="c1">#</span>
+<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
+<span class="c1"># software distributed under the License is distributed on an</span>
+<span class="c1"># &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
+<span class="c1"># KIND, either express or implied.  See the License for the</span>
+<span class="c1"># specific language governing permissions and limitations</span>
+<span class="c1"># under the License.</span>
+<span class="sd">&quot;&quot;&quot;NVRTC (NVIDIA Runtime Compilation) utilities for compiling CUDA source to CUBIN.&quot;&quot;&quot;</span>
+
+<span class="kn">from</span><span class="w"> </span><span class="nn">__future__</span><span class="w"> </span><span class="kn">import</span> <span class="n">annotations</span>
+
+<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Sequence</span>
+
+
+<div class="viewcode-block" id="nvrtc_compile">
+<a class="viewcode-back" href="../../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html#tvm_ffi.cpp.nvrtc.nvrtc_compile">[docs]</a>
+<span class="k">def</span><span class="w"> </span><span class="nf">nvrtc_compile</span><span class="p">(</span>  <span class="c1"># noqa: PLR0912, PLR0915</span>
+    <span class="n">source</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+    <span class="o">*</span><span class="p">,</span>
+    <span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;kernel.cu&quot;</span><span class="p">,</span>
+    <span class="n">arch</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+    <span class="n">extra_opts</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+<span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bytes</span><span class="p">:</span>
+<span class="w">    </span><span class="sd">&quot;&quot;&quot;Compile CUDA source code to CUBIN using NVRTC.</span>
+
+<span class="sd">    This function uses the NVIDIA Runtime Compilation (NVRTC) library to compile</span>
+<span class="sd">    CUDA C++ source code into a CUBIN binary that can be loaded and executed</span>
+<span class="sd">    using the CUDA Driver API.</span>
+
+<span class="sd">    Parameters</span>
+<span class="sd">    ----------</span>
+<span class="sd">    source : str</span>
+<span class="sd">        The CUDA C++ source code to compile.</span>
+
+<span class="sd">    name : str, optional</span>
+<span class="sd">        The name to use for the source file (for error messages). Default: &quot;kernel.cu&quot;</span>
+
+<span class="sd">    arch : str, optional</span>
+<span class="sd">        The target GPU architecture (e.g., &quot;sm_75&quot;, &quot;sm_80&quot;, &quot;sm_89&quot;). If not specified,</span>
+<span class="sd">        attempts to auto-detect from the current GPU.</span>
+
+<span class="sd">    extra_opts : Sequence[str], optional</span>
+<span class="sd">        Additional compilation options to pass to NVRTC (e.g., [&quot;-I/path/to/include&quot;, &quot;-DDEFINE=1&quot;]).</span>
+
+<span class="sd">    Returns</span>
+<span class="sd">    -------</span>
+<span class="sd">    bytes</span>
+<span class="sd">        The compiled CUBIN binary data.</span>
+
+<span class="sd">    Raises</span>
+<span class="sd">    ------</span>
+<span class="sd">    RuntimeError</span>
+<span class="sd">        If NVRTC compilation fails or CUDA bindings are not available.</span>
+
+<span class="sd">    Example</span>
+<span class="sd">    -------</span>
+<span class="sd">    .. code-block:: python</span>
+
+<span class="sd">        from tvm_ffi.cpp import nvrtc</span>
+
+<span class="sd">        cuda_source = &#39;&#39;&#39;</span>
+<span class="sd">        extern &quot;C&quot; __global__ void add_one(float* x, float* y, int n) {</span>
+<span class="sd">            int idx = blockIdx.x * blockDim.x + threadIdx.x;</span>
+<span class="sd">            if (idx &lt; n) {</span>
+<span class="sd">                y[idx] = x[idx] + 1.0f;</span>
+<span class="sd">            }</span>
+<span class="sd">        }</span>
+<span class="sd">        &#39;&#39;&#39;</span>
+
+<span class="sd">        cubin_bytes = nvrtc.nvrtc_compile(cuda_source)</span>
+<span class="sd">        # Use cubin_bytes with tvm_ffi.cpp.load_inline and embed_cubin parameter</span>
+
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="kn">from</span><span class="w"> </span><span class="nn">cuda.bindings</span><span class="w"> </span><span class="kn">import</span> <span class="n">driver</span><span class="p">,</span> <span class="n">nvrtc</span>  <span class="c1"># type: ignore[import-not-found]  # noqa: PLC0415</span>
+    <span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
+            <span class="s2">&quot;CUDA bindings not available. Install with: pip install cuda-python&quot;</span>
+        <span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">e</span>
+
+    <span class="c1"># Auto-detect architecture if not specified</span>
+    <span class="k">if</span> <span class="n">arch</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="c1"># Initialize CUDA driver API</span>
+            <span class="p">(</span><span class="n">result</span><span class="p">,)</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">cuInit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">driver</span><span class="o">.</span><span class="n">CUresult</span><span class="o">.</span><span class="n">CUDA_SUCCESS</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to initialize CUDA driver: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+
+            <span class="c1"># Get current device</span>
+            <span class="n">result</span><span class="p">,</span> <span class="n">device</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">cuCtxGetDevice</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">driver</span><span class="o">.</span><span class="n">CUresult</span><span class="o">.</span><span class="n">CUDA_SUCCESS</span><span class="p">:</span>
+                <span class="c1"># Try to get device 0 if no context exists</span>
+                <span class="n">device</span> <span class="o">=</span> <span class="mi">0</span>
+
+            <span class="c1"># Get compute capability</span>
+            <span class="n">result</span><span class="p">,</span> <span class="n">major</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">cuDeviceGetAttribute</span><span class="p">(</span>
+                <span class="n">driver</span><span class="o">.</span><span class="n">CUdevice_attribute</span><span class="o">.</span><span class="n">CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR</span><span class="p">,</span> <span class="n">device</span>
+            <span class="p">)</span>
+            <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">driver</span><span class="o">.</span><span class="n">CUresult</span><span class="o">.</span><span class="n">CUDA_SUCCESS</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get compute capability major: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+
+            <span class="n">result</span><span class="p">,</span> <span class="n">minor</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">cuDeviceGetAttribute</span><span class="p">(</span>
+                <span class="n">driver</span><span class="o">.</span><span class="n">CUdevice_attribute</span><span class="o">.</span><span class="n">CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR</span><span class="p">,</span> <span class="n">device</span>
+            <span class="p">)</span>
+            <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">driver</span><span class="o">.</span><span class="n">CUresult</span><span class="o">.</span><span class="n">CUDA_SUCCESS</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get compute capability minor: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+
+            <span class="n">arch</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;sm_</span><span class="si">{</span><span class="n">major</span><span class="si">}{</span><span class="n">minor</span><span class="si">}</span><span class="s2">&quot;</span>
+        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="c1"># Fallback to a reasonable default</span>
+            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">&quot;Failed to auto-detect GPU architecture: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">. &quot;</span>
+                <span class="s2">&quot;Please specify &#39;arch&#39; parameter explicitly.&quot;</span>
+            <span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">e</span>
+
+    <span class="c1"># Create program</span>
+    <span class="n">result</span><span class="p">,</span> <span class="n">prog</span> <span class="o">=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcCreateProgram</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">source</span><span class="p">),</span> <span class="nb">str</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>< [...]
+    <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcResult</span><span class="o">.</span><span class="n">NVRTC_SUCCESS</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to create NVRTC program: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+
+    <span class="c1"># Compile options</span>
+    <span class="n">opts</span> <span class="o">=</span> <span class="p">[</span>
+        <span class="sa">b</span><span class="s2">&quot;--gpu-architecture=&quot;</span> <span class="o">+</span> <span class="n">arch</span><span class="o">.</span><span class="n">encode</span><span class="p">(),</span>
+        <span class="sa">b</span><span class="s2">&quot;-default-device&quot;</span><span class="p">,</span>
+    <span class="p">]</span>
+
+    <span class="c1"># Add extra options if provided</span>
+    <span class="k">if</span> <span class="n">extra_opts</span><span class="p">:</span>
+        <span class="n">opts</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">opt</span><span class="o">.</span><span class="n">encode</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="n">opt</span> <span class="k">for</span> <span [...]
+
+    <span class="c1"># Compile</span>
+    <span class="p">(</span><span class="n">result</span><span class="p">,)</span> <span class="o">=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcCompileProgram</span><span class="p">(</span><span class="n">prog</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">opts</span><span class="p">),</span> <span class="n">opts</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcResult</span><span class="o">.</span><span class="n">NVRTC_SUCCESS</span><span class="p">:</span>
+        <span class="c1"># Get compilation log</span>
+        <span class="n">result_log</span><span class="p">,</span> <span class="n">log_size</span> <span class="o">=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcGetProgramLogSize</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">result_log</span> <span class="o">==</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcResult</span><span class="o">.</span><span class="n">NVRTC_SUCCESS</span> <span class="ow">and</span> <span class="n">log_size</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">log_buf</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="n">log_size</span>
+            <span class="p">(</span><span class="n">result_log</span><span class="p">,)</span> <span class="o">=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcGetProgramLog</span><span class="p">(</span><span class="n">prog</span><span class="p">,</span> <span class="n">log_buf</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">result_log</span> <span class="o">==</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcResult</span><span class="o">.</span><span class="n">NVRTC_SUCCESS</span><span class="p">:</span>
+                <span class="n">error_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;NVRTC compilation failed:</span><span class="se">\n</span><span class="si">{</span><span class="n">log_buf</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">error_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;NVRTC compilation failed (couldn&#39;t get log): </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">error_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;NVRTC compilation failed: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span>
+
+        <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcDestroyProgram</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">error_msg</span><span class="p">)</span>
+
+    <span class="c1"># Get CUBIN</span>
+    <span class="n">result</span><span class="p">,</span> <span class="n">cubin_size</span> <span class="o">=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcGetCUBINSize</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcResult</span><span class="o">.</span><span class="n">NVRTC_SUCCESS</span><span class="p">:</span>
+        <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcDestroyProgram</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get CUBIN size from NVRTC: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+
+    <span class="n">cubin_buf</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="n">cubin_size</span>
+    <span class="p">(</span><span class="n">result</span><span class="p">,)</span> <span class="o">=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcGetCUBIN</span><span class="p">(</span><span class="n">prog</span><span class="p">,</span> <span class="n">cubin_buf</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcResult</span><span class="o">.</span><span class="n">NVRTC_SUCCESS</span><span class="p">:</span>
+        <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcDestroyProgram</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Failed to get CUBIN from NVRTC: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+
+    <span class="c1"># Clean up</span>
+    <span class="n">nvrtc</span><span class="o">.</span><span class="n">nvrtcDestroyProgram</span><span class="p">(</span><span class="n">prog</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">cubin_buf</span></div>
+
+</pre></div>
+
+                </article>
+              
+
+              
+              
+              
+              
+                <footer class="prev-next-footer d-print-none">
+                  
+<div class="prev-next-area">
+</div>
+                </footer>
+              
+            </div>
+            
+            
+              
+            
+          </div>
+          <footer class="bd-footer-content">
+            
+<div class="bd-footer-content__inner container">
+  
+  <div class="footer-item">
+    
+<p class="component-author">
+By Apache TVM FFI contributors
+</p>
+
+  </div>
+  
+  <div class="footer-item">
+    
+
+  </div>
+  
+  <div class="footer-item">
+    <p class="last-updated">
+  Last updated on Dec 03, 2025.
+  <br/>
+</p>
+  </div>
+  
+  <div class="footer-item">
+    
+<div class="extra_footer">
+  
+  <div class="footer-container" style="margin: 5px 0; font-size: 0.9em; color: #6c757d;">
+      <div class="footer-line1" style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 3px;">
+          <div class="footer-copyright-short">
+              Copyright © 2025, Apache Software Foundation
+          </div>
+          <div class="footer-dropdown">
+              <div class="dropdown">
+                  <button class="btn btn-link dropdown-toggle" type="button" id="footerDropdown" data-bs-toggle="dropdown"
+                  aria-expanded="false" style="font-size: 0.9em; color: #6c757d; text-decoration: none; padding: 0; border: none; background: none;">
+                      ASF
+                  </button>
+                  <ul class="dropdown-menu" aria-labelledby="footerDropdown" style="font-size: 0.9em;">
+<li><a class="dropdown-item" href="https://apache.org/" target="_blank" style="font-size: 0.9em;">ASF Homepage</a></li>
+<li><a class="dropdown-item" href="https://www.apache.org/licenses/" target="_blank" style="font-size: 0.9em;">License</a></li>
+<li><a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html" target="_blank" style="font-size: 0.9em;">Sponsorship</a></li>
+<li><a class="dropdown-item" href="https://tvm.apache.org/docs/reference/security.html" target="_blank" style="font-size: 0.9em;">Security</a></li>
+<li><a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html" target="_blank" style="font-size: 0.9em;">Thanks</a></li>
+<li><a class="dropdown-item" href="https://www.apache.org/events/current-event" target="_blank" style="font-size: 0.9em;">Events</a></li>
+                  </ul>
+              </div>
+          </div>
+      </div>
+      <div class="footer-line2" style="font-size: 0.9em; color: #6c757d;">
+          Apache TVM, Apache, the Apache feather, and the Apache TVM project logo are either trademarks or registered trademarks of the Apache Software Foundation.
+      </div>
+  </div>
+  
+</div>
+  </div>
+  
+</div>
+          </footer>
+        
+
+      </main>
+    </div>
+  </div>
+  
+  <!-- Scripts loaded after <body> so the DOM is not blocked -->
+  <script src="../../../_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b"></script>
+<script src="../../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b"></script>
+
+  <footer class="bd-footer">
+  </footer>
+  </body>
+</html>
\ No newline at end of file
diff --git a/ffi/_modules/tvm_ffi/error.html b/ffi/_modules/tvm_ffi/error.html
index 3df3604821..537507afee 100644
--- a/ffi/_modules/tvm_ffi/error.html
+++ b/ffi/_modules/tvm_ffi/error.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/error';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1138,7 +1217,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/module.html b/ffi/_modules/tvm_ffi/module.html
index 35a677f35c..6621b920f0 100644
--- a/ffi/_modules/tvm_ffi/module.html
+++ b/ffi/_modules/tvm_ffi/module.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/module';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -906,6 +985,7 @@ document.write(`
 <span class="c1"># isort: on</span>
 <span class="c1"># fmt: on</span>
 <span class="c1"># tvm-ffi-stubgen(end)</span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">enum</span><span class="w"> </span><span class="kn">import</span> <span class="n">IntEnum</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">os</span><span class="w"> </span><span class="kn">import</span> <span class="n">PathLike</span><span class="p">,</span> <span class="n">fspath</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">ClassVar</span><span class="p">,</span> <span class="n">cast</span>
@@ -936,14 +1016,23 @@ document.write(`
 
 <span class="sd">        import tvm_ffi</span>
 
-<span class="sd">        # load the module from a tvm-ffi shared library</span>
-<span class="sd">        mod : tvm_ffi.Module = tvm_ffi.load_module(&quot;path/to/library.so&quot;)</span>
-<span class="sd">        # you can use mod.func_name to call the exported function</span>
+<span class="sd">        # Load the module from a shared library</span>
+<span class="sd">        mod = tvm_ffi.load_module(&quot;path/to/library.so&quot;)</span>
+
+<span class="sd">        # Call exported function</span>
 <span class="sd">        mod.func_name(*args)</span>
 
+<span class="sd">        # Query function metadata (type signature)</span>
+<span class="sd">        metadata = mod.get_function_metadata(&quot;func_name&quot;)</span>
+
+<span class="sd">        # Query function documentation (if available)</span>
+<span class="sd">        doc = mod.get_function_doc(&quot;func_name&quot;)</span>
+
 <span class="sd">    See Also</span>
 <span class="sd">    --------</span>
 <span class="sd">    :py:func:`tvm_ffi.load_module`</span>
+<span class="sd">    :py:meth:`get_function_metadata`</span>
+<span class="sd">    :py:meth:`get_function_doc`</span>
 
 <span class="sd">    Notes</span>
 <span class="sd">    -----</span>
@@ -1063,6 +1152,97 @@ document.write(`
         <span class="k">return</span> <span class="n">func</span></div>
 
 
+<div class="viewcode-block" id="Module.get_function_metadata">
+<a class="viewcode-back" href="../../reference/python/generated/tvm_ffi.Module.html#tvm_ffi.Module.get_function_metadata">[docs]</a>
+    <span class="k">def</span><span class="w"> </span><span class="nf">get_function_metadata</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">query_imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Get metadata for a function exported from the module.</span>
+
+<span class="sd">        This retrieves metadata for functions exported via c:macro:`TVM_FFI_DLL_EXPORT_TYPED_FUNC`</span>
+<span class="sd">        and when c:macro:`TVM_FFI_DLL_EXPORT_INCLUDE_METADATA` is on, which includes type schema</span>
+<span class="sd">        information.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        name</span>
+<span class="sd">            The name of the function</span>
+
+<span class="sd">        query_imports</span>
+<span class="sd">            Whether to also query modules imported by this module.</span>
+
+<span class="sd">        Returns</span>
+<span class="sd">        -------</span>
+<span class="sd">        metadata</span>
+<span class="sd">            A dictionary containing function metadata. The ``type_schema`` field</span>
+<span class="sd">            encodes the callable signature.</span>
+
+<span class="sd">        Examples</span>
+<span class="sd">        --------</span>
+<span class="sd">        .. code-block:: python</span>
+
+<span class="sd">            import tvm_ffi</span>
+<span class="sd">            from tvm_ffi.core import TypeSchema</span>
+<span class="sd">            import json</span>
+
+<span class="sd">            mod = tvm_ffi.load_module(&quot;add_one_cpu.so&quot;)</span>
+<span class="sd">            metadata = mod.get_function_metadata(&quot;add_one_cpu&quot;)</span>
+<span class="sd">            schema = TypeSchema.from_json_str(metadata[&quot;type_schema&quot;])</span>
+<span class="sd">            print(schema)  # Shows function signature</span>
+
+<span class="sd">        See Also</span>
+<span class="sd">        --------</span>
+<span class="sd">        :py:func:`tvm_ffi.get_global_func_metadata`</span>
+<span class="sd">            Get metadata for global registry functions.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">metadata_str</span> <span class="o">=</span> <span class="n">_ffi_api</span><span class="o">.</span><span class="n">ModuleGetFunctionMetadata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">query_imports</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">metadata_str</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">metadata_str</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="Module.get_function_doc">
+<a class="viewcode-back" href="../../reference/python/generated/tvm_ffi.Module.html#tvm_ffi.Module.get_function_doc">[docs]</a>
+    <span class="k">def</span><span class="w"> </span><span class="nf">get_function_doc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">query_imports</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">st [...]
+<span class="w">        </span><span class="sd">&quot;&quot;&quot;Get documentation string for a function exported from the module.</span>
+
+<span class="sd">        This retrieves documentation for functions exported via c:macro:`TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC`.</span>
+
+<span class="sd">        Parameters</span>
+<span class="sd">        ----------</span>
+<span class="sd">        name</span>
+<span class="sd">            The name of the function</span>
+
+<span class="sd">        query_imports</span>
+<span class="sd">            Whether to also query modules imported by this module.</span>
+
+<span class="sd">        Returns</span>
+<span class="sd">        -------</span>
+<span class="sd">        doc : str or None</span>
+<span class="sd">            The documentation string if available, None otherwise.</span>
+
+<span class="sd">        Examples</span>
+<span class="sd">        --------</span>
+<span class="sd">        .. code-block:: python</span>
+
+<span class="sd">            import tvm_ffi</span>
+
+<span class="sd">            mod = tvm_ffi.load_module(&quot;mylib.so&quot;)</span>
+<span class="sd">            doc = mod.get_function_doc(&quot;process_batch&quot;)</span>
+<span class="sd">            if doc:</span>
+<span class="sd">                print(doc)</span>
+
+<span class="sd">        See Also</span>
+<span class="sd">        --------</span>
+<span class="sd">        :py:meth:`get_function_metadata`</span>
+<span class="sd">            Get metadata including type schema.</span>
+
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">doc_str</span> <span class="o">=</span> <span class="n">_ffi_api</span><span class="o">.</span><span class="n">ModuleGetFunctionDoc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">query_imports</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">doc_str</span> <span class="k">if</span> <span class="n">doc_str</span> <span class="k">else</span> <span class="kc">None</span></div>
+
+
 <div class="viewcode-block" id="Module.import_module">
 <a class="viewcode-back" href="../../reference/python/generated/tvm_ffi.Module.html#tvm_ffi.Module.import_module">[docs]</a>
     <span class="k">def</span><span class="w"> </span><span class="nf">import_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">Module</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
@@ -1327,7 +1507,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/registry.html b/ffi/_modules/tvm_ffi/registry.html
index ce690f2040..e54d98284f 100644
--- a/ffi/_modules/tvm_ffi/registry.html
+++ b/ffi/_modules/tvm_ffi/registry.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/registry';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1306,7 +1385,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/serialization.html b/ffi/_modules/tvm_ffi/serialization.html
index 647376af04..ed2740be5f 100644
--- a/ffi/_modules/tvm_ffi/serialization.html
+++ b/ffi/_modules/tvm_ffi/serialization.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/serialization';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1010,7 +1089,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_modules/tvm_ffi/stream.html b/ffi/_modules/tvm_ffi/stream.html
index 0b5748887f..ff31bc3851 100644
--- a/ffi/_modules/tvm_ffi/stream.html
+++ b/ffi/_modules/tvm_ffi/stream.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../../_static/doctools.js?v=9bcbadda"></script>
     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="../../_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "../../_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = '_modules/tvm_ffi/stream';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="../../search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="../../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1149,7 +1228,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/_sources/get_started/quickstart.rst b/ffi/_sources/get_started/quickstart.rst
index 650b750750..1ebb53389b 100644
--- a/ffi/_sources/get_started/quickstart.rst
+++ b/ffi/_sources/get_started/quickstart.rst
@@ -76,7 +76,8 @@ Suppose we implement a C++ function ``AddOne`` that performs elementwise ``y = x
 
 
 The macro :c:macro:`TVM_FFI_DLL_EXPORT_TYPED_FUNC` exports the C++ function ``AddOne``
-as a TVM FFI compatible symbol with the name ``__tvm_ffi_add_one_cpu/cuda`` in the resulting library.
+as a TVM FFI compatible symbol ``__tvm_ffi_add_one_cpu/cuda``. If :c:macro:`TVM_FFI_DLL_EXPORT_INCLUDE_METADATA` is set to 1,
+it also exports the function's metadata as a symbol ``__tvm_ffi__metadata_add_one_cpu/cuda`` for type checking and stub generation.
 
 The class :cpp:class:`tvm::ffi::TensorView` allows zero-copy interop with tensors from different ML frameworks:
 
diff --git a/ffi/_sources/guides/compiler_integration.md b/ffi/_sources/guides/compiler_integration.md
index aff6f90c15..254df38dca 100644
--- a/ffi/_sources/guides/compiler_integration.md
+++ b/ffi/_sources/guides/compiler_integration.md
@@ -30,9 +30,13 @@ following options:
 
 - For compilers that generate host functions via codegen (e.g., LLVM), one can
   generate the symbol `__tvm_ffi_<func_name>`, where `<funcname>` is the exported
-  function.
-- For kernel generators that generate C++ host code, one can directly
-  use {c:macro}`TVM_FFI_DLL_EXPORT_TYPED_FUNC` to expose the symbol.
+  function. Optionally, also generate `__tvm_ffi__metadata_<func_name>` for reflection.
+- For kernel generators that generate C++ host code, use {c:macro}`TVM_FFI_DLL_EXPORT_TYPED_FUNC`.
+  This macro automatically exports function metadata when {c:macro}`TVM_FFI_DLL_EXPORT_INCLUDE_METADATA`
+  is set to 1.
+- To export documentation strings, use {c:macro}`TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC` separately
+  after exporting the function. This enhances tooling support (stub generation, IDE tooltips).
+  Documentation export is also controlled by {c:macro}`TVM_FFI_DLL_EXPORT_INCLUDE_METADATA`.
 
 The following code snippet shows C code that corresponds to a
 function performing `add_one_c` under the ABI. It is reasonably straightforward for
diff --git a/ffi/_sources/guides/cpp_guide.md b/ffi/_sources/guides/cpp_guide.md
index ef69ed3d60..e5f09b7643 100644
--- a/ffi/_sources/guides/cpp_guide.md
+++ b/ffi/_sources/guides/cpp_guide.md
@@ -292,12 +292,55 @@ void AddOne(DLTensor* x, DLTensor* y) {
 TVM_FFI_DLL_EXPORT_TYPED_FUNC(add_one, my_ffi_extension::AddOne);
 ```
 
-The new `add_one` takes the signature of `TVMFFISafeCallType` and can be wrapped as `ffi::Function`
-through the C++ `ffi::Module` API.
+The new `add_one` takes the signature of `TVMFFISafeCallType`, and can loaded and queried through the C++ `ffi::Module` API.
+
+When flag `TVM_FFI_DLL_EXPORT_TYPED_FUNC_METADATA` is on, the macro exports both the function and its type metadata, enabling
+signature validation without calling the function.
+
+The metadata contains:
+
+- **type_schema**: JSON string describing function signature (return type and argument types)
 
 ```cpp
 ffi::Module mod = ffi::Module::LoadFromFile("path/to/export_lib.so");
+
+// Get the function
 ffi::Function func = mod->GetFunction("add_one").value();
+
+// Query metadata (type schema information)
+ffi::Optional<ffi::String> metadata = mod->GetFunctionMetadata("add_one");
+if (metadata.has_value()) {
+  // Parse JSON metadata for validation
+  // Contains: {"type_schema": "..."}
+}
+```
+
+For functions that need documentation, use the `TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC` macro separately:
+
+```cpp
+#define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA 1
+
+void ProcessBatch(ffi::TensorView input, ffi::TensorView output) {
+  // ... implementation
+}
+
+// Export the function
+TVM_FFI_DLL_EXPORT_TYPED_FUNC(process_batch, ProcessBatch);
+
+// Export documentation separately (make sure TVM_FFI_DLL_EXPORT_INCLUDE_METADATA is set to 1)
+TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC(
+    process_batch,
+    R"(Process a batch of inputs and write results to output tensor.
+
+Parameters
+----------
+input : TensorView
+    Input tensor to process
+output : TensorView
+    Output tensor for results)");
+
+// Query documentation
+ffi::Optional<ffi::String> doc = mod->GetFunctionDoc("process_batch");
 ```
 
 ## Error Handling
diff --git a/ffi/_sources/guides/cubin_launcher.rst b/ffi/_sources/guides/cubin_launcher.rst
new file mode 100644
index 0000000000..e3e7d9688b
--- /dev/null
+++ b/ffi/_sources/guides/cubin_launcher.rst
@@ -0,0 +1,422 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+.. or more contributor license agreements.  See the NOTICE file
+.. distributed with this work for additional information
+.. regarding copyright ownership.  The ASF licenses this file
+.. to you under the Apache License, Version 2.0 (the
+.. "License"); you may not use this file except in compliance
+.. with the License.  You may obtain a copy of the License at
+..
+..   http://www.apache.org/licenses/LICENSE-2.0
+..
+.. Unless required by applicable law or agreed to in writing,
+.. software distributed under the License is distributed on an
+.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+.. KIND, either express or implied.  See the License for the
+.. specific language governing permissions and limitations
+.. under the License.
+
+CUBIN Launcher Guide
+====================
+
+This guide demonstrates how to load and launch CUDA kernels from CUBIN (CUDA Binary) modules using TVM-FFI. The CUBIN launcher enables you to execute pre-compiled or runtime-compiled CUDA kernels efficiently through the CUDA Runtime API.
+
+Overview
+--------
+
+TVM-FFI provides utilities for loading and launching CUDA kernels from CUBIN modules. The implementation is in ``tvm/ffi/extra/cuda/cubin_launcher.h`` and provides:
+
+- :cpp:class:`tvm::ffi::CubinModule`: RAII wrapper for loading CUBIN modules from memory
+- :cpp:class:`tvm::ffi::CubinKernel`: Handle for launching CUDA kernels with specified parameters
+- :c:macro:`TVM_FFI_EMBED_CUBIN`: Macro for embedding CUBIN data at compile time
+- :c:macro:`TVM_FFI_EMBED_CUBIN_GET_KERNEL`: Macro for retrieving kernels from embedded CUBIN
+
+The CUBIN launcher supports:
+
+- Loading CUBIN from memory (embedded data or runtime-generated)
+- Multi-GPU execution using CUDA primary contexts
+- Kernel parameter management and launch configuration
+- Integration with NVRTC, Triton, and other CUDA compilation tools
+
+**Build Integration:**
+
+TVM-FFI provides convenient tools for embedding CUBIN data at build time:
+
+- **CMake utilities** (``cmake/Utils/EmbedCubin.cmake``): Functions for compiling CUDA to CUBIN and embedding it into C++ code
+- **Python utility** (``python -m tvm_ffi.utils.embed_cubin``): Command-line tool for embedding CUBIN into object files
+- **Python API** (:py:func:`tvm_ffi.cpp.load_inline`): Runtime embedding via ``embed_cubin`` parameter
+
+Python Usage
+------------
+
+Basic Workflow
+~~~~~~~~~~~~~~
+
+The typical workflow for launching CUBIN kernels from Python involves:
+
+1. **Generate CUBIN**: Compile your CUDA kernel to CUBIN format
+2. **Define C++ Wrapper**: Write C++ code to load and launch the kernel
+3. **Load Module**: Use :py:func:`tvm_ffi.cpp.load_inline` with ``embed_cubin`` parameter
+4. **Call Kernel**: Invoke the kernel function from Python
+
+Example: NVRTC Compilation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Here's a complete example using NVRTC to compile CUDA source at runtime.
+
+**Step 1: Compile CUDA source to CUBIN using NVRTC**
+
+.. literalinclude:: ../../examples/cubin_launcher/example_nvrtc_cubin.py
+   :language: python
+   :start-after: [cuda_source.begin]
+   :end-before: [cuda_source.end]
+   :dedent: 4
+
+**Step 2: Define C++ wrapper with embedded CUBIN**
+
+.. literalinclude:: ../../examples/cubin_launcher/example_nvrtc_cubin.py
+   :language: python
+   :start-after: [cpp_wrapper.begin]
+   :end-before: [cpp_wrapper.end]
+   :dedent: 4
+
+**Key Points:**
+
+- The ``embed_cubin`` parameter is a dictionary mapping CUBIN names to their binary data
+- CUBIN names in ``embed_cubin`` must match names in :c:macro:`TVM_FFI_EMBED_CUBIN`
+- Use ``cuda_sources`` parameter (instead of ``cpp_sources``) to automatically link with CUDA libraries
+- The C++ wrapper handles device management, stream handling, and kernel launching
+
+Example: Using Triton Kernels
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can compile Triton kernels to CUBIN and launch them through TVM-FFI.
+
+**Step 1: Define and compile Triton kernel**
+
+.. literalinclude:: ../../examples/cubin_launcher/example_triton_cubin.py
+   :language: python
+   :start-after: [triton_kernel.begin]
+   :end-before: [triton_kernel.end]
+   :dedent: 4
+
+**Step 2: Define C++ wrapper to launch the Triton kernel**
+
+.. literalinclude:: ../../examples/cubin_launcher/example_triton_cubin.py
+   :language: python
+   :start-after: [cpp_wrapper.begin]
+   :end-before: [cpp_wrapper.end]
+   :dedent: 4
+
+.. note::
+
+   Triton kernels may require extra dummy parameters in the argument list. Check the compiled kernel's signature to determine the exact parameter count needed.
+
+C++ Usage
+---------
+
+Embedding CUBIN at Compile Time
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The recommended approach in C++ is to embed CUBIN data directly into your shared library:
+
+.. literalinclude:: ../../examples/cubin_launcher/embedded_cubin/src/lib_embedded.cc
+   :language: cpp
+   :start-after: [example.begin]
+   :end-before: [example.end]
+
+**Key Points:**
+
+- Use ``static auto kernel`` to cache the kernel lookup for efficiency
+- Kernel arguments must be pointers to the actual values (use ``&`` for addresses)
+- :cpp:type:`tvm::ffi::dim3` supports 1D, 2D, or 3D configurations: ``dim3(x)``, ``dim3(x, y)``, ``dim3(x, y, z)``
+- ``TVMFFIEnvGetStream`` retrieves the correct CUDA stream for the device
+- Always check kernel launch results with :c:macro:`TVM_FFI_CHECK_CUDA_ERROR` (which checks CUDA Runtime API errors)
+
+Loading CUBIN at Runtime
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can also load CUBIN modules dynamically from memory:
+
+.. literalinclude:: ../../examples/cubin_launcher/dynamic_cubin/src/lib_dynamic.cc
+   :language: cpp
+   :start-after: [example.begin]
+   :end-before: [example.end]
+
+Embedding CUBIN with CMake Utilities
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+TVM-FFI provides CMake utility functions that simplify the CUBIN embedding process. This is the recommended approach for CMake-based projects.
+
+**Using CMake Utilities:**
+
+.. literalinclude:: ../../examples/cubin_launcher/embedded_cubin/CMakeLists.txt
+   :language: cmake
+   :start-after: [cmake_example.begin]
+   :end-before: [cmake_example.end]
+
+**Available CMake Functions:**
+
+- ``tvm_ffi_generate_cubin()``: Compiles CUDA source to CUBIN using nvcc
+
+  - ``OUTPUT``: Path to output CUBIN file
+  - ``SOURCE``: Path to CUDA source file
+  - ``ARCH``: Target GPU architecture (default: ``native`` for auto-detection)
+  - ``OPTIONS``: Additional nvcc compiler options (optional)
+  - ``DEPENDS``: Additional dependencies (optional)
+
+- ``tvm_ffi_embed_cubin()``: Compiles C++ source and embeds CUBIN data
+
+  - ``OUTPUT``: Path to output combined object file
+  - ``SOURCE``: Path to C++ source file with ``TVM_FFI_EMBED_CUBIN`` macro
+  - ``CUBIN``: Path to CUBIN file to embed
+  - ``NAME``: Symbol name used in ``TVM_FFI_EMBED_CUBIN(name)`` macro
+  - ``DEPENDS``: Additional dependencies (optional)
+
+The utilities automatically handle:
+
+- Compiling C++ source to intermediate object file
+- Creating CUBIN symbols with proper naming
+- Merging object files using ``ld -r``
+- Adding ``.note.GNU-stack`` section for security
+- Localizing symbols to prevent conflicts
+
+Embedding CUBIN with Python Utility
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+For more advanced use cases or non-CMake build systems, you can use the Python command-line utility to embed CUBIN data into existing object files.
+
+**Command-Line Usage:**
+
+.. code-block:: bash
+
+   # Step 1: Compile C++ source to object file
+   g++ -c -fPIC -std=c++17 -I/path/to/tvm-ffi/include mycode.cc -o mycode.o
+
+   # Step 2: Embed CUBIN into the object file
+   python -m tvm_ffi.utils.embed_cubin \
+       --output-obj mycode_with_cubin.o \
+       --input-obj mycode.o \
+       --cubin kernel.cubin \
+       --name my_kernels
+
+   # Step 3: Link into final library
+   g++ -o mylib.so -shared mycode_with_cubin.o -lcudart
+
+**Python API:**
+
+.. code-block:: python
+
+   from pathlib import Path
+   from tvm_ffi.utils.embed_cubin import embed_cubin
+
+   embed_cubin(
+       cubin_path=Path("kernel.cubin"),
+       input_obj_path=Path("mycode.o"),
+       output_obj_path=Path("mycode_with_cubin.o"),
+       name="my_kernels",
+       verbose=True  # Optional: print detailed progress
+   )
+
+The Python utility performs these steps:
+
+1. Creates intermediate CUBIN object file using ``ld -r -b binary``
+2. Adds ``.note.GNU-stack`` section for security
+3. Renames symbols to match TVM-FFI format (``__tvm_ffi__cubin_<name>``)
+4. Merges with input object file using relocatable linking
+5. Localizes symbols to prevent conflicts when multiple object files use the same name
+
+
+Manual CUBIN Embedding
+~~~~~~~~~~~~~~~~~~~~~~
+
+For reference, here's how to manually embed CUBIN using objcopy and ld:
+
+**Step 1: Compile CUDA kernel to CUBIN**
+
+.. code-block:: bash
+
+   nvcc --cubin -arch=sm_75 kernel.cu -o kernel.cubin
+
+**Step 2: Convert CUBIN to object file**
+
+.. code-block:: bash
+
+   ld -r -b binary -o kernel_data.o kernel.cubin
+
+**Step 3: Rename symbols with objcopy**
+
+.. code-block:: bash
+
+   objcopy --rename-section .data=.rodata,alloc,load,readonly,data,contents \
+           --redefine-sym _binary_kernel_cubin_start=__tvm_ffi__cubin_my_kernels \
+           --redefine-sym _binary_kernel_cubin_end=__tvm_ffi__cubin_my_kernels_end \
+           kernel_data.o
+
+**Step 4: Link with your library**
+
+.. code-block:: bash
+
+   g++ -o mylib.so -shared mycode.cc kernel_data.o -Wl,-z,noexecstack -lcudart
+
+The symbol names must match the name used in :c:macro:`TVM_FFI_EMBED_CUBIN`.
+
+**When to Use Each Approach:**
+
+- **CMake utilities**: Best for CMake-based projects, provides cleanest integration (recommended)
+- **Python utility**: Best for custom build systems, Makefile-based projects, or advanced workflows (recommended)
+- **Manual objcopy**: Low-level approach, useful for understanding the process or debugging (only for customized use cases)
+
+Advanced Topics
+---------------
+
+Multi-GPU Support
+~~~~~~~~~~~~~~~~~
+
+The CUBIN launcher automatically handles multi-GPU execution through CUDA primary contexts. Kernels will execute on the device associated with the input tensors:
+
+.. code-block:: cpp
+
+   void MultiGPUExample(tvm::ffi::TensorView x_gpu0, tvm::ffi::TensorView x_gpu1) {
+     static auto kernel = TVM_FFI_EMBED_CUBIN_GET_KERNEL(my_kernels, "process");
+
+     // Launch on GPU 0 (device determined by x_gpu0.device())
+     LaunchOnDevice(kernel, x_gpu0);
+
+     // Launch on GPU 1 (device determined by x_gpu1.device())
+     LaunchOnDevice(kernel, x_gpu1);
+   }
+
+The :cpp:class:`tvm::ffi::CubinKernel` automatically uses the device context from the input tensors.
+
+Kernel Launch Configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When writing the C++ wrapper, important considerations include:
+
+- **Grid/Block Dimensions**: Use :cpp:type:`tvm::ffi::dim3` for 1D, 2D, or 3D configurations
+
+  - 1D: ``dim3(x)`` → ``(x, 1, 1)``
+  - 2D: ``dim3(x, y)`` → ``(x, y, 1)``
+  - 3D: ``dim3(x, y, z)`` → ``(x, y, z)``
+
+- **Kernel Arguments**: Must be pointers to actual values
+
+  - For device pointers: ``void* ptr = tensor.data_ptr(); args[] = {&ptr}``
+  - For scalars: ``int n = 42; args[] = {&n}``
+
+- **Stream Management**: Use ``TVMFFIEnvGetStream`` to get the correct CUDA stream for synchronization with DLPack tensors
+
+- **Error Checking**: Always use :c:macro:`TVM_FFI_CHECK_CUDA_ERROR` to validate CUDA Runtime API results
+
+Dynamic Shared Memory
+~~~~~~~~~~~~~~~~~~~~~
+
+To use dynamic shared memory, specify the size in the :cpp:func:`tvm::ffi::CubinKernel::Launch` call:
+
+.. code-block:: cpp
+
+   // Allocate 1KB of dynamic shared memory
+   uint32_t shared_mem_bytes = 1024;
+   cudaError_t result = kernel.Launch(args, grid, block, stream, shared_mem_bytes);
+
+Integration with Different Compilers
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The CUBIN launcher works with various CUDA compilation tools:
+
+- **NVCC**: Standard NVIDIA compiler, produces highly optimized CUBIN
+- **NVRTC**: Runtime compilation for JIT scenarios (via :py:mod:`tvm_ffi.cpp.nvrtc`)
+- **Triton**: High-level DSL that compiles to CUBIN
+- **Custom compilers**: Any tool that generates valid CUDA CUBIN
+
+Complete Examples
+-----------------
+
+For complete working examples, see the ``examples/cubin_launcher/`` directory:
+
+- ``embedded_cubin/`` - Pre-compiled CUBIN embedded at build time
+- ``dynamic_cubin/`` - CUBIN data passed dynamically at runtime
+- ``example_nvrtc_cubin.py`` - NVRTC runtime compilation
+- ``example_triton_cubin.py`` - Triton kernel compilation
+
+These examples demonstrate:
+
+- Compiling CUDA kernels to CUBIN
+- Embedding CUBIN in C++ modules
+- Launching kernels with proper error handling
+- Testing and verification
+
+API Reference
+-------------
+
+C++ Classes
+~~~~~~~~~~~
+
+- :cpp:class:`tvm::ffi::CubinModule`: RAII wrapper for CUBIN module lifecycle
+
+  - :cpp:func:`tvm::ffi::CubinModule::CubinModule`: Load CUBIN from memory
+  - :cpp:func:`tvm::ffi::CubinModule::GetKernel`: Get kernel by name
+  - :cpp:func:`tvm::ffi::CubinModule::GetKernelWithMaxDynamicSharedMemory`: Get kernel by name with maximum dynamic shared memory set
+  - :cpp:func:`tvm::ffi::CubinModule::operator[]`: Convenient kernel access
+
+- :cpp:class:`tvm::ffi::CubinKernel`: Handle for launching kernels
+
+  - :cpp:func:`tvm::ffi::CubinKernel::Launch`: Launch kernel with specified parameters
+
+- :cpp:type:`tvm::ffi::dim3`: 3D dimension structure
+
+  - ``dim3()``: Default (1, 1, 1)
+  - ``dim3(unsigned int x)``: 1D
+  - ``dim3(unsigned int x, unsigned int y)``: 2D
+  - ``dim3(unsigned int x, unsigned int y, unsigned int z)``: 3D
+
+C++ Macros
+~~~~~~~~~~
+
+- :c:macro:`TVM_FFI_EMBED_CUBIN`: Declare embedded CUBIN module
+- :c:macro:`TVM_FFI_EMBED_CUBIN_GET_KERNEL`: Get kernel from embedded module
+- :c:macro:`TVM_FFI_CHECK_CUDA_ERROR`: Check CUDA Runtime API result
+
+Python Functions
+~~~~~~~~~~~~~~~~
+
+- :py:func:`tvm_ffi.cpp.nvrtc.nvrtc_compile`: Compile CUDA source to CUBIN
+- :py:func:`tvm_ffi.cpp.load_inline`: Load inline module with embedded CUBIN
+
+Python Utilities
+~~~~~~~~~~~~~~~~
+
+- ``python -m tvm_ffi.utils.embed_cubin``: Command-line utility to embed CUBIN into object files
+
+  - ``--output-obj PATH``: Output combined object file path
+  - ``--input-obj PATH``: Input object file containing C++ code with ``TVM_FFI_EMBED_CUBIN``
+  - ``--cubin PATH``: Input CUBIN file to embed
+  - ``--name NAME``: Symbol name matching ``TVM_FFI_EMBED_CUBIN(name)`` macro
+  - ``--verbose``: Print detailed command output (optional)
+
+- :py:func:`tvm_ffi.utils.embed_cubin.embed_cubin`: Python API for embedding CUBIN
+
+  - ``cubin_path``: Path to input CUBIN file
+  - ``input_obj_path``: Path to existing object file
+  - ``output_obj_path``: Path to output combined object file
+  - ``name``: Symbol name for the embedded CUBIN
+  - ``verbose``: Enable detailed output (default: False)
+
+CMake Functions
+~~~~~~~~~~~~~~~
+
+- ``tvm_ffi_generate_cubin()``: Compile CUDA source to CUBIN
+
+  - ``OUTPUT``: Path to output CUBIN file
+  - ``SOURCE``: Path to CUDA source file (.cu)
+  - ``ARCH``: Target architecture (default: ``native``)
+  - ``OPTIONS``: Additional nvcc compiler flags (optional)
+  - ``DEPENDS``: Additional dependencies (optional)
+
+- ``tvm_ffi_embed_cubin()``: Compile C++ source and embed CUBIN data
+
+  - ``OUTPUT``: Path to output combined object file
+  - ``SOURCE``: Path to C++ source file
+  - ``CUBIN``: Path to CUBIN file to embed
+  - ``NAME``: Symbol name matching ``TVM_FFI_EMBED_CUBIN(name)`` in source
+  - ``DEPENDS``: Additional dependencies (optional)
diff --git a/ffi/_sources/guides/kernel_library_guide.rst b/ffi/_sources/guides/kernel_library_guide.rst
index 8966e306d6..82b1bff119 100644
--- a/ffi/_sources/guides/kernel_library_guide.rst
+++ b/ffi/_sources/guides/kernel_library_guide.rst
@@ -145,6 +145,21 @@ Explicit Update
 
 Once the devices on which the stream contexts reside cannot be inferred from the tensors, the explicit update on stream context table is necessary. TVM FFI provides :py:func:`tvm_ffi.use_torch_stream` and :py:func:`tvm_ffi.use_raw_stream` for manual stream context update. However, it is **recommended** to use implicit update above, to reduce code complexity.
 
+Device Guard
+============
+
+When launching kernels, kernel libraries may require the current device context to be set for a specific device. TVM FFI provides the :cpp:class:`tvm::ffi::CUDADeviceGuard` class to manage this, similar to :cpp:class:`c10::cuda::CUDAGuard`. When a :cpp:class:`tvm::ffi::CUDADeviceGuard` object is constructed with a device index, it saves the original device index (retrieved using ``cudaGetDevice``) and sets the current device to the given index (using ``cudaSetDevice``). Upon destruction  [...]
+
+.. code-block:: c++
+
+ void func(ffi::TensorView input, ...) {
+   // current device index is original device index
+   ffi::CUDADeviceGuard device_guard(input.device().device_id);
+   // current device index is input device index
+ }
+
+After ``func`` returns, the ``device_guard`` is destructed, and the original device index is restored.
+
 Function Exporting
 ==================
 
diff --git a/ffi/_sources/index.rst b/ffi/_sources/index.rst
index bb7fa75d1c..23e67d0b78 100644
--- a/ffi/_sources/index.rst
+++ b/ffi/_sources/index.rst
@@ -58,6 +58,7 @@ Table of Contents
    guides/cpp_guide.md
    guides/python_guide.md
    guides/rust_guide.md
+   guides/cubin_launcher.rst
    guides/compiler_integration.md
    guides/build_from_source.md
    guides/kernel_library_guide.rst
diff --git a/ffi/_sources/reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.rst b/ffi/_sources/reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.rst
new file mode 100644
index 0000000000..6f55982723
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.rst
@@ -0,0 +1,17 @@
+.. _exhale_class_classtvm_1_1ffi_1_1CubinKernel:
+
+Class CubinKernel
+=================
+
+- Defined in :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
+
+Class Documentation
+-------------------
+
+
+.. doxygenclass:: tvm::ffi::CubinKernel
+   :project: tvm-ffi
+   :members:
+   :protected-members:
+   :undoc-members:
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.rst b/ffi/_sources/reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.rst
new file mode 100644
index 0000000000..ed2b708854
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.rst
@@ -0,0 +1,17 @@
+.. _exhale_class_classtvm_1_1ffi_1_1CubinModule:
+
+Class CubinModule
+=================
+
+- Defined in :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
+
+Class Documentation
+-------------------
+
+
+.. doxygenclass:: tvm::ffi::CubinModule
+   :project: tvm-ffi
+   :members:
+   :protected-members:
+   :undoc-members:
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.rst b/ffi/_sources/reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.rst
new file mode 100644
index 0000000000..5a9102cbb7
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.rst
@@ -0,0 +1,14 @@
+.. _exhale_define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade:
+
+Define TVM_FFI_EMBED_CUBIN
+==========================
+
+- Defined in :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
+
+Define Documentation
+--------------------
+
+
+.. doxygendefine:: TVM_FFI_EMBED_CUBIN
+   :project: tvm-ffi
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.rst b/ffi/_sources/reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.rst
new file mode 100644
index 0000000000..23b58e7b65
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.rst
@@ -0,0 +1,14 @@
+.. _exhale_define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc:
+
+Define TVM_FFI_EMBED_CUBIN_GET_KERNEL
+=====================================
+
+- Defined in :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
+
+Define Documentation
+--------------------
+
+
+.. doxygendefine:: TVM_FFI_EMBED_CUBIN_GET_KERNEL
+   :project: tvm-ffi
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.rst b/ffi/_sources/reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.rst
new file mode 100644
index 0000000000..1b8712f665
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.rst
@@ -0,0 +1,14 @@
+.. _exhale_define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1:
+
+Define TVM_FFI_CHECK_CUDA_ERROR
+===============================
+
+- Defined in :ref:`file_tvm_ffi_extra_cuda_base.h`
+
+
+Define Documentation
+--------------------
+
+
+.. doxygendefine:: TVM_FFI_CHECK_CUDA_ERROR
+   :project: tvm-ffi
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.rst b/ffi/_sources/reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.rst
new file mode 100644
index 0000000000..f7773372fe
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.rst
@@ -0,0 +1,14 @@
+.. _exhale_define_function_8h_1a78c6d17c063fba9ca07175f150838046:
+
+Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA
+==========================================
+
+- Defined in :ref:`file_tvm_ffi_function.h`
+
+
+Define Documentation
+--------------------
+
+
+.. doxygendefine:: TVM_FFI_DLL_EXPORT_INCLUDE_METADATA
+   :project: tvm-ffi
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.rst b/ffi/_sources/reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.rst
new file mode 100644
index 0000000000..a9f614c8f9
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.rst
@@ -0,0 +1,14 @@
+.. _exhale_define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd:
+
+Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC
+========================================
+
+- Defined in :ref:`file_tvm_ffi_function.h`
+
+
+Define Documentation
+--------------------
+
+
+.. doxygendefine:: TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC
+   :project: tvm-ffi
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/dir_tvm_ffi_extra.rst b/ffi/_sources/reference/cpp/generated/dir_tvm_ffi_extra.rst
index b2116d9137..cb7184b6ea 100644
--- a/ffi/_sources/reference/cpp/generated/dir_tvm_ffi_extra.rst
+++ b/ffi/_sources/reference/cpp/generated/dir_tvm_ffi_extra.rst
@@ -12,6 +12,11 @@ Directory extra
 
 *Directory path:* ``tvm/ffi/extra``
 
+Subdirectories
+--------------
+
+- :ref:`dir_tvm_ffi_extra_cuda`
+
 
 Files
 -----
@@ -22,6 +27,7 @@ Files
 - :ref:`file_tvm_ffi_extra_json.h`
 - :ref:`file_tvm_ffi_extra_module.h`
 - :ref:`file_tvm_ffi_extra_serialization.h`
+- :ref:`file_tvm_ffi_extra_stl.h`
 - :ref:`file_tvm_ffi_extra_structural_equal.h`
 - :ref:`file_tvm_ffi_extra_structural_hash.h`
 
diff --git a/ffi/_sources/reference/cpp/generated/dir_tvm_ffi_extra_cuda.rst b/ffi/_sources/reference/cpp/generated/dir_tvm_ffi_extra_cuda.rst
new file mode 100644
index 0000000000..7285d47b3f
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/dir_tvm_ffi_extra_cuda.rst
@@ -0,0 +1,23 @@
+.. _dir_tvm_ffi_extra_cuda:
+
+
+Directory cuda
+==============
+
+
+|exhale_lsh| :ref:`Parent directory <dir_tvm_ffi_extra>` (``tvm/ffi/extra``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+
+*Directory path:* ``tvm/ffi/extra/cuda``
+
+
+Files
+-----
+
+- :ref:`file_tvm_ffi_extra_cuda_base.h`
+- :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+- :ref:`file_tvm_ffi_extra_cuda_device_guard.h`
+
+
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_base_details.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_base_details.h.rst
index af57118567..0f23d2cd2d 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_base_details.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_base_details.h.rst
@@ -59,6 +59,8 @@ Included By
 
 - :ref:`file_tvm_ffi_error.h`
 
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_function.h`
 
 - :ref:`file_tvm_ffi_function_details.h`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_c_api.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_c_api.h.rst
index 56e50438d5..b33ed488cf 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_c_api.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_c_api.h.rst
@@ -50,6 +50,8 @@ Included By
 
 - :ref:`file_tvm_ffi_extra_c_env_api.h`
 
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_function.h`
 
 - :ref:`file_tvm_ffi_function_details.h`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_array.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_array.h.rst
index 4c54514905..9d4b4c163c 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_array.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_array.h.rst
@@ -75,6 +75,8 @@ Included By
 
 - :ref:`file_tvm_ffi_extra_module.h`
 
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_reflection_access_path.h`
 
 
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_map.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_map.h.rst
index 3f3ecae3c2..9ddc3eb2eb 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_map.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_container_map.h.rst
@@ -67,6 +67,8 @@ Included By
 
 - :ref:`file_tvm_ffi_extra_module.h`
 
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_reflection_creator.h`
 
 - :ref:`file_tvm_ffi_reflection_registry.h`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_error.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_error.h.rst
index 1a56f61098..cec747b092 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_error.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_error.h.rst
@@ -66,6 +66,12 @@ Included By
 
 - :ref:`file_tvm_ffi_dtype.h`
 
+- :ref:`file_tvm_ffi_extra_cuda_base.h`
+
+- :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_function.h`
 
 - :ref:`file_tvm_ffi_function_details.h`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_c_env_api.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_c_env_api.h.rst
index f37ba3b5b7..7445e3b91b 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_c_env_api.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_c_env_api.h.rst
@@ -39,6 +39,12 @@ Includes
 
 
 
+Included By
+-----------
+
+
+- :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
 
 
 
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_base.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_base.h.rst
new file mode 100644
index 0000000000..2e18388f5d
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_base.h.rst
@@ -0,0 +1,69 @@
+
+.. _file_tvm_ffi_extra_cuda_base.h:
+
+File base.h
+===========
+
+|exhale_lsh| :ref:`Parent directory <dir_tvm_ffi_extra_cuda>` (``tvm/ffi/extra/cuda``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+
+
+CUDA base utilities. 
+
+
+
+.. contents:: Contents
+   :local:
+   :backlinks: none
+
+Definition (``tvm/ffi/extra/cuda/base.h``)
+------------------------------------------
+
+
+.. toctree::
+   :maxdepth: 1
+
+   program_listing_file_tvm_ffi_extra_cuda_base.h.rst
+
+
+
+
+
+Includes
+--------
+
+
+- ``cuda_runtime.h``
+
+- ``tvm/ffi/error.h`` (:ref:`file_tvm_ffi_error.h`)
+
+
+
+Included By
+-----------
+
+
+- :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
+- :ref:`file_tvm_ffi_extra_cuda_device_guard.h`
+
+
+
+
+Namespaces
+----------
+
+
+- :ref:`namespace_tvm`
+
+- :ref:`namespace_tvm__ffi`
+
+
+Defines
+-------
+
+
+- :ref:`exhale_define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1`
+
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_cubin_launcher.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_cubin_launcher.h.rst
new file mode 100644
index 0000000000..c1f452b062
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_cubin_launcher.h.rst
@@ -0,0 +1,98 @@
+
+.. _file_tvm_ffi_extra_cuda_cubin_launcher.h:
+
+File cubin_launcher.h
+=====================
+
+|exhale_lsh| :ref:`Parent directory <dir_tvm_ffi_extra_cuda>` (``tvm/ffi/extra/cuda``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+
+
+CUDA CUBIN launcher utility for loading and executing CUDA kernels. 
+
+
+
+.. contents:: Contents
+   :local:
+   :backlinks: none
+
+Definition (``tvm/ffi/extra/cuda/cubin_launcher.h``)
+----------------------------------------------------
+
+
+.. toctree::
+   :maxdepth: 1
+
+   program_listing_file_tvm_ffi_extra_cuda_cubin_launcher.h.rst
+
+
+
+Detailed Description
+--------------------
+
+This header provides a lightweight C++ wrapper around CUDA Runtime API for loading CUBIN modules and launching kernels. It supports:
+
+- Loading CUBIN from memory (embedded data)
+
+- Multi-GPU execution using CUDA primary contexts
+
+- Kernel parameter management and launch configuration 
+
+
+
+
+
+
+Includes
+--------
+
+
+- ``cstdint``
+
+- ``cstring``
+
+- ``cuda_runtime.h``
+
+- ``tvm/ffi/error.h`` (:ref:`file_tvm_ffi_error.h`)
+
+- ``tvm/ffi/extra/c_env_api.h`` (:ref:`file_tvm_ffi_extra_c_env_api.h`)
+
+- ``tvm/ffi/extra/cuda/base.h`` (:ref:`file_tvm_ffi_extra_cuda_base.h`)
+
+- ``tvm/ffi/string.h`` (:ref:`file_tvm_ffi_string.h`)
+
+
+
+
+
+
+Namespaces
+----------
+
+
+- :ref:`namespace_tvm`
+
+- :ref:`namespace_tvm__ffi`
+
+
+Classes
+-------
+
+
+- :ref:`exhale_struct_structtvm_1_1ffi_1_1dim3`
+
+- :ref:`exhale_class_classtvm_1_1ffi_1_1CubinKernel`
+
+- :ref:`exhale_class_classtvm_1_1ffi_1_1CubinModule`
+
+
+Defines
+-------
+
+
+- :ref:`exhale_define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade`
+
+- :ref:`exhale_define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc`
+
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_device_guard.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_device_guard.h.rst
new file mode 100644
index 0000000000..843f25fc4d
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_cuda_device_guard.h.rst
@@ -0,0 +1,59 @@
+
+.. _file_tvm_ffi_extra_cuda_device_guard.h:
+
+File device_guard.h
+===================
+
+|exhale_lsh| :ref:`Parent directory <dir_tvm_ffi_extra_cuda>` (``tvm/ffi/extra/cuda``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+
+
+Device guard structs. 
+
+
+
+.. contents:: Contents
+   :local:
+   :backlinks: none
+
+Definition (``tvm/ffi/extra/cuda/device_guard.h``)
+--------------------------------------------------
+
+
+.. toctree::
+   :maxdepth: 1
+
+   program_listing_file_tvm_ffi_extra_cuda_device_guard.h.rst
+
+
+
+
+
+Includes
+--------
+
+
+- ``tvm/ffi/extra/cuda/base.h`` (:ref:`file_tvm_ffi_extra_cuda_base.h`)
+
+
+
+
+
+
+Namespaces
+----------
+
+
+- :ref:`namespace_tvm`
+
+- :ref:`namespace_tvm__ffi`
+
+
+Classes
+-------
+
+
+- :ref:`exhale_struct_structtvm_1_1ffi_1_1CUDADeviceGuard`
+
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_module.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_module.h.rst
index 51c4a6d209..e5aa8d961f 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_module.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_module.h.rst
@@ -74,6 +74,8 @@ Variables
 ---------
 
 
+- :ref:`exhale_variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb`
+
 - :ref:`exhale_variable_module_8h_1aae0405c7615139afd4f68b72a862cffe`
 
 - :ref:`exhale_variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_stl.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_stl.h.rst
new file mode 100644
index 0000000000..1ac0525401
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_extra_stl.h.rst
@@ -0,0 +1,104 @@
+
+.. _file_tvm_ffi_extra_stl.h:
+
+File stl.h
+==========
+
+|exhale_lsh| :ref:`Parent directory <dir_tvm_ffi_extra>` (``tvm/ffi/extra``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+
+
+STL container support. 
+
+
+
+.. contents:: Contents
+   :local:
+   :backlinks: none
+
+Definition (``tvm/ffi/extra/stl.h``)
+------------------------------------
+
+
+.. toctree::
+   :maxdepth: 1
+
+   program_listing_file_tvm_ffi_extra_stl.h.rst
+
+
+
+Detailed Description
+--------------------
+
+This file is an extra extension of TVM FFI, which provides support for STL containers in C++ exported functions.
+
+Whenever possible, prefer using tvm/ffi/container/ implementations, such as ``tvm::ffi::Array`` and ``tvm::ffi::Tuple``, over STL containers.
+
+Native ffi objects comes with stable data layout and can be directly accessed through compiled languages (Rust) and DSLs(via LLVM) with raw pointer access for better performance and compatibility. 
+
+
+
+
+Includes
+--------
+
+
+- ``algorithm``
+
+- ``array`` (:ref:`file_tvm_ffi_container_array.h`)
+
+- ``cstddef``
+
+- ``cstdint``
+
+- ``exception``
+
+- ``functional``
+
+- ``iterator``
+
+- ``map`` (:ref:`file_tvm_ffi_container_map.h`)
+
+- ``optional`` (:ref:`file_tvm_ffi_optional.h`)
+
+- ``tuple`` (:ref:`file_tvm_ffi_container_tuple.h`)
+
+- ``tvm/ffi/base_details.h`` (:ref:`file_tvm_ffi_base_details.h`)
+
+- ``tvm/ffi/c_api.h`` (:ref:`file_tvm_ffi_c_api.h`)
+
+- ``tvm/ffi/container/array.h`` (:ref:`file_tvm_ffi_container_array.h`)
+
+- ``tvm/ffi/container/map.h`` (:ref:`file_tvm_ffi_container_map.h`)
+
+- ``tvm/ffi/error.h`` (:ref:`file_tvm_ffi_error.h`)
+
+- ``tvm/ffi/function.h`` (:ref:`file_tvm_ffi_function.h`)
+
+- ``tvm/ffi/object.h`` (:ref:`file_tvm_ffi_object.h`)
+
+- ``tvm/ffi/type_traits.h`` (:ref:`file_tvm_ffi_type_traits.h`)
+
+- ``type_traits`` (:ref:`file_tvm_ffi_type_traits.h`)
+
+- ``utility``
+
+- ``variant`` (:ref:`file_tvm_ffi_container_variant.h`)
+
+- ``vector``
+
+
+
+
+
+
+Namespaces
+----------
+
+
+- :ref:`namespace_tvm`
+
+- :ref:`namespace_tvm__ffi`
+
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_function.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_function.h.rst
index 2e3db2a071..c77ba7ab90 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_function.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_function.h.rst
@@ -37,6 +37,8 @@ Includes
 
 - ``functional``
 
+- ``sstream``
+
 - ``string`` (:ref:`file_tvm_ffi_string.h`)
 
 - ``tvm/ffi/any.h`` (:ref:`file_tvm_ffi_any.h`)
@@ -65,6 +67,8 @@ Included By
 
 - :ref:`file_tvm_ffi_extra_module.h`
 
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_reflection_accessor.h`
 
 - :ref:`file_tvm_ffi_reflection_registry.h`
@@ -109,8 +113,12 @@ Defines
 
 - :ref:`exhale_define_function_8h_1a14328d95ccda4b1691b9874645aef4bd`
 
+- :ref:`exhale_define_function_8h_1a78c6d17c063fba9ca07175f150838046`
+
 - :ref:`exhale_define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4`
 
+- :ref:`exhale_define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd`
+
 - :ref:`exhale_define_function_8h_1a10bd932564c8e71a3978a061fbb82360`
 
 - :ref:`exhale_define_function_8h_1ae3c016c4bf383aa205b4485edd7ca17c`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_object.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_object.h.rst
index 87794e8d68..3fe8aa2881 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_object.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_object.h.rst
@@ -63,6 +63,8 @@ Included By
 
 - :ref:`file_tvm_ffi_error.h`
 
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_memory.h`
 
 - :ref:`file_tvm_ffi_optional.h`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_string.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_string.h.rst
index 41fbab0cb7..4eca6c4fe3 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_string.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_string.h.rst
@@ -69,6 +69,8 @@ Included By
 
 - :ref:`file_tvm_ffi_extra_base64.h`
 
+- :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
 - :ref:`file_tvm_ffi_optional.h`
 
 - :ref:`file_tvm_ffi_reflection_creator.h`
diff --git a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_type_traits.h.rst b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_type_traits.h.rst
index be79fd7ad1..25988337eb 100644
--- a/ffi/_sources/reference/cpp/generated/file_tvm_ffi_type_traits.h.rst
+++ b/ffi/_sources/reference/cpp/generated/file_tvm_ffi_type_traits.h.rst
@@ -58,6 +58,8 @@ Included By
 
 - :ref:`file_tvm_ffi_dtype.h`
 
+- :ref:`file_tvm_ffi_extra_stl.h`
+
 - :ref:`file_tvm_ffi_reflection_accessor.h`
 
 - :ref:`file_tvm_ffi_reflection_registry.h`
diff --git a/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi.rst b/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi.rst
index d5d68af060..bc284489c9 100644
--- a/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi.rst
+++ b/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi.rst
@@ -32,12 +32,16 @@ Classes
 
 - :ref:`exhale_struct_structtvm_1_1ffi_1_1AnyHash`
 
+- :ref:`exhale_struct_structtvm_1_1ffi_1_1CUDADeviceGuard`
+
 - :ref:`exhale_struct_structtvm_1_1ffi_1_1DenseMapObj_1_1Block`
 
 - :ref:`exhale_struct_structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType`
 
 - :ref:`exhale_struct_structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode`
 
+- :ref:`exhale_struct_structtvm_1_1ffi_1_1dim3`
+
 - :ref:`exhale_struct_structtvm_1_1ffi_1_1EnvErrorAlreadySet`
 
 - :ref:`exhale_struct_structtvm_1_1ffi_1_1FallbackOnlyTraitsBase`
@@ -72,6 +76,10 @@ Classes
 
 - :ref:`exhale_class_classtvm_1_1ffi_1_1Bytes`
 
+- :ref:`exhale_class_classtvm_1_1ffi_1_1CubinKernel`
+
+- :ref:`exhale_class_classtvm_1_1ffi_1_1CubinModule`
+
 - :ref:`exhale_class_classtvm_1_1ffi_1_1DenseMapObj`
 
 - :ref:`exhale_class_classtvm_1_1ffi_1_1Error`
@@ -164,14 +172,14 @@ Functions
 
 - :ref:`exhale_function_serialization_8h_1a56baa5d1ca415dbdebf19ac1f54bd5b7`
 
+- :ref:`exhale_function_tensor_8h_1a71e4a492b5a03a19a95087771a7e9ed1`
+
 - :ref:`exhale_function_tensor_8h_1a65b3a61c540c72d9410150a3a7a76dde`
 
 - :ref:`exhale_function_tensor_8h_1a011d0a2dcbe5702156124d7a7223b3dd`
 
 - :ref:`exhale_function_tensor_8h_1a226723176642cde5996498e7da6a6368`
 
-- :ref:`exhale_function_tensor_8h_1a71e4a492b5a03a19a95087771a7e9ed1`
-
 - :ref:`exhale_function_cast_8h_1a4dba749dd934d8a7891ad126a8fdcc1f`
 
 - :ref:`exhale_function_cast_8h_1a3c5fed9bb23b4804b61037c8ac4874f1`
diff --git a/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi__symbol.rst b/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi__symbol.rst
index 79e2be0d2d..229f85c3f8 100644
--- a/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi__symbol.rst
+++ b/ffi/_sources/reference/cpp/generated/namespace_tvm__ffi__symbol.rst
@@ -17,6 +17,8 @@ Variables
 ---------
 
 
+- :ref:`exhale_variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb`
+
 - :ref:`exhale_variable_module_8h_1aae0405c7615139afd4f68b72a862cffe`
 
 - :ref:`exhale_variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58`
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_c_api.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_c_api.h.rst
index dce5ec256f..1618cb246e 100644
--- a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_c_api.h.rst
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_c_api.h.rst
@@ -75,7 +75,7 @@ Program Listing for File c_api.h
    // NOLINTBEGIN(modernize-macro-to-enum)
    #define TVM_FFI_VERSION_MAJOR 0
    #define TVM_FFI_VERSION_MINOR 1
-   #define TVM_FFI_VERSION_PATCH 3
+   #define TVM_FFI_VERSION_PATCH 5
    // NOLINTEND(modernize-macro-to-enum)
    
    #ifdef __cplusplus
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_container_map.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_container_map.h.rst
index 751f7eafcd..d2593602fe 100644
--- a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_container_map.h.rst
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_container_map.h.rst
@@ -157,6 +157,9 @@ Program Listing for File map.h
      // Reference class
      template <typename, typename, typename>
      friend class Map;
+   
+     template <typename, typename>
+     friend struct TypeTraits;
    };
    
    class SmallMapObj : public MapObj,
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_base.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_base.h.rst
new file mode 100644
index 0000000000..d55f0cb096
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_base.h.rst
@@ -0,0 +1,54 @@
+
+.. _program_listing_file_tvm_ffi_extra_cuda_base.h:
+
+Program Listing for File base.h
+===============================
+
+|exhale_lsh| :ref:`Return to documentation for file <file_tvm_ffi_extra_cuda_base.h>` (``tvm/ffi/extra/cuda/base.h``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+.. code-block:: cpp
+
+   /*
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * "License"); you may not use this file except in compliance
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    * KIND, either express or implied.  See the License for the
+    * specific language governing permissions and limitations
+    * under the License.
+    */
+   #ifndef TVM_FFI_EXTRA_CUDA_BASE_H_
+   #define TVM_FFI_EXTRA_CUDA_BASE_H_
+   
+   #include <cuda_runtime.h>
+   #include <tvm/ffi/error.h>
+   
+   namespace tvm {
+   namespace ffi {
+   
+   #define TVM_FFI_CHECK_CUDA_ERROR(stmt)                                              \
+     do {                                                                              \
+       cudaError_t __err = (stmt);                                                     \
+       if (__err != cudaSuccess) {                                                     \
+         const char* __err_name = cudaGetErrorName(__err);                             \
+         const char* __err_str = cudaGetErrorString(__err);                            \
+         TVM_FFI_THROW(RuntimeError) << "CUDA Runtime Error: " << __err_name << " ("   \
+                                     << static_cast<int>(__err) << "): " << __err_str; \
+       }                                                                               \
+     } while (0)
+   
+   }  // namespace ffi
+   }  // namespace tvm
+   
+   #endif  // TVM_FFI_EXTRA_CUDA_BASE_H_
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_cubin_launcher.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_cubin_launcher.h.rst
new file mode 100644
index 0000000000..ee67653608
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_cubin_launcher.h.rst
@@ -0,0 +1,236 @@
+
+.. _program_listing_file_tvm_ffi_extra_cuda_cubin_launcher.h:
+
+Program Listing for File cubin_launcher.h
+=========================================
+
+|exhale_lsh| :ref:`Return to documentation for file <file_tvm_ffi_extra_cuda_cubin_launcher.h>` (``tvm/ffi/extra/cuda/cubin_launcher.h``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+.. code-block:: cpp
+
+   /*
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * "License"); you may not use this file except in compliance
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    * KIND, either express or implied.  See the License for the
+    * specific language governing permissions and limitations
+    * under the License.
+    */
+   #ifndef TVM_FFI_EXTRA_CUDA_CUBIN_LAUNCHER_H_
+   #define TVM_FFI_EXTRA_CUDA_CUBIN_LAUNCHER_H_
+   
+   #include <cuda_runtime.h>
+   #include <tvm/ffi/error.h>
+   #include <tvm/ffi/extra/c_env_api.h>
+   #include <tvm/ffi/extra/cuda/base.h>
+   #include <tvm/ffi/string.h>
+   
+   #include <cstdint>
+   #include <cstring>
+   
+   namespace tvm {
+   namespace ffi {
+   
+   struct dim3 {
+     unsigned int x;
+     unsigned int y;
+     unsigned int z;
+   
+     dim3() : x(1), y(1), z(1) {}
+   
+     explicit dim3(unsigned int x_) : x(x_), y(1), z(1) {}
+   
+     dim3(unsigned int x_, unsigned int y_) : x(x_), y(y_), z(1) {}
+   
+     dim3(unsigned int x_, unsigned int y_, unsigned int z_) : x(x_), y(y_), z(z_) {}
+   };
+   
+   #define TVM_FFI_EMBED_CUBIN(name)                        \
+     extern "C" const char __tvm_ffi__cubin_##name[];       \
+     extern "C" const char __tvm_ffi__cubin_##name##_end[]; \
+     namespace {                                            \
+     struct EmbedCubinModule_##name {                       \
+       tvm::ffi::CubinModule mod{__tvm_ffi__cubin_##name};  \
+       static EmbedCubinModule_##name* Global() {           \
+         static EmbedCubinModule_##name inst;               \
+         return &inst;                                      \
+       }                                                    \
+     };                                                     \
+     } /* anonymous namespace */
+   
+   #define TVM_FFI_EMBED_CUBIN_GET_KERNEL(name, kernel_name) \
+     (EmbedCubinModule_##name::Global()->mod[kernel_name])
+   
+   // Forward declaration
+   class CubinKernel;
+   
+   class CubinModule {
+    public:
+     explicit CubinModule(const Bytes& bytes) {
+       TVM_FFI_CHECK_CUDA_ERROR(
+           cudaLibraryLoadData(&library_, bytes.data(), nullptr, nullptr, 0, nullptr, nullptr, 0));
+     }
+   
+     explicit CubinModule(const char* code) {
+       TVM_FFI_CHECK_CUDA_ERROR(
+           cudaLibraryLoadData(&library_, code, nullptr, nullptr, 0, nullptr, nullptr, 0));
+     }
+   
+     ~CubinModule() {
+       if (library_ != nullptr) {
+         cudaLibraryUnload(library_);
+       }
+     }
+   
+     CubinKernel GetKernel(const char* name);
+   
+     CubinKernel GetKernelWithMaxDynamicSharedMemory(const char* name, int64_t dynamic_smem_max);
+   
+     CubinKernel operator[](const char* name);
+   
+     cudaLibrary_t GetHandle() const { return library_; }
+   
+     // Non-copyable
+     CubinModule(const CubinModule&) = delete;
+     CubinModule& operator=(const CubinModule&) = delete;
+   
+     CubinModule(CubinModule&& other) noexcept : library_(other.library_) { other.library_ = nullptr; }
+   
+     CubinModule& operator=(CubinModule&& other) noexcept {
+       if (this != &other) {
+         if (library_ != nullptr) {
+           cudaLibraryUnload(library_);
+         }
+         library_ = other.library_;
+         other.library_ = nullptr;
+       }
+       return *this;
+     }
+   
+    private:
+     cudaLibrary_t library_ = nullptr;
+   };
+   
+   class CubinKernel {
+    public:
+     CubinKernel(cudaLibrary_t library, const char* name) {
+       TVM_FFI_CHECK_CUDA_ERROR(cudaLibraryGetKernel(&kernel_, library, name));
+     }
+   
+     ~CubinKernel() = default;
+   
+     cudaError_t Launch(void** args, dim3 grid, dim3 block, cudaStream_t stream,
+                        uint32_t dyn_smem_bytes = 0) {
+       // Cast cudaKernel_t to const void* for use with cudaLaunchKernel
+       // The Runtime API accepts cudaKernel_t directly as a function pointer
+       auto kernel = reinterpret_cast<const void*>(kernel_);
+       return cudaLaunchKernel(kernel, {grid.x, grid.y, grid.z}, {block.x, block.y, block.z}, args,
+                               dyn_smem_bytes, stream);
+     }
+   
+     cudaKernel_t GetHandle() const { return kernel_; }
+   
+     // Non-copyable
+     CubinKernel(const CubinKernel&) = delete;
+     CubinKernel& operator=(const CubinKernel&) = delete;
+   
+     CubinKernel(CubinKernel&& other) noexcept : kernel_(other.kernel_) { other.kernel_ = nullptr; }
+   
+     CubinKernel& operator=(CubinKernel&& other) noexcept {
+       if (this != &other) {
+         kernel_ = other.kernel_;
+         other.kernel_ = nullptr;
+       }
+       return *this;
+     }
+   
+    private:
+     void SetMaxDynamicSharedMemory(int64_t dynamic_smem_max = -1) {
+       int device_count = 0;
+       cudaError_t err = cudaGetDeviceCount(&device_count);
+       if (err != cudaSuccess || device_count == 0) {
+         return;  // No devices available, nothing to configure
+       }
+   
+       bool any_success = false;
+       for (int device_id = 0; device_id < device_count; ++device_id) {
+         // Query device's maximum shared memory per block
+         int max_shared_mem = 0;
+         err = cudaDeviceGetAttribute(&max_shared_mem, cudaDevAttrMaxSharedMemoryPerBlock, device_id);
+         if (err != cudaSuccess) {
+           continue;  // Skip this device if we can't get its attribute
+         }
+   
+         int shared_mem_to_set;
+         if (dynamic_smem_max == -1) {
+           // Query the kernel's static shared memory usage
+           cudaFuncAttributes func_attr;
+   
+           // According to the documentation, we can use cudaFuncGetAttributes to get the attributes of
+           // cudaKernel_t returned by cudaLibraryGetKernel, just cast the kernel_ to const void*
+           err = cudaFuncGetAttributes(&func_attr, reinterpret_cast<const void*>(kernel_));
+           if (err != cudaSuccess) {
+             continue;  // Skip this device if we can't get kernel attributes
+           }
+   
+           // Calculate available dynamic shared memory:
+           // device max shared memory - static shared memory used by kernel
+           int64_t static_shared = static_cast<int64_t>(func_attr.sharedSizeBytes);
+           int64_t max_shared = static_cast<int64_t>(max_shared_mem);
+           int64_t available = max_shared - static_shared;
+           shared_mem_to_set = (available > 0) ? static_cast<int>(available) : 0;
+         } else {
+           shared_mem_to_set = static_cast<int>(dynamic_smem_max);
+         }
+   
+         // Set the maximum dynamic shared memory size for this device
+         err = cudaKernelSetAttributeForDevice(kernel_, cudaFuncAttributeMaxDynamicSharedMemorySize,
+                                               shared_mem_to_set, device_id);
+         if (err == cudaSuccess) {
+           any_success = true;
+         }
+         // Don't error out for individual device failures - user may only use some GPUs
+       }
+   
+       // Only error out if setting failed for ALL devices
+       if (!any_success && device_count > 0) {
+         TVM_FFI_THROW(RuntimeError) << "Failed to set dynamic shared memory attribute for any device";
+       }
+     }
+   
+     cudaKernel_t kernel_ = nullptr;
+   
+     friend class CubinModule;
+   };
+   
+   // Implementation of CubinModule methods that return CubinKernel
+   inline CubinKernel CubinModule::GetKernelWithMaxDynamicSharedMemory(const char* name,
+                                                                       int64_t dynamic_smem_max = -1) {
+     auto kernel = CubinKernel(library_, name);
+     kernel.SetMaxDynamicSharedMemory(dynamic_smem_max);
+     return kernel;
+   }
+   
+   inline CubinKernel CubinModule::GetKernel(const char* name) {
+     auto kernel = CubinKernel(library_, name);
+     return kernel;
+   }
+   
+   inline CubinKernel CubinModule::operator[](const char* name) { return GetKernel(name); }
+   
+   }  // namespace ffi
+   }  // namespace tvm
+   
+   #endif  // TVM_FFI_EXTRA_CUDA_CUBIN_LAUNCHER_H_
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_device_guard.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_device_guard.h.rst
new file mode 100644
index 0000000000..5df7720077
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_cuda_device_guard.h.rst
@@ -0,0 +1,62 @@
+
+.. _program_listing_file_tvm_ffi_extra_cuda_device_guard.h:
+
+Program Listing for File device_guard.h
+=======================================
+
+|exhale_lsh| :ref:`Return to documentation for file <file_tvm_ffi_extra_cuda_device_guard.h>` (``tvm/ffi/extra/cuda/device_guard.h``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+.. code-block:: cpp
+
+   /*
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * "License"); you may not use this file except in compliance
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    * KIND, either express or implied.  See the License for the
+    * specific language governing permissions and limitations
+    * under the License.
+    */
+   #ifndef TVM_FFI_EXTRA_CUDA_DEVICE_GUARD_H_
+   #define TVM_FFI_EXTRA_CUDA_DEVICE_GUARD_H_
+   
+   #include <tvm/ffi/extra/cuda/base.h>
+   
+   namespace tvm {
+   namespace ffi {
+   
+   struct CUDADeviceGuard {
+     CUDADeviceGuard() = delete;
+     explicit CUDADeviceGuard(int device_index) {
+       target_device_index_ = device_index;
+       TVM_FFI_CHECK_CUDA_ERROR(cudaGetDevice(&original_device_index_));
+       if (target_device_index_ != original_device_index_) {
+         TVM_FFI_CHECK_CUDA_ERROR(cudaSetDevice(device_index));
+       }
+     }
+   
+     ~CUDADeviceGuard() noexcept(false) {
+       if (original_device_index_ != target_device_index_) {
+         TVM_FFI_CHECK_CUDA_ERROR(cudaSetDevice(original_device_index_));
+       }
+     }
+   
+    private:
+     int original_device_index_;
+     int target_device_index_;
+   };
+   
+   }  // namespace ffi
+   }  // namespace tvm
+   #endif  // TVM_FFI_EXTRA_CUDA_DEVICE_GUARD_H_
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_module.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_module.h.rst
index 3461da6f3b..84f5af6c19 100644
--- a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_module.h.rst
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_module.h.rst
@@ -115,6 +115,7 @@ Program Listing for File module.h
    constexpr const char* tvm_ffi_library_ctx = "__tvm_ffi__library_ctx";
    constexpr const char* tvm_ffi_library_bin = "__tvm_ffi__library_bin";
    constexpr const char* tvm_ffi_metadata_prefix = "__tvm_ffi__metadata_";
+   constexpr const char* tvm_ffi_doc_prefix = "__tvm_ffi__doc_";
    }  // namespace symbol
    }  // namespace ffi
    }  // namespace tvm
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_stl.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_stl.h.rst
new file mode 100644
index 0000000000..1fcee0980a
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_extra_stl.h.rst
@@ -0,0 +1,646 @@
+
+.. _program_listing_file_tvm_ffi_extra_stl.h:
+
+Program Listing for File stl.h
+==============================
+
+|exhale_lsh| :ref:`Return to documentation for file <file_tvm_ffi_extra_stl.h>` (``tvm/ffi/extra/stl.h``)
+
+.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS
+
+.. code-block:: cpp
+
+   /*
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * "License"); you may not use this file except in compliance
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    * KIND, either express or implied.  See the License for the
+    * specific language governing permissions and limitations
+    * under the License.
+    */
+   
+   #ifndef TVM_FFI_EXTRA_STL_H_
+   #define TVM_FFI_EXTRA_STL_H_
+   
+   #include <tvm/ffi/base_details.h>
+   #include <tvm/ffi/c_api.h>
+   #include <tvm/ffi/container/array.h>
+   #include <tvm/ffi/container/map.h>
+   #include <tvm/ffi/error.h>
+   #include <tvm/ffi/object.h>
+   #include <tvm/ffi/type_traits.h>
+   
+   #include <algorithm>
+   #include <array>
+   #include <cstddef>
+   #include <cstdint>
+   #include <exception>
+   #include <functional>
+   #include <iterator>
+   #include <map>
+   #include <optional>
+   #include <tuple>
+   #include <type_traits>
+   #include <utility>
+   #include <variant>
+   #include <vector>
+   
+   #include "tvm/ffi/function.h"
+   
+   namespace tvm {
+   namespace ffi {
+   namespace details {
+   
+   struct STLTypeMismatch : public std::exception {
+     const char* what() const noexcept override { return "STL type mismatch"; }
+   };
+   
+   struct STLTypeTrait : public TypeTraitsBase {
+    public:
+     static constexpr bool storage_enabled = false;
+   
+    protected:
+     template <typename T>
+     TVM_FFI_INLINE static void MoveToAnyImpl(ObjectPtr<T>&& src, TVMFFIAny* result) {
+       TVMFFIObject* obj_ptr = ObjectUnsafe::MoveObjectPtrToTVMFFIObjectPtr(std::move(src));
+       result->type_index = obj_ptr->type_index;
+       result->zero_padding = 0;
+       TVM_FFI_CLEAR_PTR_PADDING_IN_FFI_ANY(result);
+       result->v_obj = obj_ptr;
+     }
+   
+     template <typename T>
+     TVM_FFI_INLINE static ObjectPtr<T> CopyFromAnyImpl(const TVMFFIAny* src) {
+       return ObjectUnsafe::ObjectPtrFromUnowned<T>(src->v_obj);
+     }
+   
+     template <typename T>
+     TVM_FFI_INLINE static T ConstructFromAny(const Any& value) {
+       using TypeTrait = TypeTraits<T>;
+       if constexpr (std::is_same_v<T, Any>) {
+         return value;
+       } else {
+         auto opt = TypeTrait::TryCastFromAnyView(AnyUnsafe::TVMFFIAnyPtrFromAny(value));
+         if (!opt.has_value()) {
+           throw STLTypeMismatch{};
+         }
+         return std::move(*opt);
+       }
+     }
+   };
+   
+   struct ListTemplate {};
+   struct MapTemplate {};
+   
+   }  // namespace details
+   
+   template <>
+   struct TypeTraits<details::ListTemplate> : public details::STLTypeTrait {
+    public:
+     static constexpr int32_t field_static_type_index = TypeIndex::kTVMFFIArray;
+   
+    private:
+     template <std::size_t... Is, typename Tuple>
+     TVM_FFI_INLINE static ObjectPtr<ArrayObj> CopyToTupleImpl(std::index_sequence<Is...>,
+                                                               Tuple&& src) {
+       auto array = ArrayObj::Empty(static_cast<std::int64_t>(sizeof...(Is)));
+       auto dst = array->MutableBegin();
+       // increase size after each new to ensure exception safety
+       std::apply(
+           [&](auto&&... elems) {
+             ((::new (dst++) Any(std::forward<decltype(elems)>(elems)), array->size_++), ...);
+           },
+           std::forward<Tuple>(src));
+       return array;
+     }
+   
+     template <typename Iter>
+     TVM_FFI_INLINE static ObjectPtr<ArrayObj> CopyToArrayImpl(Iter src, std::size_t size) {
+       auto array = ArrayObj::Empty(static_cast<std::int64_t>(size));
+       auto dst = array->MutableBegin();
+       // increase size after each new to ensure exception safety
+       for (std::size_t i = 0; i < size; ++i) {
+         ::new (dst++) Any(*(src++));
+         array->size_++;
+       }
+       return array;
+     }
+   
+    protected:
+     template <typename Tuple>
+     TVM_FFI_INLINE static ObjectPtr<ArrayObj> CopyToTuple(const Tuple& src) {
+       return CopyToTupleImpl(std::make_index_sequence<std::tuple_size_v<Tuple>>{}, src);
+     }
+   
+     template <typename Tuple>
+     TVM_FFI_INLINE static ObjectPtr<ArrayObj> MoveToTuple(Tuple&& src) {
+       return CopyToTupleImpl(std::make_index_sequence<std::tuple_size_v<Tuple>>{},
+                              std::forward<Tuple>(src));
+     }
+   
+     template <typename Range>
+     TVM_FFI_INLINE static ObjectPtr<ArrayObj> CopyToArray(const Range& src) {
+       return CopyToArrayImpl(std::begin(src), std::size(src));
+     }
+   
+     template <typename Range>
+     TVM_FFI_INLINE static ObjectPtr<ArrayObj> MoveToArray(Range&& src) {
+       return CopyToArrayImpl(std::make_move_iterator(std::begin(src)), std::size(src));
+     }
+   };
+   
+   template <>
+   struct TypeTraits<details::MapTemplate> : public details::STLTypeTrait {
+    public:
+     static constexpr int32_t field_static_type_index = TypeIndex::kTVMFFIMap;
+   
+    protected:
+     template <typename MapType>
+     TVM_FFI_INLINE static ObjectPtr<Object> CopyToMap(const MapType& src) {
+       return MapObj::CreateFromRange(std::begin(src), std::end(src));
+     }
+   
+     template <typename MapType>
+     TVM_FFI_INLINE static ObjectPtr<Object> MoveToMap(MapType&& src) {
+       return MapObj::CreateFromRange(std::make_move_iterator(std::begin(src)),
+                                      std::make_move_iterator(std::end(src)));
+     }
+   
+     template <typename MapType, bool CanReserve>
+     TVM_FFI_INLINE static MapType ConstructMap(const TVMFFIAny* src) {
+       using KeyType = typename MapType::key_type;
+       using ValueType = typename MapType::mapped_type;
+       auto result = MapType{};
+       auto map_obj = CopyFromAnyImpl<MapObj>(src);
+       if constexpr (CanReserve) {
+         result.reserve(map_obj->size());
+       }
+       for (const auto& [key, value] : *map_obj) {
+         result.try_emplace(ConstructFromAny<KeyType>(key), ConstructFromAny<ValueType>(value));
+       }
+       return result;
+     }
+   };
+   
+   template <typename T, std::size_t Nm>
+   struct TypeTraits<std::array<T, Nm>> : public TypeTraits<details::ListTemplate> {
+    private:
+     using Self = std::array<T, Nm>;
+   
+     TVM_FFI_INLINE static bool CheckAnyFast(const TVMFFIAny* src) {
+       if (src->type_index != TypeIndex::kTVMFFIArray) return false;
+       const ArrayObj& n = *reinterpret_cast<const ArrayObj*>(src->v_obj);
+       return n.size_ == Nm;
+     }
+   
+    public:
+     static_assert(Nm > 0, "Zero-length std::array is not supported.");
+   
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(CopyToArray(src), result);
+     }
+   
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(MoveToArray(std::move(src)), result);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       if (!CheckAnyFast(src)) return std::nullopt;
+       try {
+         auto array = CopyFromAnyImpl<ArrayObj>(src);
+         auto begin = array->MutableBegin();
+         Self result;  // no initialization to avoid overhead
+         for (std::size_t i = 0; i < Nm; ++i) {
+           result[i] = ConstructFromAny<T>(begin[i]);
+         }
+         return result;
+       } catch (const details::STLTypeMismatch&) {
+         return std::nullopt;
+       }
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       return "std::array<" + details::Type2Str<T>::v() + ", " + std::to_string(Nm) + ">";
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       return R"({"type":"std::array","args":[)" + details::TypeSchema<T>::v() + "," +
+              std::to_string(Nm) + "]}";
+     }
+   };
+   
+   template <typename T>
+   struct TypeTraits<std::vector<T>> : public TypeTraits<details::ListTemplate> {
+    private:
+     using Self = std::vector<T>;
+   
+     TVM_FFI_INLINE static bool CheckAnyFast(const TVMFFIAny* src) {
+       return src->type_index == TypeIndex::kTVMFFIArray;
+     }
+   
+    public:
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(CopyToArray(src), result);
+     }
+   
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(MoveToArray(std::move(src)), result);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       if (!CheckAnyFast(src)) return std::nullopt;
+       try {
+         auto array = CopyFromAnyImpl<ArrayObj>(src);
+         auto begin = array->MutableBegin();
+         auto result = Self{};
+         int64_t length = array->size_;
+         result.reserve(length);
+         for (int64_t i = 0; i < length; ++i) {
+           result.emplace_back(ConstructFromAny<T>(begin[i]));
+         }
+         return result;
+       } catch (const details::STLTypeMismatch&) {
+         return std::nullopt;
+       }
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       return "std::vector<" + details::Type2Str<T>::v() + ">";
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       return R"({"type":"std::vector","args":[)" + details::TypeSchema<T>::v() + "]}";
+     }
+   };
+   
+   template <typename T>
+   struct TypeTraits<std::optional<T>> : public TypeTraitsBase {
+    public:
+     using Self = std::optional<T>;
+   
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       if (src.has_value()) {
+         TypeTraits<T>::CopyToAnyView(*src, result);
+       } else {
+         TypeTraits<std::nullptr_t>::CopyToAnyView(nullptr, result);
+       }
+     }
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       if (src.has_value()) {
+         TypeTraits<T>::MoveToAny(std::move(*src), result);
+       } else {
+         TypeTraits<std::nullptr_t>::MoveToAny(nullptr, result);
+       }
+     }
+   
+     TVM_FFI_INLINE static bool CheckAnyStrict(const TVMFFIAny* src) {
+       if (src->type_index == TypeIndex::kTVMFFINone) return true;
+       return TypeTraits<T>::CheckAnyStrict(src);
+     }
+   
+     TVM_FFI_INLINE static Self CopyFromAnyViewAfterCheck(const TVMFFIAny* src) {
+       if (src->type_index == TypeIndex::kTVMFFINone) return Self{std::nullopt};
+       return TypeTraits<T>::CopyFromAnyViewAfterCheck(src);
+     }
+   
+     TVM_FFI_INLINE static Self MoveFromAnyAfterCheck(TVMFFIAny* src) {
+       if (src->type_index == TypeIndex::kTVMFFINone) return Self{std::nullopt};
+       return TypeTraits<T>::MoveFromAnyAfterCheck(src);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       if (src->type_index == TypeIndex::kTVMFFINone) return Self{std::nullopt};
+       auto result = std::optional<Self>{};
+       if (std::optional<T> opt = TypeTraits<T>::TryCastFromAnyView(src)) {
+         result.emplace(std::move(opt));
+       } else {
+         result.reset();  // failed to cast, indicate failure
+       }
+       return result;
+     }
+   
+     TVM_FFI_INLINE static std::string GetMismatchTypeInfo(const TVMFFIAny* src) {
+       return TypeTraits<T>::GetMismatchTypeInfo(src);
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       return "std::optional<" + TypeTraits<T>::TypeStr() + ">";
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       return R"({"type":"std::optional","args":[)" + details::TypeSchema<T>::v() + "]}";
+     }
+   };
+   
+   template <typename... Args>
+   struct TypeTraits<std::variant<Args...>> : public TypeTraitsBase {
+    private:
+     using Self = std::variant<Args...>;
+     static constexpr std::size_t Nm = sizeof...(Args);
+   
+     template <std::size_t Is = 0>
+     TVM_FFI_INLINE static Self CopyUnsafeAux(const TVMFFIAny* src) {
+       if constexpr (Is >= Nm) {
+         TVM_FFI_ICHECK(false) << "Unreachable: variant TryCast failed.";
+         throw;  // unreachable
+       } else {
+         using ElemType = std::variant_alternative_t<Is, Self>;
+         if (TypeTraits<ElemType>::CheckAnyStrict(src)) {
+           return Self{std::in_place_index<Is>, TypeTraits<ElemType>::CopyFromAnyViewAfterCheck(src)};
+         } else {
+           return CopyUnsafeAux<Is + 1>(src);
+         }
+       }
+     }
+   
+     template <std::size_t Is = 0>
+     TVM_FFI_INLINE static Self MoveUnsafeAux(const TVMFFIAny* src) {
+       if constexpr (Is >= Nm) {
+         TVM_FFI_ICHECK(false) << "Unreachable: variant TryCast failed.";
+         throw;  // unreachable
+       } else {
+         using ElemType = std::variant_alternative_t<Is, Self>;
+         if (TypeTraits<ElemType>::CheckAnyStrict(src)) {
+           return Self{std::in_place_index<Is>, TypeTraits<ElemType>::MoveFromAnyAfterCheck(src)};
+         } else {
+           return MoveUnsafeAux<Is + 1>(src);
+         }
+       }
+     }
+   
+     template <std::size_t Is = 0>
+     TVM_FFI_INLINE static std::optional<Self> TryCastAux(const TVMFFIAny* src) {
+       if constexpr (Is >= Nm) {
+         return std::nullopt;
+       } else {
+         using ElemType = std::variant_alternative_t<Is, Self>;
+         if (auto opt = TypeTraits<ElemType>::TryCastFromAnyView(src)) {
+           return Self{std::in_place_index<Is>, std::move(*opt)};
+         } else {
+           return TryCastAux<Is + 1>(src);
+         }
+       }
+     }
+   
+    public:
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       return std::visit(
+           [&](const auto& value) {
+             using ValueType = std::decay_t<decltype(value)>;
+             TypeTraits<ValueType>::CopyToAnyView(value, result);
+           },
+           src);
+     }
+   
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       return std::visit(
+           [&](auto&& value) {
+             using ValueType = std::decay_t<decltype(value)>;
+             TypeTraits<ValueType>::MoveToAny(std::forward<ValueType>(value), result);
+           },
+           std::move(src));
+     }
+   
+     TVM_FFI_INLINE static bool CheckAnyStrict(const TVMFFIAny* src) {
+       return (TypeTraits<Args>::CheckAnyStrict(src) || ...);
+     }
+   
+     TVM_FFI_INLINE static Self CopyFromAnyViewAfterCheck(const TVMFFIAny* src) {
+       // find the first possible type to copy
+       return CopyUnsafeAux(src);
+     }
+   
+     TVM_FFI_INLINE static Self MoveFromAnyAfterCheck(TVMFFIAny* src) {
+       // find the first possible type to move
+       return MoveUnsafeAux(src);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       // try to find the first possible type to copy
+       return TryCastAux(src);
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       std::ostringstream os;
+       os << "std::variant<";
+       const char* sep = "";
+       ((os << sep << details::Type2Str<Args>::v(), sep = ", "), ...);
+       os << ">";
+       return std::move(os).str();
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       std::ostringstream os;
+       os << R"({"type":"std::variant","args":[)";
+       const char* sep = "";
+       ((os << sep << details::TypeSchema<Args>::v(), sep = ", "), ...);
+       os << "]}";
+       return std::move(os).str();
+     }
+   };
+   
+   template <typename... Args>
+   struct TypeTraits<std::tuple<Args...>> : public TypeTraits<details::ListTemplate> {
+    private:
+     using Self = std::tuple<Args...>;
+     static constexpr std::size_t Nm = sizeof...(Args);
+     static_assert(Nm > 0, "Zero-length std::tuple is not supported.");
+   
+     TVM_FFI_INLINE static bool CheckAnyFast(const TVMFFIAny* src) {
+       if (src->type_index != TypeIndex::kTVMFFIArray) return false;
+       const ArrayObj& n = *reinterpret_cast<const ArrayObj*>(src->v_obj);
+       return n.size_ == Nm;
+     }
+   
+     template <std::size_t... Is>
+     TVM_FFI_INLINE static Self ConstructTupleAux(std::index_sequence<Is...>, const ArrayObj& n) {
+       return Self{ConstructFromAny<std::tuple_element_t<Is, Self>>(n[Is])...};
+     }
+   
+    public:
+     static constexpr int32_t field_static_type_index = TypeIndex::kTVMFFIArray;
+   
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(CopyToTuple(src), result);
+     }
+   
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(MoveToTuple(std::move(src)), result);
+     }
+   
+     TVM_FFI_INLINE static bool CheckAnyStrict(const TVMFFIAny* src) {
+       if (src->type_index != TypeIndex::kTVMFFIArray) return false;
+       const ArrayObj& n = *reinterpret_cast<const ArrayObj*>(src->v_obj);
+       // check static length first
+       if (n.size_ != Nm) return false;
+       // then check element type
+       return CheckSubTypeAux(std::make_index_sequence<Nm>{}, n);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       if (!CheckAnyFast(src)) return std::nullopt;
+       try {
+         auto array = CopyFromAnyImpl<ArrayObj>(src);
+         return ConstructTupleAux(std::make_index_sequence<Nm>{}, *array);
+       } catch (const details::STLTypeMismatch&) {
+         return std::nullopt;
+       }
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       std::ostringstream os;
+       os << "std::tuple<";
+       const char* sep = "";
+       ((os << sep << details::Type2Str<Args>::v(), sep = ", "), ...);
+       os << ">";
+       return std::move(os).str();
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       std::ostringstream os;
+       os << R"({"type":"std::tuple","args":[)";
+       const char* sep = "";
+       ((os << sep << details::TypeSchema<Args>::v(), sep = ", "), ...);
+       os << "]}";
+       return std::move(os).str();
+     }
+   };
+   
+   template <typename K, typename V>
+   struct TypeTraits<std::map<K, V>> : public TypeTraits<details::MapTemplate> {
+    private:
+     using Self = std::map<K, V>;
+     TVM_FFI_INLINE static bool CheckAnyFast(const TVMFFIAny* src) {
+       return src->type_index == TypeIndex::kTVMFFIMap;
+     }
+   
+    public:
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(CopyToMap(src), result);
+     }
+   
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(MoveToMap(std::move(src)), result);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       if (!CheckAnyFast(src)) return std::nullopt;
+       try {
+         return ConstructMap<Self, /*CanReserve=*/false>(src);
+       } catch (const details::STLTypeMismatch&) {
+         return std::nullopt;
+       }
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       return "std::map<" + details::Type2Str<K>::v() + ", " + details::Type2Str<V>::v() + ">";
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       return R"({"type":"std::map","args":[)" + details::TypeSchema<K>::v() + "," +
+              details::TypeSchema<V>::v() + "]}";
+     }
+   };
+   
+   template <typename K, typename V>
+   struct TypeTraits<std::unordered_map<K, V>> : public TypeTraits<details::MapTemplate> {
+    private:
+     using Self = std::unordered_map<K, V>;
+     TVM_FFI_INLINE static bool CheckAnyFast(const TVMFFIAny* src) {
+       return src->type_index == TypeIndex::kTVMFFIMap;
+     }
+   
+    public:
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(CopyToMap(src), result);
+     }
+   
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       return MoveToAnyImpl(MoveToMap(std::move(src)), result);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       if (!CheckAnyFast(src)) return std::nullopt;
+       try {
+         return ConstructMap<Self, /*CanReserve=*/true>(src);
+       } catch (const details::STLTypeMismatch&) {
+         return std::nullopt;
+       }
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       return "std::unordered_map<" + details::Type2Str<K>::v() + ", " + details::Type2Str<V>::v() +
+              ">";
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       return R"({"type":"std::unordered_map","args":[)" + details::TypeSchema<K>::v() + "," +
+              details::TypeSchema<V>::v() + "]}";
+     }
+   };
+   
+   template <typename Ret, typename... Args>
+   struct TypeTraits<std::function<Ret(Args...)>> : TypeTraitsBase {
+    private:
+     using Self = std::function<Ret(Args...)>;
+     using Function = TypedFunction<Ret(Args...)>;
+     using ProxyTrait = TypeTraits<Function>;
+   
+     TVM_FFI_INLINE static Self GetFunc(Function&& f) {
+       return [fn = std::move(f)](Args... args) -> Ret { return fn(std::forward<Args>(args)...); };
+     }
+   
+    public:
+     static constexpr int32_t field_static_type_index = TypeIndex::kTVMFFIFunction;
+     static constexpr bool storage_enabled = false;
+   
+     TVM_FFI_INLINE static void CopyToAnyView(const Self& src, TVMFFIAny* result) {
+       return ProxyTrait::MoveToAny(Function{src}, result);
+     }
+   
+     TVM_FFI_INLINE static void MoveToAny(Self&& src, TVMFFIAny* result) {
+       return ProxyTrait::MoveToAny(Function{std::move(src)}, result);
+     }
+   
+     TVM_FFI_INLINE static std::optional<Self> TryCastFromAnyView(const TVMFFIAny* src) {
+       auto opt = ProxyTrait::TryCastFromAnyView(src);
+       if (opt.has_value()) {
+         return GetFunc(std::move(*opt));
+       } else {
+         return std::nullopt;
+       }
+     }
+   
+     TVM_FFI_INLINE static std::string TypeStr() {
+       std::ostringstream os;
+       os << "std::function<" << details::Type2Str<Ret>::v() << "(";
+       const char* sep = "";
+       ((os << sep << details::Type2Str<Args>::v(), sep = ", "), ...);
+       os << ")>";
+       return std::move(os).str();
+     }
+   
+     TVM_FFI_INLINE static std::string TypeSchema() {
+       std::ostringstream os;
+       os << R"({"type":"std::function","args":[)" << details::TypeSchema<Ret>::v() << ",[";
+       const char* sep = "";
+       ((os << sep << details::TypeSchema<Args>::v(), sep = ", "), ...);
+       os << "]]}";
+       return std::move(os).str();
+     }
+   };
+   
+   }  // namespace ffi
+   }  // namespace tvm
+   
+   #endif  // TVM_FFI_EXTRA_STL_H_
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function.h.rst
index 275c40fc93..e8a1da450c 100644
--- a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function.h.rst
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function.h.rst
@@ -25,6 +25,25 @@ Program Listing for File function.h
    TVM_FFI_DLL_EXPORT_TYPED_FUNC(SubOne, [](int x) {
      return x - 1;
    });
+     return a + b;
+   }
+   
+   TVM_FFI_DLL_EXPORT_TYPED_FUNC(add, Add);
+   TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC(
+       add,
+       R"(Add two integers and return the sum.
+   
+   Parameters
+   ----------
+   a : int
+       First integer
+   b : int
+       Second integer
+   
+   Returns
+   -------
+   result : int
+       Sum of a and b)");
    /*
     * Licensed to the Apache Software Foundation (ASF) under one
     * or more contributor license agreements.  See the NOTICE file
@@ -46,6 +65,10 @@ Program Listing for File function.h
    #ifndef TVM_FFI_FUNCTION_H_
    #define TVM_FFI_FUNCTION_H_
    
+   #ifndef TVM_FFI_DLL_EXPORT_INCLUDE_METADATA
+   #define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA 0
+   #endif
+   
    #include <tvm/ffi/any.h>
    #include <tvm/ffi/base_details.h>
    #include <tvm/ffi/c_api.h>
@@ -53,6 +76,7 @@ Program Listing for File function.h
    #include <tvm/ffi/function_details.h>
    
    #include <functional>
+   #include <sstream>
    #include <string>
    #include <type_traits>
    #include <utility>
@@ -503,7 +527,11 @@ Program Listing for File function.h
      return type_index;
    }
    
-   #define TVM_FFI_DLL_EXPORT_TYPED_FUNC(ExportName, Function)                            \
+   // Internal implementation macros used by TVM_FFI_DLL_EXPORT_TYPED_FUNC and related macros.
+   // These should not be used directly; use the public macros instead.
+   
+   // Internal implementation macro that generates the C ABI wrapper function
+   #define TVM_FFI_DLL_EXPORT_TYPED_FUNC_IMPL_(ExportName, Function)                      \
      extern "C" {                                                                         \
      TVM_FFI_DLL_EXPORT int __tvm_ffi_##ExportName(void* self, const TVMFFIAny* args,     \
                                                    int32_t num_args, TVMFFIAny* result) { \
@@ -517,6 +545,48 @@ Program Listing for File function.h
        TVM_FFI_SAFE_CALL_END();                                                           \
      }                                                                                    \
      }
+   
+   #if TVM_FFI_DLL_EXPORT_INCLUDE_METADATA
+   // Implementation note: we specifically use TVMFFIStringFromByteArray
+   // so the returned string metadata is allocated in the libtvm_ffi and long lived.
+   #define TVM_FFI_DLL_EXPORT_TYPED_FUNC(ExportName, Function)                                      \
+     TVM_FFI_DLL_EXPORT_TYPED_FUNC_IMPL_(ExportName, Function)                                      \
+     extern "C" {                                                                                   \
+     TVM_FFI_DLL_EXPORT int __tvm_ffi__metadata_##ExportName(void* self, const TVMFFIAny* args,     \
+                                                             int32_t num_args, TVMFFIAny* result) { \
+       TVM_FFI_SAFE_CALL_BEGIN();                                                                   \
+       using FuncInfo = ::tvm::ffi::details::FunctionInfo<decltype(Function)>;                      \
+       std::ostringstream os;                                                                       \
+       os << R"({"type_schema":)"                                                                   \
+          << ::tvm::ffi::EscapeString(::tvm::ffi::String(FuncInfo::TypeSchema())) << R"(})";        \
+       std::string data = os.str();                                                                 \
+       TVMFFIByteArray data_array{data.data(), data.size()};                                        \
+       return TVMFFIStringFromByteArray(&data_array, result);                                       \
+       TVM_FFI_SAFE_CALL_END();                                                                     \
+     }                                                                                              \
+     }
+   #else
+   #define TVM_FFI_DLL_EXPORT_TYPED_FUNC(ExportName, Function) \
+     TVM_FFI_DLL_EXPORT_TYPED_FUNC_IMPL_(ExportName, Function)
+   #endif
+   
+   #if TVM_FFI_DLL_EXPORT_INCLUDE_METADATA
+   // Implementation note: we specifically use TVMFFIStringFromByteArray
+   // so the returned string metadata is allocated in the libtvm_ffi and long lived.
+   #define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC(ExportName, DocString)                            \
+     extern "C" {                                                                              \
+     TVM_FFI_DLL_EXPORT int __tvm_ffi__doc_##ExportName(void* self, const TVMFFIAny* args,     \
+                                                        int32_t num_args, TVMFFIAny* result) { \
+       TVM_FFI_SAFE_CALL_BEGIN();                                                              \
+       std::string_view data(DocString);                                                       \
+       TVMFFIByteArray data_array{data.data(), data.size()};                                   \
+       return TVMFFIStringFromByteArray(&data_array, result);                                  \
+       TVM_FFI_SAFE_CALL_END();                                                                \
+     }                                                                                         \
+     }
+   #else
+   #define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC(ExportName, DocString)
+   #endif
    }  // namespace ffi
    }  // namespace tvm
    #endif  // TVM_FFI_FUNCTION_H_
diff --git a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function_details.h.rst b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function_details.h.rst
index 23d7b4ee1d..aba3d4d988 100644
--- a/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function_details.h.rst
+++ b/ffi/_sources/reference/cpp/generated/program_listing_file_tvm_ffi_function_details.h.rst
@@ -204,6 +204,7 @@ Program Listing for File function_details.h
        *rv = R(f(ArgValueWithContext<std::tuple_element_t<Is, PackedArgs>>{args, Is, optional_name,
                                                                            f_sig}...));
      }
+     // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks
    }
    
    TVM_FFI_INLINE static Error MoveFromSafeCallRaised() {
diff --git a/ffi/_sources/reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.rst b/ffi/_sources/reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.rst
new file mode 100644
index 0000000000..73d8685b2d
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.rst
@@ -0,0 +1,17 @@
+.. _exhale_struct_structtvm_1_1ffi_1_1CUDADeviceGuard:
+
+Struct CUDADeviceGuard
+======================
+
+- Defined in :ref:`file_tvm_ffi_extra_cuda_device_guard.h`
+
+
+Struct Documentation
+--------------------
+
+
+.. doxygenstruct:: tvm::ffi::CUDADeviceGuard
+   :project: tvm-ffi
+   :members:
+   :protected-members:
+   :undoc-members:
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/structtvm_1_1ffi_1_1dim3.rst b/ffi/_sources/reference/cpp/generated/structtvm_1_1ffi_1_1dim3.rst
new file mode 100644
index 0000000000..f4651abe2d
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/structtvm_1_1ffi_1_1dim3.rst
@@ -0,0 +1,17 @@
+.. _exhale_struct_structtvm_1_1ffi_1_1dim3:
+
+Struct dim3
+===========
+
+- Defined in :ref:`file_tvm_ffi_extra_cuda_cubin_launcher.h`
+
+
+Struct Documentation
+--------------------
+
+
+.. doxygenstruct:: tvm::ffi::dim3
+   :project: tvm-ffi
+   :members:
+   :protected-members:
+   :undoc-members:
\ No newline at end of file
diff --git a/ffi/_sources/reference/cpp/generated/unabridged_orphan.rst b/ffi/_sources/reference/cpp/generated/unabridged_orphan.rst
index b7a7e4df4c..00bdc92b70 100644
--- a/ffi/_sources/reference/cpp/generated/unabridged_orphan.rst
+++ b/ffi/_sources/reference/cpp/generated/unabridged_orphan.rst
@@ -28,6 +28,11 @@ Directories
 
    dir_tvm_ffi_extra.rst
 
+.. toctree::
+   :maxdepth: 5
+
+   dir_tvm_ffi_extra_cuda.rst
+
 .. toctree::
    :maxdepth: 5
 
@@ -62,6 +67,11 @@ Files
 
    file_tvm_ffi_extra_base.h.rst
 
+.. toctree::
+   :maxdepth: 5
+
+   file_tvm_ffi_extra_cuda_base.h.rst
+
 .. toctree::
    :maxdepth: 5
 
@@ -97,6 +107,16 @@ Files
 
    file_tvm_ffi_reflection_creator.h.rst
 
+.. toctree::
+   :maxdepth: 5
+
+   file_tvm_ffi_extra_cuda_cubin_launcher.h.rst
+
+.. toctree::
+   :maxdepth: 5
+
+   file_tvm_ffi_extra_cuda_device_guard.h.rst
+
 .. toctree::
    :maxdepth: 5
 
@@ -172,6 +192,11 @@ Files
 
    file_tvm_ffi_container_shape.h.rst
 
+.. toctree::
+   :maxdepth: 5
+
+   file_tvm_ffi_extra_stl.h.rst
+
 .. toctree::
    :maxdepth: 5
 
diff --git a/ffi/_sources/reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.rst b/ffi/_sources/reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.rst
new file mode 100644
index 0000000000..c81effc307
--- /dev/null
+++ b/ffi/_sources/reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.rst
@@ -0,0 +1,14 @@
+.. _exhale_variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb:
+
+Variable tvm::ffi::symbol::tvm_ffi_doc_prefix
+=============================================
+
+- Defined in :ref:`file_tvm_ffi_extra_module.h`
+
+
+Variable Documentation
+----------------------
+
+
+.. doxygenvariable:: tvm::ffi::symbol::tvm_ffi_doc_prefix
+   :project: tvm-ffi
\ No newline at end of file
diff --git a/ffi/_sources/reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.rst b/ffi/_sources/reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.rst
new file mode 100644
index 0000000000..b6592738a0
--- /dev/null
+++ b/ffi/_sources/reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.rst
@@ -0,0 +1,6 @@
+tvm\_ffi.cpp.nvrtc.nvrtc\_compile
+=================================
+
+.. currentmodule:: tvm_ffi.cpp.nvrtc
+
+.. autofunction:: nvrtc_compile
\ No newline at end of file
diff --git a/ffi/_sources/reference/python/generated/tvm_ffi.Module.rst b/ffi/_sources/reference/python/generated/tvm_ffi.Module.rst
index 51fe5ad087..f6f651c97a 100644
--- a/ffi/_sources/reference/python/generated/tvm_ffi.Module.rst
+++ b/ffi/_sources/reference/python/generated/tvm_ffi.Module.rst
@@ -17,6 +17,8 @@
       ~Module.__init__
       ~Module.clear_imports
       ~Module.get_function
+      ~Module.get_function_doc
+      ~Module.get_function_metadata
       ~Module.get_property_mask
       ~Module.get_write_formats
       ~Module.implements_function
diff --git a/ffi/_sources/reference/python/index.rst b/ffi/_sources/reference/python/index.rst
index d36f02533a..99b652f4b3 100644
--- a/ffi/_sources/reference/python/index.rst
+++ b/ffi/_sources/reference/python/index.rst
@@ -115,6 +115,13 @@ C++ integration helpers for building and loading inline modules.
   cpp.load
   cpp.build
 
+NVRTC Utilities
+---------------
+.. autosummary::
+  :toctree: cpp/generated/
+
+  cpp.nvrtc.nvrtc_compile
+
 Misc
 ----
 .. autosummary::
diff --git a/ffi/_static/basic.css b/ffi/_static/basic.css
index 2a9e4114ac..9ca7106be1 100644
--- a/ffi/_static/basic.css
+++ b/ffi/_static/basic.css
@@ -741,14 +741,6 @@ abbr, acronym {
     cursor: help;
 }
 
-.translated {
-    background-color: rgba(207, 255, 207, 0.2)
-}
-
-.untranslated {
-    background-color: rgba(255, 207, 207, 0.2)
-}
-
 /* -- code displays --------------------------------------------------------- */
 
 pre {
diff --git a/ffi/_static/documentation_options.js b/ffi/_static/documentation_options.js
index c06e2fbd18..8bda0151da 100644
--- a/ffi/_static/documentation_options.js
+++ b/ffi/_static/documentation_options.js
@@ -1,5 +1,5 @@
 const DOCUMENTATION_OPTIONS = {
-    VERSION: '0.1.dev1+gdb53ce4f4',
+    VERSION: '0.1.dev1+gdcacb98d1',
     LANGUAGE: 'en',
     COLLAPSE_INDEX: false,
     BUILDER: 'html',
diff --git a/ffi/_static/downloads/mermaid-layout-elk.esm.min.mjs b/ffi/_static/downloads/mermaid-layout-elk.esm.min.mjs
index 5ec1dfd000..07a88820e6 100644
--- a/ffi/_static/downloads/mermaid-layout-elk.esm.min.mjs
+++ b/ffi/_static/downloads/mermaid-layout-elk.esm.min.mjs
@@ -1 +1 @@
-import{a as o}from"./chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs";var a=o(async()=>await import("./chunks/mermaid-layout-elk.esm.min/render-LWFKM4MT.mjs"),"loader"),t=["elk.stress","elk.force","elk.mrtree","elk.sporeOverlap"],r=[{name:"elk",loader:a,algorithm:"elk.layered"},...t.map(e=>({name:e,loader:a,algorithm:e}))],l=r;export{l as default};
+import{a as o}from"./chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs";var a=o(async()=>await import("./chunks/mermaid-layout-elk.esm.min/render-AVRWSH4D.mjs"),"loader"),t=["elk.stress","elk.force","elk.mrtree","elk.sporeOverlap"],r=[{name:"elk",loader:a,algorithm:"elk.layered"},...t.map(e=>({name:e,loader:a,algorithm:e}))],l=r;export{l as default};
diff --git a/ffi/_static/searchtools.js b/ffi/_static/searchtools.js
index 2c774d17af..91f4be57fc 100644
--- a/ffi/_static/searchtools.js
+++ b/ffi/_static/searchtools.js
@@ -513,9 +513,11 @@ const Search = {
     // perform the search on the required terms
     searchTerms.forEach((word) => {
       const files = [];
+      // find documents, if any, containing the query word in their text/title term indices
+      // use Object.hasOwnProperty to avoid mismatching against prototype properties
       const arr = [
-        { files: terms[word], score: Scorer.term },
-        { files: titleTerms[word], score: Scorer.title },
+        { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term },
+        { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title },
       ];
       // add support for partial matches
       if (word.length > 2) {
@@ -547,8 +549,9 @@ const Search = {
 
         // set score for the word in each file
         recordFiles.forEach((file) => {
-          if (!scoreMap.has(file)) scoreMap.set(file, {});
-          scoreMap.get(file)[word] = record.score;
+          if (!scoreMap.has(file)) scoreMap.set(file, new Map());
+          const fileScores = scoreMap.get(file);
+          fileScores.set(word, record.score);
         });
       });
 
@@ -587,7 +590,7 @@ const Search = {
         break;
 
       // select one (max) score for the file.
-      const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
+      const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w)));
       // add result to the result list
       results.push([
         docNames[file],
diff --git a/ffi/concepts/abi_overview.html b/ffi/concepts/abi_overview.html
index 38bad463e2..c063cd45ce 100644
--- a/ffi/concepts/abi_overview.html
+++ b/ffi/concepts/abi_overview.html
@@ -40,7 +40,7 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../_static/doctools.js?v=9bcbadda"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -58,7 +58,7 @@
     <link rel="prev" title="Kernel Library Guide" href="../guides/kernel_library_guide.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -172,6 +172,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -212,6 +213,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -230,9 +232,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -267,6 +271,8 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -407,6 +413,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -415,6 +422,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -423,7 +431,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1171,7 +1183,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/genindex.html b/ffi/genindex.html
index 8e28721288..3354f53894 100644
--- a/ffi/genindex.html
+++ b/ffi/genindex.html
@@ -39,7 +39,7 @@
 <link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="_static/documentation_options.js?v=20154ed1"></script>
+    <script src="_static/documentation_options.js?v=5f86a092"></script>
     <script src="_static/doctools.js?v=9bcbadda"></script>
     <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,22 +55,47 @@
     <script src="_static/downloads/d3.min.js"></script>
     <script type="module">import mermaid from "_static/downloads/mermaid.esm.min.mjs";
 
-const style = document.createElement('style');
-style.textContent = `.mermaid-container {
-    position: relative !important;
-    display: inline-block;
+const defaultStyle = document.createElement('style');
+defaultStyle.textContent = `pre.mermaid {
+    /* Same as .mermaid-container > pre */
+    display: block;
     width: 100%;
 }
 
+pre.mermaid > svg {
+    /* Same as .mermaid-container > pre > svg */
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+`;
+document.head.appendChild(defaultStyle);
+
+const fullscreenStyle = document.createElement('style');
+fullscreenStyle.textContent = `.mermaid-container {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+}
+
+.mermaid-container > pre {
+    display: block;
+    width: 100%;
+}
+
+.mermaid-container > pre > svg {
+    height: 500px;
+    width: 100%;
+    max-width: 100% !important;
+}
+
 .mermaid-fullscreen-btn {
-    position: absolute !important;
     width: 28px;
     height: 28px;
     background: rgba(255, 255, 255, 0.95);
     border: 1px solid rgba(0, 0, 0, 0.3);
     border-radius: 4px;
     cursor: pointer;
-    z-index: 100;
     display: flex;
     align-items: center;
     justify-content: center;
@@ -105,7 +130,7 @@ style.textContent = `.mermaid-container {
     position: fixed !important;
     top: 0 !important;
     left: 0 !important;
-    width: 100vw;
+    width: 95vw;
     height: 100vh;
     background: rgba(255, 255, 255, 0.98);
     z-index: 9999;
@@ -123,7 +148,7 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content {
+.mermaid-container-fullscreen {
     position: relative;
     width: 95vw;
     height: 90vh;
@@ -139,12 +164,12 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content.dark-theme {
+.mermaid-container-fullscreen.dark-theme {
     background: #1a1a1a;
     box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
 }
 
-.mermaid-fullscreen-content .mermaid {
+.mermaid-container-fullscreen pre.mermaid {
     width: 100%;
     height: 100%;
     display: flex;
@@ -152,11 +177,9 @@ style.textContent = `.mermaid-container {
     justify-content: center;
 }
 
-.mermaid-fullscreen-content .mermaid svg {
-    width: 100%;
-    height: auto;
-    max-width: 100%;
-    max-height: 85vh;
+.mermaid-container-fullscreen .mermaid svg {
+    height: 100% !important;
+    width: 100% !important;
     cursor: grab;
 }
 
@@ -200,9 +223,8 @@ style.textContent = `.mermaid-container {
 
 .mermaid-fullscreen-modal .mermaid-fullscreen-btn {
     display: none !important;
-}
-`;
-document.head.appendChild(style);
+}`;
+document.head.appendChild(fullscreenStyle);
 
 // Detect if page has dark background
 const isDarkTheme = () => {
@@ -218,20 +240,45 @@ const isDarkTheme = () => {
     return false;
 };
 
-const initFullscreen = async () => {
+const load = async () => {
     await mermaid.run();
 
     const all_mermaids = document.querySelectorAll(".mermaid");
     const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
 
-    if(all_mermaids.length !== mermaids_processed.length) {
+    if ("False" === "True") {
+        const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
+        if(mermaids_to_add_zoom > 0) {
+            var svgs = d3.selectAll("");
+            if(all_mermaids.length !== mermaids_processed.length) {
+                setTimeout(load, 200);
+                return;
+            } else if(svgs.size() !== mermaids_to_add_zoom) {
+                setTimeout(load, 200);
+                return;
+            } else {
+                svgs.each(function() {
+                    var svg = d3.select(this);
+                    svg.html("<g class='wrapper'>" + svg.html() + "</g>");
+                    var inner = svg.select("g");
+                    var zoom = d3.zoom().on("zoom", function(event) {
+                        inner.attr("transform", event.transform);
+                    });
+                    svg.call(zoom);
+                });
+            }
+        }
+    } else if(all_mermaids.length !== mermaids_processed.length) {
         // Wait for mermaid to process all diagrams
-        setTimeout(initFullscreen, 200);
+        setTimeout(load, 200);
         return;
     }
 
     const darkTheme = isDarkTheme();
 
+    // Stop here if not adding fullscreen capability
+    if ("True" !== "True") return;
+
     const modal = document.createElement('div');
     modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
     modal.setAttribute('role', 'dialog');
@@ -239,17 +286,20 @@ const initFullscreen = async () => {
     modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
     modal.innerHTML = `
         <button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
-        <div class="mermaid-fullscreen-content${darkTheme ? ' dark-theme' : ''}"></div>
+        <div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
     `;
     document.body.appendChild(modal);
 
-    const modalContent = modal.querySelector('.mermaid-fullscreen-content');
+    const modalContent = modal.querySelector('.mermaid-container-fullscreen');
     const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
 
+    let previousScrollOffset = [window.scrollX, window.scrollY];
+
     const closeModal = () => {
         modal.classList.remove('active');
         modalContent.innerHTML = '';
-        document.body.style.overflow = '';
+        document.body.style.overflow = ''
+        window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
     };
 
     closeBtn.addEventListener('click', closeModal);
@@ -279,6 +329,7 @@ const initFullscreen = async () => {
         fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
         fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
         fullscreenBtn.textContent = '⛶';
+        fullscreenBtn.style.opacity = '50%';
 
         // Calculate dynamic position based on diagram's margin and padding
         const diagramStyle = window.getComputedStyle(mermaidDiv);
@@ -290,6 +341,7 @@ const initFullscreen = async () => {
         fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
 
         fullscreenBtn.addEventListener('click', () => {
+            previousScrollOffset = [window.scroll, window.scrollY];
             const clone = mermaidDiv.cloneNode(true);
             modalContent.innerHTML = '';
             modalContent.appendChild(clone);
@@ -301,7 +353,22 @@ const initFullscreen = async () => {
                 svg.style.width = '100%';
                 svg.style.height = 'auto';
                 svg.style.maxWidth = '100%';
-                svg.style.display = 'block';
+                svg.style.sdisplay = 'block';
+
+                if ("False" === "True") {
+                    setTimeout(() => {
+                        const g = svg.querySelector('g');
+                        if (g) {
+                            var svgD3 = d3.select(svg);
+                            svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
+                            var inner = svgD3.select("g");
+                            var zoom = d3.zoom().on("zoom", function(event) {
+                                inner.attr("transform", event.transform);
+                            });
+                            svgD3.call(zoom);
+                        }
+                    }, 100);
+                }
             }
 
             modal.classList.add('active');
@@ -345,7 +412,7 @@ const initFullscreen = async () => {
     });
 };
 
-window.addEventListener("load", initFullscreen);
+window.addEventListener("load", load);
 </script>
     <script>DOCUMENTATION_OPTIONS.pagename = 'genindex';</script>
     <link rel="icon" href="https://tvm.apache.org/images/logo/tvm-logo-square.png"/>
@@ -353,7 +420,7 @@ window.addEventListener("load", initFullscreen);
     <link rel="search" title="Search" href="search.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -469,6 +536,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l1"><a class="reference internal" href="guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -509,6 +577,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l2"><a class="reference internal" href="reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -527,9 +596,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -564,6 +635,8 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -704,6 +777,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -712,6 +786,7 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -720,7 +795,11 @@ window.addEventListener("load", initFullscreen);
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -893,6 +972,7 @@ document.write(`
  | <a href="#K"><strong>K</strong></a>
  | <a href="#L"><strong>L</strong></a>
  | <a href="#M"><strong>M</strong></a>
+ | <a href="#N"><strong>N</strong></a>
  | <a href="#O"><strong>O</strong></a>
  | <a href="#P"><strong>P</strong></a>
  | <a href="#R"><strong>R</strong></a>
@@ -1070,10 +1150,14 @@ document.write(`
 </li>
       <li><a href="reference/python/generated/tvm_ffi.Module.html#tvm_ffi.Module.get_function">get_function() (tvm_ffi.Module method)</a>
 </li>
-      <li><a href="reference/python/generated/tvm_ffi.get_global_func.html#tvm_ffi.get_global_func">get_global_func() (in module tvm_ffi)</a>
+      <li><a href="reference/python/generated/tvm_ffi.Module.html#tvm_ffi.Module.get_function_doc">get_function_doc() (tvm_ffi.Module method)</a>
+</li>
+      <li><a href="reference/python/generated/tvm_ffi.Module.html#tvm_ffi.Module.get_function_metadata">get_function_metadata() (tvm_ffi.Module method)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/generated/tvm_ffi.get_global_func.html#tvm_ffi.get_global_func">get_global_func() (in module tvm_ffi)</a>
+</li>
       <li><a href="reference/python/generated/tvm_ffi.get_global_func_metadata.html#tvm_ffi.get_global_func_metadata">get_global_func_metadata() (in module tvm_ffi)</a>
 </li>
       <li><a href="reference/python/generated/tvm_ffi.Module.html#tvm_ffi.Module.get_property_mask">get_property_mask() (tvm_ffi.Module method)</a>
@@ -1210,6 +1294,14 @@ document.write(`
   </ul></td>
 </tr></table>
 
+<h2 id="N">N</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html#tvm_ffi.cpp.nvrtc.nvrtc_compile">nvrtc_compile() (in module tvm_ffi.cpp.nvrtc)</a>
+</li>
+  </ul></td>
+</tr></table>
+
 <h2 id="O">O</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
@@ -1438,6 +1530,34 @@ document.write(`
       <li><a href="reference/cpp/generated/function_endian_8h_1ab4e0ed8000c632cd2c7cd089c0a0d1af.html#_CPPv4N3tvm3ffi8ByteSwapEPv6size_t6size_t">tvm::ffi::ByteSwap (C++ function)</a>
 </li>
       <li><a href="reference/cpp/generated/function_array_8h_1af5983fd2a31e79635307875b3a216472.html#_CPPv4I00EN3tvm3ffi6ConcatE5ArrayI1TE5ArrayI1TERK5ArrayI1TE">tvm::ffi::Concat (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html#_CPPv4N3tvm3ffi11CubinKernelE">tvm::ffi::CubinKernel (C++ class)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html#_CPPv4N3tvm3ffi11CubinKernel11CubinKernelE13cudaLibrary_tPKc">tvm::ffi::CubinKernel::CubinKernel (C++ function)</a>, <a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html#_CPPv4N3tvm3ffi11CubinKernel11CubinKernelERK11CubinKernel">[1]</a>, <a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html#_CPPv4N3tvm3ffi11CubinKernel11CubinKernelERR11CubinKernel">[2]</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html#_CPPv4NK3tvm3ffi11CubinKernel9GetHandleEv">tvm::ffi::CubinKernel::GetHandle (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html#_CPPv4N3tvm3ffi11CubinKernel6LaunchEPPv4dim34dim312cudaStream_t8uint32_t">tvm::ffi::CubinKernel::Launch (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html#_CPPv4N3tvm3ffi11CubinKernelD0Ev">tvm::ffi::CubinKernel::~CubinKernel (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4N3tvm3ffi11CubinModuleE">tvm::ffi::CubinModule (C++ class)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4N3tvm3ffi11CubinModule11CubinModuleEPKc">tvm::ffi::CubinModule::CubinModule (C++ function)</a>, <a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4N3tvm3ffi11CubinModule11CubinModuleERK11CubinModule">[1]</a>, <a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4N3tvm3ffi11CubinModule11CubinModuleERK5Bytes">[2]</a>, <a href="reference/cpp/generated/classtvm_1_ [...]
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4NK3tvm3ffi11CubinModule9GetHandleEv">tvm::ffi::CubinModule::GetHandle (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4N3tvm3ffi11CubinModule9GetKernelEPKc">tvm::ffi::CubinModule::GetKernel (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4N3tvm3ffi11CubinModule35GetKernelWithMaxDynamicSharedMemoryEPKc7int64_t">tvm::ffi::CubinModule::GetKernelWithMaxDynamicSharedMemory (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html#_CPPv4N3tvm3ffi11CubinModuleD0Ev">tvm::ffi::CubinModule::~CubinModule (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html#_CPPv4N3tvm3ffi15CUDADeviceGuardE">tvm::ffi::CUDADeviceGuard (C++ struct)</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html#_CPPv4N3tvm3ffi15CUDADeviceGuard15CUDADeviceGuardEi">tvm::ffi::CUDADeviceGuard::CUDADeviceGuard (C++ function)</a>, <a href="reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html#_CPPv4N3tvm3ffi15CUDADeviceGuard15CUDADeviceGuardEv">[1]</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html#_CPPv4N3tvm3ffi15CUDADeviceGuardD0Ev">tvm::ffi::CUDADeviceGuard::~CUDADeviceGuard (C++ function)</a>
 </li>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html#_CPPv4N3tvm3ffi11DenseMapObjE">tvm::ffi::DenseMapObj (C++ class)</a>
 </li>
@@ -1524,6 +1644,16 @@ document.write(`
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html#_CPPv4NK3tvm3ffi11DenseMapObj8NumSlotsEv">tvm::ffi::DenseMapObj::NumSlots (C++ function)</a>
 </li>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html#_CPPv4N3tvm3ffi11DenseMapObjD0Ev">tvm::ffi::DenseMapObj::~DenseMapObj (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim3E">tvm::ffi::dim3 (C++ struct)</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim34dim3Ej">tvm::ffi::dim3::dim3 (C++ function)</a>, <a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim34dim3Ejj">[1]</a>, <a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim34dim3Ejjj">[2]</a>, <a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim34dim3Ev">[3]</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim31xE">tvm::ffi::dim3::x (C++ member)</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim31yE">tvm::ffi::dim3::y (C++ member)</a>
+</li>
+      <li><a href="reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html#_CPPv4N3tvm3ffi4dim31zE">tvm::ffi::dim3::z (C++ member)</a>
 </li>
       <li><a href="reference/cpp/generated/function_dtype_8h_1a94787950883e5a7e97b764ddd342afc3.html#_CPPv4N3tvm3ffi18DLDataTypeToStringE10DLDataType">tvm::ffi::DLDataTypeToString (C++ function)</a>
 </li>
@@ -2029,6 +2159,8 @@ document.write(`
 </li>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1TypeAttrDef.html#_CPPv4I00EN3tvm3ffi10reflection11TypeAttrDefE">tvm::ffi::reflection::TypeAttrDef (C++ class)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1TypeAttrDef.html#_CPPv4I0EN3tvm3ffi10reflection11TypeAttrDef4attrER11TypeAttrDefPKc1T">tvm::ffi::reflection::TypeAttrDef::attr (C++ function)</a>
 </li>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1reflection_1_1TypeAttrDef.html#_CPPv4I0EN3tvm3ffi10reflection11TypeAttrDef3defER11TypeAttrDefPKcRR4Func">tvm::ffi::reflection::TypeAttrDef::def (C++ function)</a>
@@ -2043,8 +2175,6 @@ document.write(`
 </li>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1Shape.html#_CPPv4N3tvm3ffi5ShapeE">tvm::ffi::Shape (C++ class)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1Shape.html#_CPPv4NK3tvm3ffi5Shape2atE6size_t">tvm::ffi::Shape::at (C++ function)</a>
 </li>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1Shape.html#_CPPv4NK3tvm3ffi5Shape4backEv">tvm::ffi::Shape::back (C++ function)</a>
@@ -2204,6 +2334,8 @@ document.write(`
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1StructuralHash.html#_CPPv4N3tvm3ffi14StructuralHashE">tvm::ffi::StructuralHash (C++ class)</a>
 </li>
       <li><a href="reference/cpp/generated/classtvm_1_1ffi_1_1StructuralHash.html#_CPPv4N3tvm3ffi14StructuralHash4HashERK3Anybb">tvm::ffi::StructuralHash::Hash (C++ function)</a>
+</li>
+      <li><a href="reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html#_CPPv4N3tvm3ffi6symbol18tvm_ffi_doc_prefixE">tvm::ffi::symbol::tvm_ffi_doc_prefix (C++ member)</a>
 </li>
       <li><a href="reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html#_CPPv4N3tvm3ffi6symbol19tvm_ffi_library_binE">tvm::ffi::symbol::tvm_ffi_library_bin (C++ member)</a>
 </li>
@@ -2389,6 +2521,8 @@ document.write(`
       <li><a href="reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html#c.TVM_FFI_BACKTRACE_ON_SEGFAULT">TVM_FFI_BACKTRACE_ON_SEGFAULT (C macro)</a>
 </li>
       <li><a href="reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html#c.TVM_FFI_CHECK">TVM_FFI_CHECK (C macro)</a>
+</li>
+      <li><a href="reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html#c.TVM_FFI_CHECK_CUDA_ERROR">TVM_FFI_CHECK_CUDA_ERROR (C macro)</a>
 </li>
       <li><a href="reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html#c.TVM_FFI_CHECK_FUNC">TVM_FFI_CHECK_FUNC (C macro)</a>
 </li>
@@ -2405,8 +2539,16 @@ document.write(`
       <li><a href="reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html#c.TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE">TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE (C macro)</a>
 </li>
       <li><a href="reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html#c.TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE">TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE (C macro)</a>
+</li>
+      <li><a href="reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html#c.TVM_FFI_DLL_EXPORT_INCLUDE_METADATA">TVM_FFI_DLL_EXPORT_INCLUDE_METADATA (C macro)</a>
 </li>
       <li><a href="reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html#c.TVM_FFI_DLL_EXPORT_TYPED_FUNC">TVM_FFI_DLL_EXPORT_TYPED_FUNC (C macro)</a>
+</li>
+      <li><a href="reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html#c.TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC">TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC (C macro)</a>
+</li>
+      <li><a href="reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html#c.TVM_FFI_EMBED_CUBIN">TVM_FFI_EMBED_CUBIN (C macro)</a>
+</li>
+      <li><a href="reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html#c.TVM_FFI_EMBED_CUBIN_GET_KERNEL">TVM_FFI_EMBED_CUBIN_GET_KERNEL (C macro)</a>
 </li>
       <li><a href="reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html#c.TVM_FFI_ICHECK">TVM_FFI_ICHECK (C macro)</a>
 </li>
@@ -2891,7 +3033,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/get_started/quickstart.html b/ffi/get_started/quickstart.html
index 8ee8c5ce5e..5c7436cf98 100644
--- a/ffi/get_started/quickstart.html
+++ b/ffi/get_started/quickstart.html
@@ -41,7 +41,7 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../_static/doctools.js?v=9bcbadda"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -60,7 +60,7 @@
     <link rel="prev" title="Apache TVM FFI Documentation" href="../index.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -174,6 +174,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -214,6 +215,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -232,9 +234,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -269,6 +273,8 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -409,6 +415,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -417,6 +424,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -425,7 +433,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -738,7 +750,8 @@ We can build a single shared library that works across:</p>
 </div>
 </div></div>
 <p>The macro <a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html#c.TVM_FFI_DLL_EXPORT_TYPED_FUNC" title="TVM_FFI_DLL_EXPORT_TYPED_FUNC"><code class="xref c c-macro docutils literal notranslate"><span class="pre">TVM_FFI_DLL_EXPORT_TYPED_FUNC</span></code></a> exports the C++ function <code class="docutils literal notranslate"><span class="pre">AddOne</span></code>
-as a TVM FFI compatible symbol with the name <code class="docutils literal notranslate"><span class="pre">__tvm_ffi_add_one_cpu/cuda</span></code> in the resulting library.</p>
+as a TVM FFI compatible symbol <code class="docutils literal notranslate"><span class="pre">__tvm_ffi_add_one_cpu/cuda</span></code>. If <a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html#c.TVM_FFI_DLL_EXPORT_INCLUDE_METADATA" title="TVM_FFI_DLL_EXPORT_INCLUDE_METADATA"><code class="xref c c-macro docutils literal notranslate"><span class="pre">TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</span></code></a> is set to 1,
+it also exports the function’s metadata as a symbol <code class="docutils literal notranslate"><span class="pre">__tvm_ffi__metadata_add_one_cpu/cuda</span></code> for type checking and stub generation.</p>
 <p>The class <a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1TensorView.html#_CPPv4N3tvm3ffi10TensorViewE" title="tvm::ffi::TensorView"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">tvm::ffi::TensorView</span></code></a> allows zero-copy interop with tensors from different ML frameworks:</p>
 <ul class="simple">
 <li><p>NumPy, CuPy,</p></li>
@@ -1131,7 +1144,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/get_started/stable_c_abi.html b/ffi/get_started/stable_c_abi.html
index a56ba78d1a..97e6893c58 100644
--- a/ffi/get_started/stable_c_abi.html
+++ b/ffi/get_started/stable_c_abi.html
@@ -41,7 +41,7 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../_static/doctools.js?v=9bcbadda"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -60,7 +60,7 @@
     <link rel="prev" title="Quick Start" href="quickstart.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -174,6 +174,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../guides/cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../guides/cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../guides/kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -214,6 +215,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -232,9 +234,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -269,6 +273,8 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -409,6 +415,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -417,6 +424,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -425,7 +433,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -1065,7 +1077,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/guides/build_from_source.html b/ffi/guides/build_from_source.html
index 3f7e65d572..8dec03f507 100644
--- a/ffi/guides/build_from_source.html
+++ b/ffi/guides/build_from_source.html
@@ -40,7 +40,7 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../_static/doctools.js?v=9bcbadda"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -58,7 +58,7 @@
     <link rel="prev" title="Compiler Integration" href="compiler_integration.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -172,6 +172,7 @@
 <li class="toctree-l1"><a class="reference internal" href="cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="compiler_integration.html">Compiler Integration</a></li>
 <li class="toctree-l1 current active"><a class="current reference internal" href="#">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -212,6 +213,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -230,9 +232,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -267,6 +271,8 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -407,6 +413,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -415,6 +422,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -423,7 +431,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -811,7 +823,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
 </p>
   </div>
diff --git a/ffi/guides/compiler_integration.html b/ffi/guides/compiler_integration.html
index 4527ac15c5..c9f61ccf9e 100644
--- a/ffi/guides/compiler_integration.html
+++ b/ffi/guides/compiler_integration.html
@@ -40,7 +40,7 @@
 <link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
   <script src="../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
 
-    <script src="../_static/documentation_options.js?v=20154ed1"></script>
+    <script src="../_static/documentation_options.js?v=5f86a092"></script>
     <script src="../_static/doctools.js?v=9bcbadda"></script>
     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
     <script src="../_static/clipboard.min.js?v=a7894cd8"></script>
@@ -55,10 +55,10 @@
     <link rel="index" title="Index" href="../genindex.html" />
     <link rel="search" title="Search" href="../search.html" />
     <link rel="next" title="Build from Source" href="build_from_source.html" />
-    <link rel="prev" title="Rust Guide" href="rust_guide.html" />
+    <link rel="prev" title="CUBIN Launcher Guide" href="cubin_launcher.html" />
   <meta name="viewport" content="width=device-width, initial-scale=1"/>
   <meta name="docsearch:language" content="en"/>
-    <meta name="docbuild:last-update" content="Nov 20, 2025"/>
+    <meta name="docbuild:last-update" content="Dec 03, 2025"/>
   </head>
   
   
@@ -172,6 +172,7 @@
 <li class="toctree-l1"><a class="reference internal" href="cpp_guide.html">C++ Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="python_guide.html">Python Guide</a></li>
 <li class="toctree-l1"><a class="reference internal" href="rust_guide.html">Rust Guide</a></li>
+<li class="toctree-l1"><a class="reference internal" href="cubin_launcher.html">CUBIN Launcher Guide</a></li>
 <li class="toctree-l1 current active"><a class="current reference internal" href="#">Compiler Integration</a></li>
 <li class="toctree-l1"><a class="reference internal" href="build_from_source.html">Build from Source</a></li>
 <li class="toctree-l1"><a class="reference internal" href="kernel_library_guide.html">Kernel Library Guide</a></li>
@@ -212,6 +213,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build_inline.html">tvm_ffi.cpp.build_inline</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.load.html">tvm_ffi.cpp.load</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.build.html">tvm_ffi.cpp.build</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../reference/python/cpp/generated/tvm_ffi.cpp.nvrtc.nvrtc_compile.html">tvm_ffi.cpp.nvrtc.nvrtc_compile</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.from_json_graph_str.html">tvm_ffi.serialization.from_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.serialization.to_json_graph_str.html">tvm_ffi.serialization.to_json_graph_str</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../reference/python/generated/tvm_ffi.access_path.AccessKind.html">tvm_ffi.access_path.AccessKind</a></li>
@@ -230,9 +232,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/namespace_tvm__ffi__symbol.html">Namespace tvm::ffi::symbol</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyEqual.html">Struct AnyEqual</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1AnyHash.html">Struct AnyHash</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1CUDADeviceGuard.html">Struct CUDADeviceGuard</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1Block.html">Struct DenseMapObj::Block</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ItemType.html">Struct DenseMapObj::ItemType</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1DenseMapObj_1_1ListNode.html">Struct DenseMapObj::ListNode</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1dim3.html">Struct dim3</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1EnvErrorAlreadySet.html">Struct EnvErrorAlreadySet</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1FallbackOnlyTraitsBase.html">Template Struct FallbackOnlyTraitsBase</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/structtvm_1_1ffi_1_1is__valid__iterator.html">Template Struct is_valid_iterator</a></li>
@@ -267,6 +271,8 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Array.html">Template Class Array</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ArrayObj.html">Class ArrayObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Bytes.html">Class Bytes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinKernel.html">Class CubinKernel</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1CubinModule.html">Class CubinModule</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1DenseMapObj.html">Class DenseMapObj</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1Error.html">Class Error</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/classtvm_1_1ffi_1_1ErrorObj.html">Class ErrorObj</a></li>
@@ -407,6 +413,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1aeee9dab8873b5b2f327f4dfe50f802ab.html">Function TVMFFITypeRegisterMetadata</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/function_c__api_8h_1a4e8b3caff4da72205ec1ac9a811748e5.html">Function TVMFFITypeRegisterMethod</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_array_8h_1a3bbf4c2bf19b72b026ad9e19a23143d5.html">Variable tvm::ffi::is_valid_iterator_v</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a5a3a8ad10620c05ded5876f8e607e0eb.html">Variable tvm::ffi::symbol::tvm_ffi_doc_prefix</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1aae0405c7615139afd4f68b72a862cffe.html">Variable tvm::ffi::symbol::tvm_ffi_library_bin</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1a76f8a8fd1e38fd98cc501623d959ee58.html">Variable tvm::ffi::symbol::tvm_ffi_library_ctx</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/variable_module_8h_1ad9c186f1359987cef9278993037b3f66.html">Variable tvm::ffi::symbol::tvm_ffi_main</a></li>
@@ -415,6 +422,7 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a288653475dd42db1c715a11ab2972578.html">Define TVM_FFI_ALWAYS_LOG_BEFORE_THROW</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a7205bbaef1c45e57f939af6deefb6449.html">Define TVM_FFI_BACKTRACE_ON_SEGFAULT</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1ad4674e1cb9c051f47127e5331a4bcadc.html">Define TVM_FFI_CHECK</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cuda_2base_8h_1a8b7e871d0d7206eacc60705f11827ee1.html">Define TVM_FFI_CHECK_CUDA_ERROR</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a64c939463f90816ffc2b70bc89ea3e43.html">Define TVM_FFI_CHECK_FUNC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a14328d95ccda4b1691b9874645aef4bd.html">Define TVM_FFI_CHECK_SAFE_CALL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a438ff7ee1fc503216d35e156081280c0.html">Define TVM_FFI_DECLARE_OBJECT_INFO</a></li>
@@ -423,7 +431,11 @@
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a6ad2a76d53c8c695743f7a275c8c0523.html">Define TVM_FFI_DECLARE_OBJECT_INFO_STATIC</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a4ac33631a9b51877808ec7edf010f0d2.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_object_8h_1a0fc0cc2d8f4318bc41a896c117e8a15c.html">Define TVM_FFI_DEFINE_OBJECT_REF_METHODS_NULLABLE</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html">Define TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html">Define TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1a99736a44462543179cb434ebd4512ade.html">Define TVM_FFI_EMBED_CUBIN</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_cubin__launcher_8h_1ae8d64fa1cc7db9d38632e32054df72fc.html">Define TVM_FFI_EMBED_CUBIN_GET_KERNEL</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a6c01470f76c6437edf93ac668ea6242a.html">Define TVM_FFI_ICHECK</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a83986fc775d68d4abcc209c2f67dde6e.html">Define TVM_FFI_ICHECK_BINARY_OP</a></li>
 <li class="toctree-l3"><a class="reference internal" href="../reference/cpp/generated/define_error_8h_1a394ec1781a34c49e29d47db5c3dfad9c.html">Define TVM_FFI_ICHECK_EQ</a></li>
@@ -677,9 +689,13 @@ following options:</p>
 <ul class="simple">
 <li><p>For compilers that generate host functions via codegen (e.g., LLVM), one can
 generate the symbol <code class="docutils literal notranslate"><span class="pre">__tvm_ffi_&lt;func_name&gt;</span></code>, where <code class="docutils literal notranslate"><span class="pre">&lt;funcname&gt;</span></code> is the exported
-function.</p></li>
-<li><p>For kernel generators that generate C++ host code, one can directly
-use <a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html#c.TVM_FFI_DLL_EXPORT_TYPED_FUNC" title="TVM_FFI_DLL_EXPORT_TYPED_FUNC"><code class="xref c c-macro docutils literal notranslate"><span class="pre">TVM_FFI_DLL_EXPORT_TYPED_FUNC</span></code></a> to expose the symbol.</p></li>
+function. Optionally, also generate <code class="docutils literal notranslate"><span class="pre">__tvm_ffi__metadata_&lt;func_name&gt;</span></code> for reflection.</p></li>
+<li><p>For kernel generators that generate C++ host code, use <a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a01777f12f8f99771331d679a0c1d2ed4.html#c.TVM_FFI_DLL_EXPORT_TYPED_FUNC" title="TVM_FFI_DLL_EXPORT_TYPED_FUNC"><code class="xref c c-macro docutils literal notranslate"><span class="pre">TVM_FFI_DLL_EXPORT_TYPED_FUNC</span></code></a>.
+This macro automatically exports function metadata when <a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html#c.TVM_FFI_DLL_EXPORT_INCLUDE_METADATA" title="TVM_FFI_DLL_EXPORT_INCLUDE_METADATA"><code class="xref c c-macro docutils literal notranslate"><span class="pre">TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</span></code></a>
+is set to 1.</p></li>
+<li><p>To export documentation strings, use <a class="reference internal" href="../reference/cpp/generated/define_function_8h_1af84cdf62b6c193275db7e63e3bffc8bd.html#c.TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC" title="TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC"><code class="xref c c-macro docutils literal notranslate"><span class="pre">TVM_FFI_DLL_EXPORT_TYPED_FUNC_DOC</span></code></a> separately
+after exporting the function. This enhances tooling support (stub generation, IDE tooltips).
+Documentation export is also controlled by <a class="reference internal" href="../reference/cpp/generated/define_function_8h_1a78c6d17c063fba9ca07175f150838046.html#c.TVM_FFI_DLL_EXPORT_INCLUDE_METADATA" title="TVM_FFI_DLL_EXPORT_INCLUDE_METADATA"><code class="xref c c-macro docutils literal notranslate"><span class="pre">TVM_FFI_DLL_EXPORT_INCLUDE_METADATA</span></code></a>.</p></li>
 </ul>
 <p>The following code snippet shows C code that corresponds to a
 function performing <code class="docutils literal notranslate"><span class="pre">add_one_c</span></code> under the ABI. It is reasonably straightforward for
@@ -868,12 +884,12 @@ during loading, either by importing another runtime DLL, or embedding it in the
                   
 <div class="prev-next-area">
     <a class="left-prev"
-       href="rust_guide.html"
+       href="cubin_launcher.html"
        title="previous page">
       <i class="fa-solid fa-angle-left"></i>
       <div class="prev-next-info">
         <p class="prev-next-subtitle">previous</p>
-        <p class="prev-next-title">Rust Guide</p>
+        <p class="prev-next-title">CUBIN Launcher Guide</p>
       </div>
     </a>
     <a class="right-next"
@@ -939,7 +955,7 @@ By Apache TVM FFI contributors
   
   <div class="footer-item">
     <p class="last-updated">
-  Last updated on Nov 20, 2025.
+  Last updated on Dec 03, 2025.
   <br/>
... 45243 lines suppressed ...