Bubble fork for PRs.
Go to file
Julian Marcos f3dff8f3a4
Polls: Make the creator always see the results
I have modified the code to make sure the creator always sees the
I think this is the desired behaviour of the issue #83.
I have tested that this works, but I haven't tested if it might
interfere with some other functionality. I hope not.

Closes #83.
2023-10-08 15:51:25 +02:00
.gitignore Working on post preview; file attachments 2023-05-02 22:28:53 +03:00
50_bubble.py Polls: Make the creator always see the results 2023-10-08 15:51:25 +02:00
LICENSE.md Updated README, added LICENSE 2023-05-13 23:24:15 +03:00
README.md Updated Help; refer to "Gemini/Atom feeds" 2023-07-18 14:49:41 +03:00
admin.py Admin: Forcing "Omit from All Posts" on any subspace 2023-08-18 22:37:40 +03:00
composer.py Clean whitespace at the end of segments, posts, comments 2023-07-28 07:07:38 +03:00
db-migrate.sql Comment pages: partial thread view, give thanks 2023-06-20 08:49:35 +03:00
example.ini Updated example configuration .ini file 2023-05-30 13:17:32 +03:00
feeds.py Filter likes and reactions based on muted users 2023-08-17 21:40:57 +03:00
model.py Admin: Forcing "Omit from All Posts" on any subspace 2023-08-18 22:37:40 +03:00
requirements.txt README: Updated dependencies 2023-06-22 10:58:48 +03:00
settings.py Added Doughnut avatar; bumped version number to 6.8 2023-08-19 11:46:35 +03:00
subspace.py Admin: Forcing "Omit from All Posts" on any subspace 2023-08-18 22:37:40 +03:00
user.py Dashboard: Restrict visibility of comments on deleted posts 2023-06-20 16:27:12 +03:00
utils.py Don't decorate link labels in preformatted blocks; bumped version number to 6.9 2023-08-30 15:46:42 +03:00
worker.py User-specific time zones 2023-06-19 19:35:00 +03:00


💬 Bubble — Bulletin Boards for Gemini

Bubble is a Gemini-based bulletin board system that can be summarized as a union of station.martinrue.com, Reddit, WordPress, and issue trackers like GitHub Issues. It is implemented as an extension module to GmCapsule.

Bubble has been designed to be useful for both individuals and communities. It has multiple objectives and target audiences:

  • Someone could run Bubble in a manner similar to WordPress, as a Gemini-based CMS for their capsule. Every user on a Bubble server gets their own personal "u/" feed that is available both for Gemini subscriptions and Tinylog followers.
  • A group of people can run Bubble as their own version of Station. Users' posts appear in the shared All Posts feed on the front page.
  • Groups of people can set up their own moderated "s/" subspaces on a larger Bubble instance for topic-specific discussions, much like subreddits on Reddit. Users can freely create new Bubble subspaces. Subspaces have their own home pages and Gemini/Atom feeds.
  • A developer of Gemini software can switch a subspace to issue tracking mode and link it with a Git repository. Issue tracking subspaces behave like GitHub Issues (and other Git forges on the web) in that posts have an open/closed status and they can cross-reference other issues in the tracker and commits in the Git repository.


  • Python 3.6+ (same as GmCapsule)
  • MariaDB database
  • mariadb (MariaDB Python Connector module)
  • pytz (backwards-compatible time zone library)


  1. Decide on the database user name and password that will be used by Bubble to access your database server.
  2. Create a MariaDB database using your admin credentials:
CREATE DATABASE bubble CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON bubble.* TO 'db_user'@'localhost' IDENTIFIED BY 'db_password';
  1. Configure GmCapsule to load the Bubble extension. In the server's configuration file, add the Bubble source directory (where 50_bubble.py can be found) to your modules:
modules = /home/username/src/bubble
  1. Copy the example configuration from example.ini to your GmCapsule configuration file. Edit the configuration and update the database parameters with the correct values:
db.host = localhost
db.port = 3306
db.user = db_user
db.password = db_password
db.name = bubble
  1. Update the rest of the [bubble] configuration including the capsule name, icon, description, and code of conduct.
  2. Email notifications require a working sendmail-compatible CLI tool. This feature can be disabled by leaving email.cmd empty.
email.cmd = /usr/sbin/sendmail
email.from = admin@example.com
  1. An account called "admin" is created when the Bubble database is initialized on the first run of the server. However, it does not have any registered client certificates so it is impossible to log in as "admin". The admin.certpass config variable sets a temporary password using which you can register certificates for the admin account.
admin.certpass = mypassword

After these steps, you should be able to access the "admin" account and use Bubble itself to continue the capsule configuration.


Bubble is licensed under BSD-2-Clause.