Data Source: JSONL / NDJSON
JSONL (JSON Lines) is a format where each line is a self-contained JSON object. It is commonly used for data exports, log files, and streaming datasets.
Both .jsonl and .ndjson (newline-delimited JSON) extensions are supported — they use the same format.
Note: SQLSeal uses the JSON5 parser for JSONL files, which means you can use JSON5 syntax (trailing commas, comments, unquoted keys, etc.) in your JSONL files. Effectively, this makes it JSON5L (JSON5 Lines) support.
Example JSONL file:
{"name": "Alice", "age": 30, "role": "admin"}
{"name": "Bob", "age": 25}
{"name": "Charlie", "age": 35, "role": "viewer"}Basic usage
TABLE data = file(path.jsonl)data is the table alias you use in your queries. path.jsonl is the path to your file within your vault.
TABLE data = file(logs.jsonl)
SELECT name, role FROM data WHERE age > 25
Sparse schemas
Different lines in a JSONL file can have different keys. SQLSeal automatically collects the union of all keys across all lines and uses that as the table schema. Missing fields for a given row are stored as NULL.
Given this file:
{"id": 1, "event": "login", "user": "alice"}
{"id": 2, "event": "purchase", "user": "bob", "amount": 49.99}
{"id": 3, "event": "logout", "user": "alice"}The resulting table will have columns id, event, user, and amount. Rows without amount will have NULL in that column.
TABLE events = file(events.jsonl)
SELECT event, user, amount FROM events WHERE amount IS NOT NULL
Nested values
If a line contains nested objects or arrays as values, they are stored as JSON strings. You can use SQLite's json_extract() function to query into them.
{"id": 1, "tags": ["alpha", "beta"], "meta": {"source": "api"}}TABLE items = file(items.jsonl)
SELECT id, json_extract(meta, '$.source') AS source FROM items
Error handling
Malformed lines are silently skipped with a warning in the developer console — the rest of the file loads normally. This is intentional: real-world JSONL files (especially logs) occasionally contain truncated or corrupt lines.