Named queries
Named .eel files are the usual way apps consume Eelgrass Lang (sqlc-like). Inline templates are an escape hatch.
eel
use schema "../demo_schema.eel"
query ListUsers() {
users |> select { id, name, email, active, balance, status }
}
query GetPaid(min_balance: Money<usd>) {
users
|> filter status == .paid && balance >= ${min_balance}
|> select { name, balance }
}Declared params bind ${name} holes in the body. Types are checked against the schema registry (including use schema paths relative to the queries file).
Config
examples/eelgrass.config.json:
json
{
"schemas": ["demo_schema.eel"],
"queries": ["queries/**/*.eel"],
"outDir": "generated"
}Codegen
bash
# from clients/typescript after npm run build
node bin/eelgrass-codegen.mjs --config ../../examples/eelgrass.config.jsonOr, once on your PATH:
bash
eelgrass-codegen --config eelgrass.config.jsonEmits typed TypeScript functions that return EelgrassQuery<TRows> values for an EelgrassExecutor to run. See TypeScript client.
ts
import { GetPaid } from "./generated/users.queries";
import { Money } from "@eelgrass/client";
const rows = await exec.execute(
GetPaid({ min_balance: Money.minor(5000n, "USD") }),
);CLI typecheck
bash
eelgrass typecheck-queries examples/demo_schema.eel examples/queries/users.eelOr via cargo:
bash
cargo run -p eelgrass-cli -- typecheck-queries examples/demo_schema.eel examples/queries/users.eelTransport reality
EelgrassExecutor is the contract. A shipping HTTP/IPC driver is not in @eelgrass/client yet. See Status. Today you drive the engine via eelgrass run / Studio / wasm, or implement EelgrassExecutor against eelgrass serve's /query for experiments.
Example layout
| Path | Role |
|---|---|
examples/demo_schema.eel | Schema |
examples/queries/users.eel | Named queries |
examples/eelgrass.config.json | Codegen config |