Skip to content

Capawesome July 2025 Update

The Capawesome July update is here! This update includes new features and improvements for Capawesome Cloud and our Plugins. Let's take a look at the most important changes.

Blog

We have made several updates to our blog, including new articles and tutorials that cover various topics related to Capacitor and our plugins. Be sure to check out the latest posts for valuable insights and tips. Here are some highlights:

Besides these articles, we have also started a new series of showcases where we highlight some of the best apps built with Capacitor. These showcases will provide insights into how developers are using Capacitor to create amazing applications. Here are the first few showcases:

Make sure to check them out!

Cloud

New Billing role

We have introduced a new Billing role in Capawesome Cloud. This role allows users to manage billing-related tasks without granting full administrative access. Users with the Billing role can view and manage billing information, including invoices and payment methods.

Check out the documentation for more details on the Billing role and how to assign it to users.

Plugins

Barometer

We have released a new Barometer plugin for Android and iOS. This plugin allows you to access the device's barometer sensor, providing real-time atmospheric pressure data. You can use this data for various applications, such as weather forecasting or altitude measurement.

import { Barometer } from '@capawesome-team/capacitor-barometer';

const getMeasurement = async () => {
  const { measurement } = await Barometer.getMeasurement();
  console.log('Current atmospheric pressure:', measurement.pressure, 'hPa');
};

Check out the documentation for more details on how to get started with the Barometer plugin.

Bluetooth Low Energy

New onConnectionStateChange method in headless task

The Bluetooth Low Energy plugin has been updated with a new onConnectionStateChange method in the BluetoothLowEnergyHeadlessTask class. This method allows you to run your own native code when the connection state of a Bluetooth device changes. This is useful for handling connection events in the background, such as when a device disconnects or reconnects.

import android.bluetooth.BluetoothGatt;
import androidx.annotation.NonNull;

public class BluetoothLowEnergyHeadlessTask {
  public void onConnectionStateChange(@NonNull BluetoothGatt gatt, int status, int newState) {
    // Your code here
  }
}

Check out the documentation for more details on how to use the onConnectionStateChange method in your headless task.

File Compressor

width and height options

The File Compressor plugin has been updated to support the width and height options when compressing images. This allows you to resize images while compressing them, which can help reduce file size without losing too much quality.

import { FileCompressor } from '@capawesome-team/capacitor-file-compressor';

const compressImage = async () => {
  const { path } = await FileCompressor.compressImage({
    mimeType: 'image/jpeg',
    path: 'content://com.android.providers.downloads.documents/document/msf%3A1000000485',
    quality: 0.7,
    height: 1000,
    width: 1000,
  });
  return path;
};

Check out the documentation for more details on how to use the width and height options when compressing images.

Firebase

Authentication

authDomain configuration option

The Firebase Authentication plugin has been updated to include a new authDomain configuration option. This option allows you to specify the authentication domain for your Firebase project, which is required for certain authentication methods.

{
  "plugins": {
    "FirebaseAuthentication": {
      "authDomain": "your-app.firebaseapp.com"
    }
  }
}

Check out the documentation for more details on how to configure the authDomain option.

Cloud Firestore

SetOptions interface

The Firebase Cloud Firestore plugin has been updated to include a new SetOptions interface. This interface allows you to specify options when setting documents in Firestore, such as merging data.

import { FirebaseFirestore } from '@capacitor-firebase/firestore';

const writeBatch = async () => {
  await FirebaseFirestore.writeBatch({
    operations: [
      {
        type: 'set',
        reference: 'users/Aorq09lkt1ynbR7xhTUx',
        data: { 
          first: 'Alan', 
          last: 'Turing', 
          born: 1912 
        },
        options: { merge: true },
      },
      {
        type: 'delete',
        reference: 'users/Aorq09lkt1ynbR7xhTUx',
      },
    ],
  });
};

For more details on how to use the SetOptions interface, check out the documentation.

ML Kit

Document Scanner

We have released a new Document Scanner plugin for Android based on the ML Kit Document Scanner API. This plugin allows you to scan documents using the device's camera or import them from the gallery. It supports various result formats, including JPEG and PDF.

import { DocumentScanner } from '@capacitor-mlkit/document-scanner';

const scanDocument = async () => {
  const result = await DocumentScanner.scanDocument({
    galleryImportAllowed: true,
    pageLimit: 5,
    resultFormats: 'JPEG_PDF',
    scannerMode: 'FULL',
  });

  console.log('Result:', result);
};

Check out the documentation for more details on how to use the Document Scanner plugin.

libSQL

We have released a new libSQL plugin for Android and iOS. This plugin provides a powerful and efficient way to manage SQLite databases using the libSQL engine, which is a fork of SQLite from the team behind Turso.

import { Libsql } from '@capawesome-team/capacitor-libsql';

const insertUser = async (user: { id: number; name: string }) => {
  // Open the database
  const { connectionId } = await Libsql.connect({
    database: 'my-database',
  });
  // Insert a new row
  await Libsql.execute({
    connectionId,
    statement: 'INSERT INTO users (id, name) VALUES (?, ?)',
    values: [user.id, user.name],
  });
  // Close the database
  await Libsql.close({ connectionId });
};

Check out the documentation for more details on how to get started with the libSQL plugin.

Live Update

The Live Update plugin has received a small bug fix to ensure that missing bundle files are handled correctly. This fix improves the reliability of the live update process, ensuring that your app can seamlessly update without issues.

Make sure to update your Live Update plugin to the latest version to benefit from this fix.

PostHog

New configuration options

The PostHog plugin has been updated with new configuration options. You can now set the apiKey and host when initializing the plugin, allowing you to track advanced analytics events like app installations and more.

{
  "plugins": {
    "Posthog": {
      "apiKey": 'phc_g8wMenebiIQ1pYd5v9Vy7oakn6MczVKIsNG5ZHCspdy',
      "host": 'https://eu.i.posthog.com'
    }
  }
}

This also means that you don't need to call the setup(...) method anymore, as the plugin will automatically initialize with the provided configuration.

Speech Recognition

Punctuation support

The Speech Recognition plugin has been updated to support punctuation in transcriptions. Just set the enableFormatting option to true when starting the speech recognition session, and the plugin will automatically format the transcriptions with punctuation.

import { SpeechRecognition } from '@capawesome-team/capacitor-speech-recognition';

const startListening = async () => {
  await SpeechRecognition.startListening({
    enableFormatting: true,
  });
};

Check out the documentation for more details.

SQLite

We have published a new SQLite plugin for Capacitor. This plugin provides a powerful and efficient way to manage SQLite databases on Android, iOS and web. It supports various features such as encryption, migrations, and more.

Here's a quick example of how to use the SQLite plugin to open a database and insert a new row:

import { SQLite } from '@capawesome-team/capacitor-sqlite';

const insertUser = async (user: { id: number; name: string }) => {
  // Open the database
  const { databaseId } = await SQLite.open({ 
    path: 'db.sqlite3',
    upgradeStatements: [
      {
        version: 1,
        statements: [
          'CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE)',
        ]
      }
    ],
  });
  // Insert a new row
  await Sqlite.execute({
    databaseId,
    statement: 'INSERT INTO users (name, email) VALUES (?, ?)',
    values: ['John Doe', 'john.doe@example.com']
  });
  // Close the database
  await SQLite.close({ databaseId });
};

Check out the announcement post for more details on how to get started with the SQLite plugin.