{"adoption": {"forks": 3265, "observed_at": "2026-08-28T04:11:38.077339+00:00", "stars": 25242}, "canonical_url": "https://ross.abutalabs.com/products/photoswipe", "card": {"archived": false, "artifact_type": "library", "description": "JavaScript image gallery for mobile and desktop, modular, framework independent", "domain": ["web-development", "frontend", "media", "photography"], "enriched": true, "function": ["ui-components", "image-processing", "animation"], "health_score": 60, "homepage": "http://photoswipe.com", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["dimsemenov/PhotoSwipe"], "name": "dimsemenov/PhotoSwipe", "platform": ["browser", "cross-platform"], "pushed_at": "2025-12-04T07:31:46+00:00", "repo": "dimsemenov/PhotoSwipe", "stars": 25242, "tags": ["image-gallery", "lightbox", "touch-gestures", "es-modules", "framework-agnostic", "zoom", "swipe", "javascript"], "topics": ["gallery", "lightbox", "image", "javascript"], "urls": [], "use_cases": ["add a lightbox to an image gallery on a website", "display photos with swipe and pinch-zoom on mobile", "open images in an overlay with thumbnail-to-fullscreen animation", "build a responsive photo gallery without a framework", "lazy-load a gallery script only when a user clicks an image", "show image captions in a lightbox viewer"], "what_it_is": "PhotoSwipe is a modular, framework-independent JavaScript image gallery and lightbox library for mobile and desktop browsers. It provides touch-friendly swipe and zoom gestures, smooth open/close animations from thumbnails, and is distributed as ES modules with a lightweight lightbox that lazily loads the core.", "when_to_avoid": ["you need to display very large images beyond ~3000x3000px without tiling", "you require built-in caption support without writing API code or using a plugin", "you must support legacy browsers, as PhotoSwipe targets modern browsers only", "you need a full gallery management system with albums and uploads rather than a viewer"], "when_to_choose": ["you need a touch-friendly, accessible image lightbox in vanilla JavaScript", "you want a framework-agnostic gallery that works with React, Vue, or Svelte", "you care about bundle size and want dynamic imports of the core viewer", "you need smooth thumbnail-to-fullscreen open/close transitions"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/photoswipe", "repo": "dimsemenov/PhotoSwipe", "role": "main", "score": 48}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:38.077339+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:56:04.729377+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b54b8dd7246e834a835853fc9eaf6a5cdae77e834c908541f1f68124ceb38f69", "fetched_at": "2026-08-28T04:11:38.077339+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dimsemenov/PhotoSwipe"}, {"content_hash": "18ef228712ed63b0cc65f7154f39b82a5b074b0530f3006d62d947943987b78a", "fetched_at": "2026-08-29T07:53:25.226483+00:00", "kind": "homepage", "missing": false, "url": "http://photoswipe.com"}, {"content_hash": "64c64b26e9c12c5b59634483ce9d3c828dd9c1d6677746de445a60b645f9140a", "fetched_at": "2026-08-29T07:53:25.236047+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/getting-started"}, {"content_hash": "7810014b88d2e452f333993d72180772ab4d47e55929f7a854c512fde2374e50", "fetched_at": "2026-08-29T07:53:25.242231+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/photoswipe"}, {"content_hash": "db5a345a40683e986c4fb987c62295311eaf411b93ec0a2b4fb7239fab8f17f2", "fetched_at": "2026-08-29T07:53:25.238436+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/native-fullscreen-on-open"}, {"content_hash": "f8ce755d2bc9968448c3947e952a6060b197632e76b92455e008915d4d8954fa", "fetched_at": "2026-08-29T07:53:25.240358+00:00", "kind": "site_page", "missing": false, "url": "https://photoswipe.com/caption"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 55, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5627, "days_push": 272, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 48, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}