- Go 73.2%
- TypeScript 14%
- Makefile 10.1%
- JavaScript 2.7%
Generate a detached GPG signature alongside each .tar.gz so users can verify the bundle came from this repository. The signing key and passphrase are pulled from repo secrets. |
||
|---|---|---|
| .github/workflows | ||
| assets | ||
| build | ||
| public | ||
| server | ||
| webapp | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .gitpod.yml | ||
| .golangci.yml | ||
| .nvmrc | ||
| CLAUDE.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| plugin.json | ||
| README.md | ||
Mattermost Plugin Shelfmark
A Mattermost plugin that integrates with Shelfmark to let users search and request books directly from Mattermost. Browse results in a dedicated side panel or use the /requestbook slash command -- requested books are automatically downloaded and posted to a designated channel.
Features
- RHS panel -- Search, browse covers and authors, and pick a specific release to download from a side panel toggled from the channel header
- Slash command -- Quick one-shot requests via
/requestbook <query>for users who prefer the keyboard - Language filtering -- Specify a preferred language (e.g.,
es,fr) in the panel or with--language <code>on the slash command, with a configurable default - Automatic downloads -- Background processing handles the full lifecycle: search, queue, download, and post
- Channel posting -- Books are posted with cover art to a configured channel, with the file attached as a reply
- User notifications -- Requestors receive DM updates on download progress and completion
- Localization -- User-facing messages available in English and Spanish, with locale-aware delivery
- Customizable posts -- Post format is configurable via Go
text/templatesyntax
Usage
RHS panel
Click the Shelfmark icon in the channel header to open the side panel. Enter a query, pick a language, browse the matching books, then choose a specific release to request. Requested releases are queued for download and posted to the configured channel when ready.
Slash command
/requestbook [--language <code>] <search query>
Examples:
/requestbook The Hitchhiker's Guide to the Galaxy
/requestbook --language es El Quijote
/requestbook 978-0-13-468599-1
The slash command picks the best match automatically and queues it for download.
Configuration
Configure the plugin in System Console > Plugins > Mattermost Plugin Shelfmark.
| Setting | Description |
|---|---|
| Shelfmark Server URL | Base URL of your Shelfmark instance (e.g., http://shelfmark:8084) |
| Shelfmark Username | Username for Shelfmark authentication (leave empty if auth is disabled) |
| Shelfmark Password | Password for Shelfmark authentication (leave empty if auth is disabled) |
| Channel ID | Mattermost channel ID where book posts will be created |
| Default Language | ISO language code used when --language is not specified (e.g., en, es, fr) |
| Post Template | Go template for book post messages. Variables: {{.Title}}, {{.Authors}}, {{.AuthorsList}} |
Development
Prerequisites
- Go 1.25+
- A running Mattermost server with plugin uploads enabled
Building
make # lint, test, and build
make dist # create distributable plugin bundle
make test # run tests only
make coverage # generate test coverage report
The build produces a plugin bundle at dist/com.fmartingr.shelfmark.tar.gz with support for Linux (amd64/arm64), macOS (amd64/arm64), and Windows (amd64).
Deploying
Enable plugin uploads in your Mattermost config:
{
"PluginSettings": {
"EnableUploads": true
}
}
Then deploy with local mode:
make deploy
Or with credentials:
export MM_SERVICESETTINGS_SITEURL=http://localhost:8065
export MM_ADMIN_TOKEN=<your-token>
make deploy
Releasing
make patch # patch release (e.g., 1.0.1)
make minor # minor release (e.g., 1.1.0)
make major # major release (e.g., 2.0.0)
Release candidate variants are also available: make patch-rc, make minor-rc, make major-rc.
The version is determined automatically from git tags. See the Makefile for details.