Browser-based launcher for the WE platform. This web application uses the @we/app-framework package to provide a platform-agnostic interface with web-specific authentication via ad4m-connect.
The WE web launcher:
- Runs entirely in the browser (no installation required for the launcher itself)
- Authenticates with AD4M using the
ad4m-connectdesktop application - Provides the same core functionality as the desktop launchers (Electron, Tauri)
- Shares the same codebase via
@we/app-framework
- Frontend (
src/): SolidJS app using the shared@we/app-framework - Platform Adapter (
src/platform/webAdapter.ts): Implements AD4M connection usingad4m-connect - Build Tool: Vite with SolidJS plugin
Unlike the desktop apps which embed their own AD4M executor, the web app:
- Connects to the
ad4m-connectdesktop application running on the user's machine - Requests authentication through ad4m-connect
- Receives an authenticated AD4M client
- Uses this client to connect to the user's AD4M executor
Note: Users must have:
ad4m-connectdesktop application installed and running- AD4M executor running (managed by ad4m-connect)
To run in development mode:
pnpm devThis will:
- Start the Vite dev server (default port: 3000)
- Open the app in your browser
- Enable hot module reloading
To build for production:
pnpm buildThis will:
- Build the app with Vite
- Output optimized static files to
dist/ - The build can be served from any static hosting (Vercel, Netlify, etc.)
To preview the production build locally:
pnpm serve- ✅ Launcher runs in browser (no launcher installation)
- ✅ Cross-platform (works on any OS with a browser)
- ✅ Auto-updates (just refresh the page)
- ✅ Native browser APIs (screen sharing works out of the box)
- ✅ Can embed external apps via iframe (same postMessage pattern)
- ❌ Requires ad4m-connect desktop app to be installed
- ✅ All-in-one installation (includes AD4M executor)
- ✅ Can embed external apps via iframe
- ✅ Direct access to system resources
- ❌ Larger download size (includes executor)
- ❌ Platform-specific builds
- ❌ Manual updates
- ❌ Screen sharing requires polyfill (Electron only)
The web platform adapter uses ad4m-connect for authentication:
// src/platform/webAdapter.ts
import Ad4mConnect from '@coasys/ad4m-connect';
export const webAdapter: PlatformAdapter = {
async buildAd4mClient() {
const connect = Ad4mConnect({
appName: 'WE',
appDesc: 'Social media for the new internet',
appDomain: 'ad4m.weco.io',
appIconPath: 'https://avatars.githubusercontent.com/u/34165012',
capabilities: [{ with: { domain: '*', pointers: ['*'] }, can: ['*'] }],
});
return await connect.getAd4mClient();
},
isDesktop: false,
platform: 'web',
};The web launcher can embed external apps via iframe using the same postMessage protocol as the desktop apps. See ../EMBEDDING.md for the complete integration guide.
Advantages in Web:
- Native
getDisplayMedia()for screen sharing (no polyfill needed) - Standard browser security model
- Works with any web-based embedded app
Note: The embedded app will receive AD4M credentials the same way as in desktop launchers, but the credentials come from ad4m-connect rather than a bundled executor.
Build the app and deploy the dist/ folder to any static host:
pnpm build
# Upload dist/ to Vercel, Netlify, GitHub Pages, etc.No environment variables required - all configuration is in src/platform/webAdapter.ts.
The app communicates with the AD4M executor via WebSocket. Ensure your AD4M executor allows connections from your web app's domain.
Make sure the user has the ad4m-connect desktop application installed and running. Download it from the AD4M releases page.
- Check that
ad4m-connectdesktop app is running - Verify the AD4M executor is running (managed by ad4m-connect)
- Check firewall settings allow localhost connections
- Ensure ad4m-connect is configured correctly
If the build fails:
- Clear node_modules and reinstall:
rm -rf node_modules && pnpm install - Clear Vite cache:
rm -rf node_modules/.vite - Check that all workspace dependencies are built:
pnpm buildfrom root
@we/we-electron- Electron desktop launcher@we/we-tauri- Tauri desktop launcher
Both use the same @we/app-framework but with different platform adapters.
MIT