Guide des créateurs

Jeux, films, animaux et petits outils, publiés en HTML.

Aperçu

Format
Paquet HTML hors ligne (ZIP)
Entrée
index.html à la racine
Taille
ZIP ≤ 150 Mo
Couverture
16:10, ≤ 1 Mo
Fonctions
spareStart · sparePause · spareSnapshot
Examen
Par une personne
Droits
Restent au créateur
Exemple : Hextris, portage open source GPL-3.0

Paquet

ÉlémentExigence
Entréeindex.html et manifest.json à la racine du ZIP
CheminsRelatifs uniquement ; ni chemin absolu, ni .., ni URL distante
TailleZIP ≤ 150 Mo
RéseauHors ligne, sans script externe ni traceur
SonMuet par défaut, coupé à la pause
LargeurJouable à 320 px, clavier et tactile
ProgressionInstantané JSON, idéalement < 16 Kio
Languezh-Hans · en · fr, avec repli
À exclurenode_modules, .git, clés, fichiers système

manifest.json

{
  "schemaVersion": 1,
  "id": "com.example.tiny-garden",
  "name": "片刻花园",
  "version": "1.0.0",
  "category": "plant",
  "entry": "index.html",
  "permissions": [],
  "storage": "local",
  "lifecycle": {
    "start": "spareStart",
    "pause": "sparePause",
    "snapshot": "spareSnapshot"
  }
}
ChampSignification
idDomaine inversé ou identifiant unique avec tirets
nameNom de l’œuvre, comme dans le formulaire
versionex. 1.0.0 ; à augmenter à chaque envoi
categorygame · pet · story · novel · plant · utility · other
entryChemin relatif du fichier HTML
permissionsVide [] pour l’instant
storagelocal ou none
lifecycleNoms des trois fonctions

Fonctions de cycle de vie

FonctionAppelée quandRetourne
spareStart(saved, language)L’IA commence à générer ; saved = dernier instantané ou null—
sparePause()L’IA a fini ou la fenêtre se masque ; arrêter minuteries, animation et sonInstantané
spareSnapshot()La progression doit être gardéePetit objet JSON
// Called when AI starts generating, with the last saved progress
window.spareStart = (saved, language) => {
  state = saved ?? newGame();
  render(language);
};
// Called when AI is done or the window hides: stop animation and sound now
window.sparePause = () => {
  stopTimersAndAudio();
  return window.spareSnapshot();
};
// Return a small JSON-serialisable object to resume next time
window.spareSnapshot = () => ({ ...state });
FichierRôleTaille
index.htmlEntrée, à modifier4.0 KB
manifest.jsonNom, version, catégorie307 B
preview.htmlSimule Spare en local3.3 KB
README.mdGuide complet6.8 KB
LICENSEMIT1.1 KB

Aperçu local

cd spare-plugin-starter
python3 -m http.server 8000
# http://localhost:8000/preview.html

Soumission et examen

  1. CréerModifier index.html ; tester démarrage, pause et reprise dans preview.html
  2. SoumettreEnvoyer le ZIP, une couverture 16:10 et une description ; indiquer sources et licences
  3. ExamenVérifié par une personne : hors ligne, sans traceur, pause, 320 px, contenus autorisés
  4. En ligneVisible dans les Œuvres, à votre nom

États d’examen

ÉtatSignificationSuite
En attenteEn attente d’examen—
PubliéeVisible dans les ŒuvresRetrait sur demande
RenvoyéeRefusée, avec la raisonCorriger, augmenter la version, renvoyer
RetiréePlus affichéeÉcrire à support@spare.cool

Licence

CasRègle
Elle vous appartientSpare obtient une licence d’hébergement et de diffusion. Retrait sur demande à tout moment.
Contenus autorisésIl vous faut les droits sur le code, les images et la musique. Indiquez licences ou sources dans le README.
Portages open sourceGardez la licence et les crédits d’origine, décrivez vos changements. Hextris, par exemple, est sous GPL-3.0.
Code du modèleMIT. Modifiez et publiez librement.

FAQ

01

Faut-il coder ?

Non. L’IA peut écrire le code.

02

À qui appartient mon œuvre ?

À vous. Spare obtient une licence d’hébergement et de diffusion ; vous pouvez la retirer à tout moment.

03

Peut-elle utiliser le réseau ?

Non. Ni traceur ni script tiers.

Reprendre à la prochaine visite

Les créations web peuvent utiliser ce protocole : 12 œuvres récentes, 32 Ko par sauvegarde. Les conflits entre appareils sont résolus par le joueur. Versionnez et validez chaque sauvegarde.

// Only your work's checkpoint crosses the sandbox boundary.
let state = { version: 1, chapter: 1 };
window.addEventListener('message', event => {
  if (event.source !== parent || event.data?.type !== 'spare:restore') return;
  const saved = event.data.snapshot;
  if (saved?.version === 1 && Number.isInteger(saved.chapter)) {
    state.chapter = Math.max(1, Math.min(100, saved.chapter));
    render();
  }
});
parent.postMessage({ type: 'spare:ready' }, '*');
function checkpoint() {
  parent.postMessage({ type: 'spare:checkpoint', snapshot: state }, '*');
}
// Call checkpoint() after a meaningful action, not on every animation frame.

Les créations hors ligne conservent spareStart(saved), sparePause() et spareSnapshot(). Spare gère les abonnements et les autorisations ; aucun jeton de compte n’est transmis. Les mises à jour restent soumises à modération.