.. jetstream documentation master file, created by

.. program:: jetstream server

Requirements
============

.. _requirements:

Minimum Requirements
--------------------------------------

* **CPU:** 2.0 GHz Dual-Core x86-64 with support for AES-NI (CUMUL) instructions, and SSSE3 extension (*Most* Intel Westmere and AMD Jaguar/Bulldozer, and newer.)
* **Memory:** 4 GB (6 GB when using :doc:`/sandboxing/types/s3`)
* **Storage:** SSD or network storage with sufficient I/O capability for desired use. JetStream performance will be directly affected by I/O performance.
* **Network:** Server with static IP, and appropriate TCP/UDP ports open. Operation behind NAT or a proxy is supported.

Recommended Hardware
--------------------

The following hardware is recommended for speeds between 500Mb/s - 1Gb/s

* **CPU:** 3.0 GHz 6-Core
* **Memory:** 16 GB
* **Storage:** SSD or network storage with I/O capability exceeding 500Mb/s.
* **Network:** 500Mb/s - 1Gb/s for both Upload and Download.

The following hardware is recommended for speeds exceeding 1Gb/s

* **CPU:** 3.5 GHz 12-Core
* **Memory:** 32 GB
* **Storage:** SSD or network storage with I/O capability exceeding 1Gb/s.
* **Network:** Greater than 1Gb/s for both Upload and Download.


Operating Systems
-----------------

JetStream Server versions 2.9.1 or greater have been developed and tested under the following operating systems:

Linux (64-bit)
--------------
  - Ubuntu 22.04 (64-bit)
  - Rocky 9.2 (64-bit) or higher

macOS (64-bit)
--------------
  - macOS 15 (Sequoia)
  - macOS 14 (Sonoma)
  - macOS 13 (Ventura)
  - macOS 12 (Monterey)
  - macOS 11 (Big Sur)
  - macOS 10.15 (Catalina)

Encryption
----------

To use encryption, JetStream requires the processor support at least SSE2 instructions. Ideally, the processor supports AES-NI, SSSE3, and, PCLMULQDQ instructions.

.. _network_firewall:

Network/Firewall
----------------

The server should use a single static IP address.

.. note:: The server should only have a single external IP address. If the server machine has multiple NICs that can access the internet, configure the system to use only a single interface.

The following ports need to be forwarded to the JetStream server to allow incoming connections from an external network:

+------+----------------+
| Port | Protocol       |
+======+================+
| 8886 | TCP (Required) |
+------+----------------+
| 8886 | UDP (Required) |
+------+----------------+
| 8887 | UDP (Optional) |
+------+----------------+
| 8888 | UDP (Optional) |
+------+----------------+
| 8889 | UDP (Optional) |
+------+----------------+

.. note::
   Additional UDP ports can be opened to allow multiple concurrent incoming connections from various external networks.
   
   For optimal performance, the number of ports should correspond to the number of write threads.

   For more details, see :ref:`configuration#editing_configuration`, :option:`--recv-port`, :option:`--max-file-write-threads`.


The JetStream server will attempt to make the following outgoing connection for licensing:

+--------------------------+------------------+----------+
| Destination Address      | Destination Port | Protocol |
+==========================+==================+==========+
| licensing.gojetstream.io | 8885             | TCP      |
+--------------------------+------------------+----------+

.. note::
   More information regarding Network/Firewall settings can be found at :doc:`Firewalls </setup/firewalls>`.

User Management
---------------

JetStream integrates with your system's built-in authentication. This allows any users with login permissions on the host computer to send and receive files from the JetStream server.

.. note:: Users require a password to authenticate with the JetStream server. If a user account exists without a password, that user cannot authenticate with JetStream.

.. note:: System administrators are also JetStream administrators by default.


Required Dependencies
---------------------

JetStream server does not have any external software dependencies.


Optional Dependencies
---------------------

.. _requirements#optional-dependencies:

An optional Python module is bundled with the server to allow for scripting and automation. See :doc:`JetStream API <jetstream-api:index>`.

