Skip to main content

arctyp

Point d'entrée unique pour la composition de documents Typst à la HE-Arc : rend les diagrammes UML via le serveur PlantUML de l'école, initie des projets prêts à l'emploi et compile le PDF localement, sans dépendre d'aucun service externe au moment de la compilation.

État : en cours de développement (projet P3, HES d'été 2026-2027).

Table des matières

Pourquoi ce projet

Typst n'effectue aucun accès réseau à la compilation : un document ne peut ni appeler le serveur PlantUML, ni télécharger un template. C'est le rôle de arctyp d'orchestrer ces étapes, qui n'ont pas d'équivalent dans Typst seul. L'utilisateur final ne manipule donc que la CLI, sans connaître l'existence des serveurs sous-jacents.

Fonctionnement

arctyp orchestre la compilation Typst sur le poste de l'utilisateur :

  1. rendre les diagrammes .puml en parallèle (pool de threads plafonné) via le serveur PlantUML interne et écrire les SVG à côté des sources ;
  2. compiler main.typ en PDF via le paquet Python typst (nom de sortie obligatoire).

Le projet est initialisé par arctyp init : un projet de base prêt à l'emploi (conf.typ, template.typ, uml.typ, main.typ, diagrams/, images/), avec dépôt Git. Les templates officiels se récupèrent directement avec Git (git clone du dépôt templates) — la CLI ne gère pas les templates.

Aucun paquet Typst n'est installé : le projet compile tel quel. L'utilisateur écrit son contenu dans main.typ, et peut modifier les paramètres (couleurs, marges, page de titre…) directement dans les fichiers, sans réinstaller quoi que ce soit :

#import "conf.typ": *

Typst est épinglé dans la CLI, la CI, le web et la documentation : le même PDF est produit partout. Version actuelle : 0.15.0 (paquet Python typst — dernière version publiée sur PyPI ; la 0.15.1 du compilateur n'y est pas encore disponible). Le web (arctyp-web, typst.ts) épinglera la même version de compilateur, écart documenté le temps que les paquets rattrapent la release.

Installation

Prérequis : Python ≥ 3.13 pour une installation globale (avec uv ou pipx), Python ≥ 3.8 suffit pour python arctyp.py sans installation globale (bootstrap via arctyp.py à la racine du projet).

uv tool install arctyp
# ou
pipx install arctyp
# ou
pip install arctyp
# ou, sans installation, pour un essai ponctuel :
uvx arctyp --version
# ou, dans un projet contenant arctyp.py (aucune installation globale requise) :
python arctyp.py --version

Le paquet est publié sur PyPI. Les membres HE-Arc peuvent aussi installer la version du dépôt privé (registre de paquets du projet GitLab) — voir la procédure dans CONTRIBUTING.md, section « Publication d'une version ».

Démarrage rapide

# Initie un projet de base complet avec dépôt Git
arctyp init mon-rapport
cd mon-rapport

# Compile : rend les diagrammes, génère le PDF demandé (nom obligatoire)
arctyp compile mon-rapport.pdf

Commandes

Commande Rôle
arctyp init [répertoire] Initie un projet de base complet (conf.typ, template.typ, uml.typ, dossiers diagrams/ et images/, dépôt Git) ; répertoire courant par défaut ; --force pour écraser un répertoire non vide
arctyp uml <fichier.puml> Rend un diagramme UML via le serveur PlantUML interne ; --public pour l'API publique
arctyp compile <rapport.pdf> Rendu des diagrammes, compilation du PDF ; le nom de sortie est obligatoire ; --public pour le serveur PlantUML public
arctyp watch <rapport.pdf> Compile puis recompile à chaque modification (Ctrl-C pour arrêter) ; --public pour le serveur PlantUML public
arctyp doctor Diagnostic de la configuration et de l'accessibilité des serveurs

Configuration

Un fichier arctyp.toml à la racine du projet regroupe ses paramètres ; il est écrit par arctyp init. Les secrets (tokens, mots de passe) n'y figurent jamais : il est versionné.

[project]
entry = "main.typ"           # fichier d'entrée Typst

[plantuml]
format = "svg"               # "svg" (défaut) ou "png" — l'extension de sortie suit
# url = "https://plantuml.exemple.ch/"  # URL de base, sans /svg/ ni /png/

[compile]                    # options passées telles quelles à typst.compile
# pdf_standards = "a-2b"     #   PDF/A pour l'archivage
# font_paths = ["polices/"]  #   polices supplémentaires (charte graphique)
# ppi = 144                  #   résolution des conversions d'images
# sys_inputs = { date = "..." }  # valeurs injectées dans le document
# format = "pdf"             #   format de sortie

Choix du serveur PlantUML, par ordre de précédence :

  1. --public (options uml, compile, watch, doctor) : API publique, priorité sur tout le reste ;
  2. [plantuml] url dans arctyp.toml : serveur spécifique au projet ;
  3. à défaut : serveur de l'école https://yk-hes-ete.k8s-ext.ing.he-arc.ch (réseau campus / VPN requis).

url est l'URL de base du serveur, sans le segment de format (/svg/, /png/), ajouté automatiquement selon [plantuml] format.

arctyp doctor vérifie cette configuration et l'accessibilité de la chaîne ; les messages d'erreur sont explicites et actionnables lorsqu'un serveur est injoignable.

Utilisation hors ligne

Dès lors que les diagrammes ont été rendus au moins une fois, un document se recompile hors ligne, sans accès au réseau de l'école.

Développement

Le projet est géré avec uv : l'environnement virtuel, les dépendances et l'installation éditable sont pris en charge par cet outil.

# Installer les dépendances (crée .venv) et synchroniser uv.lock
uv sync

# Lancer la CLI depuis les sources (équivalent à `arctyp ...`)
uv run arctyp --help
uv run python -m arctyp --help

# Vérifier que le verrouillage des dépendances est à jour
uv lock --check

# Lancer la suite de tests (unittest, stdlib — aucune dépendance supplémentaire)
uv run python -m unittest discover -s tests -v

Test rapide :

uv run arctyp --version                  # -> arctyp 0.1.3
uv run arctyp uml diagrams/schema.puml   # rend le diagramme via le serveur PlantUML (foo.puml -> foo.svg)
uv run arctyp compile rapport.pdf        # rend les diagrammes puis compile main.typ en PDF
uv run arctyp doctor                     # diagnostique le projet et la chaîne

Les commandes sont déclarées via des décorateurs dans le paquet arctyp.commands (un fichier par commande) ; voir CONTRIBUTING.md pour la structure, l'ajout d'une commande et les conventions.

Décisions de conception

Les choix structurants sont détaillés, avec leurs alternatives, dans le registre des décisions du wiki. Résumé côté CLI :

  • Pas de gestion de templates : les templates se récupèrent par git clone (D-02) — la CLI n'a ni login, ni publish, ni liste.
  • Templates = fichiers ordinaires : jamais de paquet @he-arc à installer (D-01) ; arctyp init crée un projet de base prêt à l'emploi.
  • Diagrammes avant compilation : Typst n'a pas accès au réseau — la CLI rend les .puml et la fonction uml() des templates charge le résultat (D-03).
  • Stdlib-only + typst et watchdog (seules dépendances ; watchdog importée paresseusement) et tests unittest (D-06) ; commandes déclarées par décorateurs dans chaque fichier (D-07).
  • Version de Typst épinglée : 0.15.0 côté paquet Python (maximum PyPI), 0.15.1 compilateur — écart documenté (D-08).

Équipe

Elias Tormos, Yanis Amani, Younes Kherbach (projet P3, HES d'été 2026-2027). Encadrement : Le Callennec Benoit, Senn Julien.

Metadata

Release files for arctyp 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for arctyp 1.0.1
File Size Uploaded Provenance
arctyp-1.0.1.tar.gz 42.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for arctyp 1.0.1
File Interpreter ABI Platform
arctyp-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 73.9 kB

Release files / arctyp-1.0.1.tar.gz

Download URL arctyp-1.0.1.tar.gz
Size 42.9 kB
Tags Source
SHA-256 checksum
How to use checksums
59ebc8045e5fed210cb7e9f9a840a61069eb166566703cebe0adbe19ac61093d
BLAKE2b-256 checksum
How to use checksums
34101db08bb889453422a1e33b14ac5f6cded3f6e29acde9c73a2482335bb545
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / arctyp-1.0.1-py3-none-any.whl

Download URL arctyp-1.0.1-py3-none-any.whl
Size 31.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
570617b35cd2e9a1980109d2a7ca1830731d027132de32e8fa36c6e0e0c29118
BLAKE2b-256 checksum
How to use checksums
392bfe567259ab793eb6d77f5613a04a41b73168d27fa9e05cf7bfa215436d64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for arctyp 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page