Initial Setup
1. Install Dependencies
After cloning the repository, install all dependencies:2. Project Structure
Understand the monorepo structure:Development Commands
Desktop Development
Start the desktop app in development mode:Mobile Development
Start the mobile app:Building
Build the desktop app for production:Code Quality
Run linting and type checking:Testing
Run tests:Cleaning
Clean build artifacts:Development Workflow
1. Start Development Server
For desktop development:- Start Vite dev server with hot reload
- Launch Tauri window
- Enable React DevTools
- Watch for file changes
2. Make Changes
Edit files in the appropriate package:- Core logic:
packages/core/src/ - Desktop UI:
apps/desktop/src/ - Mobile UI:
apps/mobile/ - Plugins:
packages/plugins/src/
3. Run Checks
IMPORTANT: Always run checks after making changes:- Code follows style guidelines (Biome)
- No TypeScript errors
- All linting rules pass
4. Update Tests
If your changes affect functionality:- Update existing tests if behavior changed
- Add new tests for new features
- Run tests to verify:
bun run test
5. Update Plugin API
CRITICAL: If you change anything inpackages/core/, update the plugin API:
6. Update Documentation
If your changes affect:- Public APIs
- User-facing features
- Configuration options
docs/.
Platform-Specific Development
Desktop (Tauri)
Prerequisites
- Rust toolchain (rustc, cargo)
- Platform-specific dependencies:
- macOS: Xcode Command Line Tools
- Windows: Microsoft C++ Build Tools
- Linux: webkit2gtk, libappindicator
Tauri Commands
Located inapps/desktop/src-tauri/src/:
Building Desktop App
Mobile (Expo)
Prerequisites
- Expo CLI
- Android Studio (for Android)
- Xcode (for iOS, macOS only)
Running on Device
Mobile-Specific Guidelines
See Mobile Best Practices for:- Performance optimization
- Memory management
- Native-like experience
Working with Packages
Core Package
Location:packages/core/src/
Contains:
- App class (
App.ts) - Managers (Plugin, Theme, Command, etc.)
- Storage interfaces
- Sync engine
- Type definitions
- Platform-agnostic code only
- Use abstractions (interfaces) for platform-specific features
- No direct DOM or React Native access
Plugin Development
Create a new plugin:- Create plugin file in
packages/plugins/src/ - Extend
Pluginbase class - Implement lifecycle methods
UI Components
Always use the UIBridge abstraction:Debugging
Desktop App
- DevTools: Right-click → Inspect Element
- Console: View logs in DevTools console
- Rust logs: Check terminal output
Mobile App
- React DevTools: Install Expo DevTools
- Console logs: Use
console.log()and view in Metro bundler - Remote debugging: Shake device → Enable Remote Debugging
Common Issues
Build Failures
Type Errors
Tests Failing
Mobile Metro Bundler Issues
Best Practices
Performance
- Use CSS files for styles, not inline styles
- Memoize expensive computations
- Debounce/throttle frequent operations
- Lazy load heavy components
Theming
ALWAYS use CSS variables for colors:Cross-Platform
- Use UIBridge for all UI operations
- Never access DOM directly in core code
- Use native bridge interfaces for platform features
Next Steps
- Review Code Style Guidelines
- Learn about Testing Practices
- For mobile development, see Mobile Overview
