SlideRule Earth

Process ICESat2 datasets in the cloud through REST API calls to SlideRule web services.
https://github.com/slideruleearth/sliderule

Category: Sustainable Development
Sub Category: Environmental Satellites

Keywords from Contributors

elevation-data gedi icesat-2 glacier geospatial-analysis jupyterbook climate cloud-computing open-science pangeo

Last synced: about 20 hours ago
JSON representation

Repository metadata

Server and client framework for on-demand science data processing in the cloud

README.md

SlideRule

DOI
Test Report

A cloud-native framework for on-demand science data processing, hosted at slideruleearth.io.

This repository is for SlideRule developers and contains the source code for the SlideRule server, clients, and supporting services like the documentation website. If you are a science data user interested in using SlideRule, you can get started right away with our web client or check out our documentation where you will find installation instructions for our Python client.

Repository Layout

apps/node/          # C++ server (the main binary)
  packages/         # Core compile-time packages (core, arrow, aws, geo, h5coro, …)
  datasets/         # Mission-specific packages (icesat2, gedi, swot, …); cannot depend on other datasets
  scripts/          # Lua entry points: server.lua, test_runner.lua, job_runner.lua, openapi.lua
apps/ams/           # Asset Metadata Service (Python/Flask Lambda)
apps/provisioner/   # Cluster provisioner Lambda (Python)
apps/runner/        # Job runner Lambda (Python)
apps/authenticator/ # GitHub OAuth Lambda (Python)
clients/python/     # pip-installable Python client
clients/nodejs/     # npm package @sliderule/sliderule
clients/cli/        # pip-installable command line tools (sliderule-cluster|runner|provisioner|recorder)
targets/slideruleearth/  # THE primary Makefile — all developer commands live here
build/sliderule/    # CMake out-of-tree build output
stage/sliderule/    # CMake install destination (staged for Docker)
version.txt         # Single source of version truth (e.g. v5.4.4)

Cluster Node (apps/node)

This is the primary application that performs all of the on-demand science data processing. It runs in EC2 as a cluster of instances behind the Intelligent Load Balancer (apps/ilb).

C++ Build

All commands run from targets/slideruleearth/:

make config-debug    # configure with clang + ASan + clang-tidy + cppcheck
make config-release  # configure release build (no static analysis)
make                 # build + install (make -j8 && make install)
make build           # build inside Docker buildenv container

Critical quirks:

  • Debug builds require clang — ClangOverrides.txt overrides the compiler to clang/clang++.
  • clang-tidy runs with -warnings-as-errors=* — any clang-tidy warning breaks the build.
  • SKIP_STATIC_ANALYSIS=ON speeds up iteration but must be OFF before committing.
  • Inject custom CMake flags without editing the Makefile: make config-debug USERCFG="-DFOO=ON".
  • Install prefix is stage/sliderule/, not /usr/local.

Running the Node Locally

The cluster node requires the ilb and the ams to be running in the background.

docker compose up ilb ams -d

Execute the cluster node locally for testing

make run       # starts server.lua on port 9081 with env vars pre-set
make selftest  # runs test_runner.lua — the only truly offline C++ tests
make job       # runs job_runner.lua

The Makefile injects required env vars (LOG_FORMAT, IPV4, CLUSTER, DOMAIN, AMS, etc.) automatically. Pass RUNNER=valgrind to wrap the binary.

Lua Selftests (offline, local)

make selftest

test_runner.lua auto-discovers selftests/*.lua under all packages and datasets. Tag filter: pass the package name wrapped in __ (e.g., __core__).

Application Layout

Inside the apps/node application there are the following important subdirectories:

  • datasets: Contains packages specific to an earth science dataset or mission. Datasets are implemented exactly like packages (see packages), yet are separated out into their own parent directory for emphasis. By convention, they are allowed to depend on any package in the package directory, but cannot depend on any other dataset.
  • platforms: Contains the C++ modules that implement an operating system abstraction layer which enables the framework to run on various platforms.
  • packages: Contains the C++ modules that implement the primary functions provided by the framework. See package list for a list of available packages. The core package contains the fundamental framework classes and is not dependent on any other package. Other packages should only be dependent on the core package or provide conditional compilation blocks that allow the package to be compiled in the absence of any package outside the core package. By convention, each package contains two files that are named identical to the package directory name: {package}.cpp, {package}.h. The CMakeLists.txt provides the object modules and any package specific definitions needed to compile the package. It also defines the package's globally defined name used in conditional compilation blocks. The {package}.cpp file provides an initialization function named with the prototype void init{package}(void) that is used to initialize the package on startup. The {package}.h file exports the initialization function and anything else necessary to use the package. Any target that includes the package should only include the package's header file, and make a call to the package initialization function.

Architecture Notes

  • Lua is the scripting layer: The server binary accepts a Lua script at startup. All configuration, component instantiation, test orchestration, and OpenAPI generation are in Lua.
  • Package init pattern: Every C++ package exposes void init{package}(void) (e.g., initcore(), initgeo()). Each has a {package}.cpp and {package}.h.

Plugins

A plugin contains a project or mission specific extension to the SlideRule framework that is loaded at run-time.

In order to build a plugin for the SlideRule cluster, the plugin code must compile down to a shared object that exposes a single function defined as void init{plugin}(void) where {plugin} is the name of the plugin. Note that if developing the plugin in C++ the initialization function must be externed as C in order to prevent the mangling of the exported symbol.

Once the shared object is built, the build system must copy the shared object into the SlideRule plugin directory (specified by the CONFDIR option in the CMakeLists.txt file) with the name {plugin}.so. On startup, the sliderule application scans the configuration directory and loads all plugins present.

Python System Tests

For the cluster node tests, start the server locally via make run, then:

make python-test

For all the microservice tests, they are executed as standalone tests. From the same makefile in targets/slideruleearth/ that builds the cluster node, run:

make ams-test [ARGS="-k test_name"]
make authenticator-test [ARGS="-k test_name"]
make provisioner-test [ARGS="-k test_name"]
make runner-test

ARGS is passed directly to pytest. All run inside their respective conda environments.

Conda Environments

Each service has its own named conda env. Use conda run -n <env> or activate before running tests.

Service Conda env
Python client sliderule
AMS ams
Authenticator authenticator
Provisioner provisioner
Runner runner
Documentation myst

Install Python client into its env: make python (from targets/slideruleearth/).

OpenAPI

make openapi           # bundle + lint all service specs
make sliderule-openapi # just the server

The server binary runs openapi.lua to generate the spec, then @redocly/cli processes it.

Release

The release target updates version.txt and clients/python/version.txt, commits, tags, pushes, creates GitHub release, and builds/pushes Docker images.

make release RELEASE=vX.Y.Z   # from targets/slideruleearth/

The three number version identifier X.Y.Z has the following convention:

  • Incrementing X indicates an interface change and does not guarantee the preservation of backward compatibility.
  • Incrementing Y indicates additional or modified functionality that maintains backward compatibility.
  • Incrementing Z indicates a bug fix or code cleanup that does not change the interface or intended behavior of the code.

Licensing

SlideRule is licensed under the 3-clause BSD license found in the LICENSE file at the root of this source tree.

The following SlideRule software components include code sourced from and/or based off of third party software
that is distributed under various open source licenses. The appropriate copyright notices are included in the
corresponding source files.

The following third-party libraries can be linked to by SlideRule:

Citation (CITATION.cff)

cff-version: 1.2.0
title: SlideRule
message: >-
  If you use the SlideRule service, software, and/or data products 
  for scientific research resulting in a publication or other outlet, 
  please cite using the metadata from this file. 
  For academic research publications, please cite the JOSS paper: https://doi.org/10.21105/joss.04982
    Shean, D., Swinski, J.P., Smith, B., Sutterley, T., Henderson, S., Ugarte, C., Lidwa, E., and T. Neumann (2023). 
      SlideRule: Enabling rapid, scalable, open science for the NASA ICESat-2 mission and beyond.
      Journal of Open Source Software, 8(81), 4982, doi:10.21105/joss.04982.
  and the Zenodo DOI for the X.Y.Z version of SlideRule used to prepare your data products: https://doi.org/10.5281/zenodo.4660020

type: software
authors:
  - given-names: David
    family-names: Shean
    email: dshean@uw.edu
    affiliation: >-
      University of Washington, Civil & Environmental
      Engineering
    orcid: 'https://orcid.org/0000-0003-3840-3860'
  - given-names: J.P.
    family-names: Swinski
    affiliation: NASA Goddard Space Flight Center
    email: joseph-paul.a.swinski@nasa.gov
  - given-names: Carlos
    family-names: Ugarte
    affiliation: NASA Goddard Space Flight Center
  - given-names: Eric
    family-names: Lidwa
    affiliation: NASA Goddard Space Flight Center
  - given-names: Ben
    family-names: Smith
    email: besmith@uw.edu
    affiliation: 'University of Washington, Applied Physics Laboratory'
  - given-names: Tyler
    family-names: Sutterley
    email: tsutterl@uw.edu
    affiliation: 'University of Washington, Applied Physics Laboratory'
    orcid: 'https://orcid.org/0000-0003-0624-4965'
  - given-names: Scott
    family-names: Henderson
    email: scottyh@uw.edu
    affiliation: >-
      University of Washington, eScience Institute, Earth &
      Space Sciences
    orcid: 'https://orcid.org/0000-0003-0624-4965'
  - given-names: Thomas
    family-names: Neumann
    affiliation: NASA Goddard Space Flight Center
    orcid: 'https://orcid.org/0000-0002-6926-937X'
    email: thomas.neumann@nasa.gov
identifiers:
  - type: doi
    value: 10.21105/joss.04982
    description: JOSS publication
  - type: doi
    value: 10.5281/zenodo.4660020
    description: Zenodo repository
repository-code: 'https://github.com/SlideRuleEarth/sliderule'
url: 'https://slideruleearth.io/'
repository: 'https://joss.theoj.org/papers/10.21105/joss.04982'
repository-artifact: 'https://doi.org/10.5281/zenodo.4660020'
abstract: >-
  SlideRule is an open source server-side framework for
  on-demand processing of science data in the cloud. The
  SlideRule project offers a new paradigm for NASA archival
  data management – rapid delivery of customizable on-demand
  data products, rather than hosting large volumes of
  standard derivative products, which will inevitably be
  insufficient for some science applications. The scalable
  server-side components of SlideRule run in the AWS cloud
  with optimized functions to read HDF5 data hosted by NASA
  in S3 cloud object storage. While SlideRule can be
  accessed by any HTTP client (e.g., curl) through GET and
  POST requests, the sliderule-python client provides a
  user-friendly API for synchronous interaction with the
  SlideRule service. The client library returns standard
  Python data containers (i.e., Pandas DataFrame) and
  facilitates serialization with provenance metadata for
  reproducible science. SlideRule uses a plugin framework to
  support different NASA missions and data products. The
  ICESat-2 SlideRule plugin offers customizable algorithms
  to process the archive of low-level data products from the
  NASA Ice Cloud and land Elevation Satellite-2 (ICESat-2)
  laser altimetry mission. The user defines a geographic
  area of interest and key processing parameters via an
  interactive web interface or the API, and SlideRule
  returns high-level surface elevation point cloud products
  in seconds to minutes, enabling rapid algorithm
  development, visualization and scientific interpretation.
keywords:
  - Earth data
  - ICESat-2
  - GEDI
  - Laser altimetry
  - Topography
license: BSD-3-Clause

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 2 days ago

Total Commits: 5,189
Total Committers: 14
Avg Commits per committer: 370.643
Development Distribution Score (DDS): 0.186

Commits in past year: 1,022
Committers in past year: 4
Avg Commits per committer in past year: 255.5
Development Distribution Score (DDS) in past year: 0.138

Name Email Commits
JP Swinski j****i@n****v 4225
Eric Lidwa e****a@n****v 820
tsutterley t****l@u****u 67
David Shean d****n@g****m 28
Carlos E. Ugarte c****r@g****m 23
Scott Henderson s****h@u****u 12
Fredrik Svensson e****s@m****o 4
jakegearon j****n@g****m 3
Alexey Shiklomanov a****v@g****m 2
Romain Hugonnet r****t@g****m 1
Pangeo Bot p****t@g****m 1
Katrina Sharonin 9****n 1
Joseph H Kennedy me@j****g 1
Forrest Corcoran f****7@g****m 1

Committer domains:


Issue and Pull Request metadata

Last synced: 2 days ago

Total issues: 249
Total pull requests: 102
Average time to close issues: over 1 year
Average time to close pull requests: 14 days
Total issue authors: 27
Total pull request authors: 8
Average comments per issue: 1.23
Average comments per pull request: 0.43
Merged pull request: 77
Bot issues: 0
Bot pull requests: 1

Past year issues: 43
Past year pull requests: 24
Past year average time to close issues: 13 days
Past year average time to close pull requests: 14 days
Past year issue authors: 11
Past year pull request authors: 4
Past year average comments per issue: 1.0
Past year average comments per pull request: 0.54
Past year merged pull request: 19
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/slideruleearth/sliderule

Top Issue Authors

  • jpswinski (180)
  • elidwa (13)
  • dshean (9)
  • scottyhq (8)
  • cugarteblair (7)
  • SmithB (4)
  • bpurinton (3)
  • rhugonnet (3)
  • linxiong100 (2)
  • bradlipovsky (2)
  • ejguenther (2)
  • rbeucher (1)
  • kmilo9999 (1)
  • bocalml (1)
  • trchudley (1)

Top Pull Request Authors

  • elidwa (46)
  • jpswinski (41)
  • dshean (6)
  • cugarteblair (3)
  • tsutterley (2)
  • rhugonnet (2)
  • ksharonin (1)
  • dependabot[bot] (1)

Top Issue Labels

  • Core (25)
  • ATL03 (15)
  • Raster (14)
  • Infrastructure (12)
  • Python (11)
  • Build (8)
  • Observability (6)
  • Documentation (6)
  • H5Coro (6)
  • ATL06 (5)
  • ATL24 (5)
  • OpenAPI (5)
  • Future Consideration (5)
  • AMS (4)
  • Arrow (4)
  • IaC (4)
  • PyTest (3)
  • ATL08 (3)
  • GEDI (3)
  • Runner (2)
  • python (1)
  • Authenticator (1)
  • documentation (1)

Top Pull Request Labels

  • dependencies (1)

Package metadata

npmjs.org: @sliderule/sliderule

client for the SlideRule on-demand science data processing service

  • Homepage: https://github.com/SlideRuleEarth/sliderule#readme
  • Licenses: BSD-3-Clause
  • Latest release: 5.6.0 (published about 2 months ago)
  • Last Synced: 2026-11-05T05:27:36.747Z (2 days ago)
  • Versions: 82
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 17 Last month
  • Rankings:
    • Forks count: 7.19%
    • Stargazers count: 8.831%
    • Downloads: 10.258%
    • Average: 23.549%
    • Dependent repos count: 37.497%
    • Dependent packages count: 53.968%
  • Maintainers (1)
conda-forge.org: sliderule

Python client to interact with SlideRule, a public web service for processing Earth science data

  • Homepage: http://slideruleearth.io/
  • Licenses: BSD-3-Clause
  • Latest release: 1.4.6 (published over 4 years ago)
  • Last Synced: 2026-10-09T07:28:29.119Z (29 days ago)
  • Versions: 15
  • Dependent Packages: 1
  • Dependent Repositories: 2
  • Downloads: 124,065 Total
  • Rankings:
    • Dependent repos count: 20.226%
    • Dependent packages count: 28.978%
    • Average: 39.98%
    • Stargazers count: 54.249%
    • Forks count: 56.465%

Dependencies

clients/nodejs/sliderule/package-lock.json npm
  • 279 dependencies
clients/nodejs/sliderule/package.json npm
  • jest ^29.5.0 development
  • netrc ^0.1.4
targets/slideruleearth/docker/pysr/environment.yml conda
  • boto3
  • geopandas
  • pip
  • pyarrow
  • shapely
  • sliderule
.github/workflows/issue-to-project.yml actions
  • actions/add-to-project v0.4.0 composite
.github/workflows/sliderule-nodejstest.yml actions
  • actions/checkout v4 composite
  • actions/setup-node v4 composite
clients/python/environment.yml conda
  • coverage
  • geopandas
  • numpy
  • pandas
  • pip
  • pyarrow
  • pyproj
  • pytables
  • pytest
  • python
  • python-pdal
  • requests
  • scikit-learn
  • scipy
  • setuptools_scm
  • shapely
  • sliderule
  • tk
  • xyzservices
clients/python/examples/environment.yml conda
  • boto3
  • duckdb
  • geopandas
  • h5py
  • ipykernel
  • ipyleaflet
  • ipympl
  • ipywidgets
  • jupyterlab
  • jupyterlab_widgets
  • matplotlib
  • numpy
  • pandas
  • pip
  • pyarrow
  • pyproj
  • pytables
  • pytest
  • python
  • python-pdal
  • requests
  • scikit-learn
  • scipy
  • setuptools_scm
  • shapely
  • sliderule
  • tk
  • xyzservices
targets/slideruleearth/docker/ilb/Dockerfile docker
  • haproxytech/haproxy-ubuntu 2.9 build
targets/slideruleearth/docker-compose.yml docker
  • 742127912612.dkr.ecr.us-west-2.amazonaws.com/ams latest
  • 742127912612.dkr.ecr.us-west-2.amazonaws.com/ilb latest
  • 742127912612.dkr.ecr.us-west-2.amazonaws.com/manager latest
  • 742127912612.dkr.ecr.us-west-2.amazonaws.com/monitor latest
  • 742127912612.dkr.ecr.us-west-2.amazonaws.com/proxy latest
  • 742127912612.dkr.ecr.us-west-2.amazonaws.com/sliderule latest
  • willfarrell/autoheal latest
.github/workflows/sliderule-testreport.yml actions
.github/workflows/sliderule-testrunner.yml actions
apps/ams/environment.yml conda
  • PyYAML
  • coverage
  • flask
  • gunicorn
  • numpy
  • openapi-core
  • pip
  • pyarrow
  • pytest
  • python-duckdb >=1.5.0
apps/authenticator/environment.yml conda
  • boto3
  • coverage
  • fastapi
  • pip
  • pyasn1
  • pyasn1-modules
  • pytest
  • pytest-env
  • requests
  • uvicorn
.github/workflows/linter.yml actions
  • actions/checkout v4 composite
  • actions/setup-python v4 composite
  • pre-commit/action v3.0.0 composite
apps/runner/environment.yml conda
  • boto3
  • coverage
  • cryptography
  • pip
  • pytest
  • pytest-env
  • sliderule
docs/environment.yml conda
  • geopandas
  • jupyterlab
  • matplotlib
  • numpy
  • pandoc
  • pip
  • python 3.12
  • shapely
apps/ams/pyproject.toml pypi
  • duckdb *
  • flask *
apps/email/environment.yml conda
  • boto3
  • coverage
  • pytest
  • pytest-env
apps/provisioner/environment.yml conda
  • boto3
  • coverage
  • croniter
  • cryptography
  • pip
  • pytest
  • pytest-env
  • requests
  • sliderule
apps/provisioner/requirements.txt pypi
  • croniter *
  • cryptography *
  • requests *
apps/runner/requirements.txt pypi
  • cryptography *
  • requests *
apps/authenticator/requirements.txt pypi
  • pyasn1 *
  • pyasn1-modules *
  • requests >=2.28.0
apps/email/requirements.txt pypi
  • boto3 *
clients/cli/src/sliderule_recorder/environment.yml conda
  • boto3
  • geoip2
  • matplotlib
  • pandas
  • pillow
  • python
clients/cli/pyproject.toml pypi
  • boto3 *
  • sliderule *
clients/python/pyproject.toml pypi
  • geopandas *
  • numpy *
  • pyarrow *
  • requests *
  • shapely *
targets/atl24/docker/atl24/Dockerfile docker
  • $repo/sliderule-buildenv latest build
  • amazonlinux 2023 build

Score: 19.69566365098557