A Midnight Commander-style TUI (Terminal User Interface) for managing GeoServer instances. Browse local geospatial files and upload them to GeoServer with ease.
- Dual-panel interface - Local filesystem on the left, GeoServer explorer on the right
- Connection manager - Store and manage multiple GeoServer connections with credentials
- Geospatial file detection - Automatically identifies Shapefiles, GeoPackage, GeoTIFF, GeoJSON, SLD, and CSS files
- GeoServer hierarchy browser - Navigate workspaces, data stores, coverage stores, layers, styles, and layer groups
- Upload support - Upload local files to GeoServer and publish as services with progress tracking
- CRUD operations - Create, edit, and delete workspaces, data stores, and coverage stores
- Layer preview - Built-in MapLibre web viewer with WMS/WFS support, attribute viewing, and metadata display
- Animated dialogs - Smooth spring-based animations using Harmonica physics
- Vim-style navigation - Use familiar j/k keys for navigation
- Modern React interface - Beautiful Chakra UI-based web application
- Tree browser - Hierarchical view of all GeoServer resources
- Layer metadata editing - Comprehensive metadata management including title, abstract, keywords, and attribution
- GeoWebCache management - Seed, reseed, and truncate cached tiles with real-time progress
- Map preview - Interactive map preview with WMS/WMTS support
- Server synchronization - Replicate resources between GeoServer instances with animated UI
nix run github:kartoza/kartoza-geoserver-clientgit clone https://github.com/kartoza/kartoza-geoserver-client.git
cd kartoza-geoserver-client
go build -o geoserver-client .
./geoserver-clientnix develop # Enter development shell
go run . # Run the TUI applicationnix develop # Enter development shell
go run . web # Run the web server on port 8080Or visit http://localhost:8080 after starting the web server.
| Key | Action |
|---|---|
Tab |
Switch between panels |
? / F1 |
Toggle help |
q / Ctrl+C |
Quit |
| Key | Action |
|---|---|
↑ / k |
Move up |
↓ / j |
Move down |
Enter / l |
Open / Expand |
Backspace / h |
Go back / Collapse |
PgUp / PgDn |
Page up / down |
Home / End |
Go to start / end |
| Key | Action |
|---|---|
Space |
Select file |
i |
View resource information |
c |
Open connection manager |
u |
Upload selected files |
r |
Refresh current view |
| Key | Action |
|---|---|
a |
Add new connection |
e |
Edit connection |
d |
Delete connection |
t |
Test connection |
Enter |
Connect to selected |
| Key | Action |
|---|---|
n |
Create new item (workspace, store) |
e |
Edit/rename selected item |
d |
Delete selected item |
o |
Preview layer in browser |
When creating or editing a workspace, a wizard provides access to:
- Basic Info - Workspace name, default workspace option, isolated workspace option
- Services - Toggle which OGC services are enabled for this workspace (WMTS, WMS, WCS, WPS, WFS)
- Settings - Enable/disable workspace-specific settings
When editing a layer (press e on a layer), you can configure:
- Enabled - Whether the layer is enabled for service requests
- Advertised - Whether the layer appears in GetCapabilities documents
- Queryable - Whether the layer supports GetFeatureInfo (vector layers only)
When editing a data store or coverage store, you can configure:
- Name - The store name
- Enabled - Whether the store is enabled
- Description - Optional description
These settings match the options available in the GeoServer web admin interface.
When creating a data store or coverage store, a wizard guides you through:
- Type Selection - Choose the store type (PostGIS, Shapefile Directory, GeoPackage, etc.)
- Configuration - Enter the required connection parameters for your chosen type
Supported Data Store Types:
- PostGIS - Connect to PostgreSQL/PostGIS databases
- Directory of Shapefiles - Reference a folder containing shapefiles
- GeoPackage - Connect to GeoPackage files
- Web Feature Service (WFS) - Connect to external WFS services
Supported Coverage Store Types (Raster):
- GeoTIFF - Single GeoTIFF raster file
- World Image - PNG/JPEG/GIF with world file (.pgw, .jgw, .gfw)
- Image Mosaic - Directory of images forming a mosaic
- Image Pyramid - Multi-resolution image pyramid
- ArcGrid - ESRI ASCII Grid format (.asc)
- GeoPackage (Raster) - Raster tiles in GeoPackage format
| Key | Action |
|---|---|
j / k |
Navigate between fields |
Enter |
Edit field / Accept value |
Esc |
Cancel edit / Go back |
Ctrl+S |
Save form |
Press o on any layer in the GeoServer tree to open an interactive map preview in your browser. The preview includes:
- MapLibre GL - Hardware-accelerated WebGL map rendering with OpenStreetMap basemap
- WMS layer overlay - Displays the layer via GeoServer's WMS service
- Feature query - Click on vector layers to view feature attributes
- Metadata panel - View layer details, workspace, and service endpoints
- Attributes table - Browse feature attributes for vector layers
Replicate GeoServer configurations between instances. Access via Settings (gear icon) > "Sync Server(s)":
- Select Source - Choose the source GeoServer (read-only) from the left panel
- Add Destinations - Drag or select destination servers to the right panel
- Configure Options - Select which resources to sync:
- Workspaces
- Data Stores
- Coverage Stores
- Layers
- Styles
- Layer Groups
- Start Sync - Click the sync button to begin replication
- Monitor Progress - Watch real-time progress with animated indicators
- Save Configuration - Save sync setups for easy reloading
Features:
- Animated UI - Visual feedback with pulsing icons and flowing arrows
- Real-time progress - Per-destination progress bars and activity logs
- Stop controls - Stop individual syncs or all at once
- Additive sync - Only adds or updates missing resources (non-destructive)
Manage tile caching for optimal performance:
- Seed - Pre-generate cached tiles for faster access
- Reseed - Regenerate existing cached tiles
- Truncate - Clear cached tiles to free storage
- Progress monitoring - Track seeding operations in real-time
Edit comprehensive layer metadata:
- Title, abstract, and keywords
- Attribution information
- Coordinate reference systems
- Bounding boxes
- Service endpoint configuration
Configuration is stored in ~/.config/kartoza-geoserver-client/config.json:
{
"connections": [
{
"id": "uuid",
"name": "My GeoServer",
"url": "https://geoserver.example.com/geoserver",
"username": "admin",
"password": "geoserver"
}
],
"active_connection": "uuid",
"last_local_path": "/home/user/geodata",
"sync_configs": [
{
"id": "sync-uuid",
"name": "Production to Staging",
"source_id": "uuid",
"destination_ids": ["dest-uuid-1", "dest-uuid-2"],
"options": {
"workspaces": true,
"datastores": true,
"coveragestores": true,
"layers": true,
"styles": true,
"layergroups": true
},
"created_at": "2024-01-15T10:30:00Z"
}
]
}| Type | Extensions | Upload Target |
|---|---|---|
| Shapefile | .shp, .zip |
Data Store |
| GeoPackage | .gpkg |
Data Store |
| GeoTIFF | .tif, .tiff |
Coverage Store |
| GeoJSON | .geojson, .json |
Data Store |
| SLD Style | .sld |
Styles |
| CSS Style | .css |
Styles |
This client uses the GeoServer REST API for all operations. Ensure your GeoServer instance has the REST API enabled and your user has appropriate permissions.
- Read access to workspaces, stores, layers, and styles
- Write access for uploading data and creating resources
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Bubble Tea - A powerful TUI framework
- Styled with Lip Gloss - Style definitions for terminal apps
- Animated with Harmonica - Physics-based animations
- Map preview with MapLibre GL JS - Open-source WebGL map library
- Inspired by Midnight Commander