{"id":27938230,"url":"https://github.com/simonsobs/hippo","last_synced_at":"2026-01-06T17:27:09.851Z","repository":{"id":241814650,"uuid":"805136550","full_name":"simonsobs/hippo","owner":"simonsobs","description":"The server for the HIerarchical Product Post Office","archived":false,"fork":false,"pushed_at":"2025-06-18T17:33:08.000Z","size":614,"stargazers_count":0,"open_issues_count":6,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-18T18:25:04.341Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simonsobs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-05-24T00:39:00.000Z","updated_at":"2025-06-18T17:33:12.000Z","dependencies_parsed_at":"2024-10-21T17:04:02.964Z","dependency_job_id":"72c5927a-a0d3-4591-b3ec-2eaf496f5b77","html_url":"https://github.com/simonsobs/hippo","commit_stats":null,"previous_names":["simonsobs/soposerve","simonsobs/hippo"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/simonsobs/hippo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonsobs%2Fhippo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonsobs%2Fhippo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonsobs%2Fhippo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonsobs%2Fhippo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simonsobs","download_url":"https://codeload.github.com/simonsobs/hippo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonsobs%2Fhippo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264040921,"owners_count":23548063,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-07T08:22:39.119Z","updated_at":"2026-01-06T17:27:09.845Z","avatar_url":"https://github.com/simonsobs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"HIPPO\n=====\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"hipposerve/web/static/logo.svg\" style=\"width:30%\"/\u003e\n\u003c/p\u003e\n\nThe HIerarchical Product Post Office\n------------------------------------\n\n![Docker Image Version](https://img.shields.io/docker/v/simonsobs/hippo)\n\nHippo is a piece of software aimed at making FAIR (Findable, Attributable, Interoperable,\nand Reuseable) data access easier. Through the use of the very flexible MongoDB for\n_true_ metadata storage and MinIO as a data storage backend, hippo provides metadata-driven\naccess to reusable products.\n\nInstalling\n----------\n\nAs well as running the server in a docker container, the python package can be installed\nas `pyhippo`:\n```\nuv pip install pyhippo\n```\nThis gives you access to the `henry` command suite.\n\nUse-Cases\n---------\n\nHippo is under development for the Advanced Simons Observatory, an NSF-funded telescope project\nthat aims to study, among other things, the Cosmic Microwave Background. Throughout the project,\nmany pieces of data will be produced: things like images, arrays, small databases, etc. Storing\nand sharing these within the collaboration, and to the public, is a huge challenge; it's easy\nenough to put them all in a big folder somewhere, but without associated metadata you will never\nbe able to find what you're looking for.\n\nEnter hippo! Hippo allows you to upload data products and access them both manually and\nprogramatically through a metadata-driven interaction.\n\nExamples\n--------\n\nThere are a number of example cases in the `example` directory. To lauch the development\nserver, you should run\n\n```\nhenry dev run\n```\n\nThis creates an empty instance with mock authentication (see: no\nauthentication). You can use the upload scripts in `examples/{name}` that upload\ndata from the [NASA LAMBDA\ninstance](https://lambda.gsfc.nasa.gov/product/act/actpol_prod_table.html).\n\nProducts can then be viewed through the web interface (served at `/web` from the\nserver root), or through the use of the `henry` command-line tool.\n\nContainerized Version\n---------------------\n\nThere is a containerized version of the application available in the repository. You can\nbuild the container with `docker build .`. By default, the server runs on port 44776\n(HIPPO on a T9 keyboard).\n\nTo actually run HIPPO, you will need a running instance of MongoDB and an instance\nof an S3-compaitible storage server. HIPPO was built to be ran with MinIO. MinIO will\nactually provide file storage for your server, with MongoDB handling the metadata.\n\nThere are a number of important configuration variables:\n\n- `MINIO_URL`: hostname of the MINIO server as seen by the server.\n- `MINIO_ACCESS`: the MINIO access token (username).\n- `MINIO_SECRET`: the MINIO access secret (password).\n- `MINIO_PRESIGN_URL`: hostname of the MINIO server as seen by external clients.\n- `MONGO_URI`: the full URI for the mongo instance including password.\n- `TITLE`: the title of the HIPPO instance.\n- `DESCRIPTION`: the description of the HIPPO instance.\n- `ADD_CORS`: boolean, whether to allow unlimited CORS access. True by default (dev)\n- `DEBUG`: boolean, whether to run in debug mode. True by default (dev)\n- `WEB`: boolean, whether to serve the web UI.\n- `WEB_ROOT`: where the web frontend is served from (defaults to `/web`)\n- `AUTH_SYSTEM`: should be `soauth` in production. There are then the following\n  [soauth](https://github.com/simonsobs/soauth) variables (see the soauth docs):\n  + `SOAUTH_SERVICE_URL`: the URL from which soauth is served from.\n  + `SOAUTH_APP_ID`: app ID\n  + `SOAUTH_PUBLIC_KEY`: public key for decrypting tokens\n  + `SOAUTH_BASE_URL`: base URL\n  + `SOAUTH_CLIENT_SECRET`: the client secret\n\nSecrets can be loaded from `/run/secrets` automatically, so long as they have\nthe same file name as their environment variable.\n\nFor soauth integration, your callback URL needs to be `$URL/web/callback`.\n\n\nDeployment Guide\n----------------\n\nTo deploy, you need to set up a MongoDB server and a Minio server. This will involve:\n\n- Creating a MongoDB password, saved as a secret.\n- Creating a MongoDB URI with this password, saved as a secret.\n- Creating a Minio access token, saved as a secret.\n- Creating a WEB_JWT_SECRET, saved as a secret.\n- Creating the GitHub client ID and secret, saved as a secret.\n\nThen, you can deploy your MongoDB and Minio servers. Do not forget to set up storage\nfor their backends to ensure persistence across restarts.\n\nNote that we provide a docker compose file in the main repository as an example. This\nshould show you how the containers interact.\n\nWith the two backends set up, you can deploy the container. You can build it yourself,\nor use the hosted version.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonsobs%2Fhippo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonsobs%2Fhippo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonsobs%2Fhippo/lists"}