Skip to main content
SOLiD: Spatially Organized and Lightweight Global 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 SLAM: robots share SOLiD descriptors to merge their maps, in SKiD-SLAM (more).

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
docker build -f docker/Dockerfile.noetic -t solid:noetic .
docker run -it --rm --net=host -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix -v /path/to/bags:/data solid:noetic

# ROS 2
docker build -f docker/Dockerfile.humble -t solid:humble .
docker run -it --rm --net=host -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix -v /path/to/bags:/data 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 . rosbags matplotlib                         # front-end (Python binding)

# 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 SLAM

Robots share SOLiD descriptors 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.0.1

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.0.1
File Size Uploaded Provenance Actions
solid_descriptor-2.0.1.tar.gz 4.1 MB With provenance Details for solid_descriptor-2.0.1.tar.gz

Built distributions (wheels)

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

Total release size: 6.9 MB

Release files / solid_descriptor-2.0.1.tar.gz

Download URL solid_descriptor-2.0.1.tar.gz
Size 4.1 MB
Tags Source
SHA-256 checksum
How to use checksums
0e99bd654406ff71523e41e8cd3c4c78ec4e91f35fb0ab932a53f10d9ffeca19
BLAKE2b-256 checksum
How to use checksums
824861e91e65a436f4ecb8a61e3290fad116cc58f80f6a7cf70763d5734030e1
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.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 288.4 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a8127dcf4cbbb8c12c174e854274257365e7b2a99263aadc9d606d402a6e3118
BLAKE2b-256 checksum
How to use checksums
f07cce426eb103434523b50be9fa369616420c137160404ea62f2bf10e0a9f6d
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.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.0.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 262.6 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
e5b2da6a58ab97f833030733529798690415c4c85a4fb05e4bfc0046ed8419a7
BLAKE2b-256 checksum
How to use checksums
979380c4df523911b4d78fadcebf00b01a3feacd08a127b12580daf79fdfe720
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.0.1-cp313-cp313-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.0.1-cp313-cp313-macosx_15_0_arm64.whl
Size 162.8 kB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
245408968cbd547d367500a70f54d644872705931df5f7c6f6bd6f2e53e9a9cf
BLAKE2b-256 checksum
How to use checksums
4923d7183e7dd54898326ec72d95ad0bb6803f5798db61139f29734755666702
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.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 288.5 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
22169f9e31701115fe140fbeed8528e7a4c29132ff5129c53125fb73a9fc45af
BLAKE2b-256 checksum
How to use checksums
ee354589dc7079db73f5558799705cca2ef70c98238f5e22418985d3ed83c08e
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.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.0.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 262.6 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
353eb3ecab7672098e6253c9347fdf9b73e998e2eca95f7822ba891f7fcbeff5
BLAKE2b-256 checksum
How to use checksums
5532f3d118b0884dc336ef6dfd13807b381a30a5ede27b44118d89defbd037eb
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.0.1-cp312-cp312-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.0.1-cp312-cp312-macosx_15_0_arm64.whl
Size 162.8 kB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
b8dbf129c7a2d8bb99de6c2d395955279653f326e3913fe8f40bc75dd6c18efe
BLAKE2b-256 checksum
How to use checksums
d07ff0df2e5f7596600d64aa15074113256b3386efbe1cc4dd2e5d0fd5a9396c
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.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 288.6 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e7359f174f73d53f2c401fff85886a8144ce76f9c2f50da0fd5bae29526c4a33
BLAKE2b-256 checksum
How to use checksums
386ce433ce1dfa898e7e17fe1060326643c4ee86215fd46c3bad549ce2501c78
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.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 262.7 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f64e5b45a15e2b11473914c60ebcbabddcdf0bbbffb2314c98d368fa8f3df26c
BLAKE2b-256 checksum
How to use checksums
3fb6a2428083e20c2a898df5c5b8446f72f7c3a9486e37fcdd59e806031e7159
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.0.1-cp311-cp311-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.0.1-cp311-cp311-macosx_15_0_arm64.whl
Size 161.7 kB
Tags CPython 3.11 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
d53318259e4c951502ace627ab2e918e9fe201a818f6a3714a5b0a1f9c2bd807
BLAKE2b-256 checksum
How to use checksums
eef303ea5bd1c9c6a53857e272e0a01312b5677635eb183ed8ca1d08a7608163
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.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL solid_descriptor-2.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 287.7 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d042d089abfd3bc2e28af9ecfa178931f21dae97d1da131bb66c2ad87b6178c6
BLAKE2b-256 checksum
How to use checksums
49541d1e2312b2485d8008c416d3fbdd92ee2b507586f8fcb35a698622334d0e
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.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL solid_descriptor-2.0.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 261.9 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
17d257ad385ef2ebcd2cceedddec3e0a8b96d0650939d98949de30e735b45a1f
BLAKE2b-256 checksum
How to use checksums
6ea2c0ad6fb1aee6c51dda4ddb39d35bdedae9dbc707ef12e0b4e2815bb45243
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.0.1-cp310-cp310-macosx_15_0_arm64.whl

Download URL solid_descriptor-2.0.1-cp310-cp310-macosx_15_0_arm64.whl
Size 160.6 kB
Tags CPython 3.10 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
a787864f9b45923422847b4ae5cb20556143abe56404b4e9c29789fc53997b83
BLAKE2b-256 checksum
How to use checksums
e1533d735303f8b91b799e8888d8e8b7a749ab5dbb6cd9eb590c22d640594a5d
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.0.1

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.0.1.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.0.1 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