-
Notifications
You must be signed in to change notification settings - Fork 18
Add New Module
This guide describes the complete workflow for adding a new module to Ensemble and ensuring it works across the entire platform.
Because Ensemble spans multiple repositories, adding a module requires coordinated updates across runtime, Studio, documentation, and preview validation.
A module integration touches several components of the Ensemble platform:
| Component | Purpose |
|---|---|
| Ensemble Runtime | Implements the module functionality |
| Starter Scripts | Ensures new apps include required setup |
| Documentation | Provides user documentation |
| Studio Build System | Allows user to build and deploy the app from studio |
| Ensemble Live | Ensemble Go (ios), Ensemble Preview (Android) and Studio Preview |
| Studio Schema | Enables IntelliSense and validation |
| KitchenSink | Provides working examples |
Runtime Implementation
↓
Starter Scripts
↓
Documentation
↓
Studio Service / Build Updates
↓
Ensemble Live Integration
↓
Run Studio Preview Deploy
↓
Validate Studio Preview
↓
Update Studio Schema
↓
Add KitchenSink Example
↓
Merge Preview PR
Implement the new module inside the Ensemble runtime.
Typical tasks include:
- Creating the module implementation
- Registering the module
- Adding dependencies
- Exposing required APIs
Follow the structure used by existing modules when possible.
Example modules:
- Camera
- Bluetooth
- Location
Update the starter scripts so new apps can support the module.
Location
starter/scripts
These scripts ensure that newly created starter apps include the correct module setup.
Add documentation for the new module.
Repository:
https://github.com/EnsembleUI/ensemble_docs
Documentation should include:
- Module overview
- Configuration
- Required permissions
- Usage examples
- Supported actions and widgets
Update the Studio build system to support the module.
Repository:
https://github.com/EnsembleUI/studio_service
Steps:
- Locate scripts related to module builds.
- Follow the structure used by existing modules.
- Add support for the new module.
Before running the Studio preview deployment, integrate the module into:
https://github.com/EnsembleUI/ensemble_live
Why this is required
The Studio preview deployment workflow depends on ensemble_live.
If the module is not integrated here, the preview deploy will not include the new module.
Run the GitHub Action:
Studio Preview Deploy
Workflow:
https://github.com/EnsembleUI/ensemble_live/actions/workflows/studio-preview-deploy.yml
This action will automatically create a Pull Request in:
https://github.com/EnsembleUI/ensemble-web-studio/pulls
PR name:
[AUTO] Preview build
Open the preview link provided in the generated PR and perform validation.
Test the following:
- Opening an existing app
- Running screens
- Editing YAML
- Saving and updating code
- Using the new module
Ensure:
- The new module works correctly
- No existing functionality is broken
Update schema definitions used by Studio.
Repository:
https://github.com/EnsembleUI/ensemble-web-studio
Path:
src/schema
Schema definitions enable:
- IntelliSense
- Autocomplete
- YAML validation
Make sure module properties and actions are properly defined.
Add a KitchenSink example demonstrating the new module.
This provides:
- A working reference for developers
- A validation case for Studio
Once validation is complete:
- Confirm Studio preview works correctly.
- Confirm KitchenSink example works.
- Confirm schema behavior works.
Then merge the PR:
[AUTO] Preview build
- Module implemented in Ensemble runtime
- Module registered correctly
- Dependencies added
- Starter scripts updated
- Documentation added in
ensemble_docs - Usage examples included
- Studio build scripts updated in
studio_service - Schema updated in
ensemble-web-studio/src/schema
- Changes integrated in
ensemble_live - Studio Preview Deploy executed
- Studio preview tested
- KitchenSink example added
- Existing Studio functionality verified
A module is considered complete only when:
- Studio supports the module
- Schema works correctly
- KitchenSink example runs successfully
- Existing Studio functionality remains stable