
Exécuter du code ARM64 préservé dans Node ou un navigateur ; inspecter les pixels d'image décodés et la mémoire initialisée.
Exécutez du code natif préservé. Rouvrez son état initialisé. Capsulith empaquette des fonctions ARM64 sélectionnées, leurs contrats d'appel et la mémoire qu'elles possèdent pour Node ou le navigateur. Conservez les instructions d'origine et reprenez un objet initialisé dans un nouveau worker, sans l'application d'origine.
Un décodeur hérité, une somme de contrôle ou une routine binaire isolée peut devenir une petite API réutilisable. Capsulith montre quels octets et dépendances voyagent avec elle, où l'exécution lit et écrit, et pourquoi une fonctionnalité ne peut pas être extraite lorsqu'elle nécessite un état non pris en charge.
Ouvrez l'atelier d'images natives. Choisissez Load & run example pour l'œuvre QOI préparée, ou apportez une petite image PNG ou QOI. L'encodeur QOI d'origine extrait écrit un fichier, un décodeur natif distinct renvoie ses pixels, et vous pouvez inspecter les octets RGBA individuels. Préservez cette allocation de pixels initialisée, fermez le worker, puis restaurez-la et libérez-la dans un nouveau worker. Aucun compte, serveur d'envoi, binaire d'origine ni compilateur n'est nécessaire pour exécuter l'atelier public.
Le PNG utilise des RGBA décodés par le navigateur comme référence de comparaison explicite ; une entrée QOI seule ne dispose d'aucune comparaison indépendante avec les pixels source. Les images sont limitées à 256 pixels par dimension et à 1 MiB. Il s'agit d'une démonstration de composant natif préparé à source connue, et non d'un nouveau codec ni d'une récupération de format universelle. Source QOI d'origine, contrats, contrôles natifs/FFmpeg indépendants et commandes Node autonomes.

Essayez la démo d'objet navigateur sans clé et appuyez sur Run lifecycle. Elle exécute localement les instructions réellement extraites ; elle n'appelle pas de serveur pour générer les résultats.
Téléchargez la wheel Python depuis la release, puis :
python3 -m pip install capsulith-0.3.0-py3-none-any.whl
capsulith studio
Ouvrez http://127.0.0.1:6359. La fonction Studio conserve le décodeur LZ4 et les spécimens xxHash. Ouvrez Object studio, choisissez Open original LZ4 example, puis Run lifecycle pour créer, compresser, sauvegarder un dictionnaire, effectuer un checkpoint, restaurer, poursuivre et libérer un flux réellement compilé. Aucune clé API ni service payant n'est nécessaire. Python 3.10+ et Capstone sont requis pour l'extraction ; le navigateur exécute via l'émulateur WebAssembly inclus. Node 20+ n'est nécessaire que pour la CLI ou les appels Node exportés.
Le Studio accepte une dylib Mach-O ARM64, inventorie ses fonctions, extrait une racine sélectionnée et vous permet de modifier les tampons, les arguments de registre, les entrées scalaires et le type de retour. La vue des dépendances relie les helpers/imports aux sites d'appel réels et aux instructions d'origine. Les événements d'exécution renvoient à la région mémoire nommée et au code d'origine. Les exécutions arrêtées affichent des preuves partielles sans revendiquer un résultat réussi.
Export portable capsule télécharge les octets actuels, le contrat et les entrées, les runners Node/navigateur, le backend épinglé, l'intégralité du code source et des scripts de build du backend ainsi que les licences. Décompressez et exécutez node run.cjs, ou servez ce dossier via HTTP et ouvrez son runner navigateur indépendant. Python, Capstone et le binaire d'origine ne sont pas nécessaires pour ces appels. L'API exportée accepte des entrées différentes, prend en charge l'annulation et applique les limites déclarées.
Original LZ4 methods, restored dictionary access and exact native comparison in the object Studio
Le Studio d'objets importe le JSON de module extrait ou lit votre artefact Mach-O ARM64 possédé avec des méthodes nommées explicitement déclarées. Inspectez les racines, les chunks et les dépendances réels ; allouez des tampons d'appelant nommés à partir d'hexadécimal ou d'un fichier local ; choisissez une méthode et fournissez des références de région typées ou des entiers. La carte mémoire affiche les régions réellement possédées et l'initialisation, avec des octets bruts opaques plutôt que des champs devinés. Les retours, les plages d'accès, les compteurs et les événements bornés proviennent des instructions d'origine.
Enregistrez un checkpoint avant une opération que vous pourriez devoir annuler. La restauration d'un module correspondant préserve les adresses invité et les ID de région mais crée une nouvelle identité d'instance ; reliez à nouveau les références par ID de région. La modification des entrées révoque les preuves obsolètes, et une faute ou une annulation nécessite un checkpoint préalable ou une nouvelle instance. La libération native et la libération du tampon d'appelant sont des opérations de cycle de vie explicites distinctes. Le runtime ne devine jamais si des pointeurs natifs font encore référence à un tampon.
capsulith module examples/lz4/liblz4.dylib \
--methods examples/native-objects/methods.json --out stream.module.json
node runtime/object-cli.cjs examples/native-objects/start.json \
--module stream.module.json --checkpoint-out first.checkpoint.json
# The first Node process has ended. This command opens a fresh worker.
node runtime/object-cli.cjs examples/native-objects/continue.json \
--module stream.module.json --checkpoint first.checkpoint.json
capsulith export-module stream.module.json \
--checkpoint first.checkpoint.json --out stream-object.zip
Choisissez de nouveaux noms de sortie ; les commandes d'export de module, de checkpoint et d'objet refusent d'écraser des fichiers existants. Les programmes d'opération fournis sont spécifiques au cycle de vie LZ4 documenté. Les modules génériques ont besoin de leurs propres méthodes déclarées par l'appelant et de leurs propres programmes d'opération.
Un export d'objet contient le module d'instructions d'origine, les octets de checkpoint conservés en option, des exécuteurs Node/navigateur indépendants, le Studio d'objet, le runtime et les scripts de compilation/source backend correspondants, les licences, ainsi qu'un manifeste de fichiers avec les octets, le SHA256 et les permissions. Servez le dossier et ouvrez index.html pour restaurer le checkpoint intégré sans points de terminaison API, ou exécutez node run.cjs your-operations.json --checkpoint checkpoint.json. Les binaires d'origine, les paquets Python et les compilateurs ne sont pas nécessaires à l'exécution. Un checkpoint inclut les octets de l'appelant conservés ; inspectez-les avant de les partager. Voir l'API d'objet et le format d'opération et l'exemple natif.
capsulith inspect legacy.dylib
capsulith extract legacy.dylib --root _decode \
--contract decode-contract.json --out decode.capsule.json
capsulith run decode.capsule.json --inputs input.json
capsulith export decode.capsule.json --inputs input.json --out decoder.zip