Skip to content
Full client side Micropub client
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Grumble Micropub client

A client side only Micropub client. Installation only requires to deploy the files in a static web server.

Current working client at


  • Indieauth login
  • Offline post support (with queue for sending later)
  • Installable as a phone app
  • Syndication
  • Media endpoint support
  • Like/Bookmark/Reply support
  • Posts videos/photos
  • Form-encoded syntax


Since this is a full client side client, it requires a few resources to support CORS:

  • Micropub endpoint
  • You Indieauth page (where to discover the authorization_url)
  • Media endpoint

Offline support only available for Chrome, Firefox has an IndexDB bug)

Tools used


Main composer

Main composer

Reply screen

Reply interface

Quick notes - Tweet like

Quick notes

Options menu

Options menu


Serve the files statically

Just host the files anywhere that they can be served statically. This is an example Nginx configuration.

server {
    listen 443 ssl http2;
    listen [::]:443  ssl http2;

    location ~ ^/favicon\.(\w+)$ {
        alias /path/grumble/src/favicon.png;
    location / {
        root /path/grumble/src/;

Add client.js

It is necessary to teach Grumble where it is being served from. You need to create a client.js file that gets served from the document root declaring two constants CLIENT_ID and REDIRECT_URI.

const CLIENT_ID = "";
const REDIRECT_URI = "";

It's also perfectly fine to host on S3.

Blog setup

Remember that you need to enable CORS on your identification URL. This is how I do it on Nginx.

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
You can’t perform that action at this time.