This project is a work in progress. The current version is not yet available on the Chrome Web Store. Please check back later for updates.
A browser extension for debugging Aurelia 1 and 2 applications. Features a top-level DevTools tab with modern, professional interface and dual-tab architecture for comprehensive debugging.
- Dual Version Support: Works with both Aurelia v1 and v2 applications
- Component Discovery: Automatically finds and displays all Aurelia components on the page
- Interactive Property Inspector: View and edit component properties, bindables, and custom attributes
- Professional Interface: Clean, modern design matching Chrome DevTools aesthetics
- Real-time Updates: Refresh functionality to re-scan components
- Dark/Light Theme Support: Adapts to Chrome DevTools theme preferences
- Elements Sidebar Integration: Optional Aurelia sidebar in the Elements panel showing the selected node's Aurelia info
- Selection Sync: Toggle to auto-sync the Aurelia panel selection with the Elements panel ($0). Includes a "Reveal in Elements" action
- Every bindable/property row now shows an
expr: ...badge when the value comes from a binding; this works for both Aurelia 1 and 2. - In the Inspector > Controller section youβll see
bindings(andinstructionsfor v1) collections. Expand an item to inspect the binding record, including the original expression and, for member access, the resolved object so you can drill further. - If you donβt see expressions, expand the selected componentβs
Controller>bindingsentry; each binding/instruction item carries the expression even when the property is a computed object.
If you need to prevent the Aurelia DevTools from inspecting your application (v1 or v2), set any of the following before Aurelia bootstraps:
window.__AURELIA_DEVTOOLS_DISABLED__ = true;(aliases:window.__AURELIA_DEVTOOLS_DISABLE__,window.AURELIA_DEVTOOLS_DISABLE)<meta name="aurelia-devtools" content="disable">data-aurelia-devtools="disable"on the<html>element
When present, the extension will skip installing hooks, ignore detection events, and the DevTools panel will display βAurelia DevTools disabled.β
Coming soon...
- Clone this repository:
git clone https://github.com/aurelia/devtools.git - Run
npm installto install dependencies - Run
npm run buildto build the extension - Follow Chrome's extension loading guide:
- Open
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked" and select the
distfolder
- Open
Install the latest Node.js and npm versions.
npm run start- Development mode with file watching (Vite build --watch)npm run build- Production buildnpm run analyze- Production build with bundle analyzer (vite-bundle-analyzer)npm run lint- Run ESLint and HTMLHintnpm run test- Run Jest tests with coveragenpm run reload- Open Chrome extension reload URL
- Run
npm run startto start development mode - Load the extension in Chrome (see Installation > Manual Installation)
- Pin the Aurelia Extension in the toolbar to verify detection: "Aurelia 2 detected on this page."
- Open Developer Tools and navigate to the "β‘ Aurelia" tab
- For code changes:
- Reload the extension in
chrome://extensions - Close and reopen Developer Tools (or Ctrl+R in the DevTools inspect window)
- Refresh the target page if needed
- Reload the extension in
Extension authors can surface custom diagnostics by listening for (and dispatching) browser events. No registration helpers are requiredβjust emit the right events from the inspected page.
Dispatch aurelia-devtools-panel-data with a detail payload whenever you have information to show. Each id becomes its own tab.
type DevtoolsPanelDetail = {
id: string;
label?: string;
icon?: string; // emoji or short text (<=4 chars)
description?: string;
order?: number;
summary?: string;
sections?: Array<{
title?: string;
description?: string;
rows?: Array<{ label?: string; value: unknown; format?: 'text' | 'code' | 'json'; hint?: string }>;
table?: { columns?: string[]; rows?: unknown[][] };
}>;
data?: unknown;
status?: 'ok' | 'empty' | 'error';
error?: string;
};
window.addEventListener('aurelia-devtools-ready', () => {
window.dispatchEvent(
new CustomEvent<DevtoolsPanelDetail>('aurelia-devtools-panel-data', {
detail: {
id: 'aurelia-store',
label: 'Store',
icon: 'π§ ',
summary: `Last action: ${window.store?.lastAction ?? 'n/a'}`,
sections: [
{
title: 'State',
rows: [{ label: 'snapshot', value: window.store?.state, format: 'json' }],
},
],
data: window.store,
},
})
);
});When the DevTools user clicks the refresh button, the panel dispatches aurelia-devtools:request-panel with { id, context }. Listen for that event to push updated data:
window.addEventListener('aurelia-devtools:request-panel', (event: CustomEvent<{ id: string; context: any }>) => {
if (event.detail.id !== 'aurelia-store') return;
const ctx = event.detail.context; // contains selection + Aurelia version info
// recompute payload (maybe using ctx.selectedDomPath)
window.dispatchEvent(new CustomEvent('aurelia-devtools-panel-data', { detail: buildStorePayload(ctx) }));
});DevTools emits aurelia-devtools:selection-changed with the same context object whenever the inspected component changes. Use it to correlate diagnostics with the current view-model:
window.addEventListener('aurelia-devtools:selection-changed', (event: CustomEvent<any>) => {
const { selectedComponentId, selectedDomPath } = event.detail;
// optional: update internal state or eagerly re-publish panel data
});If your panel should disappear, dispatch aurelia-devtools-panel-remove with { id }.
This event-first approach keeps the surface area tiny (just listen and dispatch) while still giving DevTools everything it needs to render a rich tab per integration.
- If you encounter "File not found" errors:
- Right-click in the panel/popup
- Select "Inspect"
- Check the console for error details
- If the "Aurelia" tab doesn't appear, try refreshing the target page
- Clear any extension errors in the
chrome://extensionspage
- Main Application (
src/main.ts,src/app.ts) - Aurelia 2 app rendering the DevTools UI - Extension Scripts:
detector.ts- Detects Aurelia versions on web pagesbackground.ts- Service worker managing extension statecontentscript.ts- Finds Aurelia instances in DOMdevtools.js- Creates the DevTools panel
- Vite - Modern build tool replacing Webpack
- TypeScript - Type safety and modern JavaScript features
- Aurelia 2 - Framework for the DevTools UI itself
src/
βββ main.ts # Entry point
βββ app.ts, app.html # Main Aurelia app
βββ backend/ # Debug host and communication
βββ background/ # Service worker
βββ contentscript/ # Page content interaction
βββ detector/ # Aurelia version detection
βββ devtools/ # DevTools panel creation
βββ resources/elements/ # UI components
βββ shared/ # Common types and utilities
βββ popups/ # Extension popup pages
- Frontend: Aurelia 2, TypeScript, CSS
- Build: Vite, Rollup
- Linting: ESLint, HTMLHint
- Extension: Chrome Extension Manifest v3
- Map and Set changes don't live update automatically
- V1 and V2 feature parity is still in development
- Some advanced Aurelia features may not be fully supported yet
The project uses GitHub Actions for automated Chrome Web Store deployment:
-
Prepare Release (Manual Workflow):
# Local preparation ./scripts/prepare-release.sh # Or use GitHub workflow: # Go to Actions > "Prepare Release" > Run workflow
-
Create GitHub Release:
- Tag format:
v1.2.3(semantic versioning) - Triggers automatic Chrome Web Store deployment
- Includes conventional commit changelog generation
- Tag format:
-
Chrome Web Store:
- Extension automatically uploaded and published
- Review process typically takes 1-3 business days
We follow semantic versioning with conventional commits:
- MAJOR (2.0.0): Breaking changes (
feat!:,fix!:) - MINOR (1.1.0): New features (
feat(scope): description) - PATCH (1.0.1): Bug fixes (
fix(scope): description)
Use conventional commits for automatic changelog generation:
feat(inspector): add property editing functionality
fix(detector): improve aurelia v2 detection reliability
docs(readme): update installation instructions
style(devtools): remove emoji from panel title
refactor(debug): improve property update handling
test(components): add unit tests for property-view
chore(deps): update aurelia to v2.0.0-beta.25# 1. Prepare release (runs tests, builds, shows changelog)
./scripts/prepare-release.sh
# 2. Create GitHub release
git tag v1.2.3
git push origin v1.2.3
# 3. Create release on GitHub.com with tag v1.2.3
# 4. Deployment happens automatically via GitHub ActionsFor automated deployment, configure these repository secrets:
CHROME_EXTENSION_ID- Extension ID from Chrome Web StoreCHROME_CLIENT_ID- Google OAuth Client IDCHROME_CLIENT_SECRET- Google OAuth Client SecretCHROME_REFRESH_TOKEN- Generated refresh token
See deployment documentation for detailed setup instructions.
-
Clone and setup:
git clone https://github.com/aurelia/devtools.git cd devtools npm install -
Development:
npm run start # Watch mode # Load extension in Chrome, make changes, reload extension
-
Quality checks:
npm run lint # Code quality npm test # Unit tests npm run build # Production build
-
Conventional commits:
git commit -m "feat(scope): add new feature" git commit -m "fix(scope): resolve bug"
- β Use conventional commit format
- β
Ensure all tests pass:
npm test - β
Run linting:
npm run lint - β
Build successfully:
npm run build - β Follow existing code style and patterns
- The extension uses Chrome's message passing for communication
- DevTools panel runs in an isolated context with limited APIs
- Both source and built files should be committed for distribution
This extension is based on the original work by Brandon Seydel from the aurelia-inspector repository.
MIT