diff --git a/ui/src/components/radio/index.js b/ui/src/components/radio/index.js
new file mode 100644
index 00000000..e032ea37
--- /dev/null
+++ b/ui/src/components/radio/index.js
@@ -0,0 +1,46 @@
+const classNames = require('classnames');
+const React = require('react');
+const styles = require('./style.css');
+
+const Radio = ({
+ name,
+ value,
+ label,
+ checked,
+ disabled = false,
+ className,
+ id,
+ onChange,
+ style
+}) => {
+
+ const cn = classNames(
+ className,
+ styles.radio
+ );
+
+ return (
+
+ );
+};
+
+Radio.propTypes = {
+ className: React.PropTypes.string,
+ name: React.PropTypes.string,
+ value: React.PropTypes.string,
+ label: React.PropTypes.string,
+ checked: React.PropTypes.bool,
+ onChange: React.PropTypes.func
+};
+
+module.exports = Radio;
diff --git a/ui/src/components/radio/readme.md b/ui/src/components/radio/readme.md
new file mode 100644
index 00000000..95618e63
--- /dev/null
+++ b/ui/src/components/radio/readme.md
@@ -0,0 +1,42 @@
+# ``
+
+## demo
+
+```embed
+const React = require('react');
+const ReactDOM = require('react-dom/server');
+const Base = require('../base');
+const Container = require('../container');
+const Row = require('../row');
+const Column = require('../column');
+const Radio = require('./index.js');
+const styles = require('./style.css');
+
+nmodule.exports = ReactDOM.renderToString(
+
+
+
+
+
+
+
+
+
+
+);
+```
+
+
+## usage
+
+```js
+const React = require('react');
+const Radio = require('ui/radio');
+
+module.exports = () => {
+ return (
+
+
+ );
+}
+```
diff --git a/ui/src/components/radio/style.css b/ui/src/components/radio/style.css
new file mode 100644
index 00000000..c6fce9df
--- /dev/null
+++ b/ui/src/components/radio/style.css
@@ -0,0 +1,48 @@
+:root {
+ --radio-radius: 20px;
+}
+
+.radio {
+ cursor: pointer;
+
+ label {
+ display: block;
+ }
+
+ & span {
+ margin-left: 30px;
+ margin-right: 20px;
+ position: relative;
+
+ &:before {
+ content: '';
+ border : calc( var(--radio-radius) / 4 ) solid white;
+ border-radius: 50%;
+ box-shadow: 0 0 0 1px #cfd1d1;
+ display: inline-block;
+ height: var(--radio-radius);
+ left: -30px;
+ position: absolute;
+ top: -1px;
+ width: var(--radio-radius);
+ }
+ }
+
+ & input[type="radio"] {
+ display: none;
+ visibility: hidden;
+
+
+ &:checked {
+ & ~ span:before {
+ background: #D8D8D8;
+ border : calc( var(--radio-radius) / 4 ) solid white;
+ border-radius: 50%;
+ box-shadow: 0 0 0 1px #cfd1d1;
+ height: var(--radio-radius);
+ position: absolute;
+ width: var(--radio-radius);
+ }
+ }
+ }
+}
diff --git a/ui/src/docs.js b/ui/src/docs.js
index fcea1f02..d32f966b 100644
--- a/ui/src/docs.js
+++ b/ui/src/docs.js
@@ -8,6 +8,7 @@ module.exports = {
Base: require('./components/base/readme.md'),
Container: require('./components/container/readme.md'),
Row: require('./components/row/readme.md'),
+ Radio: require('./components/radio/readme.md'),
Column: require('./components/column/readme.md'),
Button: require('./components/button/readme.md'),
Toggle: require('./components/toggle/readme.md'),
diff --git a/ui/src/index.js b/ui/src/index.js
index c41bc86c..f900d8aa 100644
--- a/ui/src/index.js
+++ b/ui/src/index.js
@@ -8,4 +8,6 @@ module.exports = {
Toggle: require('./components/toggle'),
Tab: require('./components/tab'),
Tabs: require('./components/tabs')
+ Toggle: require('./components/toggle')
+ Radio: require('./components/radio'),
};