Newer
Older
##################
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>`_.
* the `Python <https://www.python.org>`_ language
* with `Git <https://git-scm.com/>`_ version tracking
* and `Django <https://djangoproject.com>`_ as the core framework.
* Our APIs leverage the `Django Rest Framework <https://www.django-rest-framework.org>`_.
* Our databases are `PostgreSQL <https://www.postgresql.org>`_ instances.
* Styling makes use of `Bootstrap <https://getbootstrap.com>`_ with lots of
custom tweaks and additions.
* Our original frontend makes use of custom
`JavaScript <https://developer.mozilla.org/en-US/docs/Web/JavaScript>`_
peppered with `jQuery <https://jquery.com>`_.
* 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.
* 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.
While we of course make use of many other pieces of software (check the
`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.