🗄️ MariaDB/MySQL Editor
Browse databases, view and edit table data, manage columns, indexes, and triggers — all from your browser
Overview
WolfStack includes a built-in MariaDB/MySQL database editor — a Navicat-style tool that lets you connect to any MariaDB or MySQL server, browse databases and tables, view and edit data, inspect table structure, manage indexes and triggers, and run arbitrary SQL queries.
The editor connects through the WolfStack API, so it works with local databases on the same server as well as remote databases accessible over WolfNet or your network. No additional software or drivers are needed.
🔌 Connecting to a Database
Click "MariaDB/MySQL" in the sidebar to open the editor. The connection bar at the top lets you enter your credentials:
| Field | Description | Default |
|---|---|---|
| Host | Hostname or IP of the MySQL/MariaDB server | 127.0.0.1 |
| Port | MySQL port number | 3306 |
| User | MySQL username | root |
| Password | MySQL password | (empty) |
Auto-Detection
WolfStack automatically scans for:
- Local installations — detects if
mysqlormariadbis installed on the system - Docker containers — finds running Docker containers with MySQL or MariaDB images and pre-fills connection details
Detected databases appear as clickable badges in the connection bar, so you can connect with one click.
🌳 Database Browser
Once connected, the left panel shows a tree of all databases and their tables.
System databases (information_schema, mysql,
performance_schema, sys) are shown but collapsed by default.
- Click a database name to expand it and see its tables
- Click a table name to load its data in the main panel
- The table count is shown next to each database name
📑 Editor Tabs
The main panel has three tabs:
📊 Data
View and browse table data in a scrollable grid. Shows row count and supports pagination for large tables. Columns are sized to fit their content.
🏗️ Structure
Inspect and modify the table schema. Has sub-tabs for Columns, Indexes, and Triggers with full management capabilities.
⚡ Query
Write and execute arbitrary SQL queries. Results are displayed in a table grid. Supports SELECT, INSERT, UPDATE, DELETE, and DDL statements.
🏗️ Structure Tab
The Structure tab provides a detailed view of your table's schema, organized into three sub-tabs:
📋 Columns
Lists all columns in the table with their properties:
| Property | Description |
|---|---|
| Name | Column name |
| Type | Data type (e.g. varchar(255), int(11),
datetime)
|
| Nullable | Whether the column allows NULL values |
| Key | Key type — PRI (primary), UNI (unique), MUL (index) |
| Default | Default value for the column |
| Extra | Additional attributes (e.g. auto_increment,
on update CURRENT_TIMESTAMP)
|
The Columns sub-tab also includes a toolbar for managing columns and the table itself:
- ➕ Add Column — opens a dialog to define a new column (name, type, nullable, default value)
- ✏️ Rename Table — rename the current table
- 🗑️ Drop Column — remove a column from the table (with confirmation)
🔑 Indexes
Lists all indexes on the table, grouped by index name. For each index you can see:
- Name — the index name (e.g.
PRIMARY,idx_email) - Columns — which columns are included in the index, in order
- Type — the index algorithm (BTREE, HASH, FULLTEXT)
- Unique — whether the index enforces uniqueness (PRIMARY, UNIQUE badges)
Index management actions:
- ➕ Add Index — create a new INDEX, UNIQUE, or FULLTEXT index. Enter the index name and comma-separated column list.
- 🗑️ Drop Index — remove an index (with destructive confirmation dialog). The PRIMARY key cannot be dropped from this interface.
⚡ Triggers
Lists all triggers defined on the current table. For each trigger:
- Name — the trigger name
- Timing — BEFORE or AFTER (shown as coloured badges)
- Event — INSERT, UPDATE, or DELETE
- Statement — the trigger body (SQL code that runs when the trigger fires)
Trigger management actions:
- ➕ Add Trigger — create a new trigger with a dialog that lets you set the name, timing (BEFORE/AFTER), event (INSERT/UPDATE/DELETE), and write the SQL body
- 🗑️ Drop Trigger — remove a trigger (with destructive confirmation dialog)
Name: trg_update_timestamp
Timing: BEFORE
Event: UPDATE
Body:
BEGIN
SET NEW.updated_at = NOW();
END
⚡ Query Tab
The Query tab provides a SQL editor where you can write and execute any SQL statement. Results are displayed in a table grid below the editor.
- Write
SELECTqueries to browse data with custom filters and joins - Run
INSERT,UPDATE, andDELETEstatements - Execute DDL statements like
CREATE TABLE,ALTER TABLE, etc. - Results show column names and row data in a scrollable grid
- Non-SELECT queries show the number of affected rows
-- Browse data with a filter
SELECT * FROM users WHERE created_at > '2026-01-01' ORDER BY id DESC LIMIT 100;
-- Check table sizes
SELECT table_name, table_rows, ROUND(data_length/1024/1024, 2) AS size_mb
FROM information_schema.TABLES
WHERE table_schema = 'mydb'
ORDER BY data_length DESC;
-- Create an index
CREATE INDEX idx_email ON users(email);
-- Add a column
ALTER TABLE orders ADD COLUMN tracking_number VARCHAR(50) AFTER status;
🛡️ Safety Features
All destructive operations (dropping columns, indexes, triggers, renaming tables) require a
confirmation dialog where you must type YES to proceed. The dialog
shows the exact SQL statement that will be executed, so you can verify the operation before
confirming.
This prevents accidental data loss and gives you full visibility into what the editor is doing behind the scenes.
🔧 Compatibility
The MariaDB/MySQL editor works with:
- MariaDB 10.x and 11.x (recommended)
- MySQL 5.7 and 8.x
- Percona Server 5.7 and 8.x
- Amazon RDS (MySQL and Aurora)
The editor uses standard SQL and information_schema queries, so it's compatible
with any MySQL-protocol database. WolfStack connects using the
mysql_async Rust crate with full TLS support.
📡 API Endpoints
The MariaDB/MySQL editor uses the following API endpoints. All require authentication.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/mysql/connect |
Test connection to a MySQL/MariaDB server |
| POST | /api/mysql/databases |
List all databases on the server |
| POST | /api/mysql/tables |
List tables in a database |
| POST | /api/mysql/data |
Fetch paginated table data |
| POST | /api/mysql/query |
Execute an arbitrary SQL query |
All endpoints accept a JSON body with connection credentials (host,
port, user, password) plus endpoint-specific parameters
like database, table, or query.
🔧 Troubleshooting
Connection refused
Make sure MySQL/MariaDB is running and listening on the specified host and port. For local
connections, use 127.0.0.1 instead of localhost to force TCP
connection (MySQL defaults to socket when using localhost).
Access denied
Verify the username and password are correct. Check that the user has permission to connect from the WolfStack server's IP address:
-- Check user permissions
SELECT user, host FROM mysql.user WHERE user = 'myuser';
-- Grant access from any host (if needed)
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Connection timeout
Connections have a 20-second timeout. If the database is on a remote server, check that:
- The MySQL port (default 3306) is open in the firewall
- The server is reachable from the WolfStack node
- MySQL's
bind-addressallows connections from the WolfStack server
# Check if MySQL is listening on all interfaces
sudo grep bind-address /etc/mysql/mariadb.conf.d/50-server.cnf
# Test connectivity
nc -zv 192.168.1.50 3306
Docker MySQL not detected
The auto-detection looks for running Docker containers with images containing "mysql" or "mariadb". Make sure the container is running and Docker is accessible to the WolfStack process.