{"adoption": {"forks": 331, "observed_at": "2026-08-28T04:05:50.570287+00:00", "stars": 1893}, "canonical_url": "https://ross.abutalabs.com/products/asset_sync", "card": {"archived": false, "artifact_type": "library", "description": "Synchronises Assets between Rails and S3", "domain": ["web-development", "cloud-computing"], "enriched": true, "function": ["deployment", "developer-tools", "file-system"], "health_score": 77, "homepage": null, "language": "Ruby", "license": null, "license_family": "other", "maturity": "stable", "member_repos": ["AssetSync/asset_sync"], "name": "AssetSync/asset_sync", "platform": ["ruby", "cloud", "self-hosted"], "pushed_at": "2026-07-31T22:18:08+00:00", "repo": "AssetSync/asset_sync", "stars": 1893, "tags": ["rails", "s3", "asset-pipeline", "sprockets", "heroku", "fog", "cdn-assets", "ruby-gem", "devops"], "topics": [], "urls": [], "use_cases": ["sync rails precompiled assets to s3", "serve rails assets from a cdn or cloud bucket", "deploy a rails app on heroku with assets on s3", "upload only changed assets after assets:precompile", "use google cloud storage or azure blob for rails assets", "remove stale assets from an s3 bucket after deploy"], "what_it_is": "A Ruby gem that synchronizes Rails precompiled assets (via the asset pipeline) to cloud storage such as Amazon S3, Google Cloud Storage, Azure Blob, or Backblaze B2. It runs after asset precompilation, optionally deleting unused files and uploading only what changed, and was originally built for Heroku deployments.", "when_to_avoid": ["you use a modern Rails setup with a different asset strategy (e.g., Propshaft, jsbundling) that already handles uploads", "you need general-purpose file syncing rather than Rails asset pipeline integration", "your project is not Ruby/Rails"], "when_to_choose": ["you run a Rails 3.1+ app using the asset pipeline and want assets on S3 or similar object storage", "you deploy to Heroku or an ephemeral filesystem where local assets are not persisted", "you want incremental syncing that only uploads changed files and can clean unused ones"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/asset_sync", "repo": "AssetSync/asset_sync", "role": "main", "score": 75}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "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:05:50.570287+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:50.570287+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:12:54.625262+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3bfebb9e39c16266752c21824dc50697327eded3dc5c62566f3ee364ef88f21a", "fetched_at": "2026-08-28T04:05:50.570287+00:00", "kind": "readme", "missing": false, "url": "https://github.com/AssetSync/asset_sync"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5514, "days_push": 33, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 75, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}