A personal information management system built in Go. Organize files, notes, and collections with rich metadata, full-text search, and a flexible tagging system — designed to scale to millions of resources.
![]() Dashboard |
![]() Resource Grid |
![]() Note Blocks |
![]() Group Tree |
![]() Global Search (Cmd/Ctrl+K) |
![]() Bulk Operations |
- Resources — Store and manage files with automatic thumbnail generation, perceptual hashing for duplicate/similarity detection, and version tracking
- Notes — Rich text content with structured block types and sharing capabilities
- Groups — Hierarchical collections with typed relationships between them
- Tags & Categories — Flexible labeling system across all entity types
- Full-Text Search — Fast search across all content with saved queries
- JSON Metadata — Attach queryable JSON metadata to any entity, with schema validation
- Bulk Operations — Tag, merge, delete, or update many items at once
- Plugin System — Extend functionality with Lua plugins, custom actions, and hooks
- Dual API — Every route serves both HTML and JSON (append
.jsonor setAccept: application/json) - SQLite & Postgres — Choose the database that fits your needs
# Build everything (CSS + JS + Go binary)
npm run build
# Run in ephemeral mode (in-memory, no persistence — great for trying it out)
./mahresources -ephemeral
# Or with persistent storage
./mahresources -db-type=SQLITE -db-dsn=mydb.db -file-save-path=./filesSee the installation guide for detailed setup instructions.
| Flag | Description |
|---|---|
-file-save-path |
Main file storage directory |
-db-type |
Database type: SQLITE or POSTGRES |
-db-dsn |
Database connection string |
-bind-address |
Server address:port (default :8181) |
-ephemeral |
Run fully in-memory (no persistence) |
See the full configuration reference for all options including ephemeral modes, seed databases, alternative filesystems, and remote timeouts.
# Go unit tests
go test ./...
# E2E tests (starts ephemeral server automatically)
cd e2e && npm run test:with-serverSee the docs for more test commands and options.
The full documentation covers everything in detail:
- Getting Started — Installation, first steps, quick start
- Concepts — Resources, notes, groups, tags, relationships
- User Guide — Navigation, search, bulk operations
- Features — Thumbnails, versioning, plugins, saved queries
- Configuration — All settings and deployment options
- API Reference — REST API documentation
There is no built-in authentication or authorization. This application is designed to run on private networks or behind a reverse proxy that handles access control. See the reverse proxy guide for setup instructions.
The mr binary is a command-line client for the mahresources API. It covers all entity types (resources, notes, groups, tags, etc.) with CRUD operations, bulk actions, file upload/download, and version management.
# Build the CLI
npm run build-cli
# List resources
mr resources list --content-type image/png
# Upload a file
mr resource upload photo.jpg --name "My Photo" --owner-id 1See the CLI documentation for the full command reference.
The HTTP API supports all CRUD operations, making it easy to script bulk imports. For an example of direct library usage, see cmd/importExisting/main.go. The API documentation covers all available endpoints.





