SciPost Code Repository

Skip to content
Snippets Groups Projects
stack.rst 2.9 KiB
Newer Older
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
##################
The tech stack
##################

Which technologies is SciPost built on?

We are strong advocates for `Free Software <https://www.gnu.org/philosophy/free-sw.html>`_
and strictly limit our tech stack choices to applications listed in the
`Free Software Directory <https://directory.fsf.org/wiki/Main_Page>`_.

SciPost rests on
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* the `Python <https://www.python.org>`_ language
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* with `Git <https://git-scm.com/>`_ version tracking
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* and `Django <https://djangoproject.com>`_ as the core framework.
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* Our APIs leverage the `Django Rest Framework <https://www.django-rest-framework.org>`_.
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* Our databases are `PostgreSQL <https://www.postgresql.org>`_ instances.
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* Styling makes use of `Bootstrap <https://getbootstrap.com>`_ with lots of
  custom tweaks and additions.
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* Our original frontend makes use of custom
  `JavaScript <https://developer.mozilla.org/en-US/docs/Web/JavaScript>`_
  peppered with `jQuery <https://jquery.com>`_.
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* For our newer frontend we are having fun using `Vue.js <https://vuejs.org>`_
  `single-file components <https://vuejs.org/v2/guide/single-file-components.html>`_
  (with `bootstrap-vue <https://bootstrap-vue.js.org>`_ for the looks),
  plugging these to our backend APIs using
  the `Requests <https://2.python-requests.org>`_ library.
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed

* Static assets are bundled and optimized using `Webpack <https://webpack.js.org>`_.

* Mathematics is displayed using `MathJax <https://www.mathjax.org>`_.

* Scheduled tasks rely on `Celery <https://docs.celeryproject.org>`_
  with a `RabbitMQ <https://www.rabbitmq.com/>`_ broker, all monitored by a
  `Flower <https://github.com/mher/flower>`_ instance.

* Our site's
  `Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP>`_
  is implemented using
  `Mozilla's <https://github.com/mozilla>`_
  `django-csp <https://github.com/mozilla/django-csp>`_
  (check our `current report <https://securityheaders.com/?q=scipost.org&followRedirects=on>`_).

* Documentation is written in `reStructuredText <https://docutils.sourceforge.io/rst.html>`_
  and built with `Sphinx <https://www.sphinx-doc.org>`_.


Besides this, we also use

* `Sentry <https://sentry.io/>`_ for live error monitoring on our servers.


We self-host our code repositories by running

* a `Gitea <https://gitea.io>`_ instance
  at `code.scipost.org <https://code.scipost.org>`_
  (based on `Go <https://golang.org/>`_ the language,
  not `Go the game <https://en.wikipedia.org/wiki/Go_(game)>`_).

See our :doc:`deployment documentation <../deployment/index>` for the complete details
of how our services are brought to life.
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed


While we of course make use of many other pieces of software (check the
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
`requirements.txt` and `package.json` files in the main repository),
we have a strong and seemingly insurmountable tendency to write our own
systems from scratch. See the extensive :doc:`list of apps <apps/index>`
we have developed over time in order to cover all our needs.