diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_TUFOSUZFU1QuaW4=
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,10 @@
+include *.py
+include */*.py
+recursive-include cubicweb_s3storage *.py
+recursive-include cubicweb_s3storage/data *.gif *.png *.ico *.css *.js
+recursive-include cubicweb_s3storage/i18n *.po
+recursive-include cubicweb_s3storage/wdoc *
+recursive-include test/data bootstrap_cubes *.py
+include tox.ini
+recursive-include debian changelog compat control copyright rules
+include cubicweb-s3storage.spec
diff --git a/README b/README
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_UkVBRE1F
--- /dev/null
+++ b/README
@@ -0,0 +1,3 @@
+Summary
+-------
+A Cubicweb Storage that stores the data on S3
diff --git a/cubicweb-s3storage.spec b/cubicweb-s3storage.spec
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWItczNzdG9yYWdlLnNwZWM=
--- /dev/null
+++ b/cubicweb-s3storage.spec
@@ -0,0 +1,47 @@
+# for el5, force use of python2.6
+%if 0%{?el5}
+%define python python26
+%define __python /usr/bin/python2.6
+%else
+%define python python
+%define __python /usr/bin/python
+%endif
+%{!?_python_sitelib: %define _python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+
+Name:           cubicweb-s3storage
+Version:        0.1.0
+Release:        logilab.1%{?dist}
+Summary:        A Cubicweb Storage that stores the data on S3
+Group:          Applications/Internet
+License:        LGPL
+Source0:        cubicweb-s3storage-%{version}.tar.gz
+
+BuildArch:      noarch
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-buildroot
+
+BuildRequires:  %{python} %{python}-setuptools
+Requires:       cubicweb >= 3.24.9
+Requires:       %{python}-six >= 1.4.0
+
+%description
+A Cubicweb Storage that stores the data on S3
+
+%prep
+%setup -q -n cubicweb-s3storage-%{version}
+%if 0%{?el5}
+# change the python version in shebangs
+find . -name '*.py' -type f -print0 |  xargs -0 sed -i '1,3s;^#!.*python.*$;#! /usr/bin/python2.6;'
+%endif
+
+%install
+%{__python} setup.py --quiet install --no-compile --prefix=%{_prefix} --root="$RPM_BUILD_ROOT"
+# remove generated .egg-info file
+rm -rf $RPM_BUILD_ROOT/usr/lib/python*
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-, root, root)
+%{_prefix}/share/cubicweb/cubes/*
diff --git a/cubicweb_s3storage/__init__.py b/cubicweb_s3storage/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL19faW5pdF9fLnB5
--- /dev/null
+++ b/cubicweb_s3storage/__init__.py
@@ -0,0 +1,4 @@
+"""cubicweb-s3storage application package
+
+A Cubicweb Storage that stores the data on S3
+"""
diff --git a/cubicweb_s3storage/__pkginfo__.py b/cubicweb_s3storage/__pkginfo__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL19fcGtnaW5mb19fLnB5
--- /dev/null
+++ b/cubicweb_s3storage/__pkginfo__.py
@@ -0,0 +1,25 @@
+# pylint: disable=W0622
+"""cubicweb-s3storage application packaging information"""
+
+
+modname = 'cubicweb_s3storage'
+distname = 'cubicweb-s3storage'
+
+numversion = (0, 1, 0)
+version = '.'.join(str(num) for num in numversion)
+
+license = 'LGPL'
+author = 'LOGILAB S.A. (Paris, FRANCE)'
+author_email = 'contact@logilab.fr'
+description = 'A Cubicweb Storage that stores the data on S3'
+web = 'http://www.cubicweb.org/project/%s' % distname
+
+__depends__ = {'cubicweb': '>= 3.24.9', 'six': '>= 1.4.0'}
+__recommends__ = {}
+
+classifiers = [
+    'Environment :: Web Environment',
+    'Framework :: CubicWeb',
+    'Programming Language :: Python',
+    'Programming Language :: JavaScript',
+]
diff --git a/cubicweb_s3storage/entities.py b/cubicweb_s3storage/entities.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL2VudGl0aWVzLnB5
--- /dev/null
+++ b/cubicweb_s3storage/entities.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# copyright 2018 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr -- mailto:contact@logilab.fr
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""cubicweb-s3storage entity's classes"""
diff --git a/cubicweb_s3storage/hooks.py b/cubicweb_s3storage/hooks.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL2hvb2tzLnB5
--- /dev/null
+++ b/cubicweb_s3storage/hooks.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# copyright 2018 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr -- mailto:contact@logilab.fr
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""cubicweb-s3storage specific hooks and operations"""
diff --git a/cubicweb_s3storage/i18n/en.po b/cubicweb_s3storage/i18n/en.po
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL2kxOG4vZW4ucG8=
--- /dev/null
+++ b/cubicweb_s3storage/i18n/en.po
@@ -0,0 +1,9 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
+
diff --git a/cubicweb_s3storage/i18n/es.po b/cubicweb_s3storage/i18n/es.po
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL2kxOG4vZXMucG8=
--- /dev/null
+++ b/cubicweb_s3storage/i18n/es.po
@@ -0,0 +1,9 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
+
diff --git a/cubicweb_s3storage/i18n/fr.po b/cubicweb_s3storage/i18n/fr.po
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL2kxOG4vZnIucG8=
--- /dev/null
+++ b/cubicweb_s3storage/i18n/fr.po
@@ -0,0 +1,9 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
+
diff --git a/cubicweb_s3storage/migration/postcreate.py b/cubicweb_s3storage/migration/postcreate.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL21pZ3JhdGlvbi9wb3N0Y3JlYXRlLnB5
--- /dev/null
+++ b/cubicweb_s3storage/migration/postcreate.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# copyright 2018 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr -- mailto:contact@logilab.fr
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""cubicweb-s3storage postcreate script, executed at instance creation time or when
+the cube is added to an existing instance.
+
+You could setup site properties or a workflow here for example.
+"""
+
+# Example of site property change
+#set_property('ui.site-title', "<sitename>")
diff --git a/cubicweb_s3storage/schema.py b/cubicweb_s3storage/schema.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL3NjaGVtYS5weQ==
--- /dev/null
+++ b/cubicweb_s3storage/schema.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# copyright 2018 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr -- mailto:contact@logilab.fr
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""cubicweb-s3storage schema"""
diff --git a/cubicweb_s3storage/views.py b/cubicweb_s3storage/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_Y3ViaWN3ZWJfczNzdG9yYWdlL3ZpZXdzLnB5
--- /dev/null
+++ b/cubicweb_s3storage/views.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# copyright 2018 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr -- mailto:contact@logilab.fr
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""cubicweb-s3storage views/forms/actions/components for web ui"""
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_ZGViaWFuL2NoYW5nZWxvZw==
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,6 @@
+cubicweb-s3storage (0.1.0-1) UNRELEASED; urgency=low
+
+  * initial release
+
+ -- LOGILAB S.A. (Paris, FRANCE) <contact@logilab.fr>  Tue, 12 Jun 2018 13:58:07 +0000
+
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_ZGViaWFuL2NvbXBhdA==
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1,1 @@
+7
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_ZGViaWFuL2NvbnRyb2w=
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,26 @@
+Source: cubicweb-s3storage
+Section: web
+Priority: optional
+Maintainer: LOGILAB S.A. (Paris, FRANCE) <contact@logilab.fr>
+Build-Depends:
+ debhelper (>= 7),
+ dh-python,
+ python (>= 2.6.5),
+ python-setuptools,
+Standards-Version: 3.9.3
+X-Python-Version: >= 2.6
+
+Package: cubicweb-s3storage
+Architecture: all
+Depends:
+ python-cubicweb (>= 3.24.9),
+ python-six (>= 1.4.0),
+ ${python:Depends},
+ ${misc:Depends},
+Description: A Cubicweb Storage that stores the data on S3
+ CubicWeb is a semantic web application framework.
+ .
+ A Cubicweb Storage that stores the data on S3
+ .
+ This package will install all the components you need to run an application
+ using the cubicweb-s3storage cube.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_ZGViaWFuL2NvcHlyaWdodA==
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,8 @@
+Upstream Author:
+
+  LOGILAB S.A. (Paris, FRANCE) <contact@logilab.fr>
+
+Copyright:
+
+Copyright (c) 2018 LOGILAB S.A. (Paris, FRANCE).
+http://www.logilab.fr -- mailto:contact@logilab.fr
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_ZGViaWFuL3J1bGVz
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,4 @@
+#!/usr/bin/make -f
+
+%:
+	dh $@ --with python2
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_c2V0dXAucHk=
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# pylint: disable=W0142,W0403,W0404,W0613,W0622,W0622,W0704,R0904,C0103,E0611
+#
+# copyright 2003-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This file is part of a cubicweb-s3storage.
+#
+# CubicWeb is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
+"""cubicweb_s3storage setup module using data from
+cubicweb_s3storage/__pkginfo__.py file
+"""
+
+from os.path import join, dirname
+
+from setuptools import find_packages, setup
+
+
+here = dirname(__file__)
+
+# load metadata from the __pkginfo__.py file so there is no risk of conflict
+# see https://packaging.python.org/en/latest/single_source_version.html
+pkginfo = join(here, 'cubicweb_s3storage', '__pkginfo__.py')
+__pkginfo__ = {}
+with open(pkginfo) as f:
+    exec(f.read(), __pkginfo__)
+
+# get required metadatas
+distname = __pkginfo__['distname']
+version = __pkginfo__['version']
+license = __pkginfo__['license']
+description = __pkginfo__['description']
+web = __pkginfo__['web']
+author = __pkginfo__['author']
+author_email = __pkginfo__['author_email']
+classifiers = __pkginfo__['classifiers']
+
+with open(join(here, 'README')) as f:
+    long_description = f.read()
+
+# get optional metadatas
+data_files = __pkginfo__.get('data_files', None)
+dependency_links = __pkginfo__.get('dependency_links', ())
+
+requires = {}
+for entry in ("__depends__",):  # "__recommends__"):
+    requires.update(__pkginfo__.get(entry, {}))
+install_requires = ["{0} {1}".format(d, v and v or "").strip()
+                    for d, v in requires.items()]
+
+
+setup(
+    name=distname,
+    version=version,
+    license=license,
+    description=description,
+    long_description=long_description,
+    author=author,
+    author_email=author_email,
+    url=web,
+    classifiers=classifiers,
+    packages=find_packages(exclude=['test']),
+    install_requires=install_requires,
+    include_package_data=True,
+    entry_points={
+        'cubicweb.cubes': [
+            's3storage=cubicweb_s3storage',
+        ],
+    },
+    zip_safe=False,
+)
diff --git a/test/data/bootstrap_cubes b/test/data/bootstrap_cubes
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_dGVzdC9kYXRhL2Jvb3RzdHJhcF9jdWJlcw==
--- /dev/null
+++ b/test/data/bootstrap_cubes
@@ -0,0 +1,1 @@
+s3storage
diff --git a/test/test_s3storage.py b/test/test_s3storage.py
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_dGVzdC90ZXN0X3Mzc3RvcmFnZS5weQ==
--- /dev/null
+++ b/test/test_s3storage.py
@@ -0,0 +1,50 @@
+# copyright 2018 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr -- mailto:contact@logilab.fr
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""cubicweb-s3storage automatic tests
+
+
+uncomment code below if you want to activate automatic test for your cube:
+
+.. sourcecode:: python
+
+    from cubicweb.devtools.testlib import AutomaticWebTest
+
+    class AutomaticWebTest(AutomaticWebTest):
+        '''provides `to_test_etypes` and/or `list_startup_views` implementation
+        to limit test scope
+        '''
+
+        def to_test_etypes(self):
+            '''only test views for entities of the returned types'''
+            return set(('My', 'Cube', 'Entity', 'Types'))
+
+        def list_startup_views(self):
+            '''only test startup views of the returned identifiers'''
+            return ('some', 'startup', 'views')
+"""
+
+from cubicweb.devtools import testlib
+
+
+class DefaultTC(testlib.CubicWebTC):
+    def test_something(self):
+        self.skipTest('this cube has no test')
+
+
+if __name__ == '__main__':
+    from unittest import main
+    main()
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000000000000000000000000000000000000..d95c2d4f16d457d744494a6b9ddf540b1908f18d_dG94LmluaQ==
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,20 @@
+[tox]
+envlist = py27,py34,flake8
+
+[testenv]
+sitepackages = true
+deps =
+  pytest
+commands =
+  {envpython} -m pytest {posargs:test}
+
+[testenv:flake8]
+skip_install = true
+whitelist_externals =
+  flake8
+deps =
+  flake8
+commands = flake8
+
+[flake8]
+exclude = cubicweb_s3storage/migration/*,test/data/*,.tox/*