mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
## Summary EdgeDB has rebranded to Gel. This PR comprehensively updates all documentation to reflect the rebrand. ## Changes Made ### Documentation & Branding - **Guide title**: "Use EdgeDB with Bun" → "Use Gel with Bun" - **File renamed**: `docs/guides/ecosystem/edgedb.mdx` → `gel.mdx` - **Description**: Added "(formerly EdgeDB)" note - **All path references**: Updated from `/guides/ecosystem/edgedb` to `/guides/ecosystem/gel` ### CLI Commands - `edgedb project init` → `gel project init` - `edgedb` → `gel` (REPL) - `edgedb migration create` → `gel migration create` - `edgedb migrate` → `gel migrate` ### npm Packages - `edgedb` → `gel` - `@edgedb/generate` → `@gel/generate` ### Installation & Documentation URLs - Installation link: `docs.geldata.com/learn/installation` (functional) - Documentation reference: `docs.geldata.com/` (operational) - Installation scripts: Verified working (`https://www.geldata.com/sh` and `ps1`) - Added Homebrew option: `brew install geldata/tap/gel-cli` ### Code Examples - Updated all imports: `import { createClient } from "gel"` - Updated codegen commands: `bunx @gel/generate` ## Verified All commands verified against official Gel documentation at https://docs.geldata.com/ Fixes #17721 --------- Co-authored-by: Lydia Hallie <lydiajuliettehallie@gmail.com>
262 lines
6.7 KiB
Plaintext
262 lines
6.7 KiB
Plaintext
---
|
|
title: Use Gel with Bun
|
|
sidebarTitle: Gel with Bun
|
|
mode: center
|
|
---
|
|
|
|
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](https://docs.geldata.com/learn/installation) if you haven't already.
|
|
|
|
<CodeGroup>
|
|
|
|
```sh Linux/macOS terminal icon="terminal"
|
|
curl https://www.geldata.com/sh --proto "=https" -sSf1 | sh
|
|
```
|
|
|
|
```sh Windows terminal icon="windows"
|
|
irm https://www.geldata.com/ps1 | iex
|
|
```
|
|
|
|
```sh Homebrew terminal icon="terminal"
|
|
brew install geldata/tap/gel-cli
|
|
```
|
|
|
|
</CodeGroup>
|
|
|
|
---
|
|
|
|
Use `bun init` to create a fresh project.
|
|
|
|
```sh terminal icon="terminal"
|
|
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"
|
|
gel project init
|
|
```
|
|
|
|
```txt
|
|
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"
|
|
gel
|
|
gel> select 1 + 1;
|
|
```
|
|
|
|
```txt
|
|
2
|
|
```
|
|
|
|
Then run `\quit` to exit the REPL.
|
|
|
|
```sh terminal icon="terminal"
|
|
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"
|
|
dbschema
|
|
├── default.esdl
|
|
└── migrations
|
|
```
|
|
|
|
---
|
|
|
|
Open that file and paste the following contents.
|
|
|
|
```ts default.esdl icon="file-code"
|
|
module default {
|
|
type Movie {
|
|
required title: str;
|
|
releaseYear: int64;
|
|
}
|
|
};
|
|
```
|
|
|
|
---
|
|
|
|
Then generate and apply an initial migration.
|
|
|
|
```sh terminal icon="terminal"
|
|
gel migration create
|
|
```
|
|
|
|
```txt
|
|
Created /Users/colinmcd94/Documents/bun/fun/examples/my-gel-app/dbschema/migrations/00001.edgeql, id: m1uwekrn4ni4qs7ul7hfar4xemm5kkxlpswolcoyqj3xdhweomwjrq
|
|
```
|
|
|
|
```sh terminal icon="terminal"
|
|
gel migrate
|
|
```
|
|
|
|
```txt
|
|
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"
|
|
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="/icons/typescript.svg"
|
|
import { createClient } from "gel";
|
|
|
|
const client = createClient();
|
|
|
|
const INSERT_MOVIE = `
|
|
with movies := <array<tuple<title: str, year: int64>>>$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"
|
|
bun run seed.ts
|
|
```
|
|
|
|
```txt
|
|
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"
|
|
bunx @gel/generate edgeql-js
|
|
```
|
|
|
|
```txt
|
|
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="/icons/typescript.svg"
|
|
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"
|
|
bun run index.ts
|
|
```
|
|
|
|
```txt
|
|
[
|
|
{
|
|
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/).
|