This version is in sync with the latest version of the specification, which changed a lot. Upgrading to 0.10 requires to change your code. Carefully read this guide before upgrading the hub.

  • Private updates are now handled differently. Targets don't exist anymore. They have been superseded by the concept of topic selectors. To send a private update, the publisher must now set the new private field to on when sending the POST request. The topics of the update must also match at least one selector (a URI Template, a raw string or * to match all topics) provided in the mercure.publish claim of the JWT. To receive a private update, at least one topic of this update must match at least one selector provided in the mercure.subscribe claim of the JWT.
  • The structure of the JSON-LD document included in subscription events changed. Especially, "@type": "" is now "type": "Subscription" and "@id": "/.well-known/mercure/subscriptions/foo/bar" is now "id": "/.well-known/mercure/subscriptions/foo/bar".
  • The dispatch_subscriptions config option has been renamed subscriptions.
  • The subscriptions_include_ip config option doesn't exist anymore. To include the subscriber IP (or any other value) in subscription events, use the new mercure.payload property of the JWT.
  • All IDs generated by the hub (updates ID, subscriptions IDs...) are now URN following the template urn:uuid:{the-uuid} (it was {the-uuid} before). You may need to update your code if you deal with these IDs.
  • The topic * is now reserved and allows to subscribe to all topics.


  • According to the new version of the spec, the URL of the Hub changed moved from /hub to /.well-known/mercure
  • HISTORY_CLEANUP_FREQUENCY, HISTORY_SIZE and DB_PATH environment variables have been replaced by the new TRANSPORT_URL environment variable
  • Lists in ACME_HOSTS, CORS_ALLOWED_ORIGINS, PUBLISH_ALLOWED_ORIGINS must now be space separated
  • The public API of the Go library has been totally revamped