AppCore Runtime

dnetto, rustruntimelocal-firstsecuritysync
Back

AppCore n'est pas une application. C'est la couche runtime réutilisable que j'ai construite pour éviter de réinventer lifecycle, manifests, stockage, sécurité, sync, supervision, peer RPC et mises à jour dans chaque application local-first.

20crates documentés dans l'audit RC 1.0
3artefacts requis: application manifest, deployment manifest et business code
1.0.1-rc.8ligne release-candidate indiquée dans le README

Le problème

Les applications local-first accumulent les mêmes sujets: décrire l'application sans figer le déploiement, exécuter commands et queries, stocker localement avec des formats récupérables, synchroniser prudemment et garder les frontières de sécurité visibles.

AppCore existe parce que cette infrastructure ne devrait pas être recodée dans chaque application métier.

Le contrat

Le contrat 1.0 réduit une application à trois artefacts:

  1. application.toml pour l'identité et les exigences portables.
  2. deployment.toml pour providers, chemins, réseau et références de secrets.
  3. Code métier implémentant appcore_bin::application::Application.

Changer d'un notebook offline vers un cluster doit modifier le deployment manifest, pas la logique métier.

Architecture

External application
  -> appcore-bin facade
  -> API, core and managed runtime services
  -> provider implementations
  -> contracts and foundational types

La règle importante est le contrôle du vocabulaire. Les crates runtime ne doivent pas contenir de concepts produit, entreprise, client ou domaine.

Modules

ZoneCrates
Fondationappcore-contracts, appcore-types, appcore-transport, appcore-dnt
Cycle de vieappcore-supervisor, appcore-core, appcore-bin
APIappcore-api
Sécurité et stockageappcore-security, appcore-storage
Distributionappcore-distributed-contracts, appcore-control-plane, appcore-capabilities, appcore-peer-rpc, appcore-gateway
Opérationsappcore-ops, appcore-scheduler, appcore-sync, appcore-update
Providersappcore-provider, appcore-provider-vercel-neon

make architecture.check valide dépendances, vocabulaire, taille de modules et module map. L'architecture devient une gate, pas seulement un dessin.

Décisions et trade-offs

AppCore ne fournit pas RAFT, données multi-master, OAuth, vault de production embarqué, moteur de base de données générique, TLS inbound ou workflows métier. Ces limites sont intentionnelles.

La ligne RC accepte seulement les manifests V1, le protocole 1, les routes HTTP /v1/* et les formats persistants V1. Les entrées retirées sont rejetées.

Sécurité

Le runtime protège les contrats d'infrastructure. Le déploiement protège l'hôte, le réseau, le TLS inbound, le compte système et le backend de secrets. L'application protège les données et autorisations métier.

En pratique:

Ce qui était difficile

Le plus dur n'était pas de créer des crates sync ou security, mais d'empêcher le runtime de devenir un framework métier. Chaque capacité utile risque de tirer du vocabulaire domaine dans la fondation. AppCore répond par layering, manifests, providers et non-goals explicites.

Ce que cela montre

AppCore montre mon style d'ingénierie: figer les contrats avant la commodité, documenter ce que le système refuse, transformer les exemples en fixtures exécutables et traiter une release comme une preuve.

Daniel Netto Logo2026 © Daniel Netto. Todos os direitos reservados.
Hospedado por Verceldnetto.dev