AgentStack
SKILL unreviewed MIT Self-run

Bun Use Gel with Bun

skill-jarle-bun-skills-bun-guides-ecosystem-gel · by jarle

Use Gel with Bun

No reviews yet
0 installs
9 views
0.0% view→install

Install

$ agentstack add skill-jarle-bun-skills-bun-guides-ecosystem-gel

Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Pipes remote content directly into a shell (remote code execution).

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Bun Use Gel with Bun? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Use Gel with Bun

Gel (formerly EdgeDB) is a graph-relational database powered by Postgres under the hood. It provides a declarative schema language, migrations system, and object-oriented query language, in addition to supporting raw SQL queries. It solves the object-relational mapping problem at the database layer, eliminating the need for an ORM library in your application code.


First, install Gel if you haven't already.

``sh Linux/macOS terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} curl https://www.geldata.com/sh --proto "=https" -sSf1 | sh ``

``sh Windows terminal icon="windows" theme={"theme":{"light":"github-light","dark":"dracula"}} irm https://www.geldata.com/ps1 | iex ``

``sh Homebrew terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} brew install geldata/tap/gel-cli ``


Use bun init to create a fresh project.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} mkdir my-edgedb-app cd my-edgedb-app bun init -y


***

We'll use the Gel CLI to initialize a Gel instance for our project. This creates a `gel.toml` file in our project root.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
gel project init

``txt theme={"theme":{"light":"github-light","dark":"dracula"}} No gel.toml found in /Users/colinmcd94/Documents/bun/fun/examples/my-gel-app or above Do you want to initialize a new project? [Y/n] > Y Specify the name of Gel instance to use with this project [default: my_gel_app]: > my_gel_app Checking Gel versions... Specify the version of Gel to use with this project [default: x.y]: > x.y ┌─────────────────────┬──────────────────────────────────────────────────────────────────┐ │ Project directory │ /Users/colinmcd94/Documents/bun/fun/examples/my-gel-app │ │ Project config │ /Users/colinmcd94/Documents/bun/fun/examples/my-gel-app/gel.toml│ │ Schema dir (empty) │ /Users/colinmcd94/Documents/bun/fun/examples/my-gel-app/dbschema│ │ Installation method │ portable package │ │ Version │ x.y+6d5921b │ │ Instance name │ my_gel_app │ └─────────────────────┴──────────────────────────────────────────────────────────────────┘ Version x.y+6d5921b is already downloaded Initializing Gel instance... Applying migrations... Everything is up to date. Revision initial Project initialized. To connect to my_gel_app, run gel`


***

To see if the database is running, let's open a REPL and run a simple query.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
gel
gel> select 1 + 1;

```txt theme={"theme":{"light":"github-light","dark":"dracula"}} 2


Then run `\quit` to exit the REPL.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
gel> \quit

With the project initialized, we can define a schema. The gel project init command already created a dbschema/default.esdl file to contain our schema.

```txt File Tree icon="folder-tree" theme={"theme":{"light":"github-light","dark":"dracula"}} dbschema ├── default.esdl └── migrations


***

Open that file and paste the following contents.

```ts default.esdl icon="file-code" theme={"theme":{"light":"github-light","dark":"dracula"}}
module default {
  type Movie {
    required title: str;
    releaseYear: int64;
  }
};

Then generate and apply an initial migration.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} gel migration create


```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
Created /Users/colinmcd94/Documents/bun/fun/examples/my-gel-app/dbschema/migrations/00001.edgeql, id: m1uwekrn4ni4qs7ul7hfar4xemm5kkxlpswolcoyqj3xdhweomwjrq

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} gel migrate


```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
Applied m1uwekrn4ni4qs7ul7hfar4xemm5kkxlpswolcoyqj3xdhweomwjrq (00001.edgeql)

With our schema applied, let's execute some queries using Gel's JavaScript client library. We'll install the client library and Gel's codegen CLI, and create a seed.ts.file.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} bun add gel bun add -D @gel/generate touch seed.ts


***

Paste the following code into `seed.ts`.

The client auto-connects to the database. We insert a couple movies using the `.execute()` method. We will use EdgeQL's `for` expression to turn this bulk insert into a single optimized query.

```ts seed.ts icon="https://mintcdn.com/bun-1dd33a4e/nIz6GtMH5K-dfXeV/icons/typescript.svg?fit=max&auto=format&n=nIz6GtMH5K-dfXeV&q=85&s=5d73d76daf7eb7b158469d8c30d349b0" theme={"theme":{"light":"github-light","dark":"dracula"}}
import { createClient } from "gel";

const client = createClient();

const INSERT_MOVIE = `
  with movies := >>$movies
  for movie in array_unpack(movies) union (
    insert Movie {
      title := movie.title,
      releaseYear := movie.year,
    }
  )
`;

const movies = [
  { title: "The Matrix", year: 1999 },
  { title: "The Matrix Reloaded", year: 2003 },
  { title: "The Matrix Revolutions", year: 2003 },
];

await client.execute(INSERT_MOVIE, { movies });

console.log(`Seeding complete.`);
process.exit();

Then run this file with Bun.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} bun run seed.ts


```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
Seeding complete.

Gel implements a number of code generation tools for TypeScript. To query our newly seeded database in a typesafe way, we'll use @gel/generate to code-generate the EdgeQL query builder.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}} bunx @gel/generate edgeql-js


```txt  theme={"theme":{"light":"github-light","dark":"dracula"}}
Generating query builder...
Detected tsconfig.json, generating TypeScript files.
   To override this, use the --target flag.
   Run `npx @edgedb/generate --help` for full options.
Introspecting database schema...
Writing files to ./dbschema/edgeql-js
Generation complete! 🤘
Checking the generated query builder into version control
is not recommended. Would you like to update .gitignore to ignore
the query builder directory? The following line will be added:

   dbschema/edgeql-js

[y/n] (leave blank for "y")
> y

In index.ts, we can import the generated query builder from ./dbschema/edgeql-js and write a simple select query.

```ts index.ts icon="https://mintcdn.com/bun-1dd33a4e/nIz6GtMH5K-dfXeV/icons/typescript.svg?fit=max&auto=format&n=nIz6GtMH5K-dfXeV&q=85&s=5d73d76daf7eb7b158469d8c30d349b0" theme={"theme":{"light":"github-light","dark":"dracula"}} import { createClient } from "gel"; import e from "./dbschema/edgeql-js";

const client = createClient();

const query = e.select(e.Movie, () => ({ title: true, releaseYear: true, }));

const results = await query.run(client); console.log(results);

results; // { title: string, releaseYear: number | null }[]


***

Running the file with Bun, we can see the list of movies we inserted.

```sh terminal icon="terminal" theme={"theme":{"light":"github-light","dark":"dracula"}}
bun run index.ts

```txt theme={"theme":{"light":"github-light","dark":"dracula"}} [ { title: "The Matrix", releaseYear: 1999 }, { title: "The Matrix Reloaded", releaseYear: 2003 }, { title: "The Matrix Revolutions", releaseYear: 2003 } ]


***

For complete documentation, refer to the [Gel docs](https://docs.geldata.com/).

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [jarle](https://github.com/jarle)
- **Source:** [jarle/bun-skills](https://github.com/jarle/bun-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.