- TikTok a publié en open source la couche d’infrastructure qu’il a construite pour exploiter le moteur Lynx à l’échelle de la production dans ses applications. Elle intègre l’ensemble, du scaffolding d’app à la compilation, aux bridges natifs et à la navigation
- De la même manière que React Native a besoin d’Expo, il s’agit d’un framework d’infrastructure de production permettant d’exploiter réellement des applications au-dessus du moteur Lynx
- Avec une seule commande CLI, il crée instantanément un projet d’application Lynx complet avec shell natif Android/iOS, puis enchaîne compilation → installation → exécution en une seule fois
- Avec Sparkling Method, qui génère automatiquement du code Kotlin/Swift à partir de simples déclarations TypeScript, il permet d’implémenter un bridge JS↔natif type-safe
- Un système de navigation unifiée via un schéma d’URL au format
hybrid:// gère dans un cadre unique le routage entre pages Lynx et écrans natifs
Positionnement de Sparkling : sa relation avec Lynx
- Lynx est un moteur de rendu d’interface cross-platform publié par TikTok : on écrit le code dans un style proche de React, puis le framework dessine les écrans Android/iOS avec un rendu natif
- Comme Lynx n’est en lui-même qu’un « moteur de rendu », l’exploitation réelle d’une application nécessite en plus une pipeline de build, la communication natif↔JS, la navigation entre pages, l’accès au stockage et aux médias, etc.
- Sparkling joue précisément ce rôle de couche d’infrastructure et sert de framework d’application au-dessus du moteur Lynx
- De même qu’il est difficile de créer une application avec React Native seul et qu’Expo devient nécessaire, Lynx seul rend difficile l’exploitation d’applications à grande échelle, et Sparkling vient combler cet écart
- Le projet est actuellement en bêta publique, avec une extension progressive des API et une amélioration continue de la documentation
CLI de scaffolding et de build d’application
npm create sparkling-app@latest my-app crée en une seule ligne un projet complet incluant des shells natifs Android/iOS
npx sparkling build compile les bundles Lynx, tandis que npx sparkling run:android / run:ios enchaînent build → installation → exécution en une seule commande
npx sparkling dev lance un serveur de développement avec hot reload (port par défaut 5969, correspondant à LYNX sur un clavier téléphonique)
npx sparkling doctor effectue un diagnostic automatique de l’environnement de développement : Node.js, JDK, Android SDK, Xcode, CocoaPods, etc.
npx sparkling autolink enregistre automatiquement les dépendances Gradle/Podfile des modules Sparkling Method et génère le code du registre natif
npx sparkling copy-assets copie les bundles compilés dans les répertoires de ressources Android/iOS
Sparkling Method — bridge JS↔natif type-safe
- Il suffit d’écrire les déclarations de fonctions dans un fichier TypeScript
.d.ts pour que la CLI (sparkling-method-cli codegen) génère automatiquement le code natif Kotlin/Swift ainsi que l’implémentation TS
- En héritant des classes abstraites générées, il suffit ensuite d’implémenter la logique métier native pour qu’elle soit directement appelable depuis JS
- Des Methods intégrées fournissent Navigation (routeur), Storage (stockage clé-valeur), Media (caméra/album/fichiers)
- Le nom des packages suit le format
sparkling-<module> et les méthodes la convention \<module\>.\<action\> (ex. : router.open)
- Une fois publié sur npm, l’intégration côté consommateur est terminée avec
npm install + npx sparkling autolink
Navigation unifiée basée sur un schéma
- Un schéma d’URL unifié au format
hybrid://lynxview_page?bundle=main.lynx.bundle&title=Home permet de router de la même manière les pages Lynx et les écrans natifs
- La structure multi-page, dans laquelle chaque page possède son propre point d’entrée de bundle, convient aux applications de grande taille
- La fonction
navigate() peut transmettre au schéma URL des paramètres personnalisés en plus des clés prédéfinies
Intégration progressive dans une application existante (Brownfield)
- Sparkling peut être introduit progressivement non seulement dans une nouvelle application, mais aussi en embarquant un conteneur Sparkling dans une app Android/iOS existante
- Android : après ajout de l’artefact Maven (
com.tiktok.sparkling:sparkling:2.0.0), initialiser avec HybridKit.init() puis ouvrir le conteneur via Sparkling.build(context).navigate()
- iOS : après ajout de CocoaPods (
pod 'Sparkling', '2.0.0'), pousser un contrôleur avec SPKRouter.create(withURL:) ou embarquer une vue avec SPKContainerView
- Copier les fichiers
.lynx.bundle compilés dans les assets de l’application native, puis indiquer le bundle concerné avec le paramètre bundle=
Structure du projet
packages/sparkling-sdk : SDK Sparkling principal
packages/sparkling-method : SDK Sparkling Method (bridge JS↔natif)
packages/methods : package de methods Sparkling intégrées (Navigation, Storage, Media)
packages/sparkling-app-cli : CLI de build et d’exécution des applications Sparkling
packages/create-sparkling-app : CLI de scaffolding d’application
packages/sparkling-method-cli : outillage de codegen pour Sparkling Method
packages/sparkling-types : centralisation des définitions de type GlobalProps dans un package unique
packages/playground : application Playground pour le développement local
Stack technique et environnement
- Environnement Node.js ^22 || ^24, pnpm v10.26.0
- Android : JDK 11 ou plus, SDK android-34 requis
- iOS : Xcode 16+, Ruby ≥2.7 <3.4, CocoaPods requis
- Composition multi-langage avec TypeScript, Swift, Kotlin, JavaScript, etc.
- Licence Apache 2.0
Aucun commentaire pour le moment.