Virgil Security

Easy-to-use developer tools for securing user data in mobile & web apps, the Cloud, and IoT products

Works with your favorite tech

New SDK for protecting passwords and sensitive data in storage

learn more

Outsourcing security to your cloud platform isn’t enough. Use our open source SDK across all major platforms to encrypt, sign, and verify data and to distribute and secure keys between your users.

Using Virgil Security helped us get end-to-end encryption into our app and out to market in record time. Strong security and great developer support. Can't beat that combo!

Our building blocks can be used alone or together:

End-to-end encrypt messages & personal data on user devices

If your data is only encrypted in transit and at rest, it’s still vulnerable to developer error and security issues at your service providers. With end-to-end encryption, only your end-users or IoT devices can decrypt their data – protecting them and you.

// Encrypt a message on client device before posting it up to the cloud
const encryptedMessage = virgilCrypto.encrypt("Hey Alex!", alex.publicKey);

// Send it to the cloud
msgService.send({ to: alex, message: encryptedMessage });

// Decrypt it on the the other user’s device - the cloud doesn’t have the keys
const susansMessage = virgilCrypto.decrypt(encryptedMessage, alex.privateKey);

Verify that the data wasn’t tampered with

Can you tell if a message or sensor really came from a trusted user or from somebody else? A simple solution:

// Encrypt the message and calculate the signature
const encryptedMessage = virgilCrypto.encrypt('Hey Alex!', alex.publicKey);
const messageSignature = virgilCrypto.calculateSignature(

// Verify that this message was really written by Susan
if (!virgilCrypto.verify(encryptedMessage, messageSignature, susan.publicKey)) {
  throw new Error("This message isn't from Susan");

const decryptedMessage = virgilCrypto.decrypt(encryptedMessage, alex.privateKey);

Use our secure, geo-balanced key management service to distribute keys between users

Allow your users to find each other’s public keys. Backup encrypted user private keys. Unlock lost user keys. Natively integrated with the SDK.

// Publish public keys for users to be able to encrypt data to each other
    privateKey: aliceKeyPair.privateKey,
    publicKey: aliceKeyPair.publicKey

// Easily retrieve public keys by referring to a user’s ID
cardManager.searchCards("[email protected]")
.then(bobsCards => {
  const bobsPublicKeys = => card.publicKey);
  const encryptedMessage = virgilCrypto.encrypt("Hey Bob!", bobsPublicKeys);

// Save encrypted private key
).then(() => {
  console.log("Private key is saved");

End-to-end encryption
for messaging

Learn more

End-to-end encryption
for IoT devices

Learn more

Get started now with our easy-to-follow guides.
Start free, pay 2¢ per user per month beyond 250 user keys.

Empowering these awesome companies

Boston, MA

America's first telemedicine app for Hormone Balance, with E2EE chat for clients & doctors.

Ontario, CANADA

E2EE messaging for private disposable phone numbers.


E2EE private in-app messaging & user engagement platform.

Sikka Chat
San Jose, CA

E2EE chat service for patients & doctors at private practices.


The invite-only E2EE social chat app in and near the U.S. White House.


Australia’s most trusted solution for mobile healthcare communication, E2EE.