tabularis-plugin-driver
Use when creating or updating a Tabularis database driver plugin in Rust. Covers modern manifest fields, JSON-RPC over stdio, modular plugin layout, MySQL-level feature coverage targets, optional UI extensions, and validation against Tabularis repo rules.
pinned to #d6b894dupdated yesterday
Ask your AI client: “install skills/tabularis-plugin-driver”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/tabularis-plugin-drivermetahub onboarded this repo on the author's behalf.
If you own github.com/TabularisDB/tabularis on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
4,057
Last commit
yesterday
Latest release
published
- #ai-agent
- #ai-assistant
- #cross-platform
- #database-client
- #database-gui
- #database-tool
- #er-diagram
- #mariadb
- #mcp
- #mcp-server
- #mysql
- #postgresql
- #rust
- #sql
- #sql-editor
- #sql-notebook
- #sqlite
- #tauri
- #typescript
- #visual-query-builder
About this skill
Pulled from SKILL.md at publish time.
Use this skill when building or updating a database plugin for Tabularis.
Evaluation report
WarningsAutomated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.d6b894d· yesterday
Documentation
8 passed1 warningHomepage or repository declaredwarn
No homepage or repository declared.
Add a "homepage" or "repository" field to SKILL.md.
Description quality
35 words · 255 chars — "Use when creating or updating a Tabularis database driver plugin in Rust. Covers…"
README is present and substantial
25,605 chars · 15 sections · 12 code blocks
Tags / topics declared
20 total — ai-agent, ai-assistant, cross-platform, database-client, database-gui, database-tool (+14)
README has usage / example sections
found: Installation
Homepage / docs URL declared
https://tabularis.dev
Description is substantive
Description is 35 words.
Documentation present and substantive
Documentation present (SKILL.md, 1119 words).
Documentation shows usage
Documentation includes 1 code example.
Release history
1- releasecurrentd6b894dwarnyesterday
Contents
Use this skill when building or updating a database plugin for Tabularis.
The skill is optimized for this repository. Follow AGENTS.md, the files in .rules/, and the current plugin-system behavior in src-tauri/src/plugins/ and src/types/plugins.ts.
Goals
- Build a Rust plugin that speaks Tabularis JSON-RPC over stdin/stdout
- Use the modern plugin manifest, not the old minimal format
- Aim for broad feature coverage comparable to the built-in MySQL driver where the target database supports it
- Keep the plugin modular instead of concentrating logic in a single
main.rs - Add unit tests for pure utilities and SQL generation
Default Repo Layout
Prefer this structure for a new plugin repository:
plugin-root/
├── Cargo.toml
├── manifest.json
├── README.md
├── src/
│ ├── main.rs
│ ├── rpc.rs
│ ├── client.rs
│ ├── error.rs
│ ├── models.rs
│ ├── handlers/
│ │ ├── mod.rs
│ │ ├── metadata.rs
│ │ ├── query.rs
│ │ ├── crud.rs
│ │ └── ddl.rs
│ └── utils/
│ ├── mod.rs
│ ├── identifiers.rs
│ ├── values.rs
│ ├── types.rs
│ └── pagination.rs
├── src/bin/
│ └── test_plugin.rs
└── tests/ # only if integration tests are worth the overhead
Keep src/main.rs thin. It should mostly parse requests, dispatch methods, and serialize responses.
Required Research Before Coding
- Read the current plugin manifest shape in:
plugins/manifest.schema.jsonsrc/types/plugins.tssrc-tauri/src/plugins/manager.rs
- Read the JSON-RPC expectations in:
plugins/PLUGIN_GUIDE.mdsrc-tauri/src/plugins/driver.rssrc-tauri/src/plugins/rpc.rs
- Read a built-in driver with broad coverage to understand expected behaviors:
src-tauri/src/drivers/mysql/mod.rs
- Read plugin-loading behavior and modern feature flags in:
src/hooks/useDrivers.tssrc/utils/connectionStringParser.tssrc/utils/driverCapabilities.ts
Implementation Workflow
1. Define plugin scope
Decide which capabilities are truly supported by the target database and driver library:
schemasviewsroutinesfile_basedfolder_basedconnection_stringconnection_string_exampleidentifier_quotealter_primary_keyalter_columncreate_foreign_keysmanage_tablesreadonlyno_connection_required
Do not advertise support you cannot back with working handlers.
2. Create a modern manifest
At minimum define:
idnameversiondescriptiondefault_portexecutablecapabilitiesdata_typesdefault_usernamecoloricon
Use modern optional fields when useful:
settingsui_extensions
See references/manifest-checklist.md.
3. Build a modular RPC surface
Implement the request loop in main.rs, but move logic out immediately:
rpc.rs: request parsing, success/error helpers, method routing supportclient.rs: connection config, client creation, pooling or reuse key logichandlers/metadata.rs: databases, schemas, tables, columns, indexes, foreign keys, views, routineshandlers/query.rs:test_connection,ping,execute_query,count_query,explain_query_planif possiblehandlers/crud.rs:insert_record,update_record,delete_recordhandlers/ddl.rs: SQL generation helpers and DDL RPC methodsutils/*: quoting, escaping, value formatting, type normalization, pagination math
4. Target broad feature coverage
Use the built-in MySQL driver as the feature benchmark, not as text to copy.
For each feature area, classify it:
supported: implement fullypartially_supported: implement with explicit limitationsunsupported: return an accurate error or empty result as appropriate
Prioritize these methods:
test_connectionget_databasesget_schemasget_tablesget_columnsget_foreign_keysget_indexesget_viewsget_view_definitionget_view_columnsget_routinesget_routine_parametersget_routine_definitionexecute_queryinsert_recordupdate_recorddelete_recordget_schema_snapshotget_all_columns_batchget_all_foreign_keys_batchget_create_table_sqlget_add_column_sqlget_alter_column_sqlget_create_index_sqlget_create_foreign_key_sqldrop_indexdrop_foreign_key
If a method is not safe to emulate, fail explicitly instead of faking success.
Optional routine-management methods
When the manifest declares "routine_management": true, the host shows
run / create / edit / drop actions for routines. The backing RPC methods are
optional: if the plugin does not implement one, the host answers the
JSON-RPC "method not found" error (-32601) with a dialect-neutral fallback
(CALL name(args) / SELECT name(args), generic DROP, the raw definition
as edit script). Implement only what the dialect needs:
build_routine_call_sql({ params, routine_name, routine_type, args, schema }) -> string—argsis an ordered list of{ name, mode, value: string|null, is_raw: bool }; return an executable invocation script (it is opened in the editor, so multi-statement scripts are fine — e.g. MySQL'sSET @out/CALL/SELECT @out).routine_create_template({ routine_type, schema }) -> string— starter script for a new PROCEDURE/FUNCTION in the plugin's dialect.get_routine_edit_script({ params, routine_name, routine_type, schema }) -> string— re-runnable script to alter the routine (e.g.DROP+CREATE, orCREATE OR REPLACE).drop_routine({ params, routine_name, routine_type, schema }) -> null— drop the routine; resolve overloads yourself if the dialect has them.
5. Add settings only when they solve a real problem
Typical useful settings:
- DSN name
- driver/library path
- default schema
- TLS mode
- extra connection properties
Keep settings in the manifest and resolve them in a dedicated config path, not inline in handlers.
6. Add UI extensions only when the database needs them
Examples of good reasons:
- a custom connection helper for DSN-based setup
- an advanced settings panel for database-specific options
- contextual UI for unsupported-but-important caveats
Avoid UI extensions that only decorate the product without improving DB-specific workflows.
Testing Strategy
Always add unit tests for pure logic:
- identifier quoting
- SQL builders
- type normalization
- pagination helpers
- value serialization
- capability-driven helper decisions
Prefer pure utility modules so tests stay fast and deterministic.
If the plugin includes a JSON-RPC smoke binary like src/bin/test_plugin.rs, use it to simulate Tabularis requests over stdio.
Validation Checklist
Before finishing:
cargo testcargo build --release- smoke test at least one JSON-RPC request through stdin/stdout
- verify
manifest.jsonmatches current Tabularis schema and capabilities - verify any advertised capability has corresponding handler behavior
- verify unsupported operations return clear errors
Tabularis-Specific Rules
- Comments and docs must be in English
- Keep code split by responsibility; avoid a monolithic
main.rs - Add unit tests for extracted utility logic
- When updating this repo itself, follow
AGENTS.mdrequirements including GitNexus impact analysis before editing existing symbols - Use
pnpmfor frontend-side validation in this repo andcargofor plugin validation
Common Mistakes
- copying old plugin manifests that omit modern fields
- putting connection logic, SQL generation, RPC parsing, and metadata extraction in one file
- advertising
manage_tablesoralter_columnwithout implementing the related methods - returning fake empty success for operations that should surface unsupported behavior
- skipping tests for identifier quoting and SQL generation
References
- Manifest details: references/manifest-checklist.md
Reviews
No reviews yet. Be the first.
Related
Verification Before Completion
Evidence before assertions, always
Writing Plans
Turn specs into phased implementation plans
Test-Driven Development
Red → green → refactor discipline for any feature or bugfix
mh install skills/tabularis-plugin-driver