Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
b10f0e6
initial skeleton for db studio command
franklinfollis Oct 17, 2025
551796f
feat(database-ui): have `elide db studio` be a simple wrapper around …
franklinfollis Oct 21, 2025
b3ec20a
feat(database-ui): have db studio init a react ssr template for studi…
franklinfollis Oct 25, 2025
7f47320
feat(database-ui): discover db files on disk and select between them
franklinfollis Oct 26, 2025
a1b9ca1
feat(database-ui): static react app calling on database json api
franklinfollis Oct 28, 2025
a3630e3
feat(database-ui): consolidate api and ui for db studio into one folder
franklinfollis Oct 29, 2025
18fa796
feat(database-ui): add shadcn and tailwind to studio frontend
franklinfollis Oct 29, 2025
163a063
feat(database-ui): standardize json api paths
franklinfollis Oct 29, 2025
f9428bf
feat(database-ui): denote columns that are primary keys in tables
franklinfollis Oct 31, 2025
b8c6b43
fix(database-ui): add primaryKeys to TableData type
franklinfollis Oct 31, 2025
abe822f
fix(database-ui): move built db studio code under .dev
franklinfollis Nov 4, 2025
86f9b47
fix(database-ui): use new elide http server
franklinfollis Nov 10, 2025
bd34832
feat(database-ui): cleanup server.ts
franklinfollis Nov 10, 2025
0f965d5
fix(database-ui): use byte length for content length header
franklinfollis Nov 10, 2025
1a6872c
feat(database-ui): provide directory as well as db file path for data…
franklinfollis Nov 10, 2025
78f78a8
feat(database-ui): use code mirror for query editor
franklinfollis Nov 11, 2025
fa06349
feat(database-ui): move db-studio src out of samples
franklinfollis Nov 11, 2025
7dc4779
feat(database-ui): setup elide.pkl manifest for api
franklinfollis Nov 12, 2025
fecfd76
feat(database-ui): spread server routes and handlers out to separate …
franklinfollis Nov 12, 2025
d5b54dc
feat(database-ui): add tsconfig to resolve elide:sqlite types
franklinfollis Nov 12, 2025
4b6b6d8
chore(database-ui): cleanup responses and router code
franklinfollis Nov 12, 2025
7ea1760
feat(database-ui): format null values in table
franklinfollis Nov 17, 2025
d0b255d
feat(database-ui): escape table names with spaces in them
franklinfollis Nov 17, 2025
81a212e
feat(database-ui): use tanstack table for viewing query results
franklinfollis Nov 17, 2025
6a1aa91
feat(database-ui): show views from databases as well
franklinfollis Nov 17, 2025
e0d045e
feat(database-ui): refactor api response to include query metadata
franklinfollis Nov 17, 2025
559155f
feat(database-ui): update query hooks to use new format
franklinfollis Nov 17, 2025
3543da6
feat(database-ui): show detailed column info on hover
franklinfollis Nov 17, 2025
29bb8b8
feat(database-ui): add support for views
franklinfollis Nov 17, 2025
1bf5d83
chore(database-ui): clean up context passed in routes
franklinfollis Nov 18, 2025
595feac
feat(database-ui): use limit and offset as query params for pagination
franklinfollis Nov 18, 2025
847b527
fix(database-ui): fix up loading state for rows when changing offset
franklinfollis Nov 18, 2025
2671635
fix(database-ui): highlight selected table in sidebar
franklinfollis Nov 18, 2025
3146301
feat(database-ui): sticky toolbar and column headers
franklinfollis Nov 18, 2025
ab9d8fa
chore(database-ui): prettierrc
franklinfollis Nov 18, 2025
02564a0
fix(database-ui): show key info first on column description
franklinfollis Nov 18, 2025
71d94cf
feat(database-ui): add props for hiding tools in data table
franklinfollis Nov 18, 2025
51c5b0b
feat(database-ui): send sort column and direction as url parameter
franklinfollis Nov 18, 2025
0b81426
feat(database-ui): Move table name to toolbar
franklinfollis Nov 18, 2025
442c65c
feat(database-ui): add filtering for data table
franklinfollis Nov 18, 2025
d866f7b
feat(database-ui): show active where and column filters
franklinfollis Nov 18, 2025
fb21815
feat(database-ui): add refresh handler for table data
franklinfollis Nov 18, 2025
17eabae
refactor(database-ui): separate components out of data table
franklinfollis Nov 18, 2025
8ae85d2
feat(database-ui): move contents of navbar to sidebar
franklinfollis Nov 19, 2025
cfe2d04
fix(database-ui): remove memo on DataTableGrid
franklinfollis Nov 19, 2025
dfab8d0
feat(database-ui): create provider for DataTable
franklinfollis Nov 19, 2025
84ec8ea
fix(database-ui): various lint fix ups
franklinfollis Nov 24, 2025
ea93677
feat(database-ui): add resizable panels
franklinfollis Nov 24, 2025
48afdb2
feat(database-ui): standardize theme for ui
franklinfollis Nov 24, 2025
9992cbf
feat(database-ui): simplify theme
franklinfollis Nov 24, 2025
b62a4dc
fix(database-ui): fix stale state in columns dropdown
franklinfollis Nov 24, 2025
5a91212
feat(database-ui): functionality for deleting rows
franklinfollis Nov 25, 2025
45aad6c
feat(database-ui): use zod for parsing responses
franklinfollis Nov 25, 2025
efaa4dc
feat(database-ui): call sub tasks within db studio command
franklinfollis Nov 26, 2025
0589431
fix(database-ui): run elide build and install before running api server
franklinfollis Nov 28, 2025
b687be1
fix(database-ui): exclude .dev in prepareDbStudio task
franklinfollis Nov 28, 2025
142cd52
fix(database-ui): exclude server node_modules in build output
franklinfollis Nov 28, 2025
bd16e36
fix(database-ui): hide delete button for views
franklinfollis Nov 30, 2025
f486c36
feat(database-ui): add refresh tables button
franklinfollis Nov 30, 2025
6010c01
fix(database-ui): fix styling of column names in query editor
franklinfollis Dec 1, 2025
e503b97
feat(database-ui): add drop and truncate table actions
franklinfollis Dec 2, 2025
9350335
test(database-ui): initial playwright config
franklinfollis Dec 2, 2025
d4de911
fix(database-ui): import elide:sqlite directly into middleware
franklinfollis Dec 2, 2025
b2fc80d
fix(database-ui): add CORS to api responses
franklinfollis Dec 2, 2025
9ef95c4
fix(database-ui): refactor data table components
franklinfollis Dec 2, 2025
e2f1708
test(database-ui): shorten test commands
franklinfollis Dec 2, 2025
1a075d2
fix(database-ui): small ui fixes
franklinfollis Dec 2, 2025
621a701
fix(database-ui): make sidebar content more consistent
franklinfollis Dec 2, 2025
acbd1d4
feat(database-ui): cell selection
franklinfollis Dec 2, 2025
5f8d000
feat(database-ui): add rows feature
franklinfollis Dec 2, 2025
33c221a
fix(database-ui): incredibly clear drop and truncate warning dialogs
franklinfollis Dec 2, 2025
5943797
fix(database-ui): unsaved changes dialog only on navigate out
franklinfollis Dec 2, 2025
8a4a5fe
fix(database-ui): show proper SQL errors in ui
franklinfollis Dec 2, 2025
09d59eb
fix(database-ui): only show table edit results on success/failure
franklinfollis Dec 2, 2025
d6b2c03
feat(database-ui): edit and update cells
franklinfollis Dec 3, 2025
60b160e
feat(database-ui): remove retry for failed queries
franklinfollis Dec 3, 2025
9472a9e
feat(database-ui): allow selecting NULL and EMPTY STRING for editable…
franklinfollis Dec 3, 2025
789651f
feat(database-ui): generate unique id's for databases
franklinfollis Dec 4, 2025
58ccc49
fix(database-ui): make cells still selectable in edit mode
franklinfollis Dec 4, 2025
9bac9a4
fix(database-ui): show all columns when adding new rows
franklinfollis Dec 4, 2025
55c9d0b
fix(database-ui): correctly delete when primary key is NULL
franklinfollis Dec 4, 2025
b81ad3f
feat(database-ui): show version number in footer
franklinfollis Dec 9, 2025
9685505
feat(database-ui): save query and limit to local storage
franklinfollis Dec 9, 2025
9112c9b
feat(database-ui): initial table creator/editor
franklinfollis Dec 9, 2025
eb13cbd
chore(database-ui): build ui assets
franklinfollis Dec 9, 2025
8e373fc
fix(database-ui): log significant sql statements in api
franklinfollis Dec 9, 2025
68ccc90
fix(database-ui): save local storage values per db
franklinfollis Dec 9, 2025
8ca15de
docs(database-ui): add README and remove legacy run-db-studio script
franklinfollis Dec 16, 2025
96633ad
fix(database-ui): latest static build of ui
franklinfollis Dec 16, 2025
5d6e00e
fix(database-ui): remove flag for api-port for now
franklinfollis Dec 18, 2025
d1abed5
fix(database-ui): clean up terminal output
franklinfollis Dec 23, 2025
08b0989
chore(database-ui): remove test db files from repo
franklinfollis Dec 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
.dev/dependencies
.dev/coverage
.dev/artifacts
.dev/db-studio
*/.dev/artifacts
*/.dev/coverage
*/.dev/dependencies
Expand Down
22 changes: 21 additions & 1 deletion packages/cli/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2414,7 +2414,7 @@ tasks {
val allSamples = layout.projectDirectory.dir("src/projects")
.asFile
.listFiles()
.filter { it.isDirectory() }
.filter { it.isDirectory() && it.name != "db-studio" }
.map { it.toPath() to it.name }

val builtSamples = layout.buildDirectory.dir("packed-samples")
Expand All @@ -2436,10 +2436,30 @@ tasks {
dependsOn(allSamplePackTasks)
}

val prepareDbStudioResources by registering(Copy::class) {
group = "build"
description = "Prepare Database Studio resources for embedding in CLI"

from(layout.projectDirectory.dir("src/db-studio/api")) {
into("api")
exclude("config.ts") // Generated at runtime with injected config
exclude(".dev/**") // Exclude development-only dependencies directory
exclude("node_modules/**") // Dependencies installed at runtime
}

// Copy built UI (dist/ folder only, not source or node_modules)
from(layout.projectDirectory.dir("src/db-studio/ui/dist")) {
into("ui")
}

into(layout.buildDirectory.dir("resources/main/META-INF/elide/db-studio"))
}

processResources {
dependsOn(
":packages:graalvm:buildRustNativesForHostDebug",
prepKotlinResources,
prepareDbStudioResources,
packSamples,
allSamplePackTasks,
)
Expand Down
44 changes: 44 additions & 0 deletions packages/cli/src/db-studio/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Database Studio

Web-based database management UI that runs on the Elide runtime. At the moment it only supports SQLite with Elide's `elide:sqlite` js bindings. We assume that an existing valid database file exists for the `elide db studio` command to find. If you need a database file to run this on, [Northwind](https://github.com/jpwhite3/northwind-SQLite3) and [Chinook](https://github.com/lerocha/chinook-database/releases) are some good prepopulated examples.

## Directory Structure

```
db-studio/
├── api/ # TypeScript REST API server
│ ├── ...
│ ├── index.ts # Server entrypoint
│ └── elide.pkl
└── ui/ # React frontend application
├── src/
└── dist/ # Vite production build
```

## Running Locally

### Using the Gradle Command

The best way to run this locally is through the CLI in JVM mode. Simply passing `db studio` as args.

**Note:** In order to see UI changes you've made, you'll need to run `pnpm build` in the `ui/` directory first.

```bash
# Build the UI
cd packages/cli/src/db-studio/ui
pnpm build

# Go back to the elide repo root
# Then run the db studio command
./gradlew :packages:cli:run --args="db studio"

# With a specific database
./gradlew :packages:cli:run --args="db studio path/to/database.db"
```

### Running api or ui independently

Database Studio consists of two separate projects that can be run independently:

- `api`: run directly by calling `elide run index.ts` within the directory.
- `ui`: using `pnpm dev` within the directory.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

absolute symlink? or what's up with this

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "db-studio-api",
"version": "1.0.0",
"description": "Database Studio API Server",
"main": "index.ts",
"scripts": {},
"dependencies": {
"zod": "4"
},
"devDependencies": {
"@elide-dev/types": "1.0.0-beta10"
}
}
Binary file added packages/cli/src/db-studio/api/.dev/elide.lock.bin
Binary file not shown.
22 changes: 22 additions & 0 deletions packages/cli/src/db-studio/api/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import type { DiscoveredDatabase } from "./database.ts";

/**
* Database Studio Configuration
*
* This is a sample configuration file. In production, this would be
* generated by DbStudioCommand.kt based on discovered databases.
*/

const config = {
port: 4984,
databases: [
{
path: "./sample.db",
name: "sample.db",
size: 0,
lastModified: Date.now(),
}
] as DiscoveredDatabase[],
};

export default config;
Loading
Loading