Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
5999f1c
fix(query): route results to origin tab, report affected rows, cancel…
Sep 17, 2026
a023271
feat(stability): file logging, crash reports, session restore, unsave…
Sep 17, 2026
95b6395
perf(ui): run all ad-hoc queries off the UI thread; honest pagination
Sep 17, 2026
318d4e0
feat(dx): shortcut registry, jump to SQL error, consistent notifications
Sep 17, 2026
640de72
chore: tighten lints, CI matrix, repo hygiene, extract query job state
Sep 17, 2026
8c1904e
refactor: redesign account dialog UI, apply initial theme on startup,…
Sep 17, 2026
9ef150b
feat: introduce unified search and vector indexing modules for improv…
Sep 17, 2026
b4d056f
upgrade version 0.18.3
Sep 18, 2026
0674d50
feat: add built-in Model Context Protocol (MCP) server for AI agents …
Sep 18, 2026
ca966e9
refactor: redesign account profile dialog and handle server authentic…
Sep 18, 2026
0d0bf39
fix: prevent browser hang after successful auth by draining remaining…
Sep 18, 2026
c972c7c
refactor: remove sync server URL display from login UI
Sep 18, 2026
18c78d2
ok AGY
Sep 18, 2026
37b0f8c
feat: disable AI CLI backend in Mac App Store builds due to App Sandb…
Sep 18, 2026
05106b4
refactor: apply code formatting across UI window components and add p…
Sep 18, 2026
cf714db
feat: add AI assistant UI styling helpers, schema badge caching, and …
Sep 18, 2026
81885cf
feat: add Obsidian vault integration for AI memory with MCP tools and…
Sep 18, 2026
7d5b0b5
refactor: standardize text input fields to use style::render_text_field
Sep 18, 2026
222d5ae
feat: implement SQL autocomplete engine with analyzer, lexer, and met…
Sep 18, 2026
915b5a4
refactor: extract table header and cell styling to style module and f…
Sep 18, 2026
10db2f6
feat: add Mermaid ER diagram generation for database schemas and upda…
Sep 18, 2026
d56deaa
feat: add relation diagrams and asynchronous column details fetching …
Sep 18, 2026
523460c
refactor: format code and pass column comments in plugin schema extra…
Sep 18, 2026
1da9716
feat: implement database-backed diagram metadata storage and synchron…
Sep 18, 2026
17c02d7
feat: improve diagram zoom handling, add centering helper, and redesi…
Sep 18, 2026
dfd04e2
refactor: adjust MIN_ZOOM and MAX_ZOOM constants in diagram view
Sep 18, 2026
bce9ca4
feat: improve table relation suggestions using column name similarity…
Sep 18, 2026
a68b2dc
feat: implement server diagram synchronization and add tables modal
Sep 18, 2026
6219e2b
refactor: modularize diagram components and standardize modal dialog …
Sep 18, 2026
5c227ba
feat: overhaul keyboard shortcuts modal UI and add avatar management …
Sep 18, 2026
4129629
feat: introduce agent progress tracking and step execution reporting
Sep 19, 2026
3d38961
feat: add query execution tracking and enhance result rendering state…
Sep 19, 2026
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
4 changes: 2 additions & 2 deletions .SRCINFO
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pkgbase = tabular
pkgdesc = SQL and NoSQL database client
pkgver = 0.18.0
pkgver = 0.18.1
pkgrel = 1
url = https://github.com/tabular-id/tabular
arch = x86_64
Expand All @@ -21,7 +21,7 @@ pkgbase = tabular
depends = atk
depends = hicolor-icon-theme
depends = sqlite
source = tabular-0.18.0.tar.gz::https://github.com/tabular-id/tabular/archive/refs/tags/v0.18.0.tar.gz
source = tabular-0.18.1.tar.gz::https://github.com/tabular-id/tabular/archive/refs/tags/v0.18.1.tar.gz
sha256sums = SKIP

pkgname = tabular
4 changes: 0 additions & 4 deletions .env

This file was deleted.

11 changes: 11 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Salin ke .env untuk pengembangan lokal. File .env tidak di-commit.

# Level log env_logger, mis. "info", "debug", atau "tabular=debug".
# Kosongkan untuk memakai default aplikasi (info; bisa diubah di Settings).
# RUST_LOG=debug

# Paksa pemakaian OS keychain untuk secret di build debug (lihat src/secrets.rs).
TABULAR_FORCE_KEYRING=1

# Cetak timing startup di build release.
# TABULAR_DEBUG_STARTUP=1
44 changes: 35 additions & 9 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,45 @@ on:
pull_request:
branches: [ "main" ]

concurrency:
group: rust-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always

jobs:
build:

# Format belum diterapkan ke seluruh kode lama; job ini informatif sampai
# repo diformat sekali dengan `cargo fmt` (lalu hapus continue-on-error).
fmt:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Check formatting
run: cargo fmt --all --check

check:
name: check (${{ matrix.os }})
runs-on: ${{ matrix.os }}
# Windows belum diverifikasi di CI; kegagalannya tidak memblokir PR.
continue-on-error: ${{ matrix.os == 'windows-latest' }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
- name: Run clippy
run: cargo clippy -- -D warnings
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Clippy (default features)
run: cargo clippy --all-targets -- -D warnings
- name: Clippy (collab feature)
run: cargo clippy --all-targets --features collab -- -D warnings
- name: Tests
run: cargo test
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
target/
target/*
patches/**/Cargo.lock
data/connections.db
data/connections copy.db
.vscode/
Expand All @@ -16,7 +17,6 @@ flatpak/cargo-vendor
flatpak/repo
.claude
.agents
Cargo.lock
.idea

# Databases and logs
Expand All @@ -33,4 +33,7 @@ build/
*.xcuserstate
xcuserdata/
DerivedData/
.agent
.agent

# Local environment (see .env.example)
.env
64 changes: 64 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Working on Tabular with an AI coding agent

This file is read by Claude Code, Codex, Cursor and similar tools. Keep it short and factual.

## What this is

Tabular is a native desktop SQL/NoSQL client in Rust (`eframe`/`egui`), single crate, about
115k lines. Drivers: PostgreSQL, MySQL, SQLite, SQL Server, Redis, MongoDB. It also ships an
MCP server for agents (`tabular mcp`, see `docs/MCP.md`).

## Commands

```bash
cargo check # fast compile check
cargo clippy --all-targets -- -D warnings # CI gate, must be clean
cargo clippy --all-targets --features collab -- -D warnings
cargo test # unit + integration tests
cargo test --lib agent:: # only the agent / MCP layer
cargo run -- mcp --print-config # MCP config snippet
```

CI runs on ubuntu, macos and windows (`.github/workflows/rust.yml`). `cargo fmt` is not yet
enforced on the whole tree; format only the files you touch.

## Layout

| Area | Path | Notes |
|---|---|---|
| Entrypoint | `src/lib.rs` (`run()`), `src/main.rs` | CLI dispatch happens before eframe starts |
| App state / UI | `src/window_egui/` (`Tabular` struct in `app_impl.rs`) | Most GUI functions take `&mut Tabular` |
| Editor | `src/editor*.rs`, `src/query_tools/` | Statement parser, formatter, lints |
| Connections & execution | `src/connection/` | `pool.rs` builds pools (SSH/TLS), `execute.rs` runs `QueryJob`s |
| Drivers | `src/driver_*.rs` | Per-database metadata fetching |
| Local cache | `connections.db` (SQLite) via `src/sidebar_database.rs`, `src/cache_data.rs` | Tables: `connections`, `table_cache`, `column_cache`, `foreign_key_cache`, `query_history` |
| Secrets | `src/secrets.rs` | OS keychain, encrypted-file fallback |
| AI assistant (in-app) | `src/ai_assistant.rs`, `src/vector_index.rs` | Local feature-hash embeddings via sqlite-vec |
| Agent / MCP layer | `src/agent/` | Headless; must never depend on `window_egui` |
| Sync / collab | `src/sync/` | E2E encrypted vault; `collab` feature is optional |
| Plugins | `src/plugin_runtime/` | Wasm plugins via `wasmi` |

## Conventions

- Code comments and doc comments are written in **Bahasa Indonesia**; UI strings and
user-facing docs are in **English**.
- Errors: `thiserror` enums per domain (`QueryExecutionError`, `AgentError`). Do not
`unwrap()` on I/O or network paths.
- Logging: `log::{debug,info,warn,error}!` with a bracket tag, e.g. `log::warn!("[AGENT] ...")`.
- Headless code (anything an agent or a test calls) takes plain data (`&ConnectionConfig`,
`&SqlitePool`), never `&mut Tabular`. See `src/export_import_all.rs::export_all_data_payload`
and `src/agent/core.rs` for the pattern.
- Tests: unit tests inline under `#[cfg(test)]`; integration tests in `tests/`. SQLite
in-memory pools are the preferred fixture (see `src/connection/execute.rs` tests).
- Lints allowed globally: `collapsible_if`, `too_many_arguments`, `type_complexity`. Everything
else must pass `clippy -D warnings`.
- Never serialize `ConnectionConfig` towards an agent or a network peer; it carries secrets.

## Things that bite

- `libsqlite3-sys` is pinned to 0.37 with `bundled`; `sqlite-vec` links against it. Do not
add a second SQLite.
- `mssql-client` is pre-1.0 and pinned to 0.20.x.
- iOS builds the crate as a `staticlib`; gate anything that needs stdio, processes or
file dialogs with `#[cfg(not(target_os = "ios"))]`.
- The GUI and `tabular mcp` may run concurrently against the same `connections.db` (WAL).
Loading
Loading