{"package":"narwhals","ecosystem":"pypi","latest_version":"2.24.0","description":"Extremely lightweight compatibility layer between dataframe libraries","license":"MIT","license_risk":"permissive","commercial_use_notes":"Permissive: commercial closed-source use OK; preserve the copyright notice.","homepage":"https://pypi.org/project/narwhals/","repository":"https://github.com/narwhals-dev/narwhals","downloads_weekly":34610315,"health":{"score":92,"risk":"low","breakdown":{"maintenance":25,"popularity":20,"security":25,"maturity":15,"community":7,"popularity_floor":0},"deprecated":false,"max_score":100},"vulnerabilities":{"count":0,"critical":0,"high":0,"medium":0,"low":0,"details":[]},"versions":{"latest":"2.24.0","total_count":241,"recent":["2.10.0","2.10.1","2.10.2","2.11.0","2.12.0","2.13.0","2.14.0","2.15.0","2.16.0","2.17.0","2.18.0","2.18.1","2.19.0","2.20.0","2.21.0","2.21.2","2.22.0","2.22.1","2.23.0","2.24.0"]},"metadata":{"deprecated":false,"deprecated_message":null,"maintainers_count":1,"first_published":null,"last_published":"2026-07-13T10:49:17.571855Z","dependencies_count":15,"dependencies":["cudf-cu12>=24.10.0; sys_platform == \"linux\" and extra == \"cudf\"","dask[dataframe]>=2024.8; extra == \"dask\"","duckdb>=1.1; extra == \"duckdb\"","ibis-framework>=6.0.0; extra == \"ibis\"","packaging>=21.3; extra == \"ibis\"","pyarrow-hotfix>=0.7; extra == \"ibis\"","modin>=0.22.0; extra == \"modin\"","pandas>=1.3.4; extra == \"pandas\"","polars>=0.20.4; extra == \"polars\"","pyarrow>=13.0.0; extra == \"pyarrow\"","pyspark>=3.5.0; extra == \"pyspark\"","pyspark[connect]>=3.5.0; extra == \"pyspark-connect\"","narwhals[duckdb]; extra == \"sql\"","sqlparse>=0.5.5; extra == \"sql\"","sqlframe!=3.39.3,>=3.22.0; extra == \"sqlframe\""]},"github_stats":{"stars":1590,"forks":187,"open_issues":196,"is_archived":false,"pushed_at":"2026-04-15T22:47:35+00:00"},"bundle":null,"typescript":null,"known_issues":{"bugs_count":0,"bugs_severity":{},"status_breakdown":{},"link":null,"scope":"none"},"historical_compromise":null,"recommendation":{"action":"safe_to_use","issues":[],"use_version":"2.24.0","version_hint":null,"summary":"narwhals@2.24.0 is safe to use (health: 92/100)"},"version_scoped":null,"_meta":{"endpoint":"check","tier":"full","philosophy":"DepScope is free. Use the cheapest endpoint that answers your real question.","cheaper_alternatives":[{"endpoint":"/api/exists/pypi/narwhals","tokens_estimated":12,"use_when":"you only need to know if the package exists (hallucination guard)"},{"endpoint":"/api/health/pypi/narwhals","tokens_estimated":80,"use_when":"you only need a 0-100 score for go/no-go (>=70 = safe)"},{"endpoint":"/api/prompt/pypi/narwhals","tokens_estimated":280,"use_when":"you want a plain-text LLM-friendly brief instead of JSON"},{"endpoint":"POST /api/check_bulk","tokens_estimated":60,"use_when":"you have 5+ packages to check; sends one round-trip instead of N"}],"docs":"https://depscope.dev/integrate","hint_bulk":"You've called /api/check 75 times in 60s. Save bandwidth + tokens with POST /api/check_bulk (1 round-trip for N pkgs)."},"requested_version":null,"_cache":"hit","_response_ms":0,"_powered_by":"depscope.dev — free package intelligence for AI agents","typosquat":{"is_suspected":false},"maintainer_trust":{"available":true,"bus_factor_3m":12,"active_contributors_12m":13,"primary_author_ratio":0.32,"owner_account_age_days":714,"is_archived":false,"stars":1592,"alerts":[]},"malicious":{"is_malicious":false},"scorecard":{"available":false},"quality":{"available":true,"criticality_score":null,"criticality_tier":null,"velocity_pct":0.0,"velocity_trend":"stable","publish_security":"api_token"},"version_history_summary":{"total_versions":20,"first_release_age_days":877,"last_release_days_ago":3,"avg_days_between_releases":46,"release_velocity":"active"}}