Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 10:54 UTC

rive-app / rive-nitro-react-native

Rive React Native - v2 built with Nitro

TypeScript · Kotlin · SwiftMIT★ 145 estrellas⑂ 10 forksdesde may 2025Ver en GitHub ↗

rive-app/rive-nitro-react-native tiene un índice de salud de 75 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (92/100) y la más baja, Security (49/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

75
global / 100
Bueno

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

75
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

RiveOrganización
1330 seguidores60 repositorios públicosdesde dic 2019

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@rive-app/react-native0.4.19208.18338hace 4 díasreact-nativeiosandroid

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

92Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
22.2/36Cadencia de commits — 32/52 semanas con commits
18/18Volumen de commits — 186 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year186
human_commit_share1
days_since_last_push0
active_weeks_last_year32
Cómo se puntúa
27/27Publica versiones — 40 versiones publicadas
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~5,5 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count40
latest_release_tagv0.4.19
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases5,5
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

71Bueno · 18% del índice global
Cómo se puntúa
35/60Estrellas — 145 estrellas
8/25Forks — 10 forks
5/15Observadores — 9 observadores
Datos de entrada utilizados
forks10
stars145
watchers9
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_templateno
Cómo se puntúa
70.9/80Descargas mensuales — 208.183 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@rive-app/react-native
dependents
ecosystemsnpm
total_downloads
monthly_downloads208.183
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

73Bueno · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
8.8/22.5Distribución de commits — el principal contribuyente firma el 61% de los commits
8.1/13.5Amplitud de contribuyentes — 6 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Datos de entrada utilizados
bus_factor1
contributors_sampled6
top_contributor_share0,607
Cómo se puntúa
45.3/46.8Resolución de issues — 97% de issues cerradas
32/38.3Aceptación de PR — 226/270 PR decididos fusionados
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Datos de entrada utilizados
merged_prs226
open_issues2
closed_issues62
issue_closed_ratio0,969
closed_unmerged_prs44
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
22.5/25Alcance del propietario — 1330 seguidores de rive-app
25/25Trayectoria — 60 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers1330
owner_typeOrganization
is_verified
owner_loginrive-app
public_repos60
account_age_days2423
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 4 días
20/20Historial de versiones — 38 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@rive-app/react-native
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

82Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 4 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — eslint.config.js, eslint.config.mjs
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 26 out of 30 merged PRs checked by a CI test -- score normalized to 8
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

49En riesgo · 16% del índice global
Cómo se puntúa
6.8/7.5Binary-Artifacts — binaries present in source code
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2/2.5CI-Tests — 26 out of 30 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 105 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,9
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

61Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — android/build.gradle, example/android/app/build.gradle, example/android/build.gradle (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.js, eslint.config.mjs
11/11Verificación estática de tipos — expo-example/tsconfig.json, expo55-example/tsconfig.json, expo57-example/tsconfig.json, tsconfig.json
10/10Entorno reproducible — lockfile
2/10Práctica demostrada con agentes — 1 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesGemfile.lock, yarn.lock
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsexpo-example/tsconfig.json, expo55-example/tsconfig.json, expo57-example/tsconfig.json, tsconfig.json
agent_commit_share0,01
toolchain_manifestsandroid/build.gradle, example/android/app/build.gradle, example/android/build.gradle, rive-debug-utils/android/build.gradle
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.6/55Tamaños de archivo manejables — 2/304 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes2.228.925
source_files_sampled304
oversized_source_files2
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — demos, example
Datos de entrada utilizados
example_dirsdemos, example
has_mcp_signalno
api_schema_files

Datos clave

145estrellas de GitHub
6contribuidores
186commits en los últimos 12 meses
0días desde el último push
40versiones publicadas
1factor bus
2issues abiertas
Maven, npm, RubyGemsecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:@rive-app/react-native@0.4.19; advisories assessed against the repository dependency graph instead

Más detalle

Historial de estrellas y forks 0 ★ / 10 ⇿
0Estrellas
10Forks
33Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

02468101022025-112026-032026-06
Mayor 0Menor 3Parche 29
OpenSSF Scorecard 4.9 / 10
4.9agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-22 10:54 UTC

9Binary-Artifactsbinaries present in source code
5Branch-Protectionbranch protection is not maximal on development and all release branches
8CI-Tests26 out of 30 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities105 existing vulnerabilities detected
Dependencias directas 88
RegistroPaqueteRestricción de versiónManifiesto
npm@expo/vector-icons^15.0.3expo-example/package.json
npm@react-native-async-storage/async-storage^2.1.2expo-example/package.json
npm@react-native-picker/picker^2.11.4expo-example/package.json
npm@react-navigation/bottom-tabs^7.4.0expo-example/package.json
npm@react-navigation/elements^2.6.3expo-example/package.json
npm@react-navigation/native^7.1.8expo-example/package.json
npmexpo~54.0.20expo-example/package.json
npmexpo-constants~18.0.10expo-example/package.json
npmexpo-font~14.0.9expo-example/package.json
npmexpo-haptics~15.0.7expo-example/package.json
npmexpo-image~3.0.10expo-example/package.json
npmexpo-linking~8.0.8expo-example/package.json
npmexpo-router~6.0.13expo-example/package.json
npmexpo-screen-orientation~9.0.8expo-example/package.json
npmexpo-splash-screen~31.0.10expo-example/package.json
npmexpo-status-bar~3.0.8expo-example/package.json
npmexpo-symbols~1.0.7expo-example/package.json
npmexpo-system-ui~6.0.8expo-example/package.json
npmexpo-web-browser~15.0.8expo-example/package.json
npmreact19.1.0expo-example/package.json
npmreact-dom19.1.0expo-example/package.json
npmreact-native0.81.5expo-example/package.json
npmreact-native-gesture-handler2.29.1expo-example/package.json
npmreact-native-nitro-modules0.35.10expo-example/package.json
npmreact-native-reanimated4.1.5expo-example/package.json
npmreact-native-safe-area-context~5.6.0expo-example/package.json
npmreact-native-screens~4.16.0expo-example/package.json
npmreact-native-web~0.21.0expo-example/package.json
npmreact-native-worklets0.6.1expo-example/package.json
npmrive-debug-utilsworkspace:*expo-example/package.json
npm@expo/vector-icons^15.0.3expo55-example/package.json
npm@react-native-async-storage/async-storage^2.1.2expo55-example/package.json
npm@react-native-picker/picker^2.11.4expo55-example/package.json
npm@react-navigation/bottom-tabs^7.15.5expo55-example/package.json
npm@react-navigation/elements^2.6.3expo55-example/package.json
npm@react-navigation/native^7.1.33expo55-example/package.json
npmexpo^55.0.12expo55-example/package.json
npmexpo-constants~55.0.12expo55-example/package.json
npmexpo-font~55.0.4expo55-example/package.json
npmexpo-haptics~55.0.14expo55-example/package.json
npmexpo-image~55.0.8expo55-example/package.json
npmexpo-linking~55.0.11expo55-example/package.json
npmexpo-router~55.0.11expo55-example/package.json
npmexpo-screen-orientation~55.0.13expo55-example/package.json
npmexpo-splash-screen~55.0.6expo55-example/package.json
npmexpo-status-bar~55.0.5expo55-example/package.json
npmexpo-symbols~55.0.7expo55-example/package.json
npmexpo-system-ui~55.0.15expo55-example/package.json
npmexpo-web-browser~15.0.10expo55-example/package.json
npmreact19.2.0expo55-example/package.json
npmreact-dom19.2.0expo55-example/package.json
npmreact-native0.83.4expo55-example/package.json
npmreact-native-gesture-handler~2.29.0expo55-example/package.json
npmreact-native-nitro-modules0.35.10expo55-example/package.json
npmreact-native-reanimated4.2.1expo55-example/package.json
npmreact-native-safe-area-context~5.6.2expo55-example/package.json
npmreact-native-screens~4.23.0expo55-example/package.json
npmreact-native-web~0.21.0expo55-example/package.json
npmreact-native-worklets0.7.4expo55-example/package.json
npmrive-debug-utilsworkspace:*expo55-example/package.json
npm@react-native-async-storage/async-storage^2.1.2expo57-example/package.json
npm@react-native-picker/picker^2.11.4expo57-example/package.json
npm@react-navigation/bottom-tabs^7.15.5expo57-example/package.json
npm@react-navigation/elements^2.6.3expo57-example/package.json
npm@react-navigation/native^7.1.33expo57-example/package.json
npmexpo^57.0.4expo57-example/package.json
npmexpo-constants~57.0.3expo57-example/package.json
npmexpo-font~57.0.0expo57-example/package.json
npmexpo-haptics~57.0.0expo57-example/package.json
npmexpo-image~57.0.0expo57-example/package.json
npmexpo-linking~57.0.2expo57-example/package.json
npmexpo-router~57.0.4expo57-example/package.json
npmexpo-screen-orientation~57.0.0expo57-example/package.json
npmexpo-splash-screen~57.0.2expo57-example/package.json
npmexpo-status-bar~57.0.0expo57-example/package.json
npmexpo-system-ui~57.0.0expo57-example/package.json
npmexpo-web-browser~57.0.0expo57-example/package.json
npmreact19.2.3expo57-example/package.json
npmreact-dom19.2.3expo57-example/package.json
npmreact-native0.86.0expo57-example/package.json
npmreact-native-gesture-handler~2.32.0expo57-example/package.json
npmreact-native-nitro-modules0.35.10expo57-example/package.json
npmreact-native-reanimated4.5.0expo57-example/package.json
npmreact-native-safe-area-context~5.7.0expo57-example/package.json
npmreact-native-screens4.25.2expo57-example/package.json
npmreact-native-web~0.21.0expo57-example/package.json
npmreact-native-worklets0.10.0expo57-example/package.json
npmrive-debug-utilsworkspace:*expo57-example/package.json
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 78222,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C++": 316,
        "Ruby": 5288,
        "CMake": 1062,
        "Shell": 2644,
        "Swift": 156884,
        "Kotlin": 166183,
        "JavaScript": 38641,
        "TypeScript": 565024,
        "Objective-C": 1518
      },
      "pushed_at": "2026-07-21T18:56:34Z",
      "created_at": "2025-05-12T00:48:42Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T18:56:23Z",
      "description": "Rive React Native - v2 built with Nitro",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "Kotlin",
        "Swift"
      ]
    },
    "owner": {
      "blog": "https://rive.app/",
      "name": "Rive",
      "type": "Organization",
      "login": "rive-app",
      "company": null,
      "location": "United States of America",
      "followers": 1330,
      "avatar_url": "https://avatars.githubusercontent.com/u/58453772?v=4",
      "created_at": "2019-12-03T02:48:12Z",
      "is_verified": null,
      "public_repos": 60,
      "account_age_days": 2423
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.4.19",
          "kind": "patch",
          "published_at": "2026-07-17T11:11:55Z"
        },
        {
          "tag": "v0.4.18",
          "kind": "patch",
          "published_at": "2026-07-15T16:19:44Z"
        },
        {
          "tag": "v0.4.17",
          "kind": "patch",
          "published_at": "2026-07-14T20:09:19Z"
        },
        {
          "tag": "v0.4.16",
          "kind": "patch",
          "published_at": "2026-07-14T10:00:08Z"
        },
        {
          "tag": "v0.4.15",
          "kind": "patch",
          "published_at": "2026-07-13T20:16:40Z"
        },
        {
          "tag": "v0.4.14",
          "kind": "patch",
          "published_at": "2026-07-06T13:34:47Z"
        },
        {
          "tag": "v0.4.13",
          "kind": "patch",
          "published_at": "2026-07-02T07:35:49Z"
        },
        {
          "tag": "v0.4.12",
          "kind": "patch",
          "published_at": "2026-06-26T13:19:21Z"
        },
        {
          "tag": "v0.4.11",
          "kind": "patch",
          "published_at": "2026-06-08T10:25:34Z"
        },
        {
          "tag": "v0.4.10",
          "kind": "patch",
          "published_at": "2026-05-29T05:37:12Z"
        },
        {
          "tag": "v0.4.9",
          "kind": "patch",
          "published_at": "2026-05-22T15:02:31Z"
        },
        {
          "tag": "v0.4.8",
          "kind": "patch",
          "published_at": "2026-05-21T20:01:34Z"
        },
        {
          "tag": "v0.4.7",
          "kind": "patch",
          "published_at": "2026-05-19T05:45:22Z"
        },
        {
          "tag": "v0.4.6",
          "kind": "patch",
          "published_at": "2026-04-23T14:46:27Z"
        },
        {
          "tag": "v0.4.5",
          "kind": "patch",
          "published_at": "2026-04-17T21:41:32Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-04-17T14:41:55Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-04-17T07:09:20Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-04-13T19:28:56Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-04-08T04:47:00Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-03-31T05:26:16Z"
        },
        {
          "tag": "v0.3.4",
          "kind": "patch",
          "published_at": "2026-03-30T17:16:22Z"
        },
        {
          "tag": "v0.3.3",
          "kind": "patch",
          "published_at": "2026-03-26T21:27:20Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-03-26T06:17:54Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-03-20T06:22:18Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-03-13T16:10:35Z"
        },
        {
          "tag": "v0.2.8",
          "kind": "patch",
          "published_at": "2026-03-13T11:18:51Z"
        },
        {
          "tag": "v0.2.7",
          "kind": "patch",
          "published_at": "2026-03-06T12:14:27Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2026-03-05T11:31:59Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2026-03-02T13:47:21Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2026-02-27T08:45:50Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2026-02-23T10:23:58Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-02-20T21:52:39Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-01-27T10:34:44Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-01-20T13:25:12Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2026-01-14T10:43:08Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2026-01-09T16:31:47Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-01-06T11:30:34Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2025-12-17T18:51:24Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2025-12-11T13:12:00Z"
        },
        {
          "tag": "v0.1.1-beta.1",
          "kind": "prerelease",
          "published_at": "2025-12-11T08:07:08Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "17984bc4752ec6c8523e75fd32944083143b0c41",
          "body": "Rive's official docs call the CommandQueue-based runtimes the \"New\nRuntime\" (Apple) / \"New Compose API\" (Android) and the previous ones\n\"legacy\" — \"experimental\" was our own term and is now off-message. This\nupdates prose in docs and spec JSDoc to the new/legacy vocabulary, and\nrewords user-facing e\n[…]\nckend()` keeps returning\n`'experimental' | 'legacy'` and is now documented `@internal` — it\nexists for internal testing during the rollout, and it and the legacy\nruntime are slated for removal in 0.6.",
          "is_bot": false,
          "headline": "docs: adopt Rive's \"new runtime\" / \"legacy runtime\" terminology (#351)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-21T18:56:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae779a30668fbaef2ad58f015ab6365a7ff83fe6",
          "body": "Adds a new native backend using Rive's experimental runtime APIs on both\niOS and Android. The new backend is async-native — all ViewModel\noperations go through a CommandQueue, eliminating the need for\n`blockingAsync`/`runBlocking` wrappers on the non-deprecated API\nsurface.\n\nThe experimental backend\n[…]\n are no-ops (not yet available in\nexperimental SDK)\n\n---------\n\nCo-authored-by: Happy <yesreply@happy.engineering>\nCo-authored-by: Rive Engineering <60802183+rive-engineering@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat!: experimental Rive runtime backend (iOS + Android) (#134)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-20T13:19:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "293843393346a3b41f2e32817e48d3682a44efbf",
          "body": "The feature table still said \"alignment coming soon\", but the\n`alignment` prop is implemented end to end\n(`src/specs/RiveView.nitro.ts`, `src/core/Alignment.ts`, and both native\nviews). Updates the row description to match.",
          "is_bot": false,
          "headline": "docs: alignment is supported, remove stale \"coming soon\" note (#339)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-17T13:19:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6e1baa2ed62ba0ce7687c1c8c33f7ce3403762f",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.19](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.18...v0.4.19)\n(2026-07-16)\n\n\n### Bug Fixes\n\n* **android:** make play() start the configured state machine on cold\nstart\n([#343](https://github.com/rive-app/rive-nitro-rea\n[…]\nact-native/issues/332)\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.19 (#346)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-07-17T11:11:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "99344d87ce05f48feeac073090c7232c102a7c74",
          "body": "…start (#343)\n\nOn Android, calling `play()` on a view mounted with `autoPlay={false}`\ndidn't start the configured state machine: nothing is instanced at that\npoint, so the wrapper fell through to rive-android's no-arg\n`controller.play()`, which starts the artboard's first raw animation\nplus its firs\n[…]\nludes a harness test that fails without the fix (\"View not\nconfigured\") and passes with it; verified on the Android emulator\nharness (full suite green) and on iOS (passes before and after).\n\nRefs #332",
          "is_bot": false,
          "headline": "fix(android): make play() start the configured state machine on cold …",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-16T21:54:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ddfe3fbb8eb76dec8f6c7c2702fc7163e2592b6",
          "body": "The v0.4.15–v0.4.17 publish failures went unnoticed for three releases\nbecause releases are created via the release-please PAT, so GitHub's\nworkflow-failure emails only go to the `rive-engineering` account. This\nadds two safeguards to the publish workflow:\n\n1. After `npm publish`, poll the registry \n[…]\nepo with a\nlink to the failed run and cc the maintainers, so failures surface where\npeople actually look.\n\nNeeds `issues: write` on the job, otherwise uses the default\n`GITHUB_TOKEN` — no new secrets.",
          "is_bot": false,
          "headline": "ci: file issue on publish failure and verify release is on npm (#345)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-16T21:25:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b8448dfe205e06329de4ec34777c2d206c8486a",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.18](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.17...v0.4.18)\n(2026-07-15)\n\n\n### Bug Fixes\n\n* pin npm down to v11 as latest compatible version for our node runner\n([#340](https://github.com/rive-app/rive-nitro-react-na\n[…]\n04b77d7e6cb7b9450afa))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.18 (#342)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-07-15T16:19:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5154496f0c943b068a6d04b77d7e6cb7b9450afa",
          "body": "…nner (#340)\n\nnpm v12 recently got released which dropped support for our pinned\n`.nvmrc` node version. We can look at updating that separately, but\npinning to npm v11 should unblock npm publishing.",
          "is_bot": false,
          "headline": "fix: pin npm down to v11 as latest compatible version for our node ru…",
          "author_name": "Zachary Plata",
          "author_login": "zplata",
          "committed_at": "2026-07-15T15:44:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb5a10b6328059a7d0affeb2440c644fba5098a3",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.17](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.16...v0.4.17)\n(2026-07-14)\n\n\n### Bug Fixes\n\n* bump rive-android to 11.7.1 and rive-ios to 6.21.0\n([#322](https://github.com/rive-app/rive-nitro-react-native/issues/322))\n\n[…]\n65bbdab8bec24c7d935e))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.17 (#338)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-07-14T20:09:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dd38f8fbc16a2d26b9b965bbdab8bec24c7d935e",
          "body": "Bumps the pinned native runtimes to the latest releases: rive-android\n11.6.2 → 11.7.1 and rive-ios 6.20.4 → 6.21.0.\n\nNotable changes on Android: 11.7.0 enables the Vulkan renderer by\ndefault (#317 had intentionally stayed on the 11.6.2 backport to defer\nthis) and includes the full ViewModelInstance \n[…]\nap generation fixes.\n\nNotable changes on iOS: 6.21.0 adds VoiceOver semantics support,\nartboard volume control, and defaults `RiveUIView.isOpaque` to false so\ntransparent backgrounds render correctly.",
          "is_bot": false,
          "headline": "fix: bump rive-android to 11.7.1 and rive-ios to 6.21.0 (#322)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-14T15:52:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c36b42571ff16294e621f62aa4f61c43378229dc",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.16](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.15...v0.4.16)\n(2026-07-14)\n\n\n### Bug Fixes\n\n* **android:** release data-binding HybridObject native resources\n([#302](https://github.com/rive-app/rive-nitro-react-native/\n[…]\n5bd960301edebd112c55))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.16 (#337)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-07-14T09:59:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42815197962f0ba9d2fd5bd960301edebd112c55",
          "body": "Each `HybridViewModel*Property` / `HybridViewModelInstance` is a small\nJS object that pins a JNI global reference plus a native Rive object.\nTwo issues with how those were managed:\n\n**`dispose()` was hidden.** A property both extends its generated\n`*Spec` (a `HybridObject`) and delegates `BaseHybrid\n[…]\nand on an unfixed build the\napp dies within seconds; with this fix the counter climbs indefinitely.\n(Same operations as the local harness stress, which aborts every run\nwithout the fix and 0 with it.)",
          "is_bot": false,
          "headline": "fix(android): release data-binding HybridObject native resources (#302)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-14T08:00:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0796bbe8d57e0ecfa889969e5bc7ee6ed536089d",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.15](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.14...v0.4.15)\n(2026-07-13)\n\n\n### Features\n\n* **hooks:** async instance creation via useViewModelInstance({ async:\ntrue })\n([#331](https://github.com/rive-app/rive-nitro-r\n[…]\n697afdcff9d05308a785))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.15 (#334)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-07-13T20:16:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78052b57ec89b0649285697afdcff9d05308a785",
          "body": "…: true }) (#331)\n\nPort of #304 (merged to `feat/rive-ios-experimental`) to `main`.\n\n`useViewModelInstance(source, { async: true })` creates the instance via\nthe `*Async` runtime APIs off the JS thread and returns `{ instance,\nisLoading, error }`. The sync overloads are deprecated per-overload\n(they\n[…]\nthe sync hook, a `null` source now settles to a terminal `{\ninstance: null, isLoading: false }` instead of reporting\nundefined/loading forever.\n\n\nDocs: rive-app/rive-docs#797 (draft until this ships).",
          "is_bot": false,
          "headline": "feat(hooks): async instance creation via useViewModelInstance({ async…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-13T13:57:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e38ce81dcb8764eecadeb55b5e7632fd0ad9ff62",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.14](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.13...v0.4.14)\n(2026-07-06)\n\n\n### Bug Fixes\n\n* **android:** bump rive-android to 11.6.2\n([#317](https://github.com/rive-app/rive-nitro-react-native/issues/317))\n([ae66b24]\n[…]\ne399a0b299459d01abb2))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.14 (#321)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-07-06T13:34:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4259723cda269a29700fdba81a85bddd131f429c",
          "body": "… (#319)\n\nFixes a production crash: after a RiveView is dropped, `dispose()`\nreleases the controller (which releases its `File`), but\n`rendererAttributes.resource` still caches a `ResourceRiveFile` pointing\nat the now-disposed file. If the Android view is later attached to a\nwindow again (e.g. Fabri\n[…]\n\nreproducer crashes with the exact production stack before the fix and\npasses after.\n\nSame fix as #318, which targets the `feat/use-viewmodel-instance-async`\nbranch (its `android/src/legacy` variant).",
          "is_bot": false,
          "headline": "fix(android): don't re-acquire a disposed Rive file on view re-attach…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-06T13:13:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dbb4dd7f8bdef33d2c50e399a0b299459d01abb2",
          "body": "A setter returned by `useRiveNumber`/`useRiveString`/etc. can be\ncaptured in a stale closure (async callback, timeout) and fire after its\nproperty was disposed by a deps change or unmount. The write then\nreaches the disposed hybrid and throws `Cannot set hybrid property ...\nNativeState is null` — fa\n[…]\nfter-unmount no-op+warn and the deps-change\nredirect, plus an on-device harness test (`staleSetterWrite.test.tsx`)\nthat fails on the unguarded hook — verified on the Android emulator on\nboth backends.",
          "is_bot": false,
          "headline": "fix(hooks): no-op stale property setter calls after dispose (#316)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-06T12:20:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae66b2409418feb61d2e73d0900af169a1d1c505",
          "body": "Bumps the pinned Android runtime from 11.6.1 to 11.6.2, which backports\nthe ViewModelInstance read/write lock from 11.7.0 without the 11.7.x\nVulkan default flip.\n\nIn 11.6.1, `StateMachineInstance.advance()` holds the file lock but\nViewModelInstance property access takes no lock, so a property write \n[…]\nhe\ndatabinding-related harness suites and a targeted advance-vs-write\nstress loop are green on both 11.6.1 and 11.6.2 (the race did not\nreproduce locally at this volume; no regressions from the bump).",
          "is_bot": false,
          "headline": "fix(android): bump rive-android to 11.6.2 (#317)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-06T11:48:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae45abb136cb1adb7fc677f8dceab8aff450afa6",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.13](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.12...v0.4.13)\n(2026-07-01)\n\n\n### Bug Fixes\n\n* **android:** avoid NoSuchElementException in view-model property\nlistener dispatch\n([#301](https://github.com/rive-app/rive-\n[…]\n3ca91f778dedae2ef789))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.13 (#311)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-07-02T07:35:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c643963f94f70157fac95ff48791bbfa9713b9ef",
          "body": "…rs) (#303)\n\nThe `#230` test drove re-renders with `setInterval(50ms)` for 300ms and\nasserted `renderCount >= 3` within a 2000ms `waitFor`. `waitFor`\nresolves the instant renderCount hits 3 — i.e. it needs *exactly* 2\ninterval ticks, **zero margin**. When the JS thread is busy at mount\n(RiveView + d\n[…]\nttempt eats the\nwhole 15-min step budget and the retry loop never advances. macOS has no\n`timeout`, so a background watchdog kills the stuck attempt and\n`nuke_harness` reaps the rest before the retry.",
          "is_bot": false,
          "headline": "test(example): de-flake use-rive-trigger #230 (deterministic re-rende…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-01T20:12:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d47784f1002a6bde7f193ca91f778dedae2ef789",
          "body": "…tener dispatch (#301)\n\n`onChanged()` copied the listener map with `listeners.values.toList()`.\nKotlin's `toList()` has a `size == 1` fast-path that calls\n`iterator().next()` unguarded, so it throws `NoSuchElementException`\nwhen the sole listener is removed concurrently (dispatch runs on\n`Dispatcher\n[…]\nes) — crashing the app\n(`test-harness-android` *\"App bridge disconnected\"*).\n\nIterate the `ConcurrentHashMap` directly instead — its weakly-consistent\niterator is `hasNext()`-guarded and never throws.",
          "is_bot": false,
          "headline": "fix(android): avoid NoSuchElementException in view-model property lis…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-07-01T14:57:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89ae4a7c174bd7d831f2c2778f1df6da84ec4068",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.12](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.11...v0.4.12)\n(2026-06-26)\n\n\n### Bug Fixes\n\n* make Rive data binding thread-safe on iOS & Android\n([#297](https://github.com/rive-app/rive-nitro-react-native/issues/297))\n[…]\nb937df53b8ae3ee68e8e))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.12 (#299)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-06-26T13:19:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "abc0c2c27c8e1bc559b7b937df53b8ae3ee68e8e",
          "body": "## Summary\n\nFixes the occasional crashes in #297. The Rive data-binding objects\naren't thread-safe and must be driven from a single thread, but the\nNitro layer accessed them from several threads with no synchronization:\n\n- **iOS** — the Rive SDK plus the Obj-C\n`RiveDataBindingViewModelInstance` / C+\n[…]\n/Products/Debug-iphonesimulator/RiveExample.app\nyarn test:harness:ios --testPathPattern issue297\n```\n\nOr enable Thread Sanitizer in the Xcode scheme (Run → Diagnostics) and\n`⌘R` once to build+install.",
          "is_bot": false,
          "headline": "fix: make Rive data binding thread-safe on iOS & Android (#297) (#298)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-06-26T11:22:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "134be5069468d022fc1e820a994f3338f5390e61",
          "body": "…admap items complete (#293)\n\nRemoves the Early Release warning banner and updates the roadmap to\nreflect that Data Binding - Artboards and Data Binding - Value props are\nboth fully implemented.",
          "is_bot": false,
          "headline": "chore: remove Early Release banner, mark artboards and value props ro…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-06-17T13:48:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11f5c36c50bc15e2435da43f6355c4866ff3a080",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.11](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.10...v0.4.11)\n(2026-06-08)\n\n\n### Bug Fixes\n\n* **android:** defer autoplay until after VM instance is bound\n([#283](https://github.com/rive-app/rive-nitro-react-native/iss\n[…]\n81794f6560b7ac251e92))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.11 (#284)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-06-08T10:25:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f600a471bcb55f4cf3b981794f6560b7ac251e92",
          "body": "Fixes #282\n\nEntry transitions evaluated with default VM values before the user's\ninstance was bound. Pass `autoplay=false` to `setRiveFile` and call\n`play(settleInitialState=false)` when data binding is active so the\nstate machine is created without advancing Entry. The first\nChoreographer frame adv\n[…]\n+ `dataBind`, asserts\n`inputOnEntry=42` (Entry copied `input` into `inputOnEntry`)\n- iOS: pass (was already correct)\n- Android: pass (was failing before fix -- `inputOnEntry` stayed at\ndefault `-100`)",
          "is_bot": false,
          "headline": "fix(android): defer autoplay until after VM instance is bound (#283)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-06-08T09:48:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bd36c25a3b2915fb6075ce359b5dfc9598c7b50f",
          "body": "Upgrades harness from 1.1.0 to 1.3.0. Key improvements:\n\n- Bridge RPC closes immediately on app disconnect instead of waiting for\ntimeout\n- New internal RPC transport with heartbeat-based liveness detection\n- Dead app connections fail fast instead of ambiguous \"device did not\nrespond\" after 90s\n\nShould reduce intermittent CI flakiness.",
          "is_bot": false,
          "headline": "Upgrade react-native-harness to 1.3.0 (#279)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-06-03T07:48:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b21fea24c49be6b1439a237332520d3f9c0d4b6",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.10](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.9...v0.4.10)\n(2026-05-28)\n\n\n### Bug Fixes\n\n* **android:** allow overriding CMake version for Windows long-path\nbuilds\n([#265](https://github.com/rive-app/rive-nitro-react\n[…]\nf30c040f78adafdf7cbc))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.10 (#276)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-05-29T05:36:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e5a5ce43fa3f27a40a7cf30c040f78adafdf7cbc",
          "body": "Fixes #225.\n\nThe crash was a use-after-free: `RiveFile` deallocated while asset\ndownloads are in-flight, leaving `RiveFactory` with a dangling\n`rive::Factory*` pointer. Concurrent downloads widened the timing\nwindow, making it look like a threading race.\n\nFix: strong `self` capture in decode closure\n[…]\nia a `decodeAndApply`\nhelper.\n\nAlso upgrades rive-ios from 6.18.2 to 6.20.4 (includes CDN\nuse-after-free fix from rive-app/rive-ios#449).\n\nVerified with 320+ mount/unmount stress cycles without crash.",
          "is_bot": false,
          "headline": "fix(ios): keep RiveFile alive until decode* completes (#225) (#266)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-28T05:58:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3748643a9751ef23684f01af0d7a9330436ac5a2",
          "body": "Bumps rive-ios from 6.18.2 to 6.20.4.",
          "is_bot": false,
          "headline": "fix: bump iOS runtime to 6.20.4 (#271)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-27T11:38:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7300001fdcfb6b31bec4841537b174d4a897e807",
          "body": "…ilds (#265)\n\nFixes #263\n\nOn Windows, the Android build fails when CMake object-file paths exceed\n`MAX_PATH` (260 chars). The NDK default CMake (3.22.1) can't handle the\ndeeply-nested paths from Nitrogen's generated sources.\n\nThis is a [known issue across React Native libraries that use\nCMake](https\n[…]\n/react-native-reanimated/docs/guides/building-on-windows/).\nAdds support for the `CMAKE_VERSION` env var (same as Reanimated) so\nusers can opt into a newer CMake (e.g. 3.31.6) that handles long paths.",
          "is_bot": false,
          "headline": "fix(android): allow overriding CMake version for Windows long-path bu…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-27T11:08:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed3f65c16af199bedf6ffa15d70431d6ac9b084e",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.9](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.8...v0.4.9)\n(2026-05-22)\n\n\n### Bug Fixes\n\n* prevent crash when trigger is called after dispose\n([#268](https://github.com/rive-app/rive-nitro-react-native/issues/268))\n([1\n[…]\n51ca67f9657cbc8e68b6))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.9 (#272)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-05-22T15:02:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13d9dc108f0427a09ba351ca67f9657cbc8e68b6",
          "body": "Calling `trigger()` from a stale closure (e.g. a Reanimated callback\nthat fires after navigation/unmount) would crash because the native\nproperty was already disposed.\n\n`useDisposableMemo` now accepts an optional `liveRef` parameter — set on\ncreate, cleared on dispose. `useRiveTrigger` uses this to safely no-op\nwith a `console.warn` instead of crashing.\n\nReproducer: mount RiveView with trigger → unmount → call trigger from\nasync callback.",
          "is_bot": false,
          "headline": "fix: prevent crash when trigger is called after dispose (#268)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-22T14:57:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91e488483fe8269925133325d9a9e349722bda5b",
          "body": "… (#269)\n\nAdding a \"standardized\" github issue template similar to what we did\nwith android/ios/js/etc. so users can fill out a form when submitting\nissues.\n\nFeel free to suggest other questions/context we should gather in the\nissue template",
          "is_bot": false,
          "headline": "chore: add standardized github issue template to react native runtime…",
          "author_name": "Zachary Plata",
          "author_login": "zplata",
          "committed_at": "2026-05-22T12:53:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0615e29408d1a455645cae0c5d59a4c7b4eab9b0",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.8](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.7...v0.4.8)\n(2026-05-21)\n\n\n### Bug Fixes\n\n* separate trigger hook lifecycle to prevent missed events on Android\n([#262](https://github.com/rive-app/rive-nitro-react-native\n[…]\n57a755491d874d9ed637))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.8 (#267)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-05-21T20:01:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2279f9026cc6d2c8c53357a755491d874d9ed637",
          "body": "…oid (#262)\n\nFixes #230\n\nUnstable `onTrigger` callback references cause `useRiveTrigger` to\nsilently stop receiving events on Android after re-renders.\n\n`useRiveTrigger` now manages its own property lifecycle (like\n`useRiveList`) instead of going through `useRiveProperty`. The callback\nis stored in \n[…]\nhe Rive button — first tap works, then triggers stop.\n// On Android the trigger fires at the native level (chest opens)\n// but the JS callback is never called after the bailout render.\n```\n\n</details>",
          "is_bot": false,
          "headline": "fix: separate trigger hook lifecycle to prevent missed events on Andr…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-21T13:43:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e8337e11cecb98f71a0e33088cac559b9af8d6e",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.7](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.6...v0.4.7)\n(2026-05-14)\n\n\n### Features\n\n* add async variants for ViewModelListProperty mutation methods\n([#238](https://github.com/rive-app/rive-nitro-react-native/issues\n[…]\nact-native/issues/255)\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.7 (#257)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-05-19T05:45:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "522ad07ac6f77907d61e3bf61cc569a0b78e1495",
          "body": "…#238)\n\nDeprecate sync addInstance, addInstanceAt, removeInstance,\nremoveInstanceAt, swap in favor of async versions that return\nPromise<void>. Ported from feat/rive-ios-experimental branch.",
          "is_bot": false,
          "headline": "feat: add async variants for ViewModelListProperty mutation methods (…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-14T11:32:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e5d3ecaa8109b952bfc0fc874e60cadaa5ece74",
          "body": "…del (#256)\n\nUnwrap `riveFile` upfront to avoid `RiveArtboard??` from `try?` combined\nwith optional chaining. Fixes build failure on Xcode 26.3+.\n\nCloses #255",
          "is_bot": false,
          "headline": "fix(iOS): resolve double optional type error in defaultArtboardViewMo…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-14T10:25:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7b1949c6f00c278c0688ebe27044bb23d987802",
          "body": "Add `kanit_regular.ttf` to expo-example and expo55-example via\n`expo-font` plugin so the font fallback example can load bundled fonts.\n`expo-asset` rejects `.ttf` files — `expo-font` is required.",
          "is_bot": false,
          "headline": "chore: bundle kanit_regular.ttf in expo examples (#235)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-05-13T19:34:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16a2a25e52716838ab83a8dda80286a8d4a9d839",
          "body": "Expo SDK 55 / RN 0.83 example app for testing on newer React Native\nversions. Shares the same page infrastructure as the main example app\nvia `@example/*` path aliases.\n\nIncludes a Metro resolver redirect so shared exerciser/reproducer files\nfrom `example/src/` resolve their dependencies from\n`expo55-example/node_modules`.",
          "is_bot": false,
          "headline": "chore: add expo55-example app for testing on RN 0.83 (#228)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-24T10:12:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1ed1a50e155f3520f2f9afd2bd3f48c702e12db",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.6](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.5...v0.4.6)\n(2026-04-23)\n\n\n### Bug Fixes\n\n* **iOS:** dispatch completion to main thread in handlePreloadedImage\n([#222](https://github.com/rive-app/rive-nitro-react-native\n[…]\n00dfa92eb98b74eb446d))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.6 (#229)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-04-23T14:42:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8286bcf03fbe759f50f200dfa92eb98b74eb446d",
          "body": "…ject (#227)\n\nCalling `dispose()` on a HybridObject that's currently a prop on a\nHybridView crashes on RN 0.83 (React 19 / Fabric). React Fabric's\n`cloneNodeWithNewProps` reads properties from the old prop value after\n`dispose()` has set NativeState to null, causing `\"Cannot get hybrid\nproperty ... \n[…]\n999',\n    fontSize: 12,\n    marginBottom: 4,\n  },\n  riveBox: {\n    borderWidth: 1,\n    borderColor: 'red',\n  },\n});\n```\n\n</details>\n\nUpstream Nitro issue: https://github.com/mrousavy/nitro/issues/1296",
          "is_bot": false,
          "headline": "fix: prevent crash when React Fabric diffs props on disposed HybridOb…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-23T14:17:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c043d4a80112c38da46c9da443d90302d3ec701",
          "body": "…(#222)\n\nFixes #221\n\n`handlePreloadedImage` was calling `completion()` synchronously on the\nRive C++ runtime's background import queue, but `completion` triggers\n`releaseFile()` which asserts main thread via `dispatchPrecondition`.\nEvery other asset path in `ReferencedAssetLoader` already dispatches\n[…]\ntchQueue.global(.userInitiated)\n```\n\nReproduced using the Out-of-Band Assets (Suspense) exerciser which calls\n`RiveImages.loadFromURLAsync` and passes the preloaded `RiveImage` via\n`referencedAssets`.",
          "is_bot": false,
          "headline": "fix(iOS): dispatch completion to main thread in handlePreloadedImage …",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-23T13:47:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "548bafe897ae8b7260c919595b1ab52a87145a28",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.5](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.4...v0.4.5)\n(2026-04-17)\n\n\n### Bug Fixes\n\n* **iOS:** use per-call ReferencedAssetLoader to prevent concurrent\naccess crash\n([#218](https://github.com/rive-app/rive-nitro-r\n[…]\na40be98621b54edc7cc4))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.5 (#224)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-04-17T21:41:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d92574dffbf86ccfd408a40be98621b54edc7cc4",
          "body": "…cess crash (#218)\n\nFixes #215\n\nRegression from #202 — the shared `ReferencedAssetLoader` instance on\n`HybridRiveFileFactory` caused a data race when multiple `RiveFile`\nloads ran concurrently (e.g. mounting several `RiveView` components\nsimultaneously).\n\n`HybridRiveFileFactory.genericFrom` dispatch\n[…]\ningVertical: 8, paddingHorizontal: 20, borderRadius: 12, alignSelf: 'center', marginTop: 8 },\n  buttonText: { color: '#FFF', fontSize: 13, fontWeight: '600', textAlign: 'center' },\n});\n```\n\n</details>",
          "is_bot": false,
          "headline": "fix(iOS): use per-call ReferencedAssetLoader to prevent concurrent ac…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-17T20:57:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e9d648bce355fe56b0f9b0cd064cfc498ac86d2d",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.4](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.3...v0.4.4)\n(2026-04-17)\n\n\n### Bug Fixes\n\n* survive fast refresh without disposing native objects\n([#213](https://github.com/rive-app/rive-nitro-react-native/issues/213))\n\n[…]\n895abd39db648fd3a9f0))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.4 (#223)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-04-17T14:41:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dea0ae28282245e145ce895abd39db648fd3a9f0",
          "body": "## Summary\n\nCherry-pick of #212 onto main. Fixes #205.\n\nFast refresh (HMR) re-runs all effect cleanups then all effects. Hooks\nthat disposed native HybridObjects in effect cleanup would destroy the\nbacking native state, but `useMemo` caches still returned the same (now\ndead) JS references — causing \n[…]\n`useRiveList`, and `useViewModelInstance`.\n\n## Test plan\n\n- [x] 9 unit tests for useDisposableMemo\n- [x] All existing tests pass\n- [x] Tested on iOS with Data Binding exerciser — fast refresh survives",
          "is_bot": false,
          "headline": "fix: survive fast refresh without disposing native objects (#213)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-17T14:26:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "edbde135018057d13d91836e41eabef53e8d40f9",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.3](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.2...v0.4.3)\n(2026-04-17)\n\n\n### Bug Fixes\n\n* bump rive-ios to 6.18.2 and rive-android to 11.4.0\n([#216](https://github.com/rive-app/rive-nitro-react-native/issues/216))\n([a\n[…]\nf4b90b26f732b4d8b406))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.3 (#217)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-04-17T07:09:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae92eff16e668c1346dff4b90b26f732b4d8b406",
          "body": "Bump native Rive SDKs: rive-ios 6.18.0 → 6.18.2, rive-android 11.3.1 →\n11.4.0.\n\nNote: rive-ios 6.18.3 is tagged on GitHub but not yet published to\nCocoaPods, so using 6.18.2.\n\n### rive-ios 6.18.1–6.18.2\n- fix(renderer): gamma correction fix\n- fix(runtime): databind state machine transition duration\n\n[…]\nisteners on scripted VM properties\n- feat: component based conditions support\n- feat: single/multiline support in TextInput and improved scrolling\n- feat: image fit & alignment when parented by layout",
          "is_bot": false,
          "headline": "fix: bump rive-ios to 6.18.2 and rive-android to 11.4.0 (#216)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-17T06:28:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89dd60f1f21c98e16021baea85ac3c579e5ebc55",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.2](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.1...v0.4.2)\n(2026-04-13)\n\n\n### Bug Fixes\n\n* Fit.LAYOUT artboard oversized on Android\n([#209](https://github.com/rive-app/rive-nitro-react-native/issues/209))\n([8b4219d](ht\n[…]\nbf57f1a9d02996ebe179))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.2 (#211)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-04-13T19:28:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b4219d2b5d3e1129579bf57f1a9d02996ebe179",
          "body": "Fixes #206\n\n## Problem\n\n`Fit.LAYOUT` **intermittently** renders the artboard at pixel dimensions\ninstead of dp on Android (~50% repro rate, requires process restart).\n\n`layoutScaleFactorAutomatic` in rive-android defaults to `1.0` and is\nonly corrected to device density in `onMeasure()`. When `confi\n[…]\nabsoluteFill} dataBind={viewModelInstance} />\n      )}\n      {children}\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: { flex: 1, backgroundColor: '#0c1027' },\n});\n```\n\n</details>",
          "is_bot": false,
          "headline": "Fix Fit.LAYOUT artboard oversized on Android (#209)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-13T18:56:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "950026c97f79c8df046c691d2bd54ec31a31ee0f",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.1](https://github.com/rive-app/rive-nitro-react-native/compare/v0.4.0...v0.4.1)\n(2026-04-08)\n\n\n### Bug Fixes\n\n* **iOS:** eagerly dispose RiveView and break referenced asset retain\ncycle\n([#202](https://github.com/rive-app/rive-nitro-react-\n[…]\n7285b1e90d6551ddc988))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.1 (#208)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-04-08T04:46:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4b12d6b951509e8d9417285b1e90d6551ddc988",
          "body": "…cycle (#202)\n\n## Summary\n- RiveView now calls `dispose()` on the native HybridObject on unmount\nvia `useEffect` cleanup, freeing the native view, ViewModel, and C++\nscene graph immediately instead of waiting for Hermes GC\n- Breaks the `SendableRef<RiveFile?>` retain cycle in\n`ReferencedAssetLoader`\n[…]\ntMonsterType('monster1');\n    riveViewRef?.playIfNeeded();\n  }, [setPG1, setPG2, setPG3, setPG4, setMouth, setPattern, setHeadpart, setColor, setEyes, setMonsterType, riveViewRef]);\n};\n```\n\n</details>",
          "is_bot": false,
          "headline": "fix(iOS): eagerly dispose RiveView and break referenced asset retain …",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-04-08T03:33:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4fb46a1e156c6b239d19e1aa8a6b9e904e1260e6",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.4.0](https://github.com/rive-app/rive-nitro-react-native/compare/v0.3.4...v0.4.0)\n(2026-03-30)\n\n\n### ⚠ BREAKING CHANGES\n\n* hooks start undefined, useViewModelInstance returns {instance, error}\n([#184](https://github.com/rive-app/rive-nitro-r\n[…]\nadc7c2eeff44d47b9985))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.4.0 (#200)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-31T05:26:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "059e5f4865ab8bcc207badc7c2eeff44d47b9985",
          "body": "…error} (#184)\n\nBreaking changes to improve state transparency and prepare for the async\nexperimental runtime.\n\n**`useRiveFile`** error is now `Error` instead of `string`, and\n`riveFile` is `undefined` while loading (was `null`). `isLoading` is\nkept for convenience. Migration: `{error}` in JSX → `{e\n[…]\nlInstance(file)`.\n\n**`useRiveNumber/String/Boolean/Color/Enum` hooks** start as `undefined`\ninstead of reading `property.value` synchronously. The real value\narrives via the listener's first emission.",
          "is_bot": false,
          "headline": "fix!: hooks start undefined, useViewModelInstance returns {instance, …",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-30T18:20:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d0046863b8ffde03ec2e117918fa2f1e251ffed",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.3.4](https://github.com/rive-app/rive-nitro-react-native/compare/v0.3.3...v0.3.4)\n(2026-03-30)\n\n\n### Features\n\n* add getPropertyCountAsync and getInstanceCountAsync and deprecate\npropertyCount and instanceCount\n([#198](https://github.com/riv\n[…]\n3cfeacfc65ce405666a7))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.3.4 (#199)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-30T17:16:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6244b2ee306875a3608a3cfeacfc65ce405666a7",
          "body": "…te propertyCount and instanceCount (#198)\n\n## Summary\n- Add `getPropertyCountAsync()` and `getInstanceCountAsync()` async\nmethods to `ViewModel`\n- Deprecate sync `propertyCount` and `instanceCount` properties — the\nexperimental Rive runtime requires async calls, and sync versions use\nblocking wrapp\n[…]\nad\n- Legacy implementations wrap the existing sync getters in\n`Promise.async`\n- Update harness test to use async methods\n\n## Test plan\n- [x] Run `databinding-advanced` harness tests on iOS and Android",
          "is_bot": false,
          "headline": "feat: add getPropertyCountAsync and getInstanceCountAsync and depreca…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-30T16:44:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e9779d2c567f1190ed111059595bf511542700e0",
          "body": "…194)\n\nMigrates all example/demo/exerciser files off the deprecated sync\nViewModel API and enables `@typescript-eslint/no-deprecated` as a lint\nerror to prevent regressions.\n\n**Examples migrated** (sync `useMemo` chains → `useViewModelInstance`\nhook or `useEffect`+async):\n- `RiveDataBindingExample`,\n[…]\nending async migration\nget `eslint-disable` with TODO comments.\n\n**Harness test:** asserts that `useRiveNumber` delivers its initial\nvalue on first listener emission without requiring any prop update.",
          "is_bot": false,
          "headline": "chore(examples): migrate to async API, add no-deprecated lint rule (#…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-27T08:16:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5cfe9715b87ae2adb2f3b3f56ccb852d9adabf06",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.3.3](https://github.com/rive-app/rive-nitro-react-native/compare/v0.3.2...v0.3.3)\n(2026-03-26)\n\n\n### Features\n\n* bump rive-ios to 6.18.0 and rive-android to 11.3.1\n([#193](https://github.com/rive-app/rive-nitro-react-native/issues/193))\n([ba\n[…]\n59d443ab0cfbf642f53b))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.3.3 (#197)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-26T21:27:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21c71fd3cd3832bcbc4059d443ab0cfbf642f53b",
          "body": "…ard default (#196)\n\nFixes #189.\n\nIn Auto dataBind mode, Android passed `autoBind=true` to `setRiveFile`\nwhenever `viewModelCount > 0`. If the artboard had no default ViewModel\nassigned, the Rive SDK threw `\"No default ViewModel found for\nartboard\"`, freezing the animation.\n\nFix: always pass `autoBi\n[…]\n  />\n  ) : null;\n}\n```\n\n**Expected:** animation plays normally on both platforms.  \n**Actual (Android, unfixed):** animation freezes,\n`ViewModelInstanceNotFound` error fired via `onError`.\n\n</details>",
          "is_bot": false,
          "headline": "fix(android): animation freezes when file has ViewModels but no artbo…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-26T18:14:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bad9c604cf414a87c25f2fecf1ba36c6191c8409",
          "body": "Bumps both native Rive SDKs:\n- rive-ios: 6.17.0 → 6.18.0\n- rive-android: 11.2.1 → 11.3.1\n\n**rive-ios 6.18.0**\n([release](https://github.com/rive-app/rive-ios/releases/tag/6.18.0))\n- Advanced blend support\n- Expose audio engine\n- Keyboard input support for focused elements\n- ViewModel Listeners + Tra\n[…]\nupport for focused elements\n- ViewModel Listeners + Transition Conditions support\n- Fix: store relinked ViewModel instance on nested artboard\n- Skip focus nodes that are collapsed or fully transparent",
          "is_bot": false,
          "headline": "feat: bump rive-ios to 6.18.0 and rive-android to 11.3.1 (#193)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-26T15:38:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "abdb71e5ff8b9beeec519a0efcf53291b49a2068",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.3.2](https://github.com/rive-app/rive-nitro-react-native/compare/v0.3.1...v0.3.2)\n(2026-03-25)\n\n\n### Features\n\n* add async API compat layer for experimental migration\n([#183](https://github.com/rive-app/rive-nitro-react-native/issues/183))\n(\n[…]\nd9507900ecf277d6cce3))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.3.2 (#191)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-26T06:17:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c788ad6b4ac7496e027ed9507900ecf277d6cce3",
          "body": "Adds async equivalents for all sync methods and marks the sync versions\nas `@deprecated`. This lets users migrate to the new async API while\nstill on the legacy backend, before switching to experimental.\n\nNo behavior changes — all new async methods are thin `Promise.async {}`\nwrappers around existing sync calls.",
          "is_bot": false,
          "headline": "feat: add async API compat layer for experimental migration (#183)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-25T13:52:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb6d4d66c4d6da55d65759294a6817e88755970d",
          "body": "Upgrade from 1.0.0-alpha.25 to 1.0.0 stable for all three harness\npackages.",
          "is_bot": false,
          "headline": "chore: upgrade react-native-harness to 1.0.0 (#186)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-22T12:04:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3adf4a681de5234a9e36bbc0ba0dd57caf1bfbc3",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.3.1](https://github.com/rive-app/rive-nitro-react-native/compare/v0.3.0...v0.3.1)\n(2026-03-19)\n\n\n### Bug Fixes\n\n* bump iOS runtime to 6.17.0 and Android to 11.2.1\n([#182](https://github.com/rive-app/rive-nitro-react-native/issues/182))\n([a7c\n[…]\nact-native/issues/164)\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.3.1 (#188)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-20T06:22:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a6f0393f9cc64b61e940c1370e6d0ab2760354d",
          "body": "Removes the `branches: - main` filter from `pull_request` trigger so CI\nruns on PRs targeting any branch. Enables stacked PR workflows. Push\ntriggers remain main-only.",
          "is_bot": false,
          "headline": "ci: run CI on PRs targeting any branch (#185)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-19T16:28:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7ca07955628c475d214ea2b5c0af49f1018dfcd",
          "body": "## Summary\n\n- **iOS 6.17.0**: Fixes offscreen-settled animations becoming stale when\nreturning onscreen (the reported stale animation issue). Also fixes text\nincorrectly advancing with some system font-backed fallback fonts.\n- **Android 11.2.1**: Removes debug symbols that were leaking into\nrelease builds since 11.0.0, reducing APK/AAB size for apps without NDK\nsymbol stripping configured.\n\nFixes #164",
          "is_bot": false,
          "headline": "fix: bump iOS runtime to 6.17.0 and Android to 11.2.1 (#182)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-19T16:11:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "608f5361baa3ca81f50a7a62e30817e4248a5a44",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.3.0](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.8...v0.3.0)\n(2026-03-13)\n\n\n### ⚠ BREAKING CHANGES\n\n* minimum nitro-modules version is now 0.35.0\n\n### Bug Fixes\n\n* upgrade nitro-modules to 0.35.0\n([#172](https://github.c\n[…]\nact-native/issues/169)\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.3.0 (#181)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-13T16:10:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c989fa595036ace3110c4bbe0142f2a8f8a268f6",
          "body": "Upgrades nitrogen CLI and nitro-modules runtime to 0.35.0. Fixes\n`ArrayBufferHolder` → `ArrayBuffer` rename and regenerates all nitrogen\nbindings.\n\nNitro 0.35 made generated ViewManagers `final`\n([nitro#1181](https://github.com/mrousavy/nitro/pull/1181)), which broke\nour `RiveViewManager.onDropViewI\n[…]\nidth: '100%', height: 200, justifyContent: 'center', alignItems: 'center', backgroundColor: '#ffebee' },\n});\n```\n\n</details>\n\nBREAKING CHANGE: minimum nitro-modules version is now 0.35.0\n\nCloses: #169",
          "is_bot": false,
          "headline": "fix!: upgrade nitro-modules to 0.35.0 (#172)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-13T15:40:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fc933b0ba87417a83f86bb4df1f35aaf61e0284d",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.8](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.7...v0.2.8)\n(2026-03-13)\n\n\n### Bug Fixes\n\n* Xcode 26 compatibility — strip .Swift submodule from RiveRuntime\nmodulemaps\n([#174](https://github.com/rive-app/rive-nitro-reac\n[…]\n911f36417c9fae46d463))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.8 (#180)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-13T11:18:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e82c4bee46f50db8f440911f36417c9fae46d463",
          "body": "… modulemaps (#174)\n\nFixes #173\n\nRiveRuntime's prebuilt XCFramework was built with Swift 6.1. Xcode 26\nuses Swift 6.2. Both generate `.Swift` Clang submodules with different\nC++ interop type definitions (`swift::Optional`, `swift::String`, etc),\ncausing hard ODR errors that can't be suppressed. This\n[…]\nrence is definition in module 'LocalCxxPod.Swift' found method 'init' with 1st parameter named 'value'\n```\n\n### After fix\n\nBUILD SUCCEEDED (Xcode 26.2, clean DerivedData, `pod install` +\n`xcodebuild`)",
          "is_bot": false,
          "headline": "fix: Xcode 26 compatibility — strip .Swift submodule from RiveRuntime…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-13T08:58:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9831e19f132a3980307363831e5c2dd7145b4c13",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.7](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.6...v0.2.7)\n(2026-03-06)\n\n\n### Features\n\n* setting fallback fonts\n([#152](https://github.com/rive-app/rive-nitro-react-native/issues/152))\n([e2c64ea](https://github.com/ri\n[…]\n3908a05c6598b2316d81))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.7 (#175)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-06T12:14:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2c64eaf513085e52e543908a05c6598b2316d81",
          "body": "Adds `RiveFonts` — font fallback API for react-native. Two-phase design:\nload fonts into opaque handles, then configure a weight-based fallback\nmap. System font fallback is opt-in via `RiveFonts.systemFallback()`.\n\n```ts\nconst regular = await RiveFonts.loadFont({ uri: 'https://…/font.ttf' });\nconst \n[…]\n://github.com/user-attachments/assets/8d95082f-9b5a-4342-873c-db2073435f08\"\n/> | <img width=\"300\" alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/fea7dc6a-3c42-4d36-bfe5-c692abde3fa4\"\n/> |",
          "is_bot": false,
          "headline": "feat: setting fallback fonts (#152)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-06T11:06:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa32f3e177688d26d69567c6278cb2625a33cca8",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.6](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.5...v0.2.6)\n(2026-03-05)\n\n\n### Bug Fixes\n\n* restrict nitro to &lt;0.35, as we are not compatible with 0.35\n([#170](https://github.com/rive-app/rive-nitro-react-native/issu\n[…]\nfbe07e8dc575eb69fa70))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.6 (#171)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-05T11:31:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b304000e542d524ce112fbe07e8dc575eb69fa70",
          "body": "Restrict peer dependency version range for react-native-nitro-modules to\n< 0.35",
          "is_bot": false,
          "headline": "fix: restrict nitro to <0.35, as we are not compatible with 0.35 (#170)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-05T09:55:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3479d63b2b9b20f6cd0778d9a1199996c0ddd71",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.5](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.4...v0.2.5)\n(2026-03-02)\n\n\n### Bug Fixes\n\n* **android:** pass autoBind to SDK when dataBind is set\n([#156](https://github.com/rive-app/rive-nitro-react-native/issues/156))\n[…]\nact-native/issues/161)\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.5 (#165)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-03-02T13:47:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3d8e5a4b16b97b1314e39dc61ad645a20e74d814",
          "body": "PR #140 correctly removed the play() that was called even if autoplay\nwas false, but it caused binding to break, as state machines were not\ninitialised in rive-android. This PR implements a better workaround by\npassing autoBind=true to rive-android, to make sure a stateMahcines is\nvalid. The only do\n[…]\n.\nThree modes: `playIfNeeded()` (bug path), `play()` (workaround), and tap\ngraphic (user interaction). Health bar at ~25% = binding applied (PASS),\n~100% = NOT applied (FAIL).\n\n</details>\n\nCloses #156",
          "is_bot": false,
          "headline": "fix(android): pass autoBind to SDK when dataBind is set (#156) (#157)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-02T13:20:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1bc139f63f7366f6755454410e152ab48f2ad52d",
          "body": "Bump native Rive SDKs: iOS 6.13.0 → 6.15.2, Android 11.1.0 → 11.2.0.\n\nNotable: Android 11.2.0 automatically bypasses ReLinker on API 23+ and\nuses System.loadLibrary directly.",
          "is_bot": false,
          "headline": "chore: bump iOS runtime to 6.15.2 and Android to 11.2.0 (#166)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-02T13:16:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1349bd8858e52d015480aaf863293d99645d7f5c",
          "body": "On iOS, when a state machine settles (isPlaying=false), setting an input\ndoesn't restart the render loop so the change is never visually\nprocessed. Android handles this via its controller queue. Adds\n`playIfNeeded()` to the three input setters (`setBooleanInputValue`,\n`setNumberInputValue`, `triggerInput`) to match Android behavior.\n\nFixes #161",
          "is_bot": false,
          "headline": "fix(ios): restart render loop after setting state machine inputs (#162)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-03-02T10:40:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9626351d21469654aa51c7a1cf836f9230631d7c",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.4](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.3...v0.2.4)\n(2026-02-27)\n\n\n### Features\n\n* add RiveRuntime API for Android init failure handling\n([#153](https://github.com/rive-app/rive-nitro-react-native/issues/153))\n(\n[…]\ned791930c3df2bdfd6e6))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.4 (#163)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-02-27T08:45:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "634724eb7db2282f47beed791930c3df2bdfd6e6",
          "body": "## Summary\n\nMoves `Rive.init()` out of `ContentProvider` (which crashes before user\ncode can run) into `RivePackage.createViewManagers()` with try/catch.\nExposes `RiveRuntime.initialize()` and `RiveRuntime.getStatus()` to JS\nso apps can detect and recover from native lib loading failures (ABI\nmismat\n[…]\ncom/user-attachments/assets/b473079e-c21a-42c4-ad8c-5f4875f0f885\"\n/>\n\n<img width=\"323\" height=\"629\" alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/98ff1ffd-4cbd-424c-b222-37026bbad10f\"\n/>",
          "is_bot": false,
          "headline": "feat: add RiveRuntime API for Android init failure handling (#153)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-27T06:37:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5fb514e34ad46af2dd9927a38158dac588c4a8e",
          "body": "…#155)\n\nFixes #141 (hooks level)\n\n`useRiveProperty`'s `setValue` was throwing an error when called before\nthe `ViewModelInstance` loaded. This is a common React pattern —\n`useEffect` fires on mount before async data is available.\n\nChanged to silent no-op, as setValue does changes once the instance i\n[…]\npercase', marginBottom: 8,\n  },\n  logPlaceholder: { color: '#666', fontSize: 12, fontFamily: 'monospace' },\n  logEntry: { color: '#FF6B6B', fontSize: 11, fontFamily: 'monospace' },\n});\n```\n\n</details>",
          "is_bot": false,
          "headline": "fix: make useRiveProperty setValue a no-op before instance is ready (…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-26T06:50:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b159043efba19d97099ede9ae0561d94d2d3f1a4",
          "body": "Pre-compile the JS bundle before the test retry loop so harness Metro\nstarts with a warm cache. Replace fixed `sleep 2` with active port\npolling between retries. Bump bridgeTimeout from 60s to 180s as\nfallback.",
          "is_bot": false,
          "headline": "chore: pre-warm Metro bundle and improve port cleanup in iOS CI (#150)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-24T09:51:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1f1d672a12bd274da73ee01543e3fdd8bfe7a72",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.3](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.2...v0.2.3)\n(2026-02-20)\n\n\n### Bug Fixes\n\n* respect autoPlay={false} in applyDataBinding\n([#140](https://github.com/rive-app/rive-nitro-react-native/issues/140))\n([ac976f8\n[…]\n0bc645f24ae40966afd4))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.3 (#154)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-02-23T10:23:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac976f8decdee39f1d8d0bc645f24ae40966afd4",
          "body": "Fixes #138\nFixes #139\n\n`applyDataBinding` unconditionally called `play()` on both iOS and\nAndroid, ignoring the `autoPlay` prop. Also, a second\n`configure(reload=true)` call would recreate the RiveViewModel without\nre-applying data binding. On Android, `getSafeStateMachineName` threw a\nfatal error w\n[…]\ne()` return null instead of\ncrashing\n\nAdds harness tests verifying `autoPlay={false}` prevents playback,\n`autoPlay={true}` drives ViewModel changes, and manual `play()` works\nafter `autoPlay={false}`.",
          "is_bot": false,
          "headline": "fix: respect autoPlay={false} in applyDataBinding (#140)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-20T23:58:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a5c9f2098195fc25e9387e60b3f5458df52da9d9",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.2](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.1...v0.2.2)\n(2026-02-20)\n\n\n### Bug Fixes\n\n* pin react-native-harness to exact alpha.25\n([#148](https://github.com/rive-app/rive-nitro-react-native/issues/148))\n([0b2c618](\n[…]\n0d9fb3daab1ddb4bcd36))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.2 (#149)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-02-20T21:52:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0b2c61884f83602ea2768a47a58e7c363c1b9443",
          "body": "- Pin `react-native-harness` deps to exact `1.0.0-alpha.25` —\n`^1.0.0-alpha.25` resolves to `1.0.0-canary.*` because semver sorts\n\"canary\" > \"alpha\"\n- Add 5-minute per-attempt timeout for iOS harness tests (matching\nAndroid) — without it, a hung harness connection consumed the entire\n60-min job timeout leaving no room for retries",
          "is_bot": false,
          "headline": "fix: pin react-native-harness to exact alpha.25 (#148)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-20T17:01:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24337ffbc2167991506903bd17683c63ef644950",
          "body": "Adds `babel-plugin-react-compiler` to the library's babel config so bob\npre-compiles the `lib/module/` output with React Compiler. This\nauto-memoizes all hooks in the published package, preventing referential\ninstability issues for consumers who don't use React Compiler\nthemselves.\n\nThe `configFile:\n[…]\no resolves to `lib/module/` for all external consumers (via the\n`default` condition in `exports`). The `source` condition is only used\nin our monorepo example apps where bob's metro config injects it.",
          "is_bot": false,
          "headline": "chore: add React Compiler to library build (#146)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-19T12:23:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "372d4ae1f5e06fc2be4f0d9fb3daab1ddb4bcd36",
          "body": "… (#145)\n\nFixes #136\n\n`useRiveEnum` was creating an inline options object on every render\n(with `useCallback` inside it). Without React Compiler, this caused\n`setValue` to get a new identity every render — triggering extra effect\nfires in user code that has `setValue` in its dependency array.\n\nExtra\n[…]\n: 16, marginBottom: 16, backgroundColor: '#007AFF', paddingVertical: 14, borderRadius: 10, alignItems: 'center' },\n  buttonText: { color: '#fff', fontSize: 16, fontWeight: '600' },\n});\n```\n\n</details>",
          "is_bot": false,
          "headline": "fix: stabilize useRiveEnum options to prevent setValue identity churn…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-19T11:20:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6d40e33771871bd8f6c34d554bc2be76a6301150",
          "body": "Adds Android harness test CI job mirroring the existing iOS harness\nsetup. Also fixes two Android test failures exposed by running the\nharness.\n\n- Android harness CI job with emulator (API 35, x86_64), 3 retries,\n5-min per-attempt timeout\n- Timeout guards: 60 min for iOS, 30 min for Android\n- Fix colorProperty Double→Int overflow on Android (`toLong().toInt()`)\n- Enum test tolerance for Android legacy SDK accepting invalid values",
          "is_bot": false,
          "headline": "ci: add Android harness test job (#147)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-19T10:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36bdf8d2ee04dcea88a14e3b04596299af1094c1",
          "body": "Add advanced databinding harness tests to main and bump\nreact-native-harness to alpha.25. Guard negative indices in\nviewModelByIndex and createInstanceByIndex on both iOS and Android. Wrap\nAndroid viewModelByIndex/viewModelByName in try-catch since the Rive SDK\nthrows JNI exceptions for invalid lookups. Add ANDROID_AVD env var\nsupport to harness config.\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>\nCo-authored-by: Happy <yesreply@happy.engineering>",
          "is_bot": false,
          "headline": "test: add advanced databinding harness tests (#137)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-02-17T11:48:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98de6689e35ccd8ab47b86a4b262c514a85ae9e8",
          "body": "Co-authored-by: PierreCapo <pierre.caporossi@gadz.org>",
          "is_bot": false,
          "headline": "doc: fix typo (#135)",
          "author_name": "PierreCapo",
          "author_login": "PierreCapo",
          "committed_at": "2026-02-09T09:25:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9201b17fb480270b4b27a1422bc32e4bddcd484c",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[0.2.1](https://github.com/rive-app/rive-nitro-react-native/compare/v0.2.0...v0.2.1)\n(2026-01-23)\n\n\n### Features\n\n* useViewModelInstance use name and artboardName when getting vmi from a\nfile\n([#129](https://github.com/rive-app/rive-nitro-react\n[…]\n9cdcf96df523026fbe16))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 0.2.1 (#130)",
          "author_name": "Rive Engineering",
          "author_login": "rive-engineering",
          "committed_at": "2026-01-27T10:34:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6c6a1a906d8e97b5c605c2d7955b2f6999e19000",
          "body": "## Summary\n- `artboardName` and `viewModelName` are now mutually exclusive\n(TypeScript discriminated unions)\n- Clarified docs: \"ViewModel assigned to artboard\" instead of implying\nownership\n\n## API\n\n```tsx\n// RiveFile source - pick ONE of: default, artboardName, or viewModelName\nuseViewModelInstance\n[…]\niewModelName: string,      // get ViewModel by name (file-wide)\n  instanceName?: string\n})\n\n// ViewModel source (unchanged)\nuseViewModelInstance(viewModel, {\n  name?: string,\n  useNew?: boolean\n})\n```",
          "is_bot": false,
          "headline": "feat: add viewModelName param to useViewModelInstance (#132)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-01-23T15:50:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "66c2e5fe8f73d4fb053a840242aa405b13f3d955",
          "body": "Add test coverage output directory to gitignore.",
          "is_bot": false,
          "headline": "chore: add coverage to gitignore (#131)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-01-22T16:10:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd22bb3f07a589324a16c0c90086a91ca4547b8e",
          "body": "## Summary\n- Cache Xcode build artifacts in test-harness-ios job, skipping\nxcodebuild when only JS files change\n- Update turbo inputs to only track `src/specs/*.nitro.ts` instead of\nall TS files\n\n## Test plan\n- [ ] Verify CI passes on first run (cache miss, full build)\n- [ ] Verify subsequent JS-only changes skip native build (cache hit)",
          "is_bot": false,
          "headline": "chore(ci): improve iOS build caching for test harness (#126)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-01-21T21:20:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56156545442b8f529d559cdcf96df523026fbe16",
          "body": "… from a file (#129)\n\n## Summary\n\nFixes #124 - `useViewModelInstance` hook now correctly handles the\n`name` parameter:\n\n- `name` consistently means **ViewModel instance name** (not ViewModel\nclass name) for both `RiveFile` and `ViewModel` sources\n- New `artboardName` param for `RiveFile` source to s\n[…]\ntboardName` only available for `RiveFile`)\n\n## Test plan\n\n- [x] Unit tests pass (`yarn test`)\n- [x] TypeScript compiles (`yarn typecheck`)\n- [x] Lint passes (`yarn lint`)\n- [ ] Harness tests on device",
          "is_bot": false,
          "headline": "feat: useViewModelInstance use name and artboardName when getting vmi…",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-01-21T11:15:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6bcaac2647903089440ea2ebd171c8761fa6ca0b",
          "body": "## Summary\n- Add harness test for `useRiveNumber` hook\n- Fix duplicate React instances in metro config that prevented hooks\nfrom working in harness tests\n\n## Root Cause\nThe library's hooks were importing React from a different location than\nthe harness, causing \"Cannot read property 'useMemo' of null\" errors.\nFixed by adding `react` to the module deduplication list in\n`metro.helpers.js`.",
          "is_bot": false,
          "headline": "test(harness): add useRiveNumber hook test (#128)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-01-21T10:28:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f810d020acf561dad240479d8f87b6376a8b6a39",
          "body": "## Summary\n- Add comprehensive ViewModel property tests based on Flutter's\ndata_binding_test.dart\n- Tests cover: number, string, boolean, color, enum, trigger properties\n- Tests cover: nested viewModel access and nested path syntax (e.g.,\n`pet/name`)\n- Add `databinding.riv` test asset from Flutter test suite\n\n## Test plan\n- Run tests via in-app test runner on iOS/Android",
          "is_bot": false,
          "headline": "test: add ViewModel property tests for all types (#125)",
          "author_name": "Miklós Fazekas",
          "author_login": "mfazekas",
          "committed_at": "2026-01-20T15:28:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 40,
      "commits_last_year": 186,
      "latest_release_at": "2026-07-17T11:11:55Z",
      "latest_release_tag": "v0.4.19",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 32,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 5.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@rive-app/react-native",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "react-native",
            "ios",
            "android"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@rive-app/react-native",
          "is_deprecated": false,
          "latest_version": "0.4.19",
          "repository_url": "https://github.com/rive-app/rive-nitro-react-native",
          "versions_count": 38,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 5,
          "monthly_downloads": 208183,
          "first_published_at": "2025-12-10T19:42:46.430000Z",
          "latest_published_at": "2026-07-17T11:14:04.882000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 10,
      "stars": 145,
      "watchers": 9,
      "fork_history": {
        "days": [
          {
            "date": "2025-11-25",
            "count": 1
          },
          {
            "date": "2025-12-01",
            "count": 1
          },
          {
            "date": "2026-01-29",
            "count": 1
          },
          {
            "date": "2026-02-05",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-05",
            "count": 2
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-18",
            "count": 1
          },
          {
            "date": "2026-06-30",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 10,
        "total_forks": 10
      },
      "star_history": null,
      "open_issues_and_prs": 13
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos",
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "expo-example/tsconfig.json",
        "expo55-example/tsconfig.json",
        "expo57-example/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [
        "android/build.gradle",
        "example/android/app/build.gradle",
        "example/android/build.gradle",
        "rive-debug-utils/android/build.gradle"
      ],
      "largest_source_bytes": 2228925,
      "source_files_sampled": 304,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "android/build.gradle",
        "example/Gemfile",
        "example/package.json",
        "expo-example/package.json",
        "expo55-example/package.json",
        "expo57-example/package.json",
        "package.json",
        "rive-debug-utils/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "maven",
        "npm",
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "@expo/vector-icons",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^15.0.3"
        },
        {
          "name": "@react-native-async-storage/async-storage",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.2"
        },
        {
          "name": "@react-native-picker/picker",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.11.4"
        },
        {
          "name": "@react-navigation/bottom-tabs",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.4.0"
        },
        {
          "name": "@react-navigation/elements",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.3"
        },
        {
          "name": "@react-navigation/native",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.1.8"
        },
        {
          "name": "expo",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~54.0.20"
        },
        {
          "name": "expo-constants",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~18.0.10"
        },
        {
          "name": "expo-font",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~14.0.9"
        },
        {
          "name": "expo-haptics",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~15.0.7"
        },
        {
          "name": "expo-image",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~3.0.10"
        },
        {
          "name": "expo-linking",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~8.0.8"
        },
        {
          "name": "expo-router",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~6.0.13"
        },
        {
          "name": "expo-screen-orientation",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~9.0.8"
        },
        {
          "name": "expo-splash-screen",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~31.0.10"
        },
        {
          "name": "expo-status-bar",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~3.0.8"
        },
        {
          "name": "expo-symbols",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~1.0.7"
        },
        {
          "name": "expo-system-ui",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~6.0.8"
        },
        {
          "name": "expo-web-browser",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~15.0.8"
        },
        {
          "name": "react",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.1.0"
        },
        {
          "name": "react-dom",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.1.0"
        },
        {
          "name": "react-native",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.81.5"
        },
        {
          "name": "react-native-gesture-handler",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.29.1"
        },
        {
          "name": "react-native-nitro-modules",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.35.10"
        },
        {
          "name": "react-native-reanimated",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.1.5"
        },
        {
          "name": "react-native-safe-area-context",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~5.6.0"
        },
        {
          "name": "react-native-screens",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~4.16.0"
        },
        {
          "name": "react-native-web",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~0.21.0"
        },
        {
          "name": "react-native-worklets",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.6.1"
        },
        {
          "name": "rive-debug-utils",
          "manifest": "expo-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@expo/vector-icons",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^15.0.3"
        },
        {
          "name": "@react-native-async-storage/async-storage",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.2"
        },
        {
          "name": "@react-native-picker/picker",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.11.4"
        },
        {
          "name": "@react-navigation/bottom-tabs",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.15.5"
        },
        {
          "name": "@react-navigation/elements",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.3"
        },
        {
          "name": "@react-navigation/native",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.1.33"
        },
        {
          "name": "expo",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^55.0.12"
        },
        {
          "name": "expo-constants",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.12"
        },
        {
          "name": "expo-font",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.4"
        },
        {
          "name": "expo-haptics",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.14"
        },
        {
          "name": "expo-image",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.8"
        },
        {
          "name": "expo-linking",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.11"
        },
        {
          "name": "expo-router",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.11"
        },
        {
          "name": "expo-screen-orientation",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.13"
        },
        {
          "name": "expo-splash-screen",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.6"
        },
        {
          "name": "expo-status-bar",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.5"
        },
        {
          "name": "expo-symbols",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.7"
        },
        {
          "name": "expo-system-ui",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~55.0.15"
        },
        {
          "name": "expo-web-browser",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~15.0.10"
        },
        {
          "name": "react",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.0"
        },
        {
          "name": "react-dom",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.0"
        },
        {
          "name": "react-native",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.83.4"
        },
        {
          "name": "react-native-gesture-handler",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~2.29.0"
        },
        {
          "name": "react-native-nitro-modules",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.35.10"
        },
        {
          "name": "react-native-reanimated",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.2.1"
        },
        {
          "name": "react-native-safe-area-context",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~5.6.2"
        },
        {
          "name": "react-native-screens",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~4.23.0"
        },
        {
          "name": "react-native-web",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~0.21.0"
        },
        {
          "name": "react-native-worklets",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.7.4"
        },
        {
          "name": "rive-debug-utils",
          "manifest": "expo55-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@react-native-async-storage/async-storage",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.2"
        },
        {
          "name": "@react-native-picker/picker",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.11.4"
        },
        {
          "name": "@react-navigation/bottom-tabs",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.15.5"
        },
        {
          "name": "@react-navigation/elements",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.3"
        },
        {
          "name": "@react-navigation/native",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.1.33"
        },
        {
          "name": "expo",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "^57.0.4"
        },
        {
          "name": "expo-constants",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.3"
        },
        {
          "name": "expo-font",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.0"
        },
        {
          "name": "expo-haptics",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.0"
        },
        {
          "name": "expo-image",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.0"
        },
        {
          "name": "expo-linking",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.2"
        },
        {
          "name": "expo-router",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.4"
        },
        {
          "name": "expo-screen-orientation",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.0"
        },
        {
          "name": "expo-splash-screen",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.2"
        },
        {
          "name": "expo-status-bar",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.0"
        },
        {
          "name": "expo-system-ui",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.0"
        },
        {
          "name": "expo-web-browser",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~57.0.0"
        },
        {
          "name": "react",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.3"
        },
        {
          "name": "react-dom",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.3"
        },
        {
          "name": "react-native",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.86.0"
        },
        {
          "name": "react-native-gesture-handler",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~2.32.0"
        },
        {
          "name": "react-native-nitro-modules",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.35.10"
        },
        {
          "name": "react-native-reanimated",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.5.0"
        },
        {
          "name": "react-native-safe-area-context",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~5.7.0"
        },
        {
          "name": "react-native-screens",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.25.2"
        },
        {
          "name": "react-native-web",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "~0.21.0"
        },
        {
          "name": "react-native-worklets",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.10.0"
        },
        {
          "name": "rive-debug-utils",
          "manifest": "expo57-example/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 11,
        "merged_prs": 226,
        "open_issues": 2,
        "closed_ratio": 0.969,
        "closed_issues": 62,
        "closed_unmerged_prs": 44
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "mfazekas",
          "commits": 128,
          "avatar_url": "https://avatars.githubusercontent.com/u/52435?v=4"
        },
        {
          "type": "User",
          "login": "HayesGordon",
          "commits": 44,
          "avatar_url": "https://avatars.githubusercontent.com/u/13705472?v=4"
        },
        {
          "type": "User",
          "login": "rive-engineering",
          "commits": 35,
          "avatar_url": "https://avatars.githubusercontent.com/u/60802183?v=4"
        },
        {
          "type": "User",
          "login": "zplata",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/5685058?v=4"
        },
        {
          "type": "User",
          "login": "bassrock",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1010384?v=4"
        },
        {
          "type": "User",
          "login": "PierreCapo",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/26744253?v=4"
        }
      ],
      "contributors_sampled": 6,
      "top_contributor_share": 0.607
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "bare-example.yml",
        "ci.yml",
        "publish.yml",
        "release-please.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.js",
        "eslint.config.mjs"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Gemfile.lock",
        "yarn.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 9,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 5,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "26 out of 30 merged PRs checked by a CI test -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 3 contributing companies or organizations -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "105 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "17984bc4752ec6c8523e75fd32944083143b0c41",
        "ran_at": "2026-07-22T10:54:16Z",
        "aggregate_score": 4.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T18:56:39Z",
      "oldest_open_prs": [
        {
          "number": 41,
          "created_at": "2025-11-25T16:25:53Z",
          "last_comment_at": "2026-01-29T15:55:58Z",
          "last_comment_author": "bassrock"
        },
        {
          "number": 190,
          "created_at": "2026-03-25T10:29:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 250,
          "created_at": "2026-05-12T13:34:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 252,
          "created_at": "2026-05-12T13:59:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 264,
          "created_at": "2026-05-19T07:18:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 281,
          "created_at": "2026-06-01T20:04:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 294,
          "created_at": "2026-06-15T11:27:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 326,
          "created_at": "2026-07-07T20:35:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 330,
          "created_at": "2026-07-09T08:28:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 335,
          "created_at": "2026-07-14T06:18:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 350,
          "created_at": "2026-07-20T13:19:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-21T18:56:08Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 58,
          "created_at": "2025-11-29T10:06:30Z",
          "last_comment_at": "2025-12-08T14:14:46Z",
          "last_comment_author": "mfazekas"
        },
        {
          "number": 159,
          "created_at": "2026-02-26T04:31:28Z",
          "last_comment_at": "2026-02-26T23:30:17Z",
          "last_comment_author": "Jianlong-Nie"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/rive-app/rive-nitro-react-native",
    "host": "github.com",
    "name": "rive-nitro-react-native",
    "owner": "rive-app"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 75,
      "inputs": {
        "security": 49,
        "vitality": 92,
        "community": 71,
        "governance": 73,
        "engineering": 82
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 92,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "commits_last_year": 186,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 32
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "32/52 weeks with commits",
                "points": 22.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 32
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "186 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 186
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 40,
              "latest_release_tag": "v0.4.19",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 5.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "40 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 40
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 71,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "forks": 10,
              "stars": 145,
              "watchers": 9,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "145 stars",
                "points": 35,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 145
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "10 forks",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "9 watchers",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 89,
            "inputs": {
              "packages": [
                "@rive-app/react-native"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 208183
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "208,183 downloads/month across npm",
                "points": 70.9,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 208183,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 73,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 6,
              "top_contributor_share": 0.607
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 61% of commits",
                "points": 8.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 61
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "6 contributors",
                "points": 8.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "merged_prs": 226,
              "open_issues": 2,
              "closed_issues": 62,
              "issue_closed_ratio": 0.969,
              "closed_unmerged_prs": 44
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "97% of issues closed",
                "points": 45.3,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "226/270 decided PRs merged",
                "points": 32,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 226,
                      "decided": 270
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "followers": 1330,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "rive-app",
              "public_repos": 60,
              "account_age_days": 2423
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,330 followers of rive-app",
                "points": 22.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1330,
                      "login": "rive-app"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "60 public repos, account ~6 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 60
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@rive-app/react-native"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "38 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 38
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 82,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "4 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "eslint.config.js, eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js, eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "26 out of 30 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 49,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 49,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "26 out of 30 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "105 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 61,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Gemfile.lock",
                "yarn.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "expo-example/tsconfig.json",
                "expo55-example/tsconfig.json",
                "expo57-example/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [
                "android/build.gradle",
                "example/android/app/build.gradle",
                "example/android/build.gradle",
                "rive-debug-utils/android/build.gradle"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "android/build.gradle, example/android/app/build.gradle, example/android/build.gradle (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "android/build.gradle, example/android/app/build.gradle, example/android/build.gradle"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "eslint.config.js, eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.js, eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "expo-example/tsconfig.json, expo55-example/tsconfig.json, expo57-example/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "expo-example/tsconfig.json, expo55-example/tsconfig.json, expo57-example/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 2228925,
              "source_files_sampled": 304,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/304 source files over 60KB",
                "points": 54.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 304,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "demos",
                "example"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "demos, example",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos, example"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:@rive-app/react-native@0.4.19; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T10:54:43.838491Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/rive-app/rive-nitro-react-native.svg",
  "full_name": "rive-app/rive-nitro-react-native",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.26.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasnpm.