Vos paquets npm et vos images Docker, sur un registre que vous hébergez.

Dépôts hébergés, proxys et groupes, quotas, rétention, audit des dépendances et scan des images : un binaire Rust et un PostgreSQL. En production, le serveur et sa base occupent ensemble une cinquantaine de Mio de mémoire.

Ouvrir ArtiFerris
$docker compose up -d --build

Aucun compte chez un tiers, aucune télémétrie transmise. Voir l'architecture.

$ 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
L'instance de production, version 0.6.1, sur un cluster Kubernetes (amd64), mesurée le 6 octobre 2026, quelques minutes après le redémarrage du serveur.

Cas d'usage

Quatre situations types, et la réponse qu'ArtiFerris y apporte.

Vos builds téléchargent leurs dépendances sur un registre public, à chaque fois.
Un dépôt proxy se place devant registry.npmjs.org ou Docker Hub : la première demande va chercher le paquet en amont, les suivantes le servent depuis ArtiFerris. Un groupe réunit ce proxy et vos paquets derrière une seule adresse.
Vous hébergez les paquets de plusieurs équipes ou de plusieurs clients sur une même instance.
Chaque organisation a son sous-domaine, ses dépôts, ses utilisateurs, sa marque et son fournisseur d'identité. Ses administrateurs n'agissent que sur elle ; un super-administrateur les voit toutes.
Vous voulez savoir ce que contiennent les images et les paquets que vous distribuez.
Trivy analyse chaque image poussée, et le scan se relance à la main. Les dépendances d'un paquet npm sont auditées à chaque publication. Les résultats s'affichent sur la page de l'image ou du paquet.
Vous voulez que la double authentification ne dépende pas de la vigilance de chacun.
Elle est obligatoire pour tous les comptes, qu'ils soient locaux ou viennent de LDAP ou d'OIDC. Les outils en ligne de commande s'authentifient avec un jeton API, que l'administration peut lister et révoquer.

Aperçu du produit

Des extraits de l'interface réelle, non des maquettes. L'interface existe en français, anglais, espagnol, italien et allemand.

La liste complète des fonctionnalités

Architecture

Un processus, six crates, une architecture hexagonale : le domaine ignore tout de la base de données, et chaque protocole de registre a sa propre crate.

Le code source sur GitHub

Architecture d'une instance ArtiFerrisDessin isométrique. Un client npm ou Docker et un navigateur parlent à un seul binaire Rust, artiferris-api, composé des crates api, npm, docker, application, domain et infrastructure. Le binaire range ses données dans PostgreSQL et ses archives et ses blobs sur disque, consulte les annuaires LDAP et OIDC et le serveur SMTP, et ses proxys puisent dans des registres amont. Une ligne orange suit une installation jusqu'au registre amont. Sept cercles numérotés mènent aux tuiles de la page.api npm docker application domain infrastructure artiferris-api : un seul binaire Client npm ou Docker HTTPS, jeton API npm, pnpm, yarn, docker, podman Navigateur console connectée ou catalogue public api, npm, docker API REST, protocoles des registres, interface web domain entités et ports, sans E/S application cas d'usage infrastructure adaptateurs : PostgreSQL, fichiers, SMTP, LDAP, OIDC, Trivy, proxys PostgreSQL comptes, dépôts, droits, audit ; migrations au démarrage Stockage archives npm et blobs Docker, sur disque Registres amont registry.npmjs.org, Docker Hub… : un proxy y puise et garde Annuaires et e-mail LDAP, OIDC, SMTP npm install groupe, puis proxy amont

Fig. 1 Une instance. La ligne orange suit une installation, du client jusqu'au registre amont qu'un proxy interroge.

  • requête ou stockage
  • une installation, jusqu'à l'amont
  • annuaire consulté à la connexion
  • une tuile numérotée de cette page
  1. artiferris-domainEntités, objets-valeurs et les ports dont le reste dépend. Aucune entrée-sortie.
  2. artiferris-applicationLes cas d'usage. Ne dépend que du domaine.
  3. artiferris-infrastructureAdaptateurs : PostgreSQL (SQLx), fichiers, SMTP, LDAP, OIDC, Trivy, Argon2, JWT.
  4. artiferris-apiLe serveur Axum : routes, assemblage, et le frontend Angular. C'est lui, le binaire.
  5. artiferris-npmLe protocole du registre npm.
  6. artiferris-dockerLe protocole du registre Docker/OCI.

Ce qui manque aujourd'hui

À connaître avant tout déploiement.

Deux formats seulement
npm et Docker/OCI. Maven, PyPI, NuGet, Cargo, Go, Helm et les dépôts bruts sont sur la feuille de route.
Un seul réplica
Le stockage est un système de fichiers local : un volume, un réplica. Un stockage compatible S3 est prévu.
Pas de SAML
Les comptes viennent d'ArtiFerris, de LDAP ou Active Directory, ou d'un fournisseur OIDC.
Pas de signature des paquets
La signature et la provenance (Sigstore, npm provenance) sont sur la feuille de route.

Perspectives

Ce qui est prévu, sans version encore. Un point n'est coché que lorsqu'il est livré.

  1. FormatsMaven, PyPI, NuGet, Cargo, Go, Helm et dépôts brutsPrévu
  2. StockageUn stockage objet compatible S3, pour plusieurs réplicasPrévu
  3. ExploitationHaute disponibilité et réplication géographiquePrévu
  4. ProvenanceSignature et provenance des paquetsPrévu
  5. IdentitéSAMLPrévu

Évaluez ArtiFerris, puis déployez votre propre instance.

L'instance publique permet de découvrir le produit. Votre instance conserve vos paquets.

Démarrer la pile avec 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