Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-24 20:29 UTC

wasix-org / static-web-server

A blazing fast and asynchronous web server for static files-serving. ⚡

RustApache-2.0★ 25 estrellas⑂ 1 forkdesde may 2022forkVer en GitHub ↗

wasix-org/static-web-server tiene un índice de salud de 31 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (60/100) y la más baja, Vitality (20/100). Se actualizó por última vez hace 675 días. Una sola persona concentra la mayor parte del trabajo reciente.

31
global / 100
En riesgo

Í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.

31
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.

Abandonment Policy applies a 85% multiplier to weighted overall health.

Titularidad

WASIXOrganización
336 seguidores175 repositorios públicosdesde may 2023

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
crates.iostatic-web-serverapunta a otro repositorio; no se puntúa2.43.025642hace 2 díasfile-serverhttp-serverstatic-web-servernetwork-programming

Métricas por categoría

Vitalidad

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

20Crítico · 22% del índice global
Cómo se puntúa
0/36Recencia de push — último push hace 675 días
0/36Cadencia de commits — 0/52 semanas con commits
0/18Volumen de commits — 0 commits en el último año
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Datos de entrada utilizados
commits_last_year0
human_commit_share1
days_since_last_push675
active_weeks_last_year0
Cómo se puntúa
16.2/27Publica versiones — 54 etiquetas de versión (sin releases de GitHub)
0/36Recencia de las versiones — última versión hace 1541 días
27/27Cadencia de publicación — una versión cada ~20,1 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count54
latest_release_tagv2.8.0
releases_from_tags
days_since_latest_release1541
mean_days_between_releases20,1
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?

23Crítico · 18% del índice global
Cómo se puntúa
22.4/60Estrellas — 25 estrellas
0/25Forks — 1 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks1
stars25
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
0/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readmeno
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

56Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
1.8/22.5Distribución de commits — el principal contribuyente firma el 92% de los commits
13.5/13.5Amplitud de contribuyentes — 30 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 8 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled30
top_contributor_share0,922
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 3/3 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 1/22 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs3
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
18.2/25Alcance del propietario — 336 seguidores de wasix-org
19.3/25Trayectoria — 175 repos públicos, cuenta de ~3 años
Datos de entrada utilizados
followers336
owner_typeOrganization
is_verified
owner_loginwasix-org
public_repos175
account_age_days1159

Calidad de Ingeniería

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

45En riesgo · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 11 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

40En riesgo
Cómo se puntúa
0/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://sws.joseluisq.net
0/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepagehttps://sws.joseluisq.net
has_readmeno
has_docs_dir
has_descriptionno

Seguridad

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

35En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/22 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 8 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — sin datos
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
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 21 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,5
Excluidos de la puntuación (sin datos o no aplicable): packaging, 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.

60Moderado · 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 — 86 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,86
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Rust (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
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
lockfilesCargo.lock
has_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, benches/Cargo.toml, fuzz/Cargo.toml
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Rust (tipado estático)
55/55Tamaños de archivo manejables — 0/66 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageRust
largest_source_bytes58.612
source_files_sampled66
oversized_source_files0

Datos clave

25estrellas de GitHub
30contribuidores
0commits en los últimos 12 meses
675días desde el último push
54versiones publicadas
1factor bus
0issues abiertas
crates.ioecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Community profile unavailable
  • crates package 'static-web-server' points at a different repository (https://github.com/static-web-server/static-web-server); excluded from ecosystem scoring
  • Could not fetch crates package 'benches' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.5 / 10
3.5agregado

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-24 20:28 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/22 approved changesets -- score normalized to 0
10Contributorsproject has 8 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities21 existing vulnerabilities detected
Dependencias directas 42
RegistroPaqueteRestricción de versiónManifiesto
crates.ioaho-corasick1.1Cargo.toml
crates.ioanyhow1.0Cargo.toml
crates.ioasync-compression0.4Cargo.toml
crates.iobcrypt0.15Cargo.toml
crates.iobytes1.6Cargo.toml
crates.iochrono0.4Cargo.toml
crates.ioclap=4.4Cargo.toml
crates.iocompact_str0.8Cargo.toml
crates.ioform_urlencoded1.2Cargo.toml
crates.iofutures-util0.3Cargo.toml
crates.ioglobset0.4Cargo.toml
crates.ioheaders=0.3.0Cargo.toml
crates.iohttp0.2Cargo.toml
crates.iohttp-serde1.1Cargo.toml
crates.iohyper0.14Cargo.toml
crates.iolazy_static1.5Cargo.toml
crates.iolistenfd1.0Cargo.toml
crates.iomaud0.26Cargo.toml
crates.iomime_guess2.0Cargo.toml
crates.iomini-moka0.10.3Cargo.toml
crates.iopercent-encoding2.3Cargo.toml
crates.iopin-project1.1Cargo.toml
crates.ioregex1.10Cargo.toml
crates.iorustls-pemfile2.1Cargo.toml
crates.ioserde1.0Cargo.toml
crates.ioserde_ignored0.1Cargo.toml
crates.ioserde_json1.0Cargo.toml
crates.ioserde_repr0.1Cargo.toml
crates.ioshadow-rs0.29Cargo.toml
crates.iotokio=1.35.1Cargo.toml
crates.iotokio-rustls0.26Cargo.toml
crates.iotokio-util0.7Cargo.toml
crates.iotoml0.8Cargo.toml
crates.iotracing0.1Cargo.toml
crates.iotracing-subscriber0.3Cargo.toml
crates.iogetrandom=0.2.10Cargo.toml
crates.iotriomphe=0.1.3Cargo.toml
crates.iorustix=0.38.30Cargo.toml
crates.iosha-1=0.8.0Cargo.toml
crates.iostatic-web-server2benches/Cargo.toml
crates.iocriterion0.5benches/Cargo.toml
crates.iohyper0.14benches/Cargo.toml
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": true,
      "size_kb": 3184,
      "has_wiki": false,
      "homepage": "https://sws.joseluisq.net",
      "languages": {
        "jq": 109,
        "CSS": 171,
        "HTML": 1371,
        "Rust": 447862,
        "Shell": 20761,
        "Makefile": 8752,
        "Dockerfile": 6805,
        "JavaScript": 52
      },
      "pushed_at": "2024-09-17T09:35:09Z",
      "created_at": "2022-05-26T21:45:07Z",
      "owner_type": "Organization",
      "updated_at": "2026-01-17T12:03:18Z",
      "description": "A blazing fast and asynchronous web server for static files-serving. ⚡",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://wasix.org",
      "name": "WASIX",
      "type": "Organization",
      "login": "wasix-org",
      "company": null,
      "location": null,
      "followers": 336,
      "avatar_url": "https://avatars.githubusercontent.com/u/134305907?v=4",
      "created_at": "2023-05-22T15:14:44Z",
      "is_verified": null,
      "public_repos": 175,
      "account_age_days": 1159
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.8.0",
          "kind": "minor",
          "published_at": "2022-05-04T20:30:55Z"
        },
        {
          "tag": "v2.7.1",
          "kind": "patch",
          "published_at": "2022-04-16T23:24:23Z"
        },
        {
          "tag": "v2.7.0",
          "kind": "minor",
          "published_at": "2022-03-21T08:32:49Z"
        },
        {
          "tag": "v2.6.0",
          "kind": "minor",
          "published_at": "2022-02-28T00:02:17Z"
        },
        {
          "tag": "v2.6.0-beta.2",
          "kind": "prerelease",
          "published_at": "2022-02-08T22:38:47Z"
        },
        {
          "tag": "v2.6.0-beta.1",
          "kind": "prerelease",
          "published_at": "2022-02-08T21:27:49Z"
        },
        {
          "tag": "v2.5.0",
          "kind": "minor",
          "published_at": "2022-02-04T22:14:16Z"
        },
        {
          "tag": "v2.4.0",
          "kind": "minor",
          "published_at": "2022-01-06T21:41:22Z"
        },
        {
          "tag": "v2.3.0",
          "kind": "minor",
          "published_at": "2021-12-10T23:51:32Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2021-11-04T22:51:13Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2021-10-23T19:45:34Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2021-09-29T19:18:35Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2021-08-29T20:01:19Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2021-08-18T20:30:49Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2021-07-17T22:42:17Z"
        },
        {
          "tag": "v2.0.0-beta.7",
          "kind": "prerelease",
          "published_at": "2021-07-09T21:22:58Z"
        },
        {
          "tag": "v2.0.0-beta.6",
          "kind": "prerelease",
          "published_at": "2021-07-07T08:00:05Z"
        },
        {
          "tag": "v2.0.0-beta.5",
          "kind": "prerelease",
          "published_at": "2021-06-22T21:23:09Z"
        },
        {
          "tag": "v2.0.0-beta.4",
          "kind": "prerelease",
          "published_at": "2021-06-02T22:12:44Z"
        },
        {
          "tag": "v2.0.0-beta.3",
          "kind": "prerelease",
          "published_at": "2021-04-20T19:55:46Z"
        },
        {
          "tag": "v2.0.0-beta.2",
          "kind": "prerelease",
          "published_at": "2021-01-30T15:17:06Z"
        },
        {
          "tag": "v2.0.0-beta.1",
          "kind": "prerelease",
          "published_at": "2021-01-12T23:45:15Z"
        },
        {
          "tag": "v1.19.2",
          "kind": "patch",
          "published_at": "2022-04-23T20:45:39Z"
        },
        {
          "tag": "v1.19.1",
          "kind": "patch",
          "published_at": "2022-03-19T21:50:50Z"
        },
        {
          "tag": "v1.19.0",
          "kind": "minor",
          "published_at": "2022-01-24T21:31:33Z"
        },
        {
          "tag": "v1.18.2",
          "kind": "patch",
          "published_at": "2021-12-02T13:03:24Z"
        },
        {
          "tag": "v1.18.1",
          "kind": "patch",
          "published_at": "2021-10-31T21:43:34Z"
        },
        {
          "tag": "v1.18.0",
          "kind": "minor",
          "published_at": "2021-08-20T21:13:46Z"
        },
        {
          "tag": "v1.17.1",
          "kind": "patch",
          "published_at": "2021-06-30T20:20:10Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2021-06-21T22:31:13Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2021-05-26T20:10:48Z"
        },
        {
          "tag": "v1.15.0",
          "kind": "minor",
          "published_at": "2021-04-20T06:47:03Z"
        },
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2021-02-14T23:14:40Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2021-01-24T21:43:20Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2021-01-02T21:04:22Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2020-10-15T15:10:20Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2020-07-07T20:11:23Z"
        },
        {
          "tag": "v1.9.2",
          "kind": "patch",
          "published_at": "2020-06-08T23:58:46Z"
        },
        {
          "tag": "v1.9.1",
          "kind": "patch",
          "published_at": "2020-06-08T22:39:48Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2020-05-09T23:07:28Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2020-04-21T13:00:34Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2020-04-04T20:17:29Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2020-03-04T08:36:25Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2020-02-02T00:52:54Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2020-01-15T11:26:20Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2020-01-07T13:00:01Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2019-12-26T23:59:46Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2019-12-25T23:25:24Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2019-11-28T15:44:40Z"
        },
        {
          "tag": "1.0.0-beta.4",
          "kind": "prerelease",
          "published_at": "2019-11-28T14:08:33Z"
        },
        {
          "tag": "1.0.0-beta.3",
          "kind": "prerelease",
          "published_at": "2019-10-10T22:36:11Z"
        },
        {
          "tag": "1.0.0-beta.2",
          "kind": "prerelease",
          "published_at": "2019-09-05T22:04:57Z"
        },
        {
          "tag": "1.0.0-beta.1",
          "kind": "prerelease",
          "published_at": "2019-09-04T22:49:08Z"
        },
        {
          "tag": "v0.0.1-beta.1",
          "kind": "prerelease",
          "published_at": "2019-07-26T23:14:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "84b59f7340c64c859938c1e8b4f8f4c41f3ed740",
          "body": "WASIX compatibility",
          "is_bot": false,
          "headline": "Merge pull request #3 from wasix-org/wasix-compat",
          "author_name": "Syrus Akbary",
          "author_login": "syrusakbary",
          "committed_at": "2024-09-17T09:35:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a2a78d1efc2ec67b32b29dc081cc83b1336f993",
          "body": null,
          "is_bot": false,
          "headline": "disable code analyzer for now",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T23:53:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d789ee142c8e6ead7b23f6e89d4b6fc296cc797b",
          "body": null,
          "is_bot": false,
          "headline": "disable audit and perfcheck",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T23:48:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4451203fb88e995f43ecc78f73e82f4452a8a5b",
          "body": null,
          "is_bot": false,
          "headline": "add directory-listing feature",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T23:46:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1ee55840fdeefd07f8273fa37291d4e42a94c24",
          "body": null,
          "is_bot": false,
          "headline": "fix issue with canonicalize",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T22:42:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42edb2b652a11714229e550ab7cf198b948bcdad",
          "body": null,
          "is_bot": false,
          "headline": "fix wasix build",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T10:04:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ac5e0f12c7d3aec9c271ab3a44b66824884a1e9",
          "body": null,
          "is_bot": false,
          "headline": "trigger PR",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T08:11:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13e1c5edd613ea5c7679cab058949470a19a3ed9",
          "body": null,
          "is_bot": false,
          "headline": "add build and publish steps",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T01:04:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a57df8262cae324d89f17ffff84ce1da8d5e16d5",
          "body": null,
          "is_bot": false,
          "headline": "add wasix compatability",
          "author_name": "M.Amin Rayej",
          "author_login": "maminrayej",
          "committed_at": "2024-09-05T00:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bdfcd4c888e08c10edc0a9ce1954d1799a9ec17",
          "body": "… (#328)\n\nVia a new advanced configuration entry.\r\n\r\nThe feature also supports expiration policies such as Time To Live (TTL) and Time To Idle (TTI).\r\n\r\nAdmission to a cache is controlled by the Least Frequently Used (LFU) policy and the eviction from a cache is controlled by the Least Recently Used\n[…]\n``\r\n\r\nNote that this feature requires Rust 1.76.0 or newer.\r\n\r\nThis feature is **experimental**. However, when stabilized then a cargo feature will be available as well as a proper documentation page.",
          "is_bot": false,
          "headline": "feat: experimental in-memory files cache with eviction policy support…",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-09-03T22:15:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e67e4c4901228ff38cbe6c83d86fc620f8c70a8a",
          "body": null,
          "is_bot": false,
          "headline": "docs: v2.32.2 [skip ci]",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-08-13T22:10:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e61c97e76fcd2ae3b4c9e4133ff145a16bc6eb04",
          "body": null,
          "is_bot": false,
          "headline": "v2.32.2",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-08-13T21:41:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "634dd98f5b0087dd5543d2d12736d285fd0774cd",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 13.08.2024 (#472)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-08-13T21:12:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f228a7a0d8c74b6b43672eb519de792948ee723d",
          "body": null,
          "is_bot": false,
          "headline": "chore: make task for build development docker images [skip ci]",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-08-13T00:00:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a72c7b3c6bea9e8e509dbc43608a92367382a09f",
          "body": "…nabled (#471)",
          "is_bot": false,
          "headline": "fix: wrong `Content-Encoding` when compression & compression-static e…",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-08-12T23:32:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd48972896d859344a84e5d2944d6662ccc22dcb",
          "body": "Now boolean flags like --directory-listing, --compression_static, etc\r\nwill work in three variants.\r\n\r\nFor example:\r\n\r\n--directory-listing\r\n--directory-listing true\r\n--directory-listing=true",
          "is_bot": false,
          "headline": "fix: regression boolean flags with without explicit values (#468)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-24T21:06:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "915d04012e07fc9239b19e63b9fcf1d66f207617",
          "body": "When running tests with additional non-sws arguments, tests execution\r\nfails because sws is trying to parse cli arguments anyways.\r\n\r\nNow, sws won't parse arguments by default when running tests.\r\nFor example, the following command will work as expected:\r\n\r\ncargo test -- --test-threads 1 --nocapture",
          "is_bot": false,
          "headline": "fix: can not run tests via cargo when passing non-sws arguments (#466)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-22T19:32:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce50a81d21bbccacfead758ca63d520b6f7d8785",
          "body": null,
          "is_bot": false,
          "headline": "docs: v2.32.1 [skip ci]",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-20T22:10:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97da457bcc87a4a92c94d2cf9488f742a5f178c1",
          "body": null,
          "is_bot": false,
          "headline": "v2.32.1",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-20T21:33:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfa35670993588cf694946897306c30a01b428cb",
          "body": "* chore: update dependencies 17.07.2024\r\n* chore: update tokio-rustls 0.26\r\n* chore: update dependencies 19.07.2024",
          "is_bot": false,
          "headline": "chore: update dependencies 17.07.2024 (#463)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-19T20:53:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87ce30d0fb8655167071abad2afd876720de52ba",
          "body": null,
          "is_bot": false,
          "headline": "chore: update debian docker images to 12.6 (#461)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-06T18:57:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25b1b1c391ab948444fcd2a3b8d90b7bba3c998d",
          "body": null,
          "is_bot": false,
          "headline": "docs: improve feature, versioning pages and remove dead links (#460)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-01T21:59:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "057239da4050ac690965dfc8dcc4571c47ba8dd0",
          "body": null,
          "is_bot": false,
          "headline": "chore: update alpine docker images to 3.18.7 (#459)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-01T21:36:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b3fad9868798e7419a73945952ee71ed024bf219",
          "body": null,
          "is_bot": false,
          "headline": "refactor: remove deprecated bors and improve devel ci (#458)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-07-01T21:22:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c805d626e4b66bd7e1114cf1221ae45eb58647e",
          "body": null,
          "is_bot": false,
          "headline": "refactor: remove redundant `async` function signatures (#457)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-26T23:35:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e64076c6c73fe697fa695f95c7046adbd63bfe36",
          "body": "* Improve typos configuration\r\n\r\n* Remove individual username\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>\r\n\r\n* Ignore all usernames\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: improve typos configuration (#456)",
          "author_name": "Viktor Szépe",
          "author_login": "szepeviktor",
          "committed_at": "2024-06-19T21:27:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9afff97acd15320bbd8b7c426d42a3fd369992c3",
          "body": null,
          "is_bot": false,
          "headline": "docs: v2.32.0 [skip ci]",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-19T04:49:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "216e485f47f2f8aaf4d0e515519754b29128528a",
          "body": null,
          "is_bot": false,
          "headline": "v2.32.0",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-18T20:33:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67139321abae1c6a6a411ef7853f85287c6d65cd",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 18.06.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-18T19:59:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2273027e0c9bf84f0c5b7c839f43ec9dff37a2e",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 16.06.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-15T22:56:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eeb88dab51705610660988576e065f723339fe6b",
          "body": "* feat: disable symlinks option\r\n\r\n--disable-symlinks[=<DISABLE_SYMLINKS>]\r\n  Prevent following files or directories if any path name component is\r\n  a symbolic link [env: SERVER_DISABLE_SYMLINKS=] [default: false]\r\n  [possible values: true, false]\r\n\r\n* chore: add tests\r\n* docs: feature page [skip ci]",
          "is_bot": false,
          "headline": "feat: disable symlinks option via `--disable-symlinks` (#454)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-11T20:46:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd5fa1bbc38288984c6cebce7cf26f436fe05125",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 10.06.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-10T20:08:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3410365ed084c8f150dd4077bb5a377b1152a66d",
          "body": "…sion-static` features (#453)\n\nit prevents duplicate `vary` headers in responses when enabling\r\n`compression` and `compression-static`.\r\n\r\n* fix: duplicate `vary` response headers for compression feature\r\n* fix: failed tests for experimental features",
          "is_bot": false,
          "headline": "fix: duplicate `Vary` response headers for `compression` and `compres…",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-06T22:47:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "032ecaa3d5d5f66899e62fc1b1bdca89ffb9aae0",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 05.06.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-06-04T23:21:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6031a1b51d62649e248dd6d0d0e59658b330c705",
          "body": "…ts (#452)",
          "is_bot": false,
          "headline": "fix: incorrect `Content-Encoding` for pre-compressed zstd file reques…",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-29T04:53:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91f8ec067547ae5783c2c7ab33228168c4d69e3a",
          "body": null,
          "is_bot": false,
          "headline": "docs: improve download-and-install.md page (second part)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-22T22:42:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a88839718077f19055a6b9ee0e5aaf9884c9622b",
          "body": null,
          "is_bot": false,
          "headline": "docs: improve `download-and-install.md` page (#450)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-22T22:19:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2911891cd6ef0ca7e28815179ecef39ab8c4a62",
          "body": "…er (#449)\n\n* update installer.sh to support overriding default variables\r\n\r\n* add instructions on envs",
          "is_bot": false,
          "headline": "feat: custom install version and directory options for binary install…",
          "author_name": "Frank",
          "author_login": "frankli0324",
          "committed_at": "2024-05-22T06:33:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7758525014dd43739f9901b5f70c6c99f3cb9944",
          "body": null,
          "is_bot": false,
          "headline": "docs: v2.31.1 [skip ci]",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-20T23:18:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2df991fe2e14a63cd9103ee7327011ac318bd00e",
          "body": null,
          "is_bot": false,
          "headline": "v2.31.1",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-20T22:55:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5f851f05bc66def3fa3d82775c998ee2e73e3ad",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 21.05.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-20T22:28:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f116d7542362eb53e20e62ddc564bab8de4aae3",
          "body": "Since the latest Rust 1.78.0 drops support Windows 7 support.\r\nSee https://blog.rust-lang.org/2024/02/26/Windows-7.html\r\n\r\nWe pin Rust to 1.77.2 for the following Windows targets:\r\n\r\n- x86_64-pc-windows-msvc\r\n- i686-pc-windows-msvc\r\n- x86_64-pc-windows-gnu\r\n\r\naarch64-pc-windows-msvc (a.k.a. Windows \n[…]\nver, keep in mind that we\r\ncould reconsider bumping up the MSRV in future SWS versions when\r\nconvenient, advising users accordingly.\r\nSee https://learn.microsoft.com/en-us/lifecycle/products/windows-7",
          "is_bot": false,
          "headline": "refactor: re-enable windows 7 support by pinning ust 1.77.2 (#447)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-20T22:16:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1763623db70a93d4d341e6ed0a0e52d3687745de",
          "body": null,
          "is_bot": false,
          "headline": "fix: cargo publish issue due to missing `build.rs` file include",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-20T19:41:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adaddde93fc05eaa944a0a1e866db608a46de8c6",
          "body": "This completes the previous work on\r\nhttps://github.com/static-web-server/static-web-server/pull/443 by\r\ncorrectly setting the default 64KB page size for jemalloc at\r\nthe build config level (cross) which should be applied for development\r\nand production `aarch64-unknown-linux-musl` builds.",
          "is_bot": false,
          "headline": "fix: jemalloc unsupported system page size in linux arm64 musl (#446)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-20T15:10:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a9b2fc98f7090b25b91810244038009803d6b2e",
          "body": null,
          "is_bot": false,
          "headline": "docs: v2.31.0 [skip ci]",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-19T20:49:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30e8ed225fe00dc61b9a3648b58bc67c5c5e690e",
          "body": null,
          "is_bot": false,
          "headline": "v2.31.0",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-19T20:28:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea963282c5adf4edc5d4db2fe5535cdd0bd23b9e",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 19.05.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-19T19:06:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0792606c1454e6cb33776785ecfd77af80350e40",
          "body": null,
          "is_bot": false,
          "headline": "feat: ci code analysis workflow",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-19T00:15:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "936b2244994e7c730d1d41a5c59c2b5db8e284cc",
          "body": null,
          "is_bot": false,
          "headline": "chore: prevent run freebsd devel pipeline unnecessarily",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-19T00:09:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cf72e63151fa9407233fb2cd877ed27df90b8c3",
          "body": null,
          "is_bot": false,
          "headline": "chore: several project config and doc file improvements",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-18T23:03:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d22e2dde33b22314abc8347e76ede8c427f83f6d",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 18.05.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-18T20:26:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f59da9c50738e640cb038363b9491daed30b144",
          "body": "…eping quality ordering (#439)\n\n* search for all accepted static compression formats\r\n* add test\r\n* fix syntax issues and improve the test\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: look for all accepted encodings for pre-compressed files but ke…",
          "author_name": "Tristan Kobusch",
          "author_login": "kobutri",
          "committed_at": "2024-05-16T22:34:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2faeef5baca2c3a9bc43a68fe32993e909e3710e",
          "body": "The `--version` flag will display now more details about the server:\r\n\r\n$ static-web-server -V\r\nVersion:      2.30.0\r\nBuilt:        2024-05-13 20:18:46 +00:00\r\nGit commit:   195f706e6484a8ded19fb4852d0fc09440d6842d\r\nBuild target: aarch64-apple-darwin\r\nRust version: rustc 1.77.2 (25ef9e3d8 2024-04-09)\r\nLicense:      MIT OR Apache-2.0\r\nHomepage:     https://static-web-server.net\r\nAuthor:       Jose Quintana <https://joseluisq.net>",
          "is_bot": false,
          "headline": "feat: show detailed info about the server via -V, --version flags (#444)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-14T22:35:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "195f706e6484a8ded19fb4852d0fc09440d6842d",
          "body": "It fixes an issue when using the `aarch64-unknown-linux-musl` binary\r\nin systems with 16KB page size like Linux aarch64 (Raspberry Pi 5) by\r\nsetting up jemalloc to use a maximal supported page size of 64KB on\r\naarch64. See jemalloc/jemalloc#467#issuecomment-2054282344\r\njemalloc can also handle systems with smaller page sizes. See jemalloc/jemalloc#769\r\n\r\nerror:\r\n\r\n<jemalloc>: Unsupported system page size\r\n<jemalloc>: Unsupported system page size\r\nmemory allocation of 5 bytes failed",
          "is_bot": false,
          "headline": "fix: unsupported system page size when using linux arm64 musl (#443)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-13T20:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "778477edde83162b2708e34654b7fe660152af7e",
          "body": null,
          "is_bot": false,
          "headline": "feat: log virtual-hosts information per request (#442)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-12T22:45:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4046d9a76d38fc52eff5163225a74a6dd200f6f",
          "body": null,
          "is_bot": false,
          "headline": "fix: unexpected `cfg` condition-name `wasm` in rust nightly (#441)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-12T21:19:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfd8bb168a1ad1642bf2c67dc687dd91360c51d7",
          "body": "moving/improving existing functionality and documentation of several internal files\r\nsystem-related code across modules",
          "is_bot": false,
          "headline": "refactor: re-organize file system-related modules (#424)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-08T22:29:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "219ec6c9aec1cbcaada6bc0b14dc89a27186b34d",
          "body": "… (#388)\n\n* refactor: move remote & real ip addrs logging\r\n* refactor: health endpoint check and test case for allowed methods",
          "is_bot": false,
          "headline": "refactor: move remote and real IP addresses logging to its own module…",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-05-06T21:48:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18f550a453e4647915213da12f42d2c971ca5f50",
          "body": "* Drop custom conversion between SystemTime and DateTime\r\n\r\n* Removed unnecessary closure\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: drop custom conversion between SystemTime and DateTime (#384)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-05-02T12:29:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1aae13c70024778af8bcbb1c074b7e130d690ae9",
          "body": "…ory (#385)",
          "is_bot": false,
          "headline": "fix: empty files size are displayed incorrectly when listing a direct…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-05-02T12:10:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85e3da79c47d6dba7ec68bef1b257cd9f6b63122",
          "body": null,
          "is_bot": false,
          "headline": "refactor: do not mention request body type unnecessarily #340 (#375)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-05-01T11:49:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cbf95b7c51c8784460ef04ce18615f4e94a057d",
          "body": "* Make fastest compression level the default setting\r\n\r\n* Use balanced compression levels by default\r\n\r\n* Fixed formatting and addressed clippy warning\r\n\r\n* Change default zlib compression level to 3\r\n\r\n* Updated docs to mention zlib compression\r\n\r\n* Fixed setting spelling in docs\r\n\r\n* Don't expose CompressionLevel::into_algorithm_level()\r\n\r\n* Updated documentation of the compression feature",
          "is_bot": false,
          "headline": "feat: compression level option support (#381)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-05-01T03:42:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7bfaa25ebcdda4b7e2532cf68ab0c70d0820df1",
          "body": "* Fixed compile errors if only deflate compression is enabled\r\n\r\n* Reformmatted code",
          "is_bot": false,
          "headline": "fix: compile errors if only deflate compression is enabled (#383)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-30T05:21:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b13a7432d3e0d257d6fc59969cf0517a68f558c",
          "body": null,
          "is_bot": false,
          "headline": "fix: clippy warning (#382)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-30T05:19:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2eaa7464895b3cc3b485120ebe813788eaf1f82",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add Caddy server to performance benchmarks (#379)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-29T07:55:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25c171b553984ab5a9d1e16fbb6d4ac6bffb2538",
          "body": "* Fix the display format for file sizes\r\n\r\n* Optimized file size formatting: simplified logic\r\n\r\n* Fix typos\r\n\r\n* Fix: use array indexing instead of hardcoding",
          "is_bot": false,
          "headline": "fix: display format for file sizes (#376)",
          "author_name": "miro",
          "author_login": "miroim",
          "committed_at": "2024-04-29T06:51:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "957fe6b9db0226ae48e22eb0cbbf8e3eb7dd493b",
          "body": "This reverts parrtially commit e30c6aaba60e0495024d25e97eee97cc1cca2c7d.",
          "is_bot": false,
          "headline": "docs: v2.30.0 [skip ci]",
          "author_name": "github-actions",
          "author_login": null,
          "committed_at": "2024-04-28T23:40:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e30c6aaba60e0495024d25e97eee97cc1cca2c7d",
          "body": null,
          "is_bot": false,
          "headline": "docs: v2.30.0 [skip ci]",
          "author_name": "github-actions",
          "author_login": null,
          "committed_at": "2024-04-28T23:01:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e24b2ecf59cea8636dd6024b707e3ba4c27fb7a6",
          "body": null,
          "is_bot": false,
          "headline": "v2.30.0",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-28T22:40:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6683446b20c34591e6280f33d6f303e16fd7cda7",
          "body": "it also udaptes `cc` and `jobserver` dependencies\npreviously downgraded in c33e8b7d38b806870b84132bea47e485b99ee49e",
          "is_bot": false,
          "headline": "chore: update dependencies 28.04.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-28T20:56:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "114862af64ba713c914e205cb65ca8e9c1a14231",
          "body": null,
          "is_bot": false,
          "headline": "fix: make sure to deal with malformed UTF-8 in file names (#374)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-28T20:36:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d61c91a29e3c5a87ef07912f6233cc572a58c45",
          "body": "…g module (#373)",
          "is_bot": false,
          "headline": "refactor: move directory listing initialization into the correspondin…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-28T13:52:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f311e945bf82a3b6ce5a13491d59f50d4fdd4347",
          "body": "…(#372)\n\n* Move all fallback page logic into the corresponding module\r\n\r\n* Update src/fallback_page.rs\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: move all fallback page logic into the corresponding module …",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-28T13:16:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d6630158484429375f70917e86c7e93247dc2ff",
          "body": "… links (#371)\n\n* fix: don't percent-encode unreserved chars in the directory listing links\r\n\r\nthose chars (a.k.a unreserved marks) are now not percent-encoded:\r\nhttps://www.ietf.org/rfc/rfc3986.txt\r\n\r\n* chore: revert partially previous functionality",
          "is_bot": false,
          "headline": "fix: don't percent-encode unreserved characters for directory listing…",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-28T12:04:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b5ea983636f62b2af4685b0e309eb2cd7f09b49",
          "body": "…367)\n\n* Use maud templates for directory listings\r\n* Use serde_json to generate JSON formatted directory listings\r\n* Restored previous behavior for file size display in HTML listings\r\n* Reverted changes to JSON directory listings due to a performance regression\r\n* Reinstated changes, not the cause of the performance regression",
          "is_bot": false,
          "headline": "refactor: use maud templates and serde_json for directory listings (#…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-27T21:14:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b66c89ed171b47c7b05a9ef51d08ec1bde7772d3",
          "body": "…ression_static modules (#369)",
          "is_bot": false,
          "headline": "refactor: move all compression-related code into compression and comp…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-27T17:06:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8e39aa205dbcde086ce66d162b87b58beed8b14",
          "body": "* Fix errors due to \"unused code\" when features are disabled \r\n\r\n* Do not merge crate imports\r\n\r\n* Rearrange code to make silencing clippy unnecessary\r\n\r\n* Removed unnecessary newline\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: errors due to \"unused code\" when features are disabled (#368)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-27T13:07:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a4035fd2bdf4963bc849c5a6ebadb8f5d951684",
          "body": null,
          "is_bot": false,
          "headline": "refactor: improve recognition of text MIME types for compression (#360)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-25T21:56:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "528ed08b324048c4e1e0accbcf170b443da61d4f",
          "body": "…on schemes are available (#361)\n\n* Fix Accept-Encoding handling to work correctly if only two compression schemes are available\r\n* Fixed typo and slightly extended test\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: Accept-Encoding handling to work correctly if only two compressi…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-25T20:54:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfd13908f6b6ccaa9db543bf642ea5f2d989b3dc",
          "body": "It brings a significant performance improvement when listing large directories as shown in our benchmarkshttps://github.com/static-web-server/static-web-server/actions/runs/8823589340\r\n\r\n* Improve performance of directory listings\r\n* Make file system access for directory listings sync to reduce overhead",
          "is_bot": false,
          "headline": "refactor: improve performance overall of directory listing (#357)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-24T22:03:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddda871871ea917d92b05741e4b1bbba7c27d42f",
          "body": "…istency (#359)\n\n* Apply the usual post-processing to error responses\r\n* Fix formatting\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: apply the usual post-processing to error responses for cons…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-24T01:52:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a197f206505c5a42ddceb32b2a205205d9e3e168",
          "body": "…ctions (#355)\n\nIt runs load testing benchmarks comparison of SWS against several major web servers via CI regularly.\r\nResults can be found at https://github.com/static-web-server/static-web-server/actions/runs/8802645161\r\nand benchmark setup and corpus can be found at https://github.com/static-web-\n[…]\names for merged artifact\r\n* Move configuration and test root used for benchmarking into a separate repository\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: load testing benchmarks comparison for each commit via Github A…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-24T00:30:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3c55a47fe727ddd70609de160b7c29a634fa507",
          "body": "Since rust 1.59.0 std::thread::available_parallelism is stabilized and\r\nit can be used instead of num_cpus crate in our case.\r\nIt's good enough for our use case and means one dependency less.",
          "is_bot": false,
          "headline": "refactor: prefer querying available cpus using rust std (#358)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-23T00:29:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "207fa4a108f628c9ca8a2c9dafc93ea8f12ad1af",
          "body": "…353)\n\n* Move all rewrite handling logic into the rewrites module\r\n\r\n* Improve handling of query strings\r\n\r\n* Fix display of rewrite/redirect errors, show underlying errors again\r\n\r\n* Document rewrites to a different virtual host\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: move all rewrite handling logic into the rewrites module (#…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-21T22:33:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c33e8b7d38b806870b84132bea47e485b99ee49e",
          "body": "due to builds issues as reported on https://github.com/rust-lang/jobserver-rs/issues/87\nthis workaround can be removed once https://github.com/rust-lang/jobserver-rs/pull/88 is released",
          "is_bot": false,
          "headline": "chore: downgrade cc and jobserver dependencies temporarily",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-21T22:13:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cfc7ed3abc5e599450460fea40547a84787b259",
          "body": "fix rustls CVE-2024-32650\nhttps://github.com/advisories/GHSA-6g7w-8wpp-frhj",
          "is_bot": false,
          "headline": "chore: update dependencies 21.04.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-21T21:39:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a13f496c206681c02b6371c7eb6c3841a34682ea",
          "body": "…ccept-Encoding header (#354)\n\n* Replaced fork of the headers module by an in-tree handler for the Accept-Encoding header\r\n\r\n* Added test for various allowed whitespace within the Accept-Encoding header\r\n\r\n* Add tests for ContentCoding::ANY\r\n\r\n* Fixed links in documentation\r\n\r\n* Removed CargoCoding:\n[…]\nonal clippy warnings had to be addressed.\r\n\r\n* refactor: reduce the visibility of headers_ext and its methods\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: replace headers module fork by an in-tree handler for the A…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-21T14:38:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "941f6924d603631c54803b9024c0fb880e030418",
          "body": "…les (#351)",
          "is_bot": false,
          "headline": "refactor: move code related to header handling to the respective modu…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-20T23:44:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1246e3798bbdf3a90c8f7ff968943c1f6b743217",
          "body": "…odule (#350)\n\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: move most of maintenance mode logic into maintenance_mode m…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-20T13:22:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9659333d7f4a5b4137abb04024c2252f8346992",
          "body": "Co-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: move most of CORS-related code into the cors module (#349)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-20T12:54:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d44e5a13b96b921ea56d62143b841d33a0e4b9e9",
          "body": "…(#348)\n\n* Move all redirect handling logic into the redirects module\r\n* Fixed wrong handling of missing capture groups",
          "is_bot": false,
          "headline": "refactor: move all redirect handling logic into the redirects module …",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-20T10:10:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76531e6041f9d3e6dc14b2fc740a96a7b36faf96",
          "body": "…le (#346)\n\n* refactor: Move all of Basic authentication logic into basic_auth module\r\n* Do not import server_info macro explicitly\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: move all of basic authentication logic into basic_auth modu…",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-18T22:32:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc6784adb6638758dfe7d8e3004eaa9c0a2fd84d",
          "body": "This is largely analogous to #344, another step towards fixing #342.\r\n\r\nLoading logger module in lib.rs was moved up for sake of consistency: modules loaded after it will have macros like server_info imported implicitly, the ones loaded before won't. Further alphabetical rearranging of modules was performed by rustftm.",
          "is_bot": false,
          "headline": "refactor: move metrics endpoint-related code into a separate file (#345)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-18T19:46:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c4fad200997903d31ce83e50a29b0e8aea508d0",
          "body": "* Skipping basic auth check for OPTIONS requests\r\n* Adding authorization header to allowed_headers list\r\n* refactor: improve cors module and update docs feature page\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <joseluisquintana20@gmail.com>",
          "is_bot": false,
          "headline": "fix: CORS does not work when used with Basic Auth (#343)",
          "author_name": "Matthias Schmidt",
          "author_login": "ms140569",
          "committed_at": "2024-04-16T21:26:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a876cd5ff506975ac2d62781540b22b6a28471f0",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 16.04.2024",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-16T21:09:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe6a2a1173cba7bdd1eaa968970aee80fbfa0d0e",
          "body": "* chore: Move code related to the health endpoint into a separate file\r\n\r\nThis is a first step towards #342. At this point HealthHandler merely encapsulates static methods. The idea is to have init() method also handle moving Settings::General::health to RequestHandlerOpts::health in future. Ideally\n[…]\ns for RequestHandlerOpts with CLI defaults\r\n\r\n* Improved comment\r\n\r\n* Don't expose the health module publicly\r\n\r\n---------\r\n\r\nCo-authored-by: Jose Quintana <1700322+joseluisq@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: move health endpoint-related code into a separate file (#344)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-16T20:18:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f534f002b4699b8ba91f5d3238d4b891c07bf424",
          "body": null,
          "is_bot": false,
          "headline": "fix: typo in GitHub bug report template [skip ci] (#341)",
          "author_name": "Wladimir Palant",
          "author_login": "palant",
          "committed_at": "2024-04-14T06:02:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "183102d1bff980a473cde439114e1e9987325733",
          "body": "… (#339)\n\nalso, if only one compression feature is\r\nenabled (e.g. compression-gzip) then the preferred encoding gets\r\nre-evaluated and assigned to that compression feature format  but only if it\r\nwas part of the `accept-encoding` request header value.\r\n\r\nnow the following scenarios will work:\r\n\r\n[de\n[…]\n }\r\n\r\nor\r\n\r\n [dependencies]\r\nstatic-web-server = { version = \"2.28.0\", default-features = false, features = [\"compression-brotli\"] }\r\n\r\nin addition, some tracing logs are added to reflect the changes.",
          "is_bot": false,
          "headline": "fix: build error when using specific or no Cargo compression features…",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-13T02:44:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69bfdd492e258da04bb5d9896a43722c12bf4560",
          "body": null,
          "is_bot": false,
          "headline": "chore: update dependencies 12.04.2023",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-12T00:10:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e569a7161729b97ed4d21c5bfd0579d5076d4639",
          "body": null,
          "is_bot": false,
          "headline": "chore: reduce some allocations in several modules (#337)",
          "author_name": "Jose Quintana",
          "author_login": "joseluisq",
          "committed_at": "2024-04-12T00:09:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 54,
      "commits_last_year": 0,
      "latest_release_at": "2022-05-04T20:30:55Z",
      "latest_release_tag": "v2.8.0",
      "releases_from_tags": true,
      "days_since_last_push": 675,
      "active_weeks_last_year": 0,
      "days_since_latest_release": 1541,
      "mean_days_between_releases": 20.1
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "static-web-server",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [
            "file-server",
            "http-server",
            "static-web-server",
            "network-programming",
            "web-programming::http-server"
          ],
          "ecosystem": "crates",
          "matches_repo": false,
          "registry_url": "https://crates.io/crates/static-web-server",
          "is_deprecated": false,
          "latest_version": "2.43.0",
          "repository_url": "https://github.com/static-web-server/static-web-server",
          "versions_count": 42,
          "total_downloads": 45100,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 256,
          "first_published_at": "2023-04-13T23:28:56.956673Z",
          "latest_published_at": "2026-07-21T22:15:38.792019Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 2
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 25,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2025-09-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "benches/Cargo.toml",
        "fuzz/Cargo.toml"
      ],
      "largest_source_bytes": 58612,
      "source_files_sampled": 66,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "benches/Cargo.toml",
        "fuzz/Cargo.toml"
      ],
      "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": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "aho-corasick",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1"
        },
        {
          "name": "anyhow",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "async-compression",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "bcrypt",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.15"
        },
        {
          "name": "bytes",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.6"
        },
        {
          "name": "chrono",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "clap",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=4.4"
        },
        {
          "name": "compact_str",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "form_urlencoded",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.2"
        },
        {
          "name": "futures-util",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "globset",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.4"
        },
        {
          "name": "headers",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=0.3.0"
        },
        {
          "name": "http",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "http-serde",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1"
        },
        {
          "name": "hyper",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14"
        },
        {
          "name": "lazy_static",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.5"
        },
        {
          "name": "listenfd",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "maud",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.26"
        },
        {
          "name": "mime_guess",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.0"
        },
        {
          "name": "mini-moka",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.10.3"
        },
        {
          "name": "percent-encoding",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.3"
        },
        {
          "name": "pin-project",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.1"
        },
        {
          "name": "regex",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.10"
        },
        {
          "name": "rustls-pemfile",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2.1"
        },
        {
          "name": "serde",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "serde_ignored",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "serde_json",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0"
        },
        {
          "name": "serde_repr",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "shadow-rs",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.29"
        },
        {
          "name": "tokio",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=1.35.1"
        },
        {
          "name": "tokio-rustls",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.26"
        },
        {
          "name": "tokio-util",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.7"
        },
        {
          "name": "toml",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "tracing",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1"
        },
        {
          "name": "tracing-subscriber",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.3"
        },
        {
          "name": "getrandom",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=0.2.10"
        },
        {
          "name": "triomphe",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=0.1.3"
        },
        {
          "name": "rustix",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=0.38.30"
        },
        {
          "name": "sha-1",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "=0.8.0"
        },
        {
          "name": "static-web-server",
          "manifest": "benches/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "2"
        },
        {
          "name": "criterion",
          "manifest": "benches/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.5"
        },
        {
          "name": "hyper",
          "manifest": "benches/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.14"
        }
      ],
      "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": 0,
        "merged_prs": 3,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "joseluisq",
          "commits": 901,
          "avatar_url": "https://avatars.githubusercontent.com/u/1700322?v=4"
        },
        {
          "type": "User",
          "login": "palant",
          "commits": 28,
          "avatar_url": "https://avatars.githubusercontent.com/u/374261?v=4"
        },
        {
          "type": "User",
          "login": "maminrayej",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/32737690?v=4"
        },
        {
          "type": "User",
          "login": "syrusakbary",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/188257?v=4"
        },
        {
          "type": "User",
          "login": "tim-seoss",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/5011760?v=4"
        },
        {
          "type": "User",
          "login": "kianmeng",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/134518?v=4"
        },
        {
          "type": "User",
          "login": "snyk-bot",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/19733683?v=4"
        },
        {
          "type": "User",
          "login": "mfontanini",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/969090?v=4"
        },
        {
          "type": "User",
          "login": "mac-chaffee",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/7581860?v=4"
        },
        {
          "type": "User",
          "login": "HenningHolmDE",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/33267536?v=4"
        }
      ],
      "contributors_sampled": 30,
      "top_contributor_share": 0.922
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "audit.yml",
        "devel.code-analyzer.yml",
        "devel.docker.yml",
        "devel.yml",
        "perfcheck.yml",
        "release.build.manual.yml",
        "release.crate.yml",
        "release.docker.manual.yml",
        "release.docker.yml",
        "release.updates.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
            "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": 0,
            "reason": "Found 1/22 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 8 contributing companies or organizations",
            "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": 10,
            "reason": "project is 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": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not 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": 10,
            "reason": "security policy file 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": "21 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "84b59f7340c64c859938c1e8b4f8f4c41f3ed740",
        "ran_at": "2026-07-24T20:28:47Z",
        "aggregate_score": 3.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2024-09-17T09:35:09Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/wasix-org/static-web-server",
    "host": "github.com",
    "name": "static-web-server",
    "owner": "wasix-org"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": "Abandonment Policy applies a 85% multiplier to weighted overall health.",
      "notes": [
        {
          "code": "abandonment_overall_adjustment",
          "params": {
            "cap": 0,
            "pct": 85
          }
        }
      ],
      "value": 31,
      "inputs": {
        "security": 35,
        "vitality": 20,
        "community": 23,
        "governance": 56,
        "engineering": 45,
        "abandonment_cap": null,
        "abandonment_state": "at_risk",
        "abandonment_multiplier": 85,
        "weighted_overall_before_abandonment": 37,
        "overall_after_abandonment_multiplier": 31
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "critical",
        "name": "Vitality",
        "value": 20,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "commits_last_year": 0,
              "human_commit_share": 1,
              "days_since_last_push": 675,
              "active_weeks_last_year": 0
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 675 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 675
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "0/52 weeks with commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "0 commits in the last year",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "at_risk",
            "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": 48,
            "inputs": {
              "releases_count": 54,
              "latest_release_tag": "v2.8.0",
              "releases_from_tags": true,
              "days_since_latest_release": 1541,
              "mean_days_between_releases": 20.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "54 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 54
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 1541 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 1541
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~20.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 20.1
                    }
                  }
                ],
                "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": 85,
            "inputs": {
              "cap": null,
              "state": "at_risk",
              "guards": [
                "no_open_demand"
              ],
              "signals": [
                "release_stall",
                "scorecard_unmaintained"
              ],
              "red_flag": true,
              "multiplier_pct": 85,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 0,
              "unanswered_open_issues": 0,
              "days_since_last_merged_pr": 675,
              "days_since_last_human_commit": 675,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 675 days; 2 unmet obligation(s): releases stalled, Scorecard reports it unmaintained",
                "points": 85,
                "status": "partial",
                "details": [
                  {
                    "code": "abandonment_flagged",
                    "params": {
                      "days": 675,
                      "count": 2,
                      "signals": "releases stalled, Scorecard reports it unmaintained"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 23,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "forks": 1,
              "stars": 25,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "25 stars",
                "points": 22.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 25
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 30,
              "top_contributor_share": 0.922
            },
            "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 92% of commits",
                "points": 1.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 92
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "30 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 8 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 3,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "3/3 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 3,
                      "decided": 3
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "followers": 336,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "wasix-org",
              "public_repos": 175,
              "account_age_days": 1159
            },
            "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": "336 followers of wasix-org",
                "points": 18.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 336,
                      "login": "wasix-org"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "175 public repos, account ~3 yr old",
                "points": 19.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 175
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 45,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "11 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://sws.joseluisq.net",
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": "https://sws.joseluisq.net",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 35,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "Found 1/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 8 contributing companies or organizations",
                "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 fuzzed",
                "points": 5,
                "status": "met",
                "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": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 detected",
                "points": 5,
                "status": "met",
                "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": "21 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": 10
            },
            "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": 60,
        "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": 0.86,
              "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": "86 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 86,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "benches/Cargo.toml",
                "fuzz/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "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": "Rust",
              "largest_source_bytes": 58612,
              "source_files_sampled": 66,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/66 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 66,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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",
    "Community profile unavailable",
    "crates package 'static-web-server' points at a different repository (https://github.com/static-web-server/static-web-server); excluded from ecosystem scoring",
    "Could not fetch crates package 'benches' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T20:29:08.079016Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wasix-org/static-web-server.svg",
  "full_name": "wasix-org/static-web-server",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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.27.0 — metodología completa · wiki de métricas.

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