Sus paquetes npm y sus imágenes Docker, en un registro que usted aloja.

Repositorios alojados, proxys y grupos, cuotas, retención, auditoría de dependencias y análisis de imágenes: un binario Rust y un PostgreSQL. En producción, el servidor y su base de datos ocupan juntos unos cincuenta MiB de memoria.

Abrir ArtiFerris
$docker compose up -d --build

Sin cuenta en terceros, sin telemetría enviada. Ver la arquitectura.

$ kubectl top pod -n artiferris --containers
POD                                    NAME             CPU(cores)   MEMORY(bytes)
artiferris-7f497fb86-pcft9             artiferris-api   2m           5Mi
artiferris-postgres-7f7784f89f-rcd4s   postgres         9m           48Mi
La instancia de producción, versión 0.6.1, en un clúster de Kubernetes (amd64), medida el 6 de octubre de 2026, pocos minutos después de reiniciar el servidor.

Casos de uso

Cuatro situaciones típicas, y la respuesta que ArtiFerris les da.

Sus compilaciones descargan sus dependencias de un registro público, cada vez.
Un repositorio proxy se coloca delante de registry.npmjs.org o Docker Hub: la primera petición obtiene el paquete del origen, las siguientes lo sirven desde ArtiFerris. Un grupo reúne ese proxy y sus paquetes tras una única dirección.
Aloja los paquetes de varios equipos o de varios clientes en una misma instancia.
Cada organización tiene su subdominio, sus repositorios, sus usuarios, su marca y su proveedor de identidad. Sus administradores solo actúan sobre ella; un superadministrador las ve todas.
Quiere saber qué contienen las imágenes y los paquetes que distribuye.
Trivy analiza cada imagen subida, y el análisis se puede relanzar a mano. Las dependencias de un paquete npm se auditan en cada publicación. Los resultados aparecen en la página de la imagen o del paquete.
Quiere que la autenticación en dos pasos no dependa de la diligencia de cada persona.
Es obligatoria para todas las cuentas, locales o procedentes de LDAP u OIDC. Las herramientas de línea de comandos se autentican con un token de API, que la administración puede listar y revocar.

Vista general del producto

Extractos de la interfaz real, no maquetas. La interfaz existe en francés, inglés, español, italiano y alemán.

La lista completa de funcionalidades

Arquitectura

Un proceso, seis crates, una arquitectura hexagonal: el dominio no sabe nada de la base de datos, y cada protocolo de registro tiene su propio crate.

El código fuente en GitHub

Arquitectura de una instancia de ArtiFerrisDibujo isométrico. Un cliente npm o Docker y un navegador hablan con un único binario Rust, artiferris-api, formado por los crates api, npm, docker, application, domain e infrastructure. El binario guarda sus datos en PostgreSQL y sus archivos y blobs en disco, consulta los directorios LDAP y OIDC y el servidor SMTP, y sus proxys se abastecen de registros de origen. Una línea naranja sigue una instalación hasta el registro de origen. Siete círculos numerados llevan a los bloques de la página.api npm docker application domain infrastructure artiferris-api: un único binario Cliente npm o Docker HTTPS, token de API npm, pnpm, yarn, docker, podman Navegador consola con sesión o catálogo público api, npm, docker API REST, protocolos de los registros, interfaz web domain entidades y puertos, sin E/S application casos de uso infrastructure adaptadores: PostgreSQL, archivos, SMTP, LDAP, OIDC, Trivy, proxys PostgreSQL cuentas, repositorios, permisos, auditoría; migraciones al arrancar Almacenamiento archivos npm y blobs Docker, en disco Registros de origen registry.npmjs.org, Docker Hub…: un proxy obtiene y conserva Directorios y correo LDAP, OIDC, SMTP npm install grupo, luego proxy origen

Fig. 1 Una instancia. La línea naranja sigue una instalación, del cliente hasta el registro de origen que consulta un proxy.

  • petición o almacenamiento
  • una instalación, hasta el origen
  • directorio consultado al iniciar sesión
  • un bloque numerado de esta página
  1. artiferris-domainEntidades, objetos de valor y los puertos de los que depende el resto. Sin entrada ni salida.
  2. artiferris-applicationLos casos de uso. Solo depende del dominio.
  3. artiferris-infrastructureAdaptadores: PostgreSQL (SQLx), archivos, SMTP, LDAP, OIDC, Trivy, Argon2, JWT.
  4. artiferris-apiEl servidor Axum: rutas, ensamblaje y el frontend Angular. Es el binario.
  5. artiferris-npmEl protocolo del registro npm.
  6. artiferris-dockerEl protocolo del registro Docker/OCI.

Lo que falta hoy

Conviene conocerlo antes de desplegar.

Solo dos formatos
npm y Docker/OCI. Maven, PyPI, NuGet, Cargo, Go, Helm y los repositorios en bruto están en la hoja de ruta.
Una sola réplica
El almacenamiento es un sistema de archivos local: un volumen, una réplica. Está previsto un almacenamiento compatible con S3.
Sin SAML
Las cuentas vienen de ArtiFerris, de LDAP o Active Directory, o de un proveedor OIDC.
Sin firma de paquetes
La firma y la procedencia (Sigstore, npm provenance) están en la hoja de ruta.

Perspectivas

Lo que está previsto, todavía sin versión. Un punto solo se marca cuando se entrega.

  1. FormatosMaven, PyPI, NuGet, Cargo, Go, Helm y repositorios en brutoPrevisto
  2. AlmacenamientoAlmacenamiento de objetos compatible con S3, para varias réplicasPrevisto
  3. ExplotaciónAlta disponibilidad y replicación geográficaPrevisto
  4. ProcedenciaFirma y procedencia de los paquetesPrevisto
  5. IdentidadSAMLPrevisto

Evalúe ArtiFerris y luego despliegue su propia instancia.

La instancia pública permite descubrir el producto. Su instancia conserva sus paquetes.

Arrancar la pila con Docker Compose
git clone https://github.com/Masmarino/ArtiFerris.git
cd ArtiFerris
cp .env.example .env
# set POSTGRES_PASSWORD, JWT_SECRET, SECRETS_ENCRYPTION_KEY, PUBLIC_URL and the first admin in .env
docker compose up -d --build