Skip to main content
SOLiD: Spatially Organized and Lightweight Global Descriptor

C++ API Python API
pip install solid-descriptor
SOLiD closing loops online on four platforms: a car with LiDAR (KISS-ICP), 4D radar (GeoRIO), a legged robot (GaRLILEO) and a humanoid (FAST-LIO). The map builds up, the trajectory rises with time, each closed loop links back to the place it recognized, and the colored trajectory and the map are the online pose-graph estimate at that moment, so the past trajectory snaps into place when a loop closes, next to the gray odometry.

[IEEE RA-L 2024] Narrowing your FOV with SOLiD: Spatially Organized and Lightweight
Global Descriptor for FOV-constrained LiDAR Place Recognition


A robot recognizes where it has been before, even when its sensor sees only a narrow or partly blocked slice of the world, and uses it to close loops and to merge runs from different days and robots:

  • 🎯 FOV-aware: points are binned by range, elevation and azimuth inside the sensor's real vertical field of view.
  • 🧭 Two signatures: R-SOLiD (range) finds the place, A-SOLiD (azimuth) recovers the yaw between the two visits.
  • ⚡ Lightweight: about 1.5 ms per keyframe on a CPU, with no GPU and no training.
  • 📡 Any range sensor: spinning or solid-state LiDAR, and sparse 4D radar through submaps of consecutive scans.
  • 🔁 Online loop closing: candidates are checked with GICP and added to an iSAM2 pose graph while the robot runs.
  • 🗺️ Multi-session SLAM: sessions from different days are aligned into one map (guide).
  • 👥 Multi-robot: map merging from a few exchanged scans (Commerge) and distributed multi-robot SLAM (SKiD-SLAM).

FOV-aware bins, two signatures (range for retrieval, azimuth for yaw), milliseconds on a CPU, LiDAR or 4D radar

It runs on top of the odometry you already have, on cars, legged robots and humanoids:

SOLiD runs on a car with LiDAR (KISS-ICP, FAST-LIO), 4D radar (GeoRIO), legged robots (GaRLILEO, Leg-KILO) and a humanoid with a Livox Mid-360 (FAST-LIO)

💾 Datasets

The examples use KITTI odometry sequence 00 (velodyne scans, poses and calibration). The integrations were tested on Kimera-Multi, SNAIL-Radar, the GaRLILEO dataset, the Leg-KILO dataset and KILVO. The macOS tool reads the sequence folder directly; for ROS, turn it into a bag with /cloud and /odom (ground-truth poses):

cd slam/common/mac
python kitti_to_bag.py /path/to/kitti/sequences/00 kitti00.bag --voxel 0.4        # ROS 1
python kitti_to_bag.py /path/to/kitti/sequences/00 kitti00_ros2 --voxel 0.4       # ROS 2

📦 Installation

git clone --recursive https://github.com/sparolab/SOLiD.git     # --recursive also gets the odometries in thirdparty/

Everything is built on one C++ library, cpp/: the ROS 1 and ROS 2 packages (slam/common/ros1/, slam/common/ros2/) and the macOS tools (slam/common/mac/) are thin wrappers around it, so they run the same code and give the same loops. Odometry integrations (FAST-LIO, KISS-ICP, GeoRIO, GaRLILEO, Leg-KILO) live per platform in slam/ with their own Docker images in docker/slam.

Docker

xhost +local:docker

# ROS 1: pull the prebuilt image (or build it: docker build -f docker/Dockerfile.noetic -t ghcr.io/sparolab/solid:noetic .)
docker pull ghcr.io/sparolab/solid:noetic
docker run -it --rm --net=host -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix -v /path/to/bags:/data ghcr.io/sparolab/solid:noetic

# ROS 2: pull the prebuilt image (or build it: docker build -f docker/Dockerfile.humble -t ghcr.io/sparolab/solid:humble .)
docker pull ghcr.io/sparolab/solid:humble
docker run -it --rm --net=host -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix -v /path/to/bags:/data ghcr.io/sparolab/solid:humble

From source

ROS 1 (Noetic)
sudo add-apt-repository ppa:borglab/gtsam-release-4.0
sudo apt install libeigen3-dev libyaml-cpp-dev libgtsam-dev libgtsam-unstable-dev

# clone into ~/catkin_ws/src; to add an odometry, link it next to SOLiD (see thirdparty/README.md):
# ln -s ~/catkin_ws/src/SOLiD/thirdparty/FAST_LIO ~/catkin_ws/src/
cd ~/catkin_ws && catkin_make -DCMAKE_BUILD_TYPE=Release
ROS 2 (Humble)
sudo apt install libeigen3-dev libyaml-cpp-dev ros-humble-gtsam

# clone into ~/ros2_ws/src
# add an odometry with its folder, e.g. src/SOLiD/thirdparty/GeoRIO (see thirdparty/README.md)
cd ~/ros2_ws && colcon build --base-paths src/SOLiD/slam/common/ros2 src/SOLiD/tools/multi-session-slam/ros2 --cmake-args -DCMAKE_BUILD_TYPE=Release
macOS (no ROS)
xcode-select --install && brew install cmake eigen pcl yaml-cpp
python3 -m venv .venv && source .venv/bin/activate     # or: uv venv && source .venv/bin/activate
pip install solid-descriptor rosbags matplotlib          # front-end (Python binding, import solid; or `pip install .` from the clone)

# GTSAM is not in Homebrew: build it once (tested: 4.3.0 with Homebrew Eigen 5)
git clone --branch 4.3.0 --depth 1 https://github.com/borglab/gtsam.git ~/gtsam-src
cmake -S ~/gtsam-src -B ~/gtsam-build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/gtsam-install \
  -DGTSAM_USE_SYSTEM_EIGEN=ON -DGTSAM_WITH_TBB=OFF -DGTSAM_BUILD_TESTS=OFF -DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \
  -DGTSAM_BUILD_UNSTABLE=OFF -DGTSAM_BUILD_PYTHON=OFF -DGTSAM_ENABLE_BOOST_SERIALIZATION=OFF -DGTSAM_USE_BOOST_FEATURES=OFF
cmake --build ~/gtsam-build -j && cmake --install ~/gtsam-build

# back-end tools: loop closing (solid_close_loops) and multi-session (solid_align_sessions)
cmake -S cpp -B build -DSOLID_USE_PCL=OFF -DSOLID_BUILD_BACKEND=ON -DGTSAM_DIR=$HOME/gtsam-install/lib/cmake/GTSAM
cmake --build build -j && export SOLID_TOOLS=$PWD/build

🚀 Run

Pick an odometry; it runs live and SOLiD closes loops on its output online:

# ROS 1: odometry = fast_lio | kiss_icp | legkilo | fast_lio_mid360
roslaunch solid_ros run.launch odometry:=fast_lio save_dir:=$HOME/solid_results
rosbag play --clock <bag>

# ROS 2: odometry = fast_lio | kiss_icp | georio | garlileo | legkilo | fast_lio_mid360
ros2 launch solid_ros run.launch.py odometry:=georio save_dir:=$HOME/solid_results
ros2 bag play <bag> --clock

# Your own odometry: give SOLiD its cloud and odometry topics
roslaunch solid_ros solid.launch config:=kitti cloud_topic:=/cloud odom_topic:=/odom

# macOS: the same front-end and back-end, from a bag or a KITTI folder
cd slam/common/mac && python solid_loops.py --kitti /path/to/kitti/sequences/00 --config ../../config/kitti.yaml --out $HOME/solid_results --close-loops

See the guides for all arguments, outputs and the odometry integrations: Run · Integrations.


🧰 Tools

Multi-session SLAM

Each run is saved as a session; sessions from different days are aligned into one map:

Multi-session SLAM with SOLiD. Left: two LiDAR sessions of KITTI 00, the second starting from a wrong pose. Right: three 4D radar sessions recorded on different days. Each session starts where its own odometry put it. SOLiD aligns them, shown stacked at different heights so the inter-session loops are visible, and then the layers merge into one map.

roslaunch solid_multi_session align.launch sessions:="$HOME/day1 $HOME/day2" save_dir:=$HOME/aligned       # ROS 1
ros2 launch solid_multi_session align.launch.py sessions:="$HOME/day1 $HOME/day2" save_dir:=$HOME/aligned  # ROS 2
tools/multi-session-slam/mac/align.sh $HOME/aligned $HOME/day1 $HOME/day2    # macOS

See the multi-session SLAM guide for all arguments, outputs, results and the configuration.

Multi-Robot Map Merging

Each robot sends its SOLiD descriptors to a server, which picks the few scans that carry the overlap; only those are exchanged, registered and merged:

Commerge: the SOLiD affinity of two robots goes through sequential matching, a balanced minimum vertex cover and a maximum edge-weighted clique; only one region's scans are exchanged and the maps merge

See Commerge (IJRR 2026): it reads the sessions SOLiD saves, commerge robot_a/ robot_b/ --out merged/.

Distributed Multi-Robot SLAM

Robots share SOLiD descriptors peer to peer to recognize where their maps overlap and merge them into one:

SKiD-SLAM: distributed multi-robot LiDAR SLAM with SOLiD place recognition, on the Majang (left) and planetary analog (right) datasets

See SKiD-SLAM (IEEE T-FR 2026): distributed multi-robot LiDAR SLAM built on SOLiD, with field deployments at planetary analog sites.


🤖 Run with your agent

Open Claude Code or Codex in an empty folder and paste:

Clone https://github.com/sparolab/SOLiD, read its AGENTS.md, and follow it to build SOLiD and run it on KITTI 00 on this machine. Ask me what you need along the way.

The agent follows AGENTS.md: it builds SOLiD for ROS 1, ROS 2 or macOS, prepares the data, runs loop closing, and checks the loops.


⚙️ Configuration

All parameters are read at runtime from one YAML file per sensor (kitti, ouster64, vlp16, livox_mid360, radar_4d): descriptor, keyframes, submaps, loop candidates and loop closing. See the configuration guides: Sensors and loop closing · Multi-session SLAM.


📝 TODO

  • iPhone LiDAR: SOLiD on iPhone LiDAR scans with ARKit poses (indoor config for the ~5 m range)
  • IMU odometry: loop closing on top of an inertial odometry such as KISS-IMU

Citation

If you use SOLiD in your research, please cite our paper (supplementary material: appendix/Appendix.pdf).

See bibtex
@article{kim2024narrowing,
  title     = {Narrowing your FOV with SOLiD: Spatially Organized and Lightweight Global Descriptor for FOV-constrained LiDAR Place Recognition},
  author    = {Kim, Hogyun and Choi, Jiwon and Sim, Taehu and Kim, Giseop and Cho, Younggun},
  journal   = {IEEE Robotics and Automation Letters},
  year      = {2024},
  publisher = {IEEE}
}

Contributing

We envision SOLiD as a community-driven project and love to see it grow through contributions from the community. We would love to see your face in the list below, just open a Pull Request!

Acknowledgements

SOLiD runs with FAST-LIO, KISS-ICP, GeoRIO, GaRLILEO and Leg-KILO, was tested on Kimera-Multi, SNAIL-Radar, the GaRLILEO dataset, the Leg-KILO dataset and KILVO, and builds on nanoflann, GTSAM and PCL. We thank the authors for open-sourcing their work.

Special Thanks

We sincerely thank Giseop Kim for open-sourcing LT-mapper, whose session format and multi-session design our multi-session SLAM follows.

Metadata

Release files for solid-descriptor 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for solid-descriptor 2.1.0
File Size Uploaded Provenance Actions
solid_descriptor-2.1.0.tar.gz 4.1 MB With provenance Details for solid_descriptor-2.1.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for solid-descriptor 2.1.0
File Actions
solid_descriptor-2.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for solid_descriptor-2.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
solid_descriptor-2.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for solid_descriptor-2.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
solid_descriptor-2.1.0-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details for solid_descriptor-2.1.0-cp313-cp313-macosx_15_0_arm64.whl
solid_descriptor-2.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for solid_descriptor-2.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
solid_descriptor-2.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for solid_descriptor-2.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
solid_descriptor-2.1.0-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details for solid_descriptor-2.1.0-cp312-cp312-macosx_15_0_arm64.whl
solid_descriptor-2.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for solid_descriptor-2.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
solid_descriptor-2.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for solid_descriptor-2.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
solid_descriptor-2.1.0-cp311-cp311-macosx_15_0_arm64.whl CPython 3.11 CPython 3.11 macOS 15.0+ ARM64 Details for solid_descriptor-2.1.0-cp311-cp311-macosx_15_0_arm64.whl
solid_descriptor-2.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for solid_descriptor-2.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
solid_descriptor-2.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for solid_descriptor-2.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
solid_descriptor-2.1.0-cp310-cp310-macosx_15_0_arm64.whl CPython 3.10 CPython 3.10 macOS 15.0+ ARM64 Details for solid_descriptor-2.1.0-cp310-cp310-macosx_15_0_arm64.whl

Total release size: 6.9 MB

Release files / solid_descriptor-2.1.0.tar.gz

Download URL solid_descriptor-2.1.0.tar.gz
Size 4.1 MB
Tags Source
SHA-256 checksum
How to use checksums
6a92c6995b590dd9c42607c8ca38c452558b088f6abf69c5a7dcd4f22f847931
BLAKE2b-256 checksum
How to use checksums
04fbb1133b376404a8f5932b8d56cb073da1c8f2c8359ba79fb2915b2852f51d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 289.0 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4a7dd41d0b321d345a9e12395be44112d88ac36a4824da7f7bdb03951355b43b
BLAKE2b-256 checksum
How to use checksums
e640f86614b8fa241579946c320613234752b235ef5264b270f50a48902f4ef7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 263.2 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1e5f523599ec8a9e832666ca2186a269292a7832b17aa7a83eddb87d1e571eea
BLAKE2b-256 checksum
How to use checksums
487908f478b9861a4e765e253adf430e46a099fe4b275201358402afc888d471
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp313-cp313-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.1.0-cp313-cp313-macosx_15_0_arm64.whl
Size 163.4 kB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
fa3afb4f66a078c4ceeb7416953d7bf17b8b6d4cfbc67508b14d93640853b387
BLAKE2b-256 checksum
How to use checksums
b52e77ffc2a0ee9199b0804945e9fdcabad0f83ab30028f65ba49c690404de86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 289.1 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
be2950851aed9cbfd4095041121b41e37cb59ce21927ff68fe3dff7547305c6e
BLAKE2b-256 checksum
How to use checksums
fb2c034981b173d71c9a806caa75ee6ea11ed4491448873427bdc7647b3cd9d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 263.2 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8c9714b702066070d71c749df1142148f00ca849388f16060e0422de8b442a42
BLAKE2b-256 checksum
How to use checksums
83861a00d3437391155f9f0fb97bd78519e60de7828ac2fcffc1c7b3afca98c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp312-cp312-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.1.0-cp312-cp312-macosx_15_0_arm64.whl
Size 163.4 kB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
c133682d00a592f3e837028f12152eefd03579270ba0f77616889108fd6eadf7
BLAKE2b-256 checksum
How to use checksums
7060407bf4a6563cade9315513bb8fe362fc9311553437947398bade184f8bae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 289.2 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c89ad91471f9d5ed0a6ccf8f389087e794a62403c2fa2876ec987d9f559949f3
BLAKE2b-256 checksum
How to use checksums
647b0442c918f2eec6333bd99838b18d77ecc03b979803e28afeea2d5de21351
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 263.3 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
962fb6686728e54c2f1580491e766c4d20b44a414a59072ac7bb682d995f550e
BLAKE2b-256 checksum
How to use checksums
9dbebdd85834bc2bc1dc05e458d992e8dd1f30f61a214837c1b11cc6eedfff5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp311-cp311-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.1.0-cp311-cp311-macosx_15_0_arm64.whl
Size 162.3 kB
Tags CPython 3.11 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
7311b12807c859b8299f88bd2c18a0afc7534fa5d107a66e7415a64cb4a3601d
BLAKE2b-256 checksum
How to use checksums
de38d342cb6eefa46c0b4553da643eb35b5c7be84219be5e228974cc386bac3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 288.2 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5dd3deb49512f2f446388f8cc8902543399e82ea0a54c3e59986b91874b78795
BLAKE2b-256 checksum
How to use checksums
41d70a6a22c1d337c00d03956a799f4b5320b477f5dbfe4a93e7491231adc8cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 262.5 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
10b2260c479d13b98db7cc473503e8c6c62fdf7e59ed6ada0fad6773306636a3
BLAKE2b-256 checksum
How to use checksums
4d2b7f22bf83ca64179148cd09439f7ba294035bdd148063b4585e7943f828fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / solid_descriptor-2.1.0-cp310-cp310-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.1.0-cp310-cp310-macosx_15_0_arm64.whl
Size 161.2 kB
Tags CPython 3.10 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
d4f64e81d048e02f0cf288b8d524b96542d96085dd2c7836b4fcb84dff79ce0c
BLAKE2b-256 checksum
How to use checksums
0ca6b147f57407d5598461cd1c997a456f958ac77449095afec9fe2c846af962
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Security for solid-descriptor 2.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 13 files in this release have been uploaded with provenance metadata.

Select from 13 files

Attestation for solid_descriptor-2.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.1.0 This release

13 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page