diff --git a/scipost_django/submissions/admin.py b/scipost_django/submissions/admin.py
index 8a8581316684cea0f4882bea0b07ecad8d04c2aa..60c61946540aec43850a0f04fcdbad87a0660dfc 100644
--- a/scipost_django/submissions/admin.py
+++ b/scipost_django/submissions/admin.py
@@ -210,6 +210,7 @@ class SubmissionAdmin(GuardedModelAdmin):
                     "specialties",
                     "approaches",
                     "proceedings",
+                    "code_metadata"
                 ),
             },
         ),
diff --git a/scipost_django/submissions/forms/__init__.py b/scipost_django/submissions/forms/__init__.py
index 17d4e8af4c56f7b3431e470c4721894e810a9f46..826b343dcd735092c5b5f902d6cd9ecc34f34179 100644
--- a/scipost_django/submissions/forms/__init__.py
+++ b/scipost_django/submissions/forms/__init__.py
@@ -1302,6 +1302,24 @@ class SubmissionForm(forms.ModelForm):
         "".format(url="https://scipost.org/journals/journals_terms_and_conditions"),
         # FIX  reversing on journals:journals_terms_and_conditions errors with circular import
     )
+    code_name = forms.CharField(
+        label="Software name",
+        help_text="Please provide the name of the software referenced in this submission.",
+        required=True,
+    )
+    code_version = forms.CharField(
+        label="Software version",
+        help_text="Provide the software version referenced in this submission (e.g. v1.2.3).",
+        required=True,
+    )
+    code_license = forms.CharField(
+        label="Software license",
+        help_text=(
+            'Type the name of an acceptable license (one approved by <a href="https://opensource.org/licenses">OSI</a>). '
+            + 'Please consult <a href="https://scipost.org/SciPostPhysCodeb/about#licensing">the about page</a> for more information.'
+        ),
+        required=True,
+    )
 
     class Meta:
         model = Submission
@@ -1318,8 +1336,11 @@ class SubmissionForm(forms.ModelForm):
             "author_list",
             "abstract",
             "followup_of",
-            "code_repository_url",
             "data_repository_url",
+            "code_repository_url",
+            "code_name",
+            "code_version",
+            "code_license",
             "author_comments",
             "list_of_changes",
             "remarks_for_editors",
@@ -1417,6 +1438,12 @@ class SubmissionForm(forms.ModelForm):
                 + str(kwargs["initial"].get("acad_field").id)
             )
 
+        # Codebases-only fields
+        if "Codeb" not in self.submitted_to_journal.doi_label:
+            del self.fields["code_name"]
+            del self.fields["code_version"]
+            del self.fields["code_license"]
+
         # Proceedings & Collection submission fields
         if "LectNotes" not in self.submitted_to_journal.doi_label:
             del self.fields["collection"]
@@ -1673,6 +1700,15 @@ class SubmissionForm(forms.ModelForm):
         submission.metadata = self.metadata
         submission.preprint = preprint
 
+
+        # Codebases-only fields
+        if "Codeb" in submission.submitted_to.doi_label:
+            submission.code_metadata = {
+                "code_name": self.cleaned_data["code_name"],
+                "code_version": self.cleaned_data["code_version"],
+                "code_license": self.cleaned_data["code_license"],
+            }
+
         submission.save()
 
         # Try to match the submitting author's last name to a position from the author list.
diff --git a/scipost_django/submissions/migrations/0150_submission_code_metadata.py b/scipost_django/submissions/migrations/0150_submission_code_metadata.py
new file mode 100644
index 0000000000000000000000000000000000000000..22dd657597516299ec3a1b620cf5acb4d0d048ff
--- /dev/null
+++ b/scipost_django/submissions/migrations/0150_submission_code_metadata.py
@@ -0,0 +1,21 @@
+# Generated by Django 4.2.10 on 2024-03-26 13:08
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("submissions", "0149_alter_qualification_expertise_level_and_more"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="submission",
+            name="code_metadata",
+            field=models.JSONField(
+                blank=True,
+                default=dict,
+                help_text="Information about the software referenced in the codebases publication",
+            ),
+        ),
+    ]
diff --git a/scipost_django/submissions/models/submission.py b/scipost_django/submissions/models/submission.py
index 514b4040727b4b2cad687946f2dddc2818fefdef..8c9dec408f5414a013bd81d18ea09a3ecafa43bb 100644
--- a/scipost_django/submissions/models/submission.py
+++ b/scipost_django/submissions/models/submission.py
@@ -352,11 +352,16 @@ class Submission(models.Model):
     abstract = models.TextField()
 
     # Links to associated code and data
+    data_repository_url = models.URLField(
+        blank=True, help_text="Link to a data repository pertaining to your manuscript"
+    )
     code_repository_url = models.URLField(
         blank=True, help_text="Link to a code repository pertaining to your manuscript"
     )
-    data_repository_url = models.URLField(
-        blank=True, help_text="Link to a data repository pertaining to your manuscript"
+    code_metadata = models.JSONField(
+        default=dict,
+        blank=True,
+        help_text="Information about the software referenced in the codebases publication",
     )
 
     # Comments can be added to a Submission