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
- Host: GitHub
- URL: https://github.com/slideruleearth/sliderule
- Owner: SlideRuleEarth
- License: other
- Created: 2020-05-04T23:34:29.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2026-11-04T20:56:25.000Z (2 days ago)
- Last Synced: 2026-11-06T10:11:50.398Z (about 20 hours ago)
- Language: C++
- Homepage: https://slideruleearth.io
- Size: 56 MB
- Stars: 67
- Watchers: 4
- Forks: 19
- Open Issues: 139
- Releases: 156
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
README.md
SlideRule
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.txtoverrides the compiler toclang/clang++. clang-tidyruns with-warnings-as-errors=*— any clang-tidy warning breaks the build.SKIP_STATIC_ANALYSIS=ONspeeds 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}.cppand{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.
packages/core/LuaEngine.cpp: partial code sourced from https://www.lua.org/ (MIT license)scripts/extensions/json.lua: code sourced from https://github.com/rxi/json.lua.git (MIT license)packages/core/MathLib.cpp: point inclusion code based off of https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html (BSD-style license)scripts/extensions/base64.lua: base64 encode/decode code based off of https://github.com/iskolbin/lbase64
The following third-party libraries can be linked to by SlideRule:
- Lua: https://www.lua.org/ (MIT license)
- GDAL: https://gdal.org/ (MIT license)
- Arrow: https://arrow.apache.org/ (Apache 2.0 license)
- RapidJSON: https://github.com/Tencent/rapidjson (MIT license)
- curl: https://curl.se/docs/copyright.html (MIT license derivative - see website for license information)
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
- Name: SlideRule Earth
- Login: SlideRuleEarth
- Email:
- Kind: organization
- Description: Server and client tools for on-demand processing of science data in the cloud
- Website: https://slideruleearth.io/
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/63428847?v=4
- Repositories: 2
- Last ynced at: 2026-11-06T03:29:46.623Z
- Profile URL: https://github.com/SlideRuleEarth
GitHub Events
Total
- Create event: 100
- Delete event: 56
- Discussion event: 2
- Fork event: 2
- Issue comment event: 202
- Issues event: 168
- Pull request event: 43
- Pull request review event: 2
- Push event: 850
- Release event: 43
- Watch event: 18
Last Year
- Create event: 16
- Delete event: 17
- Discussion event: 2
- Issue comment event: 14
- Issues event: 12
- Pull request event: 10
- Pull request review event: 1
- Push event: 298
- Release event: 3
- Watch event: 4
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 | 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:
- uw.edu: 2
- nasa.gov: 2
- jhkennedy.org: 1
- mis.meta.aero: 1
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
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
- Total packages: 2
-
Total downloads:
- npm: 17 last-month
- conda: 124,065 total
- Total dependent packages: 1 (may contain duplicates)
- Total dependent repositories: 2 (may contain duplicates)
- Total versions: 97
- Total maintainers: 1
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
- 279 dependencies
- jest ^29.5.0 development
- netrc ^0.1.4
- boto3
- geopandas
- pip
- pyarrow
- shapely
- sliderule
- actions/add-to-project v0.4.0 composite
- actions/checkout v4 composite
- actions/setup-node v4 composite
- coverage
- geopandas
- numpy
- pandas
- pip
- pyarrow
- pyproj
- pytables
- pytest
- python
- python-pdal
- requests
- scikit-learn
- scipy
- setuptools_scm
- shapely
- sliderule
- tk
- xyzservices
- 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
- haproxytech/haproxy-ubuntu 2.9 build
- 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
- PyYAML
- coverage
- flask
- gunicorn
- numpy
- openapi-core
- pip
- pyarrow
- pytest
- python-duckdb >=1.5.0
- boto3
- coverage
- fastapi
- pip
- pyasn1
- pyasn1-modules
- pytest
- pytest-env
- requests
- uvicorn
- actions/checkout v4 composite
- actions/setup-python v4 composite
- pre-commit/action v3.0.0 composite
- boto3
- coverage
- cryptography
- pip
- pytest
- pytest-env
- sliderule
- geopandas
- jupyterlab
- matplotlib
- numpy
- pandoc
- pip
- python 3.12
- shapely
- duckdb *
- flask *
- boto3
- coverage
- pytest
- pytest-env
- boto3
- coverage
- croniter
- cryptography
- pip
- pytest
- pytest-env
- requests
- sliderule
- croniter *
- cryptography *
- requests *
- cryptography *
- requests *
- pyasn1 *
- pyasn1-modules *
- requests >=2.28.0
- boto3 *
- boto3
- geoip2
- matplotlib
- pandas
- pillow
- python
- boto3 *
- sliderule *
- geopandas *
- numpy *
- pyarrow *
- requests *
- shapely *
- $repo/sliderule-buildenv latest build
- amazonlinux 2023 build
Score: 19.69566365098557