Skip to content

Commit b941d8c

Browse files
committed
docs(website): publish v0.9.6 and NoSQL plugin community blog posts
1 parent 9f4f82c commit b941d8c

6 files changed

Lines changed: 160 additions & 6 deletions

File tree

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
title: "Tabularis Goes NoSQL: Redis Ships, MongoDB and ClickHouse Need You"
3+
date: "2026-03-07"
4+
tags: ["nosql", "plugins", "community", "redis", "open-source", "extensibility"]
5+
excerpt: "The plugin ecosystem is growing beyond SQL. Two Redis drivers have already shipped thanks to community contributors. Now we need experts to push DuckDB, MongoDB, and ClickHouse across the finish line."
6+
og:
7+
title: "Tabularis Goes NoSQL:"
8+
accent: "Redis Ships, More Coming."
9+
claim: "Two Redis drivers shipped by the community. DuckDB, MongoDB, and ClickHouse need your expertise."
10+
image: "/img/screenshot-9.png"
11+
---
12+
13+
# Tabularis Goes NoSQL: Redis Ships, MongoDB and ClickHouse Need You
14+
15+
When I shipped the plugin system in v0.9.0, the promise was simple: you should not need to wait for us to support your database. Build a driver, list it in the registry, and Tabularis users can use it today. That promise is being kept — and the NoSQL world is where the community has moved fastest.
16+
17+
## Redis: Two Independent Drivers, Both Excellent
18+
19+
Redis is the first NoSQL database to land in the official plugin registry, and it arrived not once but **twice** — two independent implementations from two different contributors, each with a distinct design philosophy.
20+
21+
### Redis (Go)
22+
23+
The first Redis driver comes from [@gzamboni](https://github.com/gzamboni) and is written in Go. It models Redis as a set of **virtual tables**: Strings, Hashes, Lists, Sets, and ZSets each get their own tab in the Tabularis data grid. Write operations — SET, HSET, LPUSH, and the rest — are available directly from the UI without dropping to a terminal. If your team uses Redis as a primary data store and you want a visual interface for daily operations, this is the driver to reach for.
24+
25+
:::plugin redis:::
26+
27+
### Redis (Rust)
28+
29+
The second implementation comes from [@nicholas-papachriston](https://github.com/nicholas-papachriston) and takes a different approach. Written in Rust, it focuses on **Hash and RedisJSON row storage** — treating Redis keys as structured records rather than raw key-value pairs. If you store JSON documents in Redis and want to query and browse them like rows in a table, this driver fits more naturally.
30+
31+
:::plugin redis-rust:::
32+
33+
Two drivers for the same database is not redundancy — it is a sign that the plugin system is working as intended. Different use cases, different mental models, different implementations. Users can pick the one that matches how they use Redis.
34+
35+
## The Next Frontier: DuckDB, MongoDB, and ClickHouse
36+
37+
Redis proved the model. Now the ecosystem needs to grow into the rest of the NoSQL and analytical space. Three databases are in active development, and all three could use experienced contributors.
38+
39+
### DuckDB
40+
41+
DuckDB is the reference plugin — the first one we ever shipped — but being first does not mean it is finished. The current driver covers the basics: open a local `.db` file, run queries, browse results. What it does not yet handle well: **in-memory databases**, **Parquet and Arrow file sources** passed directly as connection targets, deeper **type fidelity** for DuckDB-native types like `HUGEINT`, `MAP`, and `UNION`, and **ATTACH/DETACH** multi-database workflows. If you know DuckDB internals and want to make the Tabularis integration best-in-class, the codebase is a Rust project with a clean JSON-RPC interface.
42+
43+
:::plugin duckdb:::
44+
45+
### MongoDB
46+
47+
MongoDB is the most-requested NoSQL database on the issue tracker. A driver is in development but has not yet reached a releasable state. The core challenge is the impedance mismatch: MongoDB documents are schema-less and deeply nested, while Tabularis renders data in a tabular grid. Solving this well — flattening documents intelligently, handling arrays, surfacing the right projection controls in the UI — requires someone who has built against the MongoDB wire protocol before.
48+
49+
If you have experience with the MongoDB Rust driver, the Node.js driver, or the Go official driver, and you want to bring full MongoDB support to Tabularis, [open a discussion on GitHub](https://github.com/debba/tabularis) or reach out directly. The JSON-RPC protocol is documented in the [Plugin Guide](https://github.com/debba/tabularis/blob/main/plugins/PLUGIN_GUIDE.md) and a skeleton implementation is included to get you started quickly.
50+
51+
### ClickHouse
52+
53+
The ClickHouse plugin landed in the registry at v0.1.0 — it connects, authenticates, and runs queries. That is a foundation, not a finished product. ClickHouse has a rich type system (tuples, maps, nested arrays, nullable variants), a native HTTP and binary protocol, and features like **distributed tables**, **materialized views**, and **TTL policies** that deserve first-class representation in the UI. The driver today exposes none of that.
54+
55+
If you work with ClickHouse at scale and know what a power user actually needs from a GUI client, the v0.1.0 driver is a starting point. Help shape what v1.0 looks like.
56+
57+
:::plugin clickhouse:::
58+
59+
## How to Contribute
60+
61+
The plugin protocol is language-agnostic. MongoDB contributors have used Go, Rust, Python, and Node.js in existing plugins — pick the runtime you are most productive in. What matters is the JSON-RPC 2.0 interface over stdin/stdout.
62+
63+
Start here:
64+
65+
1. Read the **[Plugin Guide](https://github.com/debba/tabularis/blob/main/plugins/PLUGIN_GUIDE.md)** — covers the full protocol, manifest format, and type system.
66+
2. Clone an existing plugin as a reference. The [DuckDB plugin](https://github.com/debba/tabularis-duckdb-plugin) (Rust) and the [CSV plugin](https://github.com/debba/tabularis-csv-plugin) (Python) are both intentionally simple and well-commented.
67+
3. Open an issue or discussion on the [main repo](https://github.com/debba/tabularis) before starting, so we can coordinate and avoid duplicate work.
68+
69+
The Redis contributions showed what happens when someone with domain expertise builds for their own use case: two production-quality drivers shipped in a matter of weeks. DuckDB, MongoDB, and ClickHouse deserve the same treatment. If you have the expertise, we have the platform.
70+
71+
:::contributors:::
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
title: "Smarter Filters, Close Tab, and a Better Plugin Install: v0.9.6"
3+
date: "2026-03-07"
4+
release: "v0.9.6"
5+
tags: ["release", "filters", "plugins", "ux", "bugfix"]
6+
excerpt: "v0.9.6 ships a structured filter toolbar with ORDER BY autocomplete, a close-tab keyboard shortcut, a cleaner plugin install error experience, and a handful of focused bug fixes."
7+
og:
8+
title: "Smarter Filters,"
9+
accent: "v0.9.6."
10+
claim: "Structured filter toolbar, ORDER BY autocomplete, close-tab shortcut, and a cleaner plugin install flow."
11+
image: "/img/screenshot-9.png"
12+
---
13+
14+
# Smarter Filters, Close Tab, and a Better Plugin Install: v0.9.6
15+
16+
**v0.9.6** focuses on the day-to-day editing experience: a structured filter toolbar that handles the common filtering case without writing SQL, ORDER BY autocomplete in the toolbar, a close-tab keyboard shortcut, and a plugin install error modal that finally tells you what went wrong.
17+
18+
---
19+
20+
## Structured Filter Toolbar and ORDER BY Autocomplete
21+
22+
The table toolbar has grown two new capabilities that make filtering and sorting larger datasets faster without writing raw SQL.
23+
24+
### Structured Filter UI
25+
26+
The filter toolbar now supports **structured filter expressions** — column, operator, and value entered as discrete fields rather than as a typed WHERE clause. The column list is autocompleted from the schema; operators adapt to the column type (text gets `=`, `!=`, `LIKE`, `NOT LIKE`; numbers and dates get the full comparison set). Multiple filters chain with AND by default.
27+
28+
This does not replace the ability to type a raw WHERE clause — the raw input is still there for complex predicates. The structured mode handles the common case of "show me rows where status = active and created_at > last week" without requiring SQL knowledge.
29+
30+
### ORDER BY Autocomplete
31+
32+
The ORDER BY field in the toolbar now autocompletes column names from the current table or query result. Start typing a column name and a dropdown narrows the list. Selecting a column appends `ASC` by default; a toggle switches it to `DESC`. Compound sorts across multiple columns are supported.
33+
34+
---
35+
36+
## Close Tab Keyboard Shortcut
37+
38+
The editor tab bar now responds to a close-tab shortcut:
39+
40+
| Platform | Shortcut |
41+
| :--- | :--- |
42+
| macOS | `⌘+W` |
43+
| Windows / Linux | `Ctrl+W` |
44+
45+
If the tab has unsaved query changes, a confirmation prompt appears before closing. If the content is clean, the tab closes immediately. The shortcut is rebindable from **Settings → Keyboard Shortcuts** like all other custom bindings.
46+
47+
---
48+
49+
## Plugin Install Error Modal
50+
51+
Until now, a failed plugin installation was silent — the progress spinner would stop and the registry panel would return to idle with no indication of what went wrong. v0.9.6 adds a dedicated **Install Error modal** that surfaces the full error output from the installer.
52+
53+
If a download times out, an asset hash mismatches, or the archive is malformed, you now see the exact error message and which step failed. The modal includes a copy button for sharing the log when opening an issue. Installer logging is also more detailed internally, so the stack trace reaching the modal is actionable rather than a generic failure code.
54+
55+
---
56+
57+
## Bug Fixes
58+
59+
### Connection Dialog: Autocomplete and Autocorrect Disabled
60+
61+
Browser and OS autocomplete surfaces were interfering with connection form inputs — particularly the host, port, username, and database fields. On macOS, autocorrect was silently mangling hostnames. Both issues are fixed:
62+
63+
- `autoComplete="off"` is now set on all connection dialog inputs, preventing browser credential and history suggestions from appearing.
64+
- The macOS `autoCorrect`, `autoCapitalize`, and `spellCheck` attributes are disabled on the same fields.
65+
66+
### Website: Badge Image CSP Rule Scoped to shields.io
67+
68+
A Content Security Policy rule for badge images was written too broadly, allowing any external image source where only `shields.io` badge URLs are used. The rule is now scoped to `shields.io` specifically.
69+
70+
---
71+
72+
:::contributors:::
73+
74+
---
75+
76+
_v0.9.6 is available now. Update via the in-app updater, or download from the releases page._

website/next-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// <reference types="next" />
22
/// <reference types="next/image-types/global" />
3-
import "./.next/types/routes.d.ts";
3+
import "./.next/dev/types/routes.d.ts";
44

55
// NOTE: This file should not be edited
66
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

website/src/app/globals.css

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,7 +1739,7 @@ pre {
17391739
text-decoration: none;
17401740
color: var(--text-bright);
17411741
transition: border-color 0.15s, background 0.15s, transform 0.15s;
1742-
min-width: 88px;
1742+
width: 100px;
17431743
}
17441744

17451745
.contributor-item:hover {
@@ -1749,12 +1749,16 @@ pre {
17491749
color: var(--accent);
17501750
}
17511751

1752-
.contributor-avatar {
1752+
.contributor-avatar,
1753+
.post-content .contributor-avatar {
17531754
width: 52px;
17541755
height: 52px;
1755-
border-radius: 50%;
1756+
border-radius: 8px;
17561757
border: 2px solid var(--border);
17571758
display: block;
1759+
object-fit: cover;
1760+
margin: 0;
1761+
box-shadow: none;
17581762
transition: border-color 0.15s;
17591763
}
17601764

@@ -1767,6 +1771,9 @@ pre {
17671771
font-size: 0.75rem;
17681772
font-weight: 500;
17691773
white-space: nowrap;
1774+
overflow: hidden;
1775+
text-overflow: ellipsis;
1776+
max-width: 100%;
17701777
}
17711778

17721779
/* SEARCH OVERLAY */

website/src/lib/posts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ function renderContributorsHtml(usernames: string[], release?: string): string {
156156
.map(
157157
(u) =>
158158
`<a class="contributor-item" href="https://github.com/${u}" target="_blank" rel="noopener noreferrer">` +
159-
`<img src="https://github.com/${u}.png?size=64" alt="${u}" class="contributor-avatar" />` +
159+
`<img src="https://github.com/${u}.png?size=64" alt="${u}" class="contributor-avatar" width="52" height="52" />` +
160160
`<span class="contributor-name">@${u}</span>` +
161161
`</a>`,
162162
)

0 commit comments

Comments
 (0)