diff --git a/packages/controls/css/widgets-base.css b/packages/controls/css/widgets-base.css
index b5c14f83a8..0ee115b192 100644
--- a/packages/controls/css/widgets-base.css
+++ b/packages/controls/css/widgets-base.css
@@ -975,6 +975,19 @@
   margin-bottom: var(--jp-widgets-radio-item-height-adjustment);
 }
 
+/* <DEPRECATED> */
+.widget-radio-box-vertical, /* </DEPRECATED> */
+.jupyter-widget-radio-box-vertical {
+  flex-direction: column;
+}
+
+
+/* <DEPRECATED> */
+.widget-radio-box-horizontal, /* </DEPRECATED> */
+.jupyter-widget-radio-box-horizontal {
+  flex-direction: row;
+}
+
 /* <DEPRECATED> */
 .widget-radio-box label, /* </DEPRECATED> */
 .jupyter-widget-radio-box label {
@@ -983,6 +996,11 @@
   font-size: var(--jp-widgets-font-size);
 }
 
+.widget-radio-box-horizontal label,
+.jupyter-widget-radio-box-horizontal label {
+	margin: 0 calc(var(--jp-widgets-input-padding) * 2) 0 0;
+}
+
 /* <DEPRECATED> */
 .widget-radio-box input, /* </DEPRECATED> */
 .jupyter-widget-radio-box input {
diff --git a/packages/controls/src/widget_selection.ts b/packages/controls/src/widget_selection.ts
index 11174799cd..11e7d22d1a 100644
--- a/packages/controls/src/widget_selection.ts
+++ b/packages/controls/src/widget_selection.ts
@@ -288,6 +288,7 @@ export class RadioButtonsModel extends SelectionModel {
       tooltips: [],
       icons: [],
       button_style: '',
+			orientation:'vertical',
     };
   }
 }
@@ -305,17 +306,24 @@ export class RadioButtonsView extends DescriptionView {
     this.el.appendChild(this.container);
     this.container.classList.add('widget-radio-box');
 
-    this.update();
+		this.update();
   }
 
   /**
    * Update the contents of this view
    *
-   * Called when the model is changed.  The model may have been
-   * changed by another view or by a state update from the back-end.
+	 * Called when the model is changed.  The model may have been
+	 * changed by another view or by a state update from the back-end.
    */
-  update(options?: any): void {
-    const items: string[] = this.model.get('_options_labels');
+	update(options?: any): void {
+		if (this.model.get('orientation') === 'vertical') {
+			this.container.classList.remove('widget-radio-box-horizontal');
+			this.container.classList.add('widget-radio-box-vertical');
+		} else {
+			this.container.classList.remove('widget-radio-box-vertical');
+			this.container.classList.add('widget-radio-box-horizontal');
+		}
+		const items: string[] = this.model.get('_options_labels');
     const radios = Array.from(
       this.container.querySelectorAll<HTMLInputElement>('input[type="radio"]')
     ).map((x) => x.value);
diff --git a/python/ipywidgets/ipywidgets/widgets/widget_selection.py b/python/ipywidgets/ipywidgets/widgets/widget_selection.py
index d81a779b96..ef19f66979 100644
--- a/python/ipywidgets/ipywidgets/widgets/widget_selection.py
+++ b/python/ipywidgets/ipywidgets/widgets/widget_selection.py
@@ -478,6 +478,10 @@ class RadioButtons(_Selection):
     _view_name = Unicode('RadioButtonsView').tag(sync=True)
     _model_name = Unicode('RadioButtonsModel').tag(sync=True)
 
+    orientation = CaselessStrEnum(
+        values=['horizontal', 'vertical'], default_value='vertical',
+        help="Vertical or horizontal.").tag(sync=True)
+
 
 @register
 @doc_subst(_doc_snippets)