About 4GL Apps

Delivery, Enablement, & Support

⚠️ Stop me if I go too fast! ⚠️


Company Overview

  • UK Ltd, 9 years
  • SAS UK Subcontractor
  • 7 developers - 5 JavaScript, 2 SAS

Focus: SAS Solutions



  • Data Controller for SAS® - for regulated industries
  • Sasensei - quiz game with 5000 SAS geeks
  • SASjs - DevOps Framework


  • Bootstrap complex SAS projects with our GIT centric approach
  • Modernise AF/SCL or SAS/IntrNet Apps
  • Migrate SAS 9 Web Apps to Viya

Challenges with Traditional SAS Project

  • Scattered Artefacts > Hard to navigate - changes are lost
  • Shared Environment > Edits affect everyone
  • Single Server > Migration Management

🤬🤬🤬 The absence of a standardised framework makes for inconsistent project delivery and on-boarding struggles for new developers


SASjs Workflow



SASjs Projects

  • Push to Any or Many > Server Agnostic
  • Centralised Artefacts > Source Controlled
  • Isolated Developer Environments > Move Fast and Break Things

✅ Highly suitable where SAS Programming is involved
❌ Needs additional work for graphical artefacts (VA, Flows etc)


Why Do SAS Developers ❤️ It?

  • Use preferred IDE > VS Code / Sublime / Vim
  • Access to the terminal > Shell scripts, Python
  • Access to local applications > GIT GUI / Doxygen

Why Do SAS Admins ❤️ It?

  • Nothing to install or provision on the SAS server
  • No SSH nor special permissions needed anywhere
  • Nothing to configure, except:
    • Optional: Access to the target folder
    • Optional: Client / Secret (Viya)
    • Optional: SAS 9 setting for encoded passwords

Why Do Project Leads ❤️ It?

  • Faster to on-board new developers
  • Ability to work on multiple features in parallel
  • Complete visibility of what is being developed

Actual Deployments

  • Department of Work & Pensions (with SAS UK)
  • Lloyds List Intelligence (with SAS Belgium)
  • SKR Association (with SAS Sweden)

What is SASjs?

  1. An Opinionated Approach - which led to the development of:
  2. A Collection of Tools

Pre Requisites

Required Recommended Recommended
vertical border-style:solid vertical vertical

To install the CLI: npm i -g @sasjs/cli


Core Features

  • sasjs compile > Create self-contained Jobs, Services & Tests
  • sasjs build > Prepare deployment pack (JSON / SAS Program)
  • sasjs deploy > Send to the target location

Running SAS

  • sasjs run > Execute arbitrary SAS code
  • sasjs job execute > Run a Job
  • sasjs flow execute > Run a collection of Jobs

Being a Responsible Developer

  • sasjs test > Trigger one or more Tests
  • sasjs lint > Check Code Quality / Best Practices
  • sasjs doc > Doxygen Documentation (+ Lineage)

More commands at


Compilation - Scaffolding Consistency



Compilation Components

Targets are compiled by reference to the dependencies listed in the Doxygen header.

  • Artefacts: Jobs, Services, Tests
  • Dependencies: Macros, Includes, Binary Files
  • Optional Frontend - convert a web project into a streaming app.

SASjs Config File

Every SASjs Project has a sasjs/sasjsconfig.json file, for configuration of:

  • Location of Artefacts (+ Dependencies & Init/Term programs)
  • Macro Variables
  • Target attributes / connection settings

🎯 SASjs Target 🎯

A location on a SAS server. Can be specific to individual developers, or shared location such as a release environment.

Core attributes:

  • name > Alias for SASjs commands, eg: sasjs deploy -t dev3
  • serverUrl > Protocol + Host + Port
  • serverType > either SASVIYA, SAS9 or SASJS
  • appLoc > Root deployment folder in SAS Drive or Metadata

Plus any target specific overrides - ie macro variables, artefact / dependency locations etc.



sasjs create mydemo --template jobs
sasjs lint
sasjs doc
sasjs auth
sasjs cbd
sasjs test




both web and api based interfaces. contrasts with other partners focused on ETL or migration work.

For SAS 9 each dev could have a dedicated RACE image, harder with Viya though Macros on filesystem, Code split between Jobs and Studio programs,

Plus Data Controller for SAS

optionated - working locally, git centric, server agnostic