Sparkling - a infraestrutura cross-platform do TikTok
(github.com/tiktok)- O TikTok abriu o código da camada de infraestrutura que construiu para operar o engine Lynx em escala de produção em seu app. Ela oferece de forma integrada desde scaffolding de apps até build, bridge nativa e navegação
- Assim como o React Native precisa do Expo, este é um framework de infraestrutura de produção para realmente operar apps sobre o engine Lynx
- Com um único comando de CLI, ele cria imediatamente um projeto completo de app Lynx com shell nativo Android/iOS incluído e executa build → instalação → execução de uma só vez
- Com o Sparkling Method, que gera código Kotlin/Swift automaticamente a partir de declarações TypeScript, implementa um bridge JS↔nativo com segurança de tipos
- Com um esquema de URL unificado de navegação no formato
hybrid://, trata o roteamento entre páginas Lynx e telas nativas em um único sistema
Posição do Sparkling: relação com o Lynx
- O Lynx é um engine de renderização de UI cross-platform divulgado pelo TikTok; ao escrever código de forma semelhante ao React, ele desenha telas Android/iOS com renderização nativa
- Como o próprio Lynx é um “engine de renderização”, para operar um app de fato ainda são necessárias infraestruturas adicionais como pipeline de build, comunicação nativo↔JS, navegação entre páginas e acesso a storage/mídia
- O Sparkling cumpre o papel dessa camada de infraestrutura, sendo o framework de apps que roda sobre o engine Lynx
- Assim como é difícil criar um app só com React Native e o Expo se faz necessário, também é difícil operar apps em larga escala só com Lynx, e o Sparkling preenche essa lacuna
- No momento está em beta pública, com expansão de API e melhorias na documentação em andamento
Scaffolding de app e CLI de build
- Com apenas
npm create sparkling-app@latest my-app, cria um projeto completo com shell nativo Android/iOS incluído - Com
npx sparkling build, faz o build do bundle Lynx; comnpx sparkling run:android/run:ios, executa build → instalação → execução de uma só vez - Com
npx sparkling dev, inicia um servidor de desenvolvimento com hot reload (porta padrão 5969, os números correspondem a LYNX no teclado do telefone) - Com
npx sparkling doctor, faz o diagnóstico automático do ambiente de desenvolvimento, incluindo Node.js, JDK, Android SDK, Xcode e CocoaPods - Com
npx sparkling autolink, faz o registro automático de dependências no Gradle/Podfile dos módulos Sparkling Method e gera o código de registro nativo - Com
npx sparkling copy-assets, copia os bundles compilados para os diretórios de recursos do Android/iOS
Sparkling Method — bridge JS↔nativo com segurança de tipos
- Basta escrever declarações de funções em arquivos TypeScript
.d.ts, e a CLI (sparkling-method-cli codegen) gera automaticamente o código nativo em Kotlin/Swift e a implementação TS - Herdando a classe abstrata gerada e implementando apenas a lógica de negócio nativa, ela pode ser chamada diretamente do JS
- Fornece Methods nativos para Navigation (roteador), Storage (armazenamento chave-valor) e Media (câmera/álbum/arquivos)
- O nome do pacote segue o formato
sparkling-<module>, e o nome do método segue a convenção<module>.<action>(ex.:router.open) - Após publicar no npm, a integração no lado do consumidor fica pronta apenas com
npm install+npx sparkling autolink
Navegação unificada baseada em esquema
- Usa um esquema de URL unificado no formato
hybrid://lynxview_page?bundle=main.lynx.bundle&title=Homepara rotear páginas Lynx e telas nativas da mesma forma - Adota uma estrutura multipágina em que cada página possui um entrypoint de bundle independente, um design adequado para apps de grande porte
- Na função
navigate(), além das chaves predefinidas, também é possível passar parâmetros customizados pela URL do esquema
Integração gradual em apps existentes (Brownfield)
- Além de apps novos, também permite embutir o container Sparkling em apps Android/iOS existentes para adoção gradual
- Android: após adicionar o artefato Maven (
com.tiktok.sparkling:sparkling:2.0.0), inicialize comHybridKit.init()e abra o container comSparkling.build(context).navigate() - iOS: após adicionar o CocoaPods (
pod 'Sparkling', '2.0.0'), faça push do controller comSPKRouter.create(withURL:)ou embuta a view comSPKContainerView - Copie o arquivo
.lynx.bundlegerado para os assets do app nativo e especifique o bundle correspondente com o parâmetrobundle=
Estrutura do projeto
packages/sparkling-sdk: SDK principal do Sparklingpackages/sparkling-method: SDK do Sparkling Method (bridge JS↔nativo)packages/methods: pacote de methods nativos do Sparkling (Navigation, Storage, Media)packages/sparkling-app-cli: CLI de build e execução do app Sparklingpackages/create-sparkling-app: CLI de scaffolding de apppackages/sparkling-method-cli: ferramentas de codegen do Sparkling Methodpackages/sparkling-types: unifica as definições de tipo de GlobalProps em um único pacotepackages/playground: app Playground para desenvolvimento local
Stack técnico e ambiente
- Node.js ^22 || ^24, ambiente pnpm v10.26.0
- Android: JDK 11 ou superior, requer SDK android-34
- iOS: Xcode 16+, Ruby ≥2.7 <3.4, requer CocoaPods
- Configuração multilíngue com TypeScript, Swift, Kotlin e JavaScript
- Licença Apache 2.0
1 comentários
Lynx - ferramenta de desenvolvimento de apps nativos baseada em tecnologias web - GeekNews
Lynx - 웹 기술 기반 네이티브 앱 개발 도구
Não está aparecendo nos artigos recomendados para ler junto.