mouthful is a free, open source collaboration & feedback project written in Go and released under MIT. It has 775 GitHub stars, 40 forks and 32 open issues, and was last pushed 11 months ago. On this registry it ranks #13 of 20 tracked projects in Collaboration & Feedback, with 5 head-to-head comparisons available. It gained 1 stars over the last 3 tracked days.

What is mouthful?

What it is

Mouthful is a self-hosted commenting server written in Go and Preact, and it is presented as an alternative to Disqus. It lives in the open-source community and feedback ecosystem for blogs and websites that need a comment section without relying on an external advertising-supported service.

The concrete problem it solves is the loss of control that comes with hosted comment widgets. Mouthful lets an operator run the comment backend on their own infrastructure, embed a lightweight client on selected pages, and configure moderation, caching, rate limiting, and database storage according to local needs. The project is licensed under MIT and is distributed through GitHub releases and a source repository.

Key capabilities

  • It supports multiple database backends, including SQLite, MySQL, PostgreSQL, and DynamoDB.
  • It includes an administration panel for moderation, with configurable features that can be enabled or disabled.
  • It provides server-side caching to reduce excessive database calls, and it provides rate limiting to control abusive request patterns.
  • It includes a honeypot feature intended to prevent bots from posting comments.
  • It can migrate comments from existing commenting engines such as isso and Disqus, and it can dump comments out and import an old dump.
  • It allows admin login through third-party providers such as Facebook, Twitter, and many more.
  • It sends notifications about new comments through webhooks, and it supports multiple domains and periodic cleanup.

Who uses it and how

  • Blog and website operators install the backend on a server, edit config.json, run the mouthful binary, and add the provided client snippet to the pages where comments should appear.
  • Docker users deploy the backend from the repository's Docker instructions and can obtain the configuration file from the Docker image.
  • Developers who need a custom build clone the repository, run build.sh with a Go environment, Dep, Node, and npm, and copy the resulting /dist directory to their server.
  • Operators behind a reverse proxy can use the README's Nginx configuration guidance to route traffic to the backend.
  • Site owners migrating from hosted comment services use the migration and backup/import features to move existing comment data into a self-hosted Mouthful instance.

Getting started

The typical install path is to download a release archive for your operating system, edit config.json, run the backend binary, and include the client HTML on the pages that need comments. The README also describes building from source with build.sh and running Mouthful on Docker.

When to use it — and when not to

Mouthful fits sites that want to replace a hosted Disqus-style comment service with a self-managed backend that has no ads and supports configurable moderation, caching, rate limiting, and database choices. The trade-off is operational responsibility: the self-hoster must run the Go binary or Docker container, maintain the chosen database, manage configuration, and set up any reverse proxy needed for public access. The provided metadata lists 32 open issues and no contributor count, so evaluators should inspect current maintenance and unresolved issues before choosing it for a production comment system.

project readme (upstream, from github) — read inline

Build Status Go Report Card codecov Documentation

Mouthful is a self-hosted alternative to Disqus.

Mouthful is a lightweight commenting server written in GO and Preact. It's a self hosted alternative to disqus that's ad free.

There's a demo hosted at mouthful.dizzy.zone. Check it out!

Features

  • Multiple database support(sqlite, mysql, postgres, dynamodb)
  • Moderation with an administration panel
  • Server side caching to prevent excessive database calls
  • Rate limiting
  • Honeypot feature, to prevent bots from posting comments
  • Migrations from existing commenting engines(isso, disqus)
  • Configuration - most of the features can be turned on or off, as well as customized to your preferences.
  • Admin login through third parties such as facebook and twitter, and 35 more.
  • Notifications about new comments via webhook
  • Dumping comments out, and importing an old dump.

Installation

The easy way

Backend

Head over to release page and download an archive for your OS. Extract, change the config.json you find in the archive according to your preferences. For more info on configuration, head to the configuration section.

Run the binary and that's it! You now have the backend running.

Client

Now, all that's left to do is include the following html in your blog/website on the pages you want mouthful to work on:

<div id="mouthful-comments" data-url="http://localhost:8080"></div>
<script src="http://localhost:8080/client.js"></script>

Once that is set up, you should be able to start using mouthful.

Building mouthful yourself

To start using mouthful, you'll need:

  • A working GO environment
  • Dep
  • Node with npm
  • A server to put mouthful on

If you do not have these tools set up, please refer to the installing dependencies section.

If you have all the dependencies, clone the mouthful repository. In the root of this repository run build.sh. Give it some time, this will install all the dependencies for both go and node and create a directory inside the root of this repository called /dist. Inside, you'll find all you need to run mouthful. That is:

  • A config file
  • A binary to start the mouthful backend
  • A static directory, containing all the javascript and html needed to serve both the client and the admin panel(if enabled)

To configure your mouthful instance to your hearts content, please refer to the configuration section.

Once you've done with the configuration, just copy over the /dist contents to your server and run the /dist/mouthful binary. Take note that the mouthful binary will look for a config.json file its directory.

Installing dependencies

  1. To install Go, please refer to the GO documentation found here
  2. To install node and npm, please refer to the Node documentation found here
  3. To install Dep, please refer to Dep documentation found here
  4. Once you have all the tools installed, follow the Installation guide

Mouthful on Docker

Build the image

  1. Clone the project
git clone https://github.com/vkuznecovas/mouthful.git
  1. Get in the project folder then build the image
docker build -t mouthful .

The Dockerfile is going to build on the master branch by default, you can specify a version

docker build --build-args "MOUTHFUL_VER=1.0.3" -t mouthful .

Run the image

Once image is built, simply run

docker run -d \
    --name mouthful \
    -v $(pwd)/data:/app/data
    -p 8080:8080
    mouthful

Alternatively you can use the official image vkuznecovas/mouthful

docker run -d \
    --name mouthful \
    -v $(pwd)/data:/app/data
    -p 8080:8080
    vkuznecovas/mouthful

Note: /app/data needs to contain a valid config.json file, read the note in moderation. You can extract the config file from the docker image, see getting config file from docker.

Configuring mouthful

Nearly all the features of mouthful can be customized and turned on or off. All within the config.json file.

Here's a short overview:

Moderation

Mouthful comes with moderation support out of the box. If moderation is enabled, it does not show the comments users post instantly, those will have to be approved first through the mouthful admin panel. This also allows for comment modification or deletion.

You can choose if you want to use a password based authentication or use OAUTH and login through github, facebook or the other 35 providers mouthful supports. Click here for more on OAUTH.

Note: You need to change the default password in config.json, else mouthful will fail to start.

Caching

Mouthful can cache end results(full sets of comments for threads) for a given period of time. This allows for quicker responses, lower number of database queries at the cost of extra memory for the running mouthful binary.

Rate limiting

Mouthful can limit the amount of posts a person can post within the same hour.

Notification

Mouthful can send notifications about new comments via webhook.

Styling

Mouthful comes with a default style out of the box, but you can override it in a couple of ways:

  1. Disable the default styling in config and add the required css to your webpage.
  2. Fork the repo and change the style in client/src/components/client/style.scss.

Paging of comments

Mouthful can either display all the comments on page load, or page them. The page size can be specified in config.

Cross-Origin Resource Sharing

Mouthful can either allow all origins to access its backend from browser or limit that to a given list of domains.

Data sources

Mouthful supports different data stores for different needs. Currently supported data store list is as follows:

  • sqlite
  • postgres
  • mysql
  • aws dynamodb

For a list of configuration options and config file examples, head over to configuration documentation and examples

Multiple domains

A single instance of Mouthful supports multiple domains. To distinguish between multiple domains you'll need to change the client side to reflect the domain it's coming from. You need to add a data-domain tag to your client side html, like so:

// Page 1 would look like this
<div id="mouthful-comments" data-url="http://localhost:8080" data-domain="example.com"></div>
<script src="http://localhost:8080/client.js"></script>
// Page 2 would look like this
<div id="mouthful-comments" data-url="http://localhost:8080" data-domain="another.example.com"></div>
<script src="http://localhost:8080/client.js"></script>
// Page 3 would look like this
<div id="mouthful-comments" data-url="http://localhost:8080" data-domain="domain.com"></div>
<script src="http://localhost:8080/client.js"></script>

With this, all the requests going to the back end will now prefix the domain name to the path, therefore if you want to add multiple websites to a single instance of mouthful you can now achieve it! Omitting the data-domain will rely on the path with no domain, so you can have multiple domains showing the same comments if needed.

Config file from Docker

You can get the default `config.js

readme truncated — read the full docs on github

Frequently asked questions

Is mouthful free to use?

mouthful is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does mouthful do?

Mouthful is a self-hosted alternative to Disqus

What is mouthful written in?

mouthful is primarily written in Go. Its source is publicly available at https://github.com/vkuznecovas/mouthful, and it has 775 GitHub stars.