diff --git a/.github/workflows/git-ci.yml b/.github/workflows/git-ci.yml
new file mode 100644
index 00000000..62f8054c
--- /dev/null
+++ b/.github/workflows/git-ci.yml
@@ -0,0 +1,61 @@
+name: Widgets Toolbox Continuous Integration
+
+# Controls when the workflow will run.
+on: [push, workflow_dispatch]
+ # Triggers the workflow on push or pull request events
+ # This allows the workflow run to be run manually from the Actions tab in GitHub.
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel.
+jobs:
+ # Run the Toolbox tests.
+ run-tests:
+ # Define the job strategy.
+ strategy:
+ # Set up the job strategy matrix to define the different job configurations.
+ matrix:
+ # List of platforms on which to run the tests.
+ platform: [ubuntu-latest, windows-latest]
+
+ # List of MATLAB releases over which to run the tests.
+ matlab-version: [R2023b, R2024a, R2024b]
+
+ # We don't define any startup options until we reach R2023b (handled separately below).
+ # matlab-startup-options: [ '' ]
+
+ # Windows/Mac are supported from R2021a onwards. Ubuntu is supported from R2020b onwards.
+ # Exclude the Windows job on R2020b.
+
+ # Specify the platform that the job will run on.
+ runs-on: ${{ matrix.platform }}
+
+ # Don't fail the entire run if one job fails.
+ continue-on-error: true
+
+ # Steps define a sequence of tasks to be executed as part of the job.
+ steps:
+ # Check out the repository under $GITHUB_WORKSPACE, so that the job can access it.
+ - name: Check out the repository
+ uses: actions/checkout@v4
+
+ # For Linux jobs, start a display server on the runner.
+ - name: Start a display server for jobs running on Linux.
+ if: ${{ matrix.platform == 'ubuntu-latest' }}
+ run: |
+ sudo apt-get install -y xvfb
+ Xvfb :99 &
+ echo "DISPLAY=:99" >> $GITHUB_ENV
+
+ # Set up MATLAB on the runner.
+ - name: Set up MATLAB on the runner.
+ uses: matlab-actions/setup-matlab@v2
+ with:
+ # The tests require only base MATLAB.
+ products: MATLAB
+ release: ${{ matrix.matlab-version }}
+
+ # Run the Toolbox tests.
+ - name: Run the Toolbox tests.
+ uses: matlab-actions/run-command@v2
+ with:
+ startup-options: ${{ matrix.matlab-startup-options }}
+ command: openProject("WidgetsToolbox.prj"); [~,results] = runTestSuite(); failedTests = table(results([results.Failed])); disp(failedTests); results.assertSuccess();
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEd.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEd.xml
new file mode 100644
index 00000000..4356a6ae
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEp.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEp.xml
new file mode 100644
index 00000000..01cb34e6
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/V76yfcu8kfyIeJKa13j7YbWR_NEp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0d.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0d.xml
new file mode 100644
index 00000000..4356a6ae
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0d.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0p.xml b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0p.xml
new file mode 100644
index 00000000..db2f6dfb
--- /dev/null
+++ b/resources/project/I-dDyJ1p--Q0ihIJ8NFdLVLQLTU/p2B2kuKn-TR4inf0L2-zoGElvj0p.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUd.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUd.xml
new file mode 100644
index 00000000..4356a6ae
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUp.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUp.xml
new file mode 100644
index 00000000..01cb34e6
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/0kK47cOHwsW7a1GaaqpQDigXMNUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/RZl_i_GDnhyBwbhbVbhurwxgkbMd.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/RZl_i_GDnhyBwbhbVbhurwxgkbMd.xml
new file mode 100644
index 00000000..4356a6ae
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/RZl_i_GDnhyBwbhbVbhurwxgkbMd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/RZl_i_GDnhyBwbhbVbhurwxgkbMp.xml b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/RZl_i_GDnhyBwbhbVbhurwxgkbMp.xml
new file mode 100644
index 00000000..1ffd2c2d
--- /dev/null
+++ b/resources/project/p2B2kuKn-TR4inf0L2-zoGElvj0/RZl_i_GDnhyBwbhbVbhurwxgkbMp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUd.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUd.xml
new file mode 100644
index 00000000..4356a6ae
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUd.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUp.xml b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUp.xml
new file mode 100644
index 00000000..a9c1803b
--- /dev/null
+++ b/resources/project/qaw0eS1zuuY1ar9TdPn1GMfrjbQ/I-dDyJ1p--Q0ihIJ8NFdLVLQLTUp.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file