diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cb436ea
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+# WebStorm non-sharable files
+.idea/workspace.xml
+
+# Log files
+*.log
+
+# NPM modules
+node_modules
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..936869e
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+react-cookie
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..d821048
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..8662aa9
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..efbb6ea
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/react-cookie.iml b/.idea/react-cookie.iml
new file mode 100644
index 0000000..c956989
--- /dev/null
+++ b/.idea/react-cookie.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml
new file mode 100644
index 0000000..922003b
--- /dev/null
+++ b/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..6564d52
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2bf24b9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ebe570a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,90 @@
+# react-cookie
+Load and save cookies within your React application
+
+## Download
+NPM: `npm install react-cookie`
+Bower: `bower install react-cookie`
+
+# Examples
+
+## ES6
+```js
+import React from 'react';
+import cookie from 'react-cookie';
+
+export default class MyApp extends React.component {
+
+ constructor(props) {
+ super(props);
+ this.state = { userId: cookie.load('userId') };
+ }
+
+ onLogin(userId) {
+ this.state.userId = userId;
+ cookie.save('userId', nextState.userId);
+ }
+
+ render() {
+ return (
+
+ );
+ }
+
+}
+```
+
+## ES5
+```js
+var React = require('react');
+var cookie = require('react-cookie');
+
+var MyApp = React.createClass({
+
+ getInitialState: function() {
+ return { userId: cookie.load('userId') };
+ },
+
+ onLogin: function(userId) {
+ this.state.userId = userId;
+ cookie.save('userId', nextState.userId);
+ },
+
+ render: function() {
+ return (
+
+ );
+ }
+
+});
+
+module.exports = MyApp;
+```
+
+## Usage
+
+### `reactCookie.get(name: string)`
+### `reactCookie.save(name: string, val, [opt])`
+
+## opt
+Support all the cookie options from the RFC.
+
+### path
+> cookie path
+
+### expires
+> absolute expiration date for the cookie (Date object)
+
+### maxAge
+> relative max age of the cookie from when the client receives it (seconds)
+
+### domain
+> domain for the cookie
+
+### secure
+> true or false
+
+### httpOnly
+> true or false
+
+## License
+This project is under the MIT license. You are free to do whatever you want with it.
\ No newline at end of file
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..d1f8913
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,22 @@
+{
+ "name": "react-cookie",
+ "main": "dist/react-cookie.js",
+ "version": "0.1.0",
+ "homepage": "https://github.com/eXon/react-cookie",
+ "authors": [
+ "Benoit Tremblay "
+ ],
+ "description": "Load and save cookies within your React application",
+ "keywords": [
+ "cookie",
+ "cookies",
+ "react",
+ "reactjs",
+ "jsx"
+ ],
+ "ignore": [
+ "**/.*",
+ "node_modules"
+ ],
+ "license": "MIT"
+}
diff --git a/dist/react-cookie.js b/dist/react-cookie.js
new file mode 100644
index 0000000..b37e2ad
--- /dev/null
+++ b/dist/react-cookie.js
@@ -0,0 +1,115 @@
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o "foo=bar; httpOnly"
+///
+/// @param {String} name
+/// @param {String} val
+/// @param {Object} options
+/// @return {String}
+var serialize = function(name, val, opt){
+ opt = opt || {};
+ var enc = opt.encode || encode;
+ var pairs = [name + '=' + enc(val)];
+
+ if (null != opt.maxAge) {
+ var maxAge = opt.maxAge - 0;
+ if (isNaN(maxAge)) throw new Error('maxAge should be a Number');
+ pairs.push('Max-Age=' + maxAge);
+ }
+
+ if (opt.domain) pairs.push('Domain=' + opt.domain);
+ if (opt.path) pairs.push('Path=' + opt.path);
+ if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString());
+ if (opt.httpOnly) pairs.push('HttpOnly');
+ if (opt.secure) pairs.push('Secure');
+
+ return pairs.join('; ');
+};
+
+/// Parse the given cookie header string into an object
+/// The object has the various cookies as keys(names) => values
+/// @param {String} str
+/// @return {Object}
+var parse = function(str, opt) {
+ opt = opt || {};
+ var obj = {}
+ var pairs = str.split(/; */);
+ var dec = opt.decode || decode;
+
+ pairs.forEach(function(pair) {
+ var eq_idx = pair.indexOf('=')
+
+ // skip things that don't look like key=value
+ if (eq_idx < 0) {
+ return;
+ }
+
+ var key = pair.substr(0, eq_idx).trim()
+ var val = pair.substr(++eq_idx, pair.length).trim();
+
+ // quoted values
+ if ('"' == val[0]) {
+ val = val.slice(1, -1);
+ }
+
+ // only assign once
+ if (undefined == obj[key]) {
+ try {
+ obj[key] = dec(val);
+ } catch (e) {
+ obj[key] = val;
+ }
+ }
+ });
+
+ return obj;
+};
+
+var encode = encodeURIComponent;
+var decode = decodeURIComponent;
+
+module.exports.serialize = serialize;
+module.exports.parse = parse;
+
+},{}]},{},[1]);
diff --git a/dist/react-cookie.min.js b/dist/react-cookie.min.js
new file mode 100644
index 0000000..bf3f972
--- /dev/null
+++ b/dist/react-cookie.min.js
@@ -0,0 +1 @@
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o",
+ "license": "MIT",
+ "scripts": {
+ "build": "browserify index.js > dist/react-cookie.js & uglifyjs dist/react-cookie.js -o dist/react-cookie.min.js"
+ },
+ "dependencies": {
+ "cookie": "^0.1.2"
+ },
+ "devDependencies": {
+ "browserify": "^9.0.3",
+ "uglify-js": "^2.4.17"
+ }
+}