Skip to content

Browser-based SQLite with extensions

License

Notifications You must be signed in to change notification settings

nalgeon/sqlean.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

sqlean.js

This package provides an SQLite database engine compiled for the browser and bundled with sqlean extensions.

Live Demo

Extensions

sqlean.js contains 9 essential SQLite extensions:

  • crypto: Hashing, encoding and decoding data
  • define: User-defined functions and dynamic SQL
  • fuzzy: Fuzzy string matching and phonetics
  • ipaddr: IP address manipulation
  • math: Math functions
  • regexp: Regular expressions
  • stats: Math statistics
  • text: String functions
  • uuid: Universally Unique IDentifiers

Installation

You'll need the SQLite JavaScript API. Include it from CDN or (better) download and host locally:

<script src="https://unpkg.com/@antonz/sqlean/dist/sqlean.js"></script>

It's also available as an ECMAScript module:

import sqlite3InitModule from "https://unpkg.com/@antonz/sqlean/dist/sqlean.mjs";

You'll also need to download and serve an SQLite WASM file if you're hosting locally:

https://unpkg.com/@antonz/sqlean/dist/sqlean.wasm

sqlean.wasm is used internally by the sqlean.js script, so place them in the same folder.

I suggest you host both files locally because they weigh ≈1.5Mb, and CDNs tend to be quite slow with such large files.

You can install them using npm:

npm install @antonz/sqlean

Usage

Initialize SQLite:

async function init() {
    const sqlite3 = await sqlite3InitModule({
        print: console.log,
        printErr: console.error,
    });
    const version = sqlite3.capi.sqlite3_libversion();
    console.log(`Loaded SQLite ${version}`);
    return sqlite3;
}

Create and query a database:

const SCHEMA = `
create table employees(id, name, salary);
insert into employees values
(1, 'Alice', 120),
(2, 'Bob', 100),
(3, 'Cindy', 80);
`;

init().then((sqlite3) => {
    const db = new sqlite3.oo1.DB();
    db.exec(SCHEMA);

    const sql = "select * from employees";
    let rows = [];
    db.exec({
        sql,
        rowMode: "object",
        resultRows: rows,
    });

    console.log(rows);
});

Which prints the following:

[
    {
        "id": 1,
        "name": "Alice",
        "salary": 120
    },
    {
        "id": 2,
        "name": "Bob",
        "salary": 100
    },
    {
        "id": 3,
        "name": "Cindy",
        "salary": 80
    }
]

See the SQLite documentation for details.

License

Copyright 2023-2024 Anton Zhiyanov.

The software is available under the MIT License.

Support

The package is provided as-is, and I don't currently plan to change anything except to update the SQLite version from time to time.