This monorepo contains the Decentraland Creator Hub ecosystem, consisting of two main packages:
@dcl/inspector- A web-based 3D scene inspector for Decentralandcreator-hub- An Electron-based desktop application for creating and managing Decentraland scenes
creator-hub/
βββ packages/
β βββ creator-hub/ # Electron desktop application
β β βββ main/ # Main Electron process
β β βββ preload/ # Preload scripts
β β βββ renderer/ # React frontend
β β βββ shared/ # Shared utilities
β β βββ e2e/ # End-to-end tests
β βββ inspector/ # Web-based 3D inspector
β βββ src/ # Source code
β βββ public/ # Built assets
β βββ test/ # Tests
βββ .github/workflows/ # CI/CD workflows
βββ Makefile # Build and development commands
βββ package.json # Root package configuration
- Node.js 22.x or higher
- npm (preferred over yarn)
- Git
-
Clone the repository:
git clone https://github.com/decentraland/creator-hub.git cd creator-hub -
Install dependencies and initialize the project:
make init
This command will:
- Install all dependencies for the monorepo and sub-packages
- Download and install Protocol Buffers compiler
- Generate TypeScript definitions from
.protofiles - Build all packages
The project uses a Makefile to manage common development tasks:
| Command | Description |
|---|---|
make install |
Install dependencies for all packages |
make install-protoc |
Download and install Protocol Buffers compiler |
make protoc |
Generate TypeScript definitions from .proto files |
make init |
Complete project initialization (clean + install + protoc + build) |
| Command | Description |
|---|---|
make build |
Build both inspector and creator-hub packages |
make build-inspector |
Build only the inspector package |
make build-creator-hub |
Build only the creator-hub package |
| Command | Description |
|---|---|
make lint |
Run ESLint across all packages |
make lint-fix |
Fix ESLint issues automatically |
make format |
Format code with Prettier |
make typecheck |
Run TypeScript type checking |
make test |
Run unit tests for all packages |
make test-e2e |
Run end-to-end tests for all packages |
| Command | Description |
|---|---|
make sync-deps |
Synchronize dependencies across packages using syncpack |
make lint-packages |
Check for dependency mismatches |
| Command | Description |
|---|---|
make clean |
Remove build artifacts and dist folders |
make deep-clean |
Remove all node_modules and generated files |
cd packages/creator-hub
# Development
npm run start # Start in watch mode
# Building
npm run build # Build all parts (main, preload, renderer)
npm run build:main # Build main process
npm run build:preload # Build preload scripts
npm run build:renderer # Build renderer (React app)
# Testing
npm run test # Run all tests
npm run test:e2e # Run end-to-end tests
npm run test:unit # Run unit tests
# Type checking
npm run typecheck # Type check all partscd packages/inspector
# Development
npm run start # Start in watch mode
# Building
npm run build # Build the inspector
# Testing
npm run test # Run unit tests
npm run test:e2e # Run end-to-end tests
# Type checking
npm run typecheck # Type check the inspectorThe project uses GitHub Actions with a sophisticated CI/CD pipeline:
The main workflow orchestrates all CI processes and runs on:
- Push to
mainbranch - Pull requests
Workflow Steps:
- Lint - Code formatting and linting
- Typechecking - TypeScript type checking
- Tests - Unit and end-to-end tests
- Drop Pre-release - Create pre-release artifacts
- Inspector Build - Build and publish inspector package
- Creator Hub Build - Build and publish creator hub
Runs comprehensive testing:
- Unit Tests - Runs on Ubuntu with Node.js 22
- E2E Tests - Runs on macOS and Windows with Playwright
- Cross-platform Testing - Tests both packages
Handles inspector package deployment:
- Builds the inspector package
- Publishes to S3 for branch previews
- Deploys to GitHub Pages
- Publishes to npm (main branch only)
- Creates GitHub releases with release notes
Handles desktop application builds:
- Multi-platform Builds - macOS and Windows
- Code Signing - Automatic code signing for both platforms
- Notarization - macOS notarization
- Artifact Distribution - Uploads to S3 and GitHub releases
- PR Testing - Provides download links for PR testing
The project uses npm workspaces to manage the monorepo:
{
"workspaces": ["packages/*"]
}- syncpack is used to synchronize dependencies across packages
- Shared dependencies are defined in the root
package.json - Package-specific dependencies are in each package's
package.json - The
@dcl/inspectordependency is managed specially in.syncpackrc.json
The Inspector package uses Protocol Buffers for data layer communication:
.protofiles are inpackages/inspector/src/lib/data-layer/proto/- Generated TypeScript files are in
packages/inspector/src/lib/data-layer/proto/gen/ - Use
make protocto regenerate after.protochanges
- Creator Hub: Uses Vitest for main, preload, renderer, and shared tests
- Inspector: Uses Vitest for unit tests
- Run with
make testornpm run testin individual packages
- Creator Hub: Uses Playwright for Electron app testing
- Inspector: Uses Playwright for web app testing
- Run with
make test-e2e - Tests automatically build the applications before running
packages/creator-hub/e2e/ # Creator Hub E2E tests
packages/inspector/test/e2e/ # Inspector E2E tests
-
Start Development:
make init # Initial setup cd packages/creator-hub npm run start # Start creator hub in watch mode
-
In another terminal:
cd packages/inspector npm run start # Start inspector in watch mode
-
Before Committing:
- Lint, format & typecheck will be run automatically
To launch build locally on MacOS first run the command:
xattr -c /Applications/Decentraland\ Creator\ Hub.app/
- ESLint - Code linting with custom rules
- Prettier - Code formatting
- TypeScript - Static type checking
- syncpack - Dependency synchronization
- Automatically published to npm on main branch
- PR builds available for testing
- GitHub Pages deployment for web previews
- GitHub Releases: Always marked as pre-releases to avoid confusion with electron-updater
- Multi-platform builds (macOS, Windows)
- Code signed and notarized
- Distributed via GitHub releases and S3
- PR builds available for testing
- GitHub Releases: Always marked as pre-releases for later manual release when updated to "latest"
The project uses a specific release strategy to ensure electron-updater works correctly:
- Creator Hub releases are created as pre-release and when ready, they should be marked as "latest" on GitHub, allowing the Electron app to automatically detect and download updates
- Other packages (e.g Inspector releases) are ALWAYS marked as pre-releases to prevent electron-updater from accidentally downloading the wrong package type
- This separation ensures that users only get Creator Hub app updates through the auto-update mechanism
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
The CI pipeline will automatically:
- Lint, format & typecheck
- Run all tests
- Build both packages
- Provide testing artifacts for review
- Deploy preview versions