---
title: Alternative to the Ionic Secure Storage Plugin
description: Ionic Secure Storage reaches end of life on December 31, 2027. Discover Capacitor alternatives like the Secure Preferences, SQLite, and Vault plugins.
date: 
  created: 2025-07-25
  updated: 2026-07-17
authors:
  - robingenz
categories:
  - Capacitor
  - Guides
  - SDKs
links:
  - Capacitor SQLite: sdks/capacitor/sqlite.md
  - Capacitor Secure Preferences: sdks/capacitor/secure-preferences.md
  - Capacitor Vault: sdks/capacitor/vault.md
faq: true
---

# Alternative to the Ionic Secure Storage Plugin

Looking for an Ionic Secure Storage alternative for your Capacitor app? Ionic [announced the discontinuation of its commercial products](https://ionic.io/blog/important-announcement-the-future-of-ionics-commercial-products){:target="_blank"} on February 11, 2025, and Secure Storage reaches its end of life on December 31, 2027. Depending on your use case, the [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md) (key-value data), the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md) (encrypted SQL databases via SQLCipher), and the [Capacitor Vault plugin](../../sdks/capacitor/vault.md) (biometric-protected secrets) provide modern, actively maintained replacements that close the gap left by Ionic Secure Storage.

<!-- more -->

<div class="capawesome-z29o10a">
  <a href="https://capawesome.io/" target="_blank">
    <img alt="Build and deploy your Capacitor app with Capawesome Cloud" src="https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png?t=1" />
  </a>
</div>

## Key Takeaways

- Ionic announced the discontinuation of its commercial products on February 11, 2025. Ionic Secure Storage sunsets on December 31, 2027.
- For key-value data, migrate to the [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md), which uses the Android Keystore and iOS Keychain.
- For encrypted databases, migrate to the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md), which offers the same 256-bit AES encryption via SQLCipher.
- For biometric-protected secrets, use the [Capacitor Vault plugin](../../sdks/capacitor/vault.md), which stores key-value pairs in lockable vaults.
- All three plugins are actively maintained and stay current with the latest Capacitor versions.
- The Capawesome team offers a dedicated migration service if you'd rather not handle it yourself.

## Why migrate from Ionic Secure Storage?

Ionic Secure Storage has been a go-to solution for developers requiring encrypted local storage in their Capacitor applications. However, following Ionic's acquisition by OutSystems, Ionic [announced on February 11, 2025](https://ionic.io/blog/important-announcement-the-future-of-ionics-commercial-products){:target="_blank"} that it would discontinue its commercial products: new sales stopped immediately, and maintenance is winding down over multiple years. For Secure Storage, the sunset takes effect on December 31, 2027 — after that end-of-life date, the plugin receives no further updates. Since the plugin offered both key-value storage and SQLite database functionality with 256-bit AES encryption, teams handling sensitive data need a replacement.

The Capawesome plugins cover every Ionic Secure Storage use case:

- **Key-value data**: The [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md) stores key-value pairs using the Android Keystore and iOS Keychain — matching the security model developers relied on with Ionic Secure Storage.
- **Encrypted SQL databases**: The [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md) encrypts databases with 256-bit AES via SQLCipher, a like-for-like replacement for Secure Storage's headline feature.
- **Biometric-protected secrets**: The [Capacitor Vault plugin](../../sdks/capacitor/vault.md) stores secrets in lockable vaults that can require biometric authentication to unlock — the use case previously covered by pairing Secure Storage with Ionic Identity Vault.

!!! tip "AI-Assisted Migration"

    For a more guided experience, add the [Capawesome skills](https://github.com/capawesome-team/skills){:target="_blank"} to your project with `npx skills add capawesome-team/skills --skill ionic-enterprise-sdk-migration` and use the following prompt with your preferred AI coding assistant:

    ```
    Use the `ionic-enterprise-sdk-migration` skill from `capawesome-team/skills` to help me migrate from Ionic Secure Storage to Capawesome alternatives.
    ```

## Migration from Ionic Secure Storage

Migrating from Ionic Secure Storage requires choosing the appropriate replacement based on your storage needs: key-value storage or SQLite database functionality. If you also need to protect individual secrets behind biometric authentication, take a look at the [Capacitor Vault plugin](../../sdks/capacitor/vault.md).

### Key-Value Store

For applications using Ionic Secure Storage's key-value functionality, migrate to the [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md). If you'd rather keep key-value data in an encrypted SQLite database, the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md) also ships a built-in key-value store — see [Key-Value Storage Made Simple with the SQLite Plugin](./key-value-storage-made-simple-with-the-sqlite-plugin.md).

#### Installation

Begin by removing the existing Ionic Secure Storage dependency and installing the Capawesome alternative, if you haven't already.
To install the [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md), please refer to the [Installation](../../sdks/capacitor/secure-preferences.md#installation) section in the plugin documentation.

#### Create a store

Unlike Ionic Secure Storage, the Capacitor Secure Preferences plugin doesn't require explicit store creation. The secure storage is automatically available after installation. Values are encrypted using the Android Keystore and stored in the iOS Keychain, so the plugin handles key management for you.

**Ionic Secure Storage:**

```typescript
import { KeyValueStorage } from '@ionic-enterprise/secure-storage';

const createStore = async () => {
  await KeyValueStorage.create('my-secret-key');
};
```

**Capacitor Secure Preferences:**

```typescript
import { SecurePreferences } from '@capawesome-team/capacitor-secure-preferences';

// No store creation needed - ready to use immediately
```

#### Set a value

**Ionic Secure Storage:**

```typescript
import { KeyValueStorage } from '@ionic-enterprise/secure-storage';

const setValue = async () => {
  await KeyValueStorage.set('username', 'john_doe');
};
```

**Capacitor Secure Preferences:**

```typescript
import { SecurePreferences } from '@capawesome-team/capacitor-secure-preferences';

const setValue = async () => {
  await SecurePreferences.set({
    key: 'username',
    value: 'john_doe'
  });
};
```

#### Get a value

**Ionic Secure Storage:**

```typescript
import { KeyValueStorage } from '@ionic-enterprise/secure-storage';

const getValue = async () => {
  const value = await KeyValueStorage.get('username');
  return value;
};
```

**Capacitor Secure Preferences:**

```typescript
import { SecurePreferences } from '@capawesome-team/capacitor-secure-preferences';

const getValue = async () => {
  const { value } = await SecurePreferences.get({ key: 'username' });
  return value;
};
```

#### Remove a value

**Ionic Secure Storage:**

```typescript
import { KeyValueStorage } from '@ionic-enterprise/secure-storage';

const removeValue = async () => {
  await KeyValueStorage.remove('username');
};
```

**Capacitor Secure Preferences:**

```typescript
import { SecurePreferences } from '@capawesome-team/capacitor-secure-preferences';

const removeValue = async () => {
  await SecurePreferences.remove({ key: 'username' });
};
```

#### Clear the store

**Ionic Secure Storage:**

```typescript
import { KeyValueStorage } from '@ionic-enterprise/secure-storage';

const clearStore = async () => {
  await KeyValueStorage.clear();
};
```

**Capacitor Secure Preferences:**

```typescript
import { SecurePreferences } from '@capawesome-team/capacitor-secure-preferences';

const clearStore = async () => {
  await SecurePreferences.clear();
};
```

### SQLite

For applications using Ionic Secure Storage's SQLite functionality, migrate to the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md).

#### Installation

Begin by removing the existing Ionic Secure Storage dependency and installing the Capawesome alternative, if you haven't already.
To install the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md), please refer to the [Installation](../../sdks/capacitor/sqlite.md#installation) section in the plugin documentation.

#### Opening a database

Database initialization differs between the two solutions. Here's how to adapt your database setup:

**Ionic Secure Storage:**

```typescript
import { SQLite } from '@ionic-enterprise/secure-storage';

const openDatabase = async () => {
  const db = await SQLite.create({
    name: 'database.db',
    location: 'default',
  });
  await db.executeSql('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)', []);
  return db;
};
```

The Capacitor SQLite plugin encrypts databases with 256-bit AES via SQLCipher. Pass an `encryptionKey` to `open(...)` to keep the same encryption guarantee Ionic Secure Storage provided:

```typescript
import { Sqlite } from '@capawesome-team/capacitor-sqlite';

const openDatabase = async () => {
  const { databaseId } = await Sqlite.open({
    path: 'database.db',
    encryptionKey: 'your-secret-key',
    upgradeStatements: [
      {
        version: 1,
        statements: [
          'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)'
        ]
      }
    ]
  });
  return databaseId;
};
```

!!! note "Enabling encryption"

    Encryption requires bundling SQLCipher in your native projects. See the [Encryption](../../sdks/capacitor/sqlite.md#encryption) section in the plugin documentation for the platform setup, or follow the step-by-step guide in [Encrypting SQLite databases in Capacitor](./encrypting-capacitor-sqlite-database.md). Don't hard-code the key — store it with the [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md).

#### Executing SQL statements

SQL execution patterns are streamlined in the Capacitor SQLite plugin:

**Ionic Secure Storage:**

```typescript
import { SQLiteObject } from '@ionic-enterprise/secure-storage';

const insertUser = async (db: SQLiteObject, name: string, email: string) => {
  await db.executeSql(
    'INSERT INTO users (name, email) VALUES (?, ?)',
    [name, email]
  );
};
```

**Capacitor SQLite:**

```typescript
import { Sqlite } from '@capawesome-team/capacitor-sqlite';

const insertUser = async (databaseId: string, name: string, email: string) => {
  await Sqlite.execute({
    databaseId,
    statement: 'INSERT INTO users (name, email) VALUES (?, ?)',
    values: [name, email]
  });
};
```

#### Querying data

Data retrieval follows similar simplification patterns:

**Ionic Secure Storage:**

```typescript
import { SQLiteObject } from '@ionic-enterprise/secure-storage';

const getUsers = async (db: SQLiteObject) => {
  return new Promise((resolve) => {
    db.transaction(tx => {
      tx.executeSql('SELECT * FROM users WHERE name LIKE ?', ['%John%'], (tx, result) => {
        resolve(result.rows);
      });
    });
  });
};
```

**Capacitor SQLite:**

```typescript
import { Sqlite } from '@capawesome-team/capacitor-sqlite';

const getUsers = async (databaseId: string) => {
  const result = await Sqlite.query({
    databaseId,
    statement: 'SELECT * FROM users WHERE name LIKE ?',
    values: ['%John%']
  });
  return result.rows;
};
```

## Can I keep using Ionic Secure Storage?

For a while, yes. Ionic has offered active subscribers perpetual, self-support licenses in 2026, so existing apps won't stop working overnight. However, the code is effectively frozen: there are no new features, no compatibility updates for future Android, iOS, or Capacitor releases, and no patches. With the end of life set for December 31, 2027, it's worth planning your migration before an OS or Capacitor update introduces an incompatibility that can no longer be fixed.

## FAQ

### Which plugin should I migrate to — Secure Preferences, SQLite, or Vault?

It depends on what you were storing. If you only used Ionic Secure Storage's key-value API (tokens, small settings), the [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md) is the direct replacement. If you used its SQLite database functionality, migrate to the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md) with an `encryptionKey` to keep the same SQLCipher-based encryption. If you also need to gate access behind biometric authentication rather than just encrypting at rest, add the [Capacitor Vault plugin](../../sdks/capacitor/vault.md) on top of either.

### Are these three plugins free, or do they need a paid subscription?

All three — Secure Preferences, SQLite, and Vault — are part of [Capawesome Insiders](https://capawesome.io/insiders/){:target="_blank"}, a paid subscription. There isn't a free-tier equivalent for encrypted storage in the Capawesome catalog; the Insiders subscription is what replaces Ionic Secure Storage's own enterprise licensing.

### Do I need to bundle SQLCipher myself for encrypted SQLite databases?

Yes, on native platforms. Encryption isn't automatic — it requires bundling SQLCipher in your Android and iOS projects, following the platform setup in the plugin's [Encryption](../../sdks/capacitor/sqlite.md#encryption) documentation or the step-by-step [Encrypting SQLite databases in Capacitor](./encrypting-capacitor-sqlite-database.md) guide. Also don't hard-code the encryption key in your app's source — store it with the Secure Preferences plugin instead.

### Can I keep using Ionic Secure Storage until 2027?

For now, yes — existing apps keep working, and Ionic has offered active subscribers perpetual, self-support licenses. But the code is effectively frozen: no new features, no compatibility fixes for future Android, iOS, or Capacitor releases. It's safer to migrate before an OS update introduces an incompatibility that can no longer be patched than to wait for the December 31, 2027 end-of-life date.

### Is there a way to migrate stored data automatically, or do I need to re-encrypt everything by hand?

There's no automatic converter between the two plugins' storage formats. For key-value data, the practical approach is reading each value out of Ionic Secure Storage and writing it into Secure Preferences at runtime (similar to the vault-to-vault migration pattern in [Alternative to the Ionic Identity Vault Plugin](./alternative-to-ionic-identity-vault-plugin.md)), while both dependencies are still installed. For SQLite databases, you're re-creating the schema with `upgradeStatements` and copying rows across, since the two plugins don't share a database file format.

## Need Help Migrating?

If you'd rather not handle the migration yourself, the Capawesome team can take care of it for you. Whether you're dealing with a straightforward key-value store swap or a more complex SQLite setup, we offer dedicated migration services to get you up and running with minimal downtime and effort on your end.

[Book a Free Consultation](https://cal.com/team/capawesome/ionic-appflow-migration){ .md-button .md-button--primary }

## Conclusion

The end of life of Ionic Secure Storage on December 31, 2027 doesn't have to disrupt your development workflow. The [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md) replaces the key-value store, the [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md) replaces the encrypted SQLite database with the same 256-bit AES encryption via SQLCipher, and the [Capacitor Vault plugin](../../sdks/capacitor/vault.md) covers biometric-protected secrets. For the SQLite side specifically — opening an encrypted database and keeping the key in secure storage — [How to Use SQLite in a Capacitor App](./how-to-use-sqlite-in-a-capacitor-app.md) covers the full setup.

By migrating to these Capawesome plugins, you gain access to actively maintained solutions that stay current with the latest Capacitor versions and platform updates, ensuring your applications remain secure and performant.

**Related reading:**

- [Alternatives to Ionic Enterprise Plugins](./alternatives-to-ionic-enterprise-plugins.md)
- [How to Securely Store Credentials with Capacitor](./how-to-securely-store-credentials-with-capacitor.md)

Have questions about your migration? Join the [Capawesome Discord server](https://discord.gg/VCXxSVjefW){:target="_blank"} to connect with the community, and subscribe to the [Capawesome newsletter](/newsletter/){:target="_blank"} to stay updated on the latest news about Capawesome, Capacitor, and the Ionic ecosystem.

If you need assistance with migrating from Ionic Secure Storage or implementing the [Capacitor Secure Preferences plugin](../../sdks/capacitor/secure-preferences.md), [Capacitor SQLite plugin](../../sdks/capacitor/sqlite.md), or [Capacitor Vault plugin](../../sdks/capacitor/vault.md), the Capawesome team is available to help you transition smoothly to these reliable alternatives. Just [contact us](mailto:support@capawesome.io) to get started.
