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:
- Encrypting SQLite databases in Capacitor
- Announcing the SQLite Plugin for Capacitor
- Exploring the Capacitor Secure Preferences API
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:
- Showcase: MyBodyTutor - A Personalized Nutrition and Weight Loss Coaching App
- Showcase: CostPal - Price tracking app for Costco
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.
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.