{"id":13403532,"url":"https://github.com/nasa/earthdata-search","last_synced_at":"2026-01-26T02:20:19.480Z","repository":{"id":36366931,"uuid":"40671758","full_name":"nasa/earthdata-search","owner":"nasa","description":"Earthdata Search is a web application developed by NASA EOSDIS to enable data discovery, search, comparison, visualization, and access across EOSDIS' Earth Science data holdings.","archived":false,"fork":false,"pushed_at":"2025-03-07T16:45:59.000Z","size":200166,"stargazers_count":759,"open_issues_count":23,"forks_count":231,"subscribers_count":58,"default_branch":"main","last_synced_at":"2025-03-07T17:32:47.047Z","etag":null,"topics":["data-discovery","earthdata-search","eosdis","hacktoberfest"],"latest_commit_sha":null,"homepage":"https://search.earthdata.nasa.gov","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nasa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2015-08-13T17:13:40.000Z","updated_at":"2025-03-07T14:56:03.000Z","dependencies_parsed_at":"2023-09-21T19:28:16.964Z","dependency_job_id":"e5f8677e-3e32-467f-93dd-1030627a26ff","html_url":"https://github.com/nasa/earthdata-search","commit_stats":{"total_commits":7574,"total_committers":58,"mean_commits":"130.58620689655172","dds":0.7640612622128333,"last_synced_commit":"3f1a79a23aa7283c7bc2381182b9f404097ca95c"},"previous_names":[],"tags_count":250,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa%2Fearthdata-search","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa%2Fearthdata-search/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa%2Fearthdata-search/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nasa%2Fearthdata-search/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nasa","download_url":"https://codeload.github.com/nasa/earthdata-search/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242691623,"owners_count":20170205,"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":["data-discovery","earthdata-search","eosdis","hacktoberfest"],"created_at":"2024-07-30T19:01:31.214Z","updated_at":"2026-01-26T02:20:19.466Z","avatar_url":"https://github.com/nasa.png","language":"JavaScript","readme":"# [Earthdata Search](https://search.earthdata.nasa.gov)\n\n![Build Status](https://github.com/nasa/earthdata-search/workflows/CI/badge.svg?branch=main)\n[![codecov](https://codecov.io/gh/nasa/earthdata-search/branch/main/graph/badge.svg?token=kIkZQ0NrqK)](https://codecov.io/gh/nasa/earthdata-search)\n[![Known Vulnerabilities](https://snyk.io/test/github/nasa/earthdata-search/badge.svg)](https://snyk.io/test/github/nasa/earthdata-search)\n\n## About\n\nEarthdata Search is a web application developed by [NASA](http://nasa.gov) [EOSDIS](https://earthdata.nasa.gov) to enable data discovery, search, comparison, visualization, and access across EOSDIS' Earth Science data holdings.\nIt builds upon several public-facing services provided by EOSDIS, including the [Common Metadata Repository (CMR)](https://cmr.earthdata.nasa.gov/search/) for data discovery and access, EOSDIS [Earthdata Login (EDL)](https://urs.earthdata.nasa.gov) authentication, the [Global Imagery Browse Services (GIBS)](https://earthdata.nasa.gov/gibs) for visualization, and a number of OPeNDAP services hosted by data providers.\n\n## License\n\n\u003e Copyright © 2007-2024 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved.\n\u003e\n\u003e Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n\u003e You may obtain a copy of the License at\n\u003e\n\u003e \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e\n\u003e\n\u003eUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS,\n\u003eWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n\n## Application Installation and Usage\n\nThe Earthdata Search application uses NodeJS and Vite to generate static assets. The serverless application utilizes the following AWS services (important to note if deploying to an AWS environment):\n\n- S3\n  - We highly recommend using CloudFront in front of S3.\n- SQS\n- Step Functions\n- API Gateway\n- Lambda\n- Cloudwatch (Events)\n\n### Prerequisites\n\n#### NodeJS\n\nWe recommend using [Node Version Manager](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating) (NVM) to manage your NodeJS install. Use the shell integration to [automatically switch Node versions](https://github.com/nvm-sh/nvm?tab=readme-ov-file#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file).\n\nNVM will automatically install the correct node version defined in `.nvmrc`\n\n    nvm use\n\n##### PostgreSQL\n\nEarthdata Search uses PostgreSQL in production on AWS RDS. If you don't already have it installed, [download](https://www.postgresql.org/download/) and install it to your development environment.\n\n**Recommended:** Use Homebrew\n\n    brew install postgresql\n\nStart the PostgreSQL server:\n\n    # If you have never used brew services before:\n    brew tap homebrew/services\n\n    # Start the server:\n    brew services start postgresql\n\nIf you decide to install via Homebrew you'll need to create the default user.\n\n    createuser -s postgres\n\n##### Docker, Optional\n\nDocker is used to simulate SQS locally using [ElasticMQ](https://github.com/softwaremill/elasticmq).\n\n##### Redis, Optional\n\nTo use an image cache you need to have Redis installed.\n\n**Recommended:** Use Homebrew\n\n    brew install redis\n\nOptionally you can run Redis in a Docker container with\n\n    npm run start:cache\n\nTo stop the Redis Docker container\n\n    npm run stop:cache\n\n### Initial Setup\n\n##### Package Installation\n\nOnce npm is installed locally, you need to download the dependencies by executing the command below in the project root directory:\n\n    npm install\n\n##### Configuration\n\n###### Secrets\n\nFor local development Earthdata Search uses a json configuration file to store secure files, an example is provided and should be copied and completed before attempting to go any further.\n\n    cp secret.config.json.example secret.config.json\n\nIn order to operate against a local database this file will need `dbUsername` and `dbPassword` values set (you may need to update `dbHost`, `dbName` or `databasePort` in `static.config.json` if you have custom configuration locally).\n\nIf you created the `postgres` user after a new PostgreSQL install as described above, both `dbUsername` and `dbPassword` will be the username you use to log into your computer.\n\n###### Public (Non-Secure)\n\nNon-secure values are stored in `static.config.json`. In order to prevent conflicts amongst developers you copy the static config into `overrideStatic.config.json` and change the config values there. Do not commit changes to `static.config.json`.\n\n    cp static.config.json overrideStatic.config.json\n\nWe can configure some of the layouts for the EDSC presentation by updating the `defaultPortal` value in `overrideStatic.config.json`. For development purposes we should set this to `edsc`.\n\n##### Database Migration\n\nEnsure that you have a database created:\n\n    createdb edsc_dev\n\nTo run the migrations locally:\n\n    npm run invoke-local migrateDatabase\n\n###### Creating a new database migration\n\nTo create a new database migration use this command to ensure the migration follow the same timestamp name scheme.\n\n    npm run migrate create name-of-migration\n\n### Run the Application Locally\n\nThe local development environment for the static assets can be started by executing the command below in the project root directory:\n\n    npm start\n\nThis will start everything you need to run Earthdata Search locally.\n\n- React application: [http://localhost:8080](http://localhost:8080)\n- Mock API Gateway: [http://localhost:3001](http://localhost:3001)\n- Watch for code changes to the `serverless` directory\n- ElasticMQ container for SQS Queues.\n- Mock SQS service to trigger lambdas on SQS messages.\n\n#### Optional Services\n\nBy default we don't run SQS or an image cache locally. In order to run the application with those services you need to include the follow environment variables when you start the application\n\n    USE_IMAGE_CACHE=true SKIP_SQS=false npm start\n\nOr run\n\n    npm run start:optionals\n\n### Building the Application\n\nThe production build of the application will be output in the `/static/dist/` directory:\n\n    npm run build\n\nThis production build can be run locally with any number of http-server solutions. A simple one is to use the http-server package\n\n    npx http-server static/dist\n\n### Invoking lambdas locally\n\nTo invoke lambdas locally we must create a stringified JSON file with the order information to the specific lambda we are trying to run the structure of the events will differ between the lambda. Typically this will include data from your local database instance which is used in the event information.\n\n    npm run invoke-local \u003cname-of-lambda-function\u003e ./path/to/event.json\n\n### Pulling down colormaps locally\n\nRun the application with optionals on then use\n\n    npm run invoke-local generateColorMaps ./tmp/generate_colormaps.json\n\nwith a JSON object of\n\n{\n  \"projection\": \u003cprojection-code\u003e\n}\n\n### Run the Automated [Jest](https://jestjs.io/) tests\n\nOnce the project is built, you must ensure that the automated unit tests pass:\n\n    npm run test\n\nTo run Jest in `watch` mode\n\n    npm run test:watch\n\nTo only get coverage on files tested run\n\n    npm run test:watch-lite\n\nTest coverage will be updated in the coverage directory to see breakdown use\n\n    open coverage/lcov-report/index.html\n\n### Run the Automated [Playwright](https://playwright.dev/) tests\n\nTo run Playwright tests, you must first install Playwright:\n\n    npx playwright install\n\nTo run Playwright in `ui` mode:\n\n    npm run playwright:ui\n\nTo run Playwright tests in headless mode:\n\n    npm run playwright\n\n### Deployment\n\nWhen the time comes to deploy the application, first ensure that you have the required ENV vars set:\n\n- AWS_ACCESS_KEY_ID\n- AWS_SECRET_ACCESS_KEY\n- STAGE_NAME\n\nThis application runs in a VPC for NASA security purposes, therefore the following values are expected when a deployment occurs:\n\n- VPC_ID\n- SUBNET_ID_A\n- SUBNET_ID_B\n- INTERNET_SERVICE_EAST_VPC\n\nFor production use, this application uses Scatter Swap to obfuscate some IDs -- the library does not require a value be provided but if you'd like to control it you can set the following ENV vars:\n\n- OBFUSCATION_SPIN\n- OBFUSCATION_SPIN_SHAPEFILES\n\nTo deploy the full application use the following:\n\n    bin/deploy_bamboo.sh\n\nNote: In that script all the env variables are prefixed with `bamboo_` to match our deployments.\n","funding_links":[],"categories":["JavaScript","The United States of America","Sustainable Development"],"sub_categories":["National Aeronautics and Space Administration","Data Catalogs and Interfaces"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa%2Fearthdata-search","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnasa%2Fearthdata-search","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnasa%2Fearthdata-search/lists"}