Getting Started
-
Install the package
Terminal window npm i @capgo/capacitor-compassTerminal window pnpm add @capgo/capacitor-compassTerminal window yarn add @capgo/capacitor-compassTerminal window bun add @capgo/capacitor-compass -
Sync with native projects
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync
iOS Setup
Section titled “iOS Setup”On iOS, compass access requires location permission. Add the following to your Info.plist:
<key>NSLocationWhenInUseUsageDescription</key><string>We need location permission to access the compass</string>Android Setup
Section titled “Android Setup”No additional setup required. The plugin uses the device’s magnetometer and accelerometer sensors.
Import the plugin and use its methods to read compass heading:
import { CapgoCompass } from '@capgo/capacitor-compass';
// Get current heading onceconst getCurrentHeading = async () => { const { value } = await CapgoCompass.getCurrentHeading(); console.log('Current heading:', value, 'degrees');};
// Start continuous heading updatesconst startCompass = async () => { // Start listening for updates await CapgoCompass.startListening();
// Add listener for heading changes const handle = await CapgoCompass.addListener('headingChange', (event) => { console.log('Heading:', event.value, 'degrees'); });
// Later, to stop listening: // await CapgoCompass.stopListening(); // await handle.remove();};
// Check permissionsconst checkPermission = async () => { const status = await CapgoCompass.checkPermissions(); console.log('Permission status:', status.compass);};
// Request permissionsconst requestPermission = async () => { const status = await CapgoCompass.requestPermissions(); if (status.compass === 'granted') { console.log('Compass access granted'); }};API Reference
Section titled “API Reference”getCurrentHeading()
Section titled “getCurrentHeading()”Get the current compass heading in degrees.
const result = await CapgoCompass.getCurrentHeading();// Returns: { value: number } - heading in degrees (0-360)startListening()
Section titled “startListening()”Start listening for compass heading changes. Must be called before heading events are emitted.
await CapgoCompass.startListening();stopListening()
Section titled “stopListening()”Stop listening for compass heading changes.
await CapgoCompass.stopListening();addListener(‘headingChange’, callback)
Section titled “addListener(‘headingChange’, callback)”Add a listener for heading change events.
const handle = await CapgoCompass.addListener('headingChange', (event) => { console.log('Heading:', event.value);});
// Remove listener when doneawait handle.remove();removeAllListeners()
Section titled “removeAllListeners()”Remove all registered listeners.
await CapgoCompass.removeAllListeners();checkPermissions()
Section titled “checkPermissions()”Check current permission status.
const status = await CapgoCompass.checkPermissions();// Returns: { compass: 'prompt' | 'granted' | 'denied' }requestPermissions()
Section titled “requestPermissions()”Request permission to access compass data.
const status = await CapgoCompass.requestPermissions();getPluginVersion()
Section titled “getPluginVersion()”Get the native plugin version.
const { version } = await CapgoCompass.getPluginVersion();Complete Example
Section titled “Complete Example”import { CapgoCompass } from '@capgo/capacitor-compass';
export class CompassService { private listenerHandle: any = null;
async init() { // Check and request permissions const status = await CapgoCompass.checkPermissions(); if (status.compass !== 'granted') { const result = await CapgoCompass.requestPermissions(); if (result.compass !== 'granted') { throw new Error('Compass permission denied'); } } }
async startTracking(onHeadingChange: (heading: number) => void) { // Start listening for updates await CapgoCompass.startListening();
// Add event listener this.listenerHandle = await CapgoCompass.addListener( 'headingChange', (event) => { onHeadingChange(event.value); } ); }
async stopTracking() { if (this.listenerHandle) { await this.listenerHandle.remove(); this.listenerHandle = null; } await CapgoCompass.stopListening(); }
async getHeading(): Promise<number> { const { value } = await CapgoCompass.getCurrentHeading(); return value; }
getCardinalDirection(heading: number): string { const directions = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']; const index = Math.round(heading / 45) % 8; return directions[index]; }}Platform Notes
Section titled “Platform Notes”- Requires iOS 10.0+
- Uses Core Location for heading data
- Requires location permission (NSLocationWhenInUseUsageDescription)
- Heading updates are continuous when listening is active
Android
Section titled “Android”- Requires Android 6.0 (API 23)+
- Uses accelerometer and magnetometer sensors
- No special permissions required for compass sensors
- Heading is calculated from sensor fusion
- Not supported on web platform
- Methods will throw errors when called