diff --git a/CMakeLists.txt b/CMakeLists.txt
index a12327c4..3725caf6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -305,4 +305,6 @@ if(SOFTROBOTS_BUILD_TESTS)
add_subdirectory(tests)
endif()
+sofa_add_subdirectory(plugin extensions/CUDA SoftRobots.CUDA)
+
include(cmake/packaging.cmake)
diff --git a/extensions/CUDA/CMakeLists.txt b/extensions/CUDA/CMakeLists.txt
new file mode 100644
index 00000000..fe89d6fb
--- /dev/null
+++ b/extensions/CUDA/CMakeLists.txt
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.12)
+project(SoftRobots.CUDA)
+
+set(HEADER_FILES
+ src/SoftRobots.CUDA/init.h
+ src/SoftRobots.CUDA/config.h.in
+)
+
+set(SOURCE_FILES
+ src/SoftRobots.CUDA/init.cpp
+)
+
+sofa_find_package(SoftRobots REQUIRED)
+sofa_find_package(SofaCUDA REQUIRED)
+
+add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES})
+target_link_libraries(${PROJECT_NAME} SoftRobots)
+target_link_libraries(${PROJECT_NAME} SofaCUDA)
+
+sofa_create_package_with_targets(
+ PACKAGE_NAME ${PROJECT_NAME}
+ PACKAGE_VERSION ${Sofa_VERSION}
+ TARGETS ${PROJECT_NAME} AUTO_SET_TARGET_PROPERTIES
+ INCLUDE_SOURCE_DIR "src"
+ INCLUDE_INSTALL_DIR "${PROJECT_NAME}"
+ RELOCATABLE "plugins"
+)
diff --git a/extensions/CUDA/SoftRobots.CUDAConfig.cmake.in b/extensions/CUDA/SoftRobots.CUDAConfig.cmake.in
new file mode 100644
index 00000000..639d2acb
--- /dev/null
+++ b/extensions/CUDA/SoftRobots.CUDAConfig.cmake.in
@@ -0,0 +1,9 @@
+# CMake package configuration file for the SoftRobots.CUDA library
+
+@PACKAGE_GUARD@
+@PACKAGE_INIT@
+
+find_package(SoftRobots QUIET REQUIRED)
+find_package(SofaCUDA QUIET REQUIRED)
+
+check_required_components(SoftRobots.CUDA)
diff --git a/extensions/CUDA/src/SoftRobots.CUDA/config.h.in b/extensions/CUDA/src/SoftRobots.CUDA/config.h.in
new file mode 100644
index 00000000..4d114493
--- /dev/null
+++ b/extensions/CUDA/src/SoftRobots.CUDA/config.h.in
@@ -0,0 +1,43 @@
+/******************************************************************************
+* SOFA, Simulation Open-Framework Architecture *
+* (c) 2006 INRIA, USTL, UJF, CNRS, MGH *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU Lesser General Public License as published by *
+* the Free Software Foundation; either version 2.1 of the License, or (at *
+* your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but WITHOUT *
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
+* for more details. *
+* *
+* You should have received a copy of the GNU Lesser General Public License *
+* along with this program. If not, see . *
+*******************************************************************************
+* Plugin SoftRobots *
+* *
+* This plugin is also distributed under the GNU LGPL (Lesser General *
+* Public License) license with the same conditions than SOFA. *
+* *
+* Contributors: Defrost team (INRIA, University of Lille, CNRS, *
+* Ecole Centrale de Lille) *
+* *
+* Contact information: https://project.inria.fr/softrobot/contact/ *
+******************************************************************************/
+#pragma once
+
+#include
+
+#ifdef SOFA_BUILD_SOFTROBOTS_CUDA
+# define SOFA_TARGET @PROJECT_NAME@
+# define SOFA_SOFTROBOTS_CUDA_API SOFA_EXPORT_DYNAMIC_LIBRARY
+#else
+# define SOFA_SOFTROBOTS_CUDA_API SOFA_IMPORT_DYNAMIC_LIBRARY
+#endif
+
+namespace softrobots::cuda
+{
+ constexpr const char* MODULE_NAME = "@PROJECT_NAME@";
+ constexpr const char* MODULE_VERSION = "@PROJECT_VERSION@";
+} // namespace softrobots::cuda
diff --git a/extensions/CUDA/src/SoftRobots.CUDA/init.cpp b/extensions/CUDA/src/SoftRobots.CUDA/init.cpp
new file mode 100644
index 00000000..7ccb9bce
--- /dev/null
+++ b/extensions/CUDA/src/SoftRobots.CUDA/init.cpp
@@ -0,0 +1,71 @@
+/******************************************************************************
+* SOFA, Simulation Open-Framework Architecture *
+* (c) 2006 INRIA, USTL, UJF, CNRS, MGH *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU Lesser General Public License as published by *
+* the Free Software Foundation; either version 2.1 of the License, or (at *
+* your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but WITHOUT *
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
+* for more details. *
+* *
+* You should have received a copy of the GNU Lesser General Public License *
+* along with this program. If not, see . *
+*******************************************************************************
+* Plugin SoftRobots *
+* *
+* This plugin is also distributed under the GNU LGPL (Lesser General *
+* Public License) license with the same conditions than SOFA. *
+* *
+* Contributors: Defrost team (INRIA, University of Lille, CNRS, *
+* Ecole Centrale de Lille) *
+* *
+* Contact information: https://project.inria.fr/softrobot/contact/ *
+******************************************************************************/
+#include
+#include
+namespace softrobots::cuda
+{
+
+extern "C" {
+ SOFA_EXPORT_DYNAMIC_LIBRARY void initExternalModule();
+ SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleName();
+ SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleVersion();
+ SOFA_EXPORT_DYNAMIC_LIBRARY const char* getModuleComponentList();
+}
+
+void initExternalModule()
+{
+ init();
+}
+
+const char* getModuleName()
+{
+ return MODULE_NAME;
+}
+
+const char* getModuleVersion()
+{
+ return MODULE_VERSION;
+}
+
+void init()
+{
+ static bool first = true;
+ if (first)
+ {
+ first = false;
+ }
+}
+
+const char* getModuleComponentList()
+{
+ /// string containing the names of the classes provided by the plugin
+ static std::string classes = sofa::core::ObjectFactory::getInstance()->listClassesFromTarget(MODULE_NAME);
+ return classes.c_str();
+}
+
+} // namespace softrobots::cuda
diff --git a/extensions/CUDA/src/SoftRobots.CUDA/init.h b/extensions/CUDA/src/SoftRobots.CUDA/init.h
new file mode 100644
index 00000000..4293d25c
--- /dev/null
+++ b/extensions/CUDA/src/SoftRobots.CUDA/init.h
@@ -0,0 +1,35 @@
+/******************************************************************************
+* SOFA, Simulation Open-Framework Architecture *
+* (c) 2006 INRIA, USTL, UJF, CNRS, MGH *
+* *
+* This program is free software; you can redistribute it and/or modify it *
+* under the terms of the GNU Lesser General Public License as published by *
+* the Free Software Foundation; either version 2.1 of the License, or (at *
+* your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, but WITHOUT *
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
+* for more details. *
+* *
+* You should have received a copy of the GNU Lesser General Public License *
+* along with this program. If not, see . *
+*******************************************************************************
+* Plugin SoftRobots *
+* *
+* This plugin is also distributed under the GNU LGPL (Lesser General *
+* Public License) license with the same conditions than SOFA. *
+* *
+* Contributors: Defrost team (INRIA, University of Lille, CNRS, *
+* Ecole Centrale de Lille) *
+* *
+* Contact information: https://project.inria.fr/softrobot/contact/ *
+******************************************************************************/
+#pragma once
+
+#include
+
+namespace softrobots::cuda
+{
+SOFA_SOFTROBOTS_CUDA_API void init();
+} // namespace softrobots::cuda