Skip to content

Installation and Requirements

s9terpsync-release-bot edited this page Aug 5, 2026 · 1 revision

Installation & Requirements

This page covers what S9TerpSync needs to run, the two ways to install it, and what actually lands on disk once you do. It doesn't cover Ethos/Banner setup or writing s9terpsync.yaml — those are separate pages, linked at the bottom.

Requirements

  • Node.js >=24 <25 — this is the exact range from package.json's engines.node field. Node 24.x is required; earlier majors (including 22 LTS) and Node 25 are both outside the supported range.
  • RHEL 8/9-friendly systemd Linux. The service is designed to be installed and supervised as a systemd unit on a standard RHEL-family box. Other systemd Linux distributions should work the same way, but RHEL 8/9 is the primary target.
  • No Docker, no database. S9TerpSync is a single Node.js process with file-based state (locks, run manifests, audit records) on local disk. There's no container runtime to provision and no database server to stand up or back up separately.

Everything else — outbound network access to your Slate SFTP/API endpoint and to your institution's Ethos APIs, plus the Banner-side integration user and Ethos application/proxy — is covered on the next page, Ethos & Banner Prerequisites.

Install via npm

The published package is @soft9tech/s9terpsync. Install it globally so the CLI is on your PATH:

npm install -g @soft9tech/s9terpsync

This is the recommended path for most operators — it pulls a released, versioned build and does not require a local clone or a build step.

Install from source

If you need to build from source (for example, to run a pre-release commit, or to build on a machine without npm registry access), clone the repository and build it:

git clone https://github.com/soft9tech/s9terpsync.git
cd s9terpsync
npm ci
npm run build

npm run build compiles TypeScript into dist/. When installed from source, there's no global s9terpsync command on PATH — invoke the built CLI entry point directly with Node instead:

node dist/cli.js config init --source both --institution-id <school-id> --environment production --out /etc/s9terpsync/s9terpsync.yaml

Substitute node dist/cli.js for s9terpsync in every command shown elsewhere in this wiki when you've installed from source.

What gets installed

package.json defines two binaries under its "bin" field:

Binary Entry point Purpose
s9terpsync dist/cli.js The CLI — configuration, manual runs, diagnostics, retention, and replay/recovery commands. This is what an operator runs directly from a terminal.
s9terpsync-service dist/service-bin.js The long-running daemon. It is started and supervised by systemd (see Service & Systemd Operation) and is not something you invoke by hand at a shell prompt.

Installing via npm (global install) puts both of these on PATH as s9terpsync and s9terpsync-service. Installing from source gives you the same two entry points at dist/cli.js and dist/service-bin.js, run via node.

The npm package also ships a few supporting files alongside the compiled code: an example configuration at config/s9terpsync.example.yaml (walked field-by-field on the Configuration Reference page) and a systemd unit template under assets/systemd/ (covered on the Service & Systemd Operation page). Neither requires any action at install time — they're templates you copy and edit later.

What comes next

Installing the software doesn't get you a running sync — two things still need to happen first:

  1. Ethos & Banner Prerequisites — the Banner-side integration user and the Ethos application/proxy need to exist, with the right resources granted, before S9TerpSync can talk to your ERP at all.
  2. Configuration References9terpsync.yaml needs to describe your institution, your Slate source, and your Ethos connection before you can run anything beyond config init.

Clone this wiki locally