Federated blogging application, thanks to ActivityPub (now on https://git.joinplu.me/ — this is just a mirror)


Plume's logo Plume

CircleCI Code coverage Docker Pulls Liberapay patrons

WebsiteDocumentationContributeInstances list

Plume is a federated blogging engine, based on ActivityPub. It is written in Rust, with the Rocket framework, and Diesel to interact with the database. The front-end uses Ructe templates, WASM and SCSS.


A lot of features are still missing, but what is already here should be quite stable. Current and planned features include:

  • A blog-centric approach: you can create as much blogs as you want with your account, to keep your different publications separated.
  • Media management: you can upload pictures to illustrate your articles, but also audio files if you host a podcast, and manage them all from Plume.
  • Federation: Plume is part of a network of interconnected websites called the Fediverse. Each of these websites (often called instances) have their own rules and thematics, but they can all communicate with each other.
  • Collaborative writing: invite other people to your blogs, and write articles together.

Get involved

If you want to have regular news about the project, the best place is probably our blog, or our Matrix room: #plume-blog:matrix.org.

If you want to contribute more, a good first step is to read our contribution guides. We accept all kind of contribution:

But this list is not exhaustive and if you want to contribute differently you are welcome too!

As we want the various spaces related to the project (GitHub, Matrix, Loomio, etc) to be as safe as possible for everyone, we adopted a code of conduct. Please read it and make sure you accept it before contributing.

Starting your own instance

We provide various way to install Plume: from source, with pre-built binaries, with Docker or with YunoHost. For detailed explanations, please refer to the documentation.

  • plume docker postgres auth fails

    plume docker postgres auth fails

    trying to install plume via docker following instructions database cannot connect

    root@xxxxxxxxxxxxx:~/plume# docker-compose run --rm plume plm migration run
    Creating plume_plume_run ... done
    Configuration read from /app/.env
    thread 'main' panicked at 'Couldn't connect to the database.: BadConnection("FATAL:  password authentication failed for user \"plume\"\n")', plume-cli/src/main.rs:35:40

    Refers to /app/.env but docker exec -it <container> bash reveals no file .env or directory /app

    C: Bug 
    opened by timconsidine 22
  • Duplicated articles in timelines

    Duplicated articles in timelines

    When publishing an article, it gets duplicated in timelines after some time.

    It looks like duplication happens every time someone likes or boosts the post (from the same instance, or from another one), but I'm not 100% sure.

    • Plume version: 0.4.0
    • Operating system: Linux, but not relevant IMO
    • Web Browser: Firefox Nightly, but not relevant either
    C: Bug A: Backend 
    opened by elegaanz 21
  • Update without script

    Update without script

    Hi I would like to upgrade without git as mentioned here https://github.com/Plume-org/Plume/blob/master/docs/UPDATE.md.

    So I would like to :

    1. Backup the important files and folders like .env, etc.
    2. Delete the the source folder
    3. Download and decompress the fresh sources to the folder.
    4. Restore the importation files and folders like .env to the new unpacked sources.

    So for this I would like to know what files and folders are needed to be backed up and needs to be restored to the newly unpacked sources, so that the Plume don't break.

    C: Discussion 
    opened by anmol26s 20
  • Liking and boosting posts does not work

    Liking and boosting posts does not work

    When I like or boost a post (on the same instance), it just takes me to a domain.com/posturl/{like,boost} url, which is just a blank page. When I reload the blog's page, the like or boost count still remains at 0, and it seems I haven't affected anything.

    C: Bug A: Backend 
    opened by makeworld-the-better-one 17
  • arm64v8 builds fail due to outdated dependency

    arm64v8 builds fail due to outdated dependency

    Plume version (and/or commit): 61b6ceed92ef838a085da6eb66f87ab1de65a520

    During compile on arm64v8 the following error surfaces during the final step (looks like linking). From what I can tell rust-crypto is no longer maintained and won't be receiving a fix (see https://github.com/DaGenix/rust-crypto/issues/383 for reference).

    I'm not familiar with the rust toolchain and this seems like Plume or one of it's dependencies has a dependency on the legacy rust-crypto library. Is there a way to track this down and/or update the code to avoid rust-crypto popping up in the dependency graph?

    I bring this up because a Raspberry Pi 3, Orange Pi, Scaleway arm VPSs and Amazon arm VPSs are all cheap, easy to obtain and can be used for self hosting yet are all arm64v8 devices/servers.

    warning: struct is never constructed: `Write`                                                                                                                                                                                          
      --> src/api/authorization.rs:19:1                                                                                                                                                                                                    
    19 | pub struct Write;                                                                                                                                                                                                                 
       | ^^^^^^^^^^^^^^^^^                                                                                                                                                                                                                 
       = note: #[warn(dead_code)] on by default                                                                                                                                                                                            
    error: linking with `cc` failed: exit code: 1                                                                                                                                                                                          
      = note: /app/target/debug/deps/libcrypto-0e2d8e020a3b8dff.rlib(crypto-0e2d8e020a3b8dff.crypto.277lu5c6-cgu.12.rcgu.o): In function `crypto::util::fixed_time_eq':
              /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/rust-crypto-0.2.36/src/util.rs:52: undefined reference to `rust_crypto_util_fixed_time_eq_asm'
              collect2: error: ld returned 1 exit status
    error: aborting due to previous error
    error: failed to compile `plume v0.2.0 (/app)`, intermediate artifacts can be found at `/app/target`
    C: Bug 
    opened by mcrosson 17
  • Arch Linux Packaging Question

    Arch Linux Packaging Question

    I'm tying to package plume into Arch Linux with files show below


    Here is the systemd file:


    And here are some of my questions:

    1. Is it possible to build a plume with 2 database backend including pg and sqlite, I found with enable all features, plume-cli will refuse to compile
    2. What should be packaged into a working dir in /usr/lib/plume? After I run plume with systemd, I failed to run database migration with `Unable to find migrations directory in this directory or any parent directories.
    • Plume version: 0.3.0-alpha-2
    • Operating system: Arch Linux
    • Web Browser: Firefox Here is the pkgbuild
    C: Bug Build 
    opened by sequencer 15
  • Big refactoring of the Inbox

    Big refactoring of the Inbox

    We now have a type that routes an activity through the registered handlers until one of them matches.

    Each Actor/Activity/Object combination is represented by an implementation of AsObject

    These combinations are then registered on the Inbox type, which will try to deserialize the incoming activity in the requested types.


    • nicer syntax: the final API is clearer and more idiomatic
    • more generic: only two traits (AsActor and AsObject) instead of one for each kind of activity
    • we always try to dereference unknown objects
    • it is easier to see which activities we handle and which one we don't

    (sorry for the big diff once again :confused:)

    C: Enhancement A: Federation S: Ready for review A: Backend 
    opened by elegaanz 15
  • Can only start plume with contents of .env file in single argument call to

    Can only start plume with contents of .env file in single argument call to "plume"

    What is happening

    In the docs provided, it says to create a .env file in the place where you built Plume. From following the instructions, I think that this location is /home/plume/Plume/.env but am unsure. With all my variables in this file, when I run any command, i.e. plm migration run it says that the database cannot be connected to. So, when I add the DATABASE_URL in front of these commands, it works just fine.

    What I need help with

    Where, exactly, given that I am running Plume with a dedicated user named "plume" and have compiled from source for Ubuntu 16.04, do I put my .env file so that Rust? Plume? app can read these variables without me having to put them all in an extremely long argument to launch and run Plume?

    My system

    Arguments used to install Plume

    # Install Rust first...
    curl https://sh.rustup.rs -sSf | sh
    # Git latest version
    git clone https://github.com/Plume-org/Plume.git
    cd Plume
    # Next Build the front-end
    cargo install cargo-web&&cargo web deploy -p plume-front
    # Build the back-end, replacing DATABASE either with postgres or sqlite
    cargo install --no-default-features --features postgres --force&&cargo install --no-default-features --features postgres --path plume-cli --force

    Other items

    1. Ubuntu 16.04
    2. PostgresSQL

    Good to knows

    My instance actually works, I just want to be able to use the "configuration" file the way it was meant to be used. I am using custom logo, that works, email server, that works, and would like to use custom port (not 7878). Thanks for all your help and for creating Plume!

    opened by iamdoubz 13
  • Spaces get removed from tags

    Spaces get removed from tags

    There are many cases in which (at least in Persian language) a tag may include space(s). Currently, Plume removes space from tags. Look at the following screenshots to see what is entered as tag and how it is damaged in output;



    • Plume version: 0.4.0
    C: Bug 
    opened by ahangarha 12
  • Theming


    • Custom CSS for blogs
    • Custom themes for instance
    • New dark theme
    • UI for admin to upload new theme (or delete them)
    • UI to choose your theme


    Instance level themes are just CSS files, stored in static/css (see Instance::list_themes).


    • [x] Federate blog themes
    • [x] Escape url()/import
    • [x] Add a way to avoid conflicts between blog and instance themes
    • [x] UI to disable blog CSS (the option is already in the database, just need to add a checkbox in the settings)
    • [x] SQlite migrations
    • [x] Documentation

    Fixes #354, #403

    A: Federation A: Front-End C: Feature S: Ready for review A: Backend 
    opened by elegaanz 11
  • Theme update

    Theme update

    So far:

    • Ligther colors
    • No more border radius
    • Buttons are now always colored
    • Fix weird margin with CWed images
    • Add a border to quotes
    • Start to redesign the post page (according to the Figma mockups)
      • Full-size cover image, with a gradient and the title/subtitle/authors/date over it
      • Like/boost are now between tags and author info
      • Author info has a difference background color to make a difference between the different sections
      • Tags and license are now side-by-side

    As I started it, this redesign is not perfectly following what was done on Figma (for instance lighter colors were not planned), but I'm open to discussion if you think Figma mockups should be better respected.

    It is available at https://pr-553.joinplu.me/ if you want to see how it looks like. You can login with admin/admin123 to see all the pages.

    C: Enhancement A: Front-End S: Ready for review Design Rendering 
    opened by elegaanz 11
  • Compile error because of activitystreams version

    Compile error because of activitystreams version

    error[E0107]: this trait takes 0 generic arguments but 1 generic argument was supplied
       --> plume-common/src/activity_pub/mod.rs:412:6
    412 | impl Extends<HashtagType> for Hashtag {
        |      ^^^^^^^------------- help: remove these generics
        |      |
        |      expected 0 generic arguments
    note: trait defined here, with 0 generic parameters
       --> /home/plume/.cargo/registry/src/github.com-1ecc6299db9ec823/activitystreams-0.7.0-alpha.22/src/base.rs:41:11
    41  | pub trait Extends: Sized {
        |           ^^^^^^^
    For more information about this error, try `rustc --explain E0107`.
    error: could not compile `plume-common` due to previous error
    warning: build failed, waiting for other jobs to finish...
    error: failed to compile `plume-cli v0.7.2 (/home/plume/Plume/plume-cli)`, intermediate artifacts can be found at `/home/plume/Plume/target`

    Locking activitystreams version can fix this, for example, activitystreams = "=0.7.0-alpha.20" (the version in Cargo.lock

    C: Bug 
    opened by OmmyZhang 1
  • Plume fails to start after having banned a user and restarted it.

    Plume fails to start after having banned a user and restarted it.

    NOTE: Plume's Gitea instance does not seem to send emails so it is impossible to activate my account, even via github's account linking process.

    After having banned my first user, Plume fails to start. Plume fails to start with the following message:

    sept. 16 17:36:36 web-01 plume[715590]: Configuration read from /var/www/plumeblog/.env
    sept. 16 17:36:38 web-01 plume[715590]: thread 'main' panicked at 'Failed to cache local instance user: Blocklisted(false, "")', plume-models/src/instance.rs:115:18
    sept. 16 17:36:38 web-01 plume[715590]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

    I checked the database and I don't see anything weird

    With backtrace:

    # RUST_BACKTRACE=1 plume
    Configuration read from /var/www/plumeblog/.env
    thread 'main' panicked at 'Failed to cache local instance user: Blocklisted(false, "")', plume-models/src/instance.rs:115:18
    stack backtrace:
       0: rust_begin_unwind
                 at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:577:5
       1: core::panicking::panic_fmt
                 at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/core/src/panicking.rs:135:14
       2: core::result::unwrap_failed
                 at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/core/src/result.rs:1737:5
       3: once_cell::imp::OnceCell<T>::initialize::{{closure}}
       4: once_cell::imp::initialize_or_wait
       5: once_cell::imp::OnceCell<T>::initialize
       6: plume_models::instance::Instance::cache_local_instance_user
       7: plume::init_rocket
       8: plume::main
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

    With full backtrace:

    # RUST_BACKTRACE=full plume
    Configuration read from /var/www/plumeblog/.env
    thread 'main' panicked at 'Failed to cache local instance user: Blocklisted(false, "")', plume-models/src/instance.rs:115:18
    stack backtrace:
       0:     0x555c0275509c - std::backtrace_rs::backtrace::libunwind::trace::h9c95184963fef745
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
       1:     0x555c0275509c - std::backtrace_rs::backtrace::trace_unsynchronized::h5d21f8fdfc262588
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x555c0275509c - std::sys_common::backtrace::_print_fmt::h6ce732896d3b7bc2
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/sys_common/backtrace.rs:67:5
       3:     0x555c0275509c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h56a1b948079bb60c
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/sys_common/backtrace.rs:46:22
       4:     0x555c0277d35c - core::fmt::write::ha787ab3b9068d913
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/core/src/fmt/mod.rs:1168:17
       5:     0x555c0274cbe3 - std::io::Write::write_fmt::h4913c71f24efdd75
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/io/mod.rs:1653:15
       6:     0x555c02757a62 - std::sys_common::backtrace::_print::h8ba799ac9853e240
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/sys_common/backtrace.rs:49:5
       7:     0x555c02757a62 - std::sys_common::backtrace::print::hc1060288e0e5dcfe
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/sys_common/backtrace.rs:36:9
       8:     0x555c02757a62 - std::panicking::default_hook::{{closure}}::h5623b336a8b38b2c
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:290:50
       9:     0x555c02757645 - std::panicking::default_hook::h7f9b0932f349911f
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:307:9
      10:     0x555c02758114 - std::panicking::rust_panic_with_hook::h87cab73890184b28
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:691:17
      11:     0x555c02757df7 - std::panicking::begin_panic_handler::{{closure}}::h541a05bf9df15ade
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:581:13
      12:     0x555c02755544 - std::sys_common::backtrace::__rust_end_short_backtrace::h18b7b64c8e3dc986
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/sys_common/backtrace.rs:139:18
      13:     0x555c02757b09 - rust_begin_unwind
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:577:5
      14:     0x555c018f85c3 - core::panicking::panic_fmt::h1720bda5e8269e46
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/core/src/panicking.rs:135:14
      15:     0x555c018f86b3 - core::result::unwrap_failed::hf939f97f1c5ed232
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/core/src/result.rs:1737:5
      16:     0x555c01c70ffc - once_cell::imp::OnceCell<T>::initialize::{{closure}}::ha04c87d9b0aab204
      17:     0x555c027211d3 - once_cell::imp::initialize_or_wait::hdecf96bf5a9a1e0d
      18:     0x555c018bb382 - once_cell::imp::OnceCell<T>::initialize::he036ea8628b8ab4f
      19:     0x555c01da3943 - plume_models::instance::Instance::cache_local_instance_user::h4e82f81de694932e
      20:     0x555c01a8f103 - plume::init_rocket::hf7a3a1c15d8aeb08
      21:     0x555c01a97b47 - plume::main::h60ab4c229ca636c9
      22:     0x555c01a32893 - std::sys_common::backtrace::__rust_begin_short_backtrace::hb0706cfb5e0d1bbe
      23:     0x555c01b884f9 - std::rt::lang_start::{{closure}}::h91ffb41cf926ee9a
      24:     0x555c02754757 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hce9a5e26b1a2c58c
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/core/src/ops/function.rs:259:13
      25:     0x555c02754757 - std::panicking::try::do_call::h6c2996a203e8e883
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:485:40
      26:     0x555c02754757 - std::panicking::try::hb55cfc029aa1d1ae
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:449:19
      27:     0x555c02754757 - std::panic::catch_unwind::h9d5a29e8020cfa03
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panic.rs:136:14
      28:     0x555c02754757 - std::rt::lang_start_internal::{{closure}}::h3aef114df9bcaef3
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/rt.rs:128:48
      29:     0x555c02754757 - std::panicking::try::do_call::ha59134c701ee03a3
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:485:40
      30:     0x555c02754757 - std::panicking::try::h5a79ced7a6a77bd0
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panicking.rs:449:19
      31:     0x555c02754757 - std::panic::catch_unwind::h580b9b0c2eacfaaf
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/panic.rs:136:14
      32:     0x555c02754757 - std::rt::lang_start_internal::ha11525fb3cb33455
                                   at /rustc/6abb6385b2cb7249f67b9b3ce7522527767dd907/library/std/src/rt.rs:128:20
      33:     0x555c01aaed12 - main
      34:     0x7fbbb7b6dd0a - __libc_start_main
      35:     0x555c018f8d9a - _start
      36:                0x0 - <unknown>

    My .env file:

    # cat /var/www/plumeblog/.env 
    # The address of the database
    # (replace USER, PASSWORD, PORT and DATABASE_NAME with your values)
    # If you are using SQlite, use the full path of the database file (`plume.db` for instance)
    # Windows user's paths are backslashes, change them to forward slashes
    DATABASE_URL=postgres://(myuser):(mypasswd)[email protected]:5432/plumeliberta
    # For PostgreSQL: migrations/postgres
    # For SQlite: migrations/sqlite
    # The domain on which your instance will be available
    # Secret key used for private cookies and CSRF protection
    # You can generate one with `openssl rand -base64 32`
    # Mail settings
    # If you don't want to setup a mail server and/or address for plume
    # and don't plan to use the "password reset" feature,
    # you can comment these lines.
    • Plume version: Latest dev version and latest release both have the same behaviour
    • Operating system: Debian 11 (bullseye)
    • Web Browser: Firefox (Debian 11)
    C: Bug 
    opened by appzer0 0
  • Title with certain symbols will return error

    Title with certain symbols will return error

    Some articles with titles containing certain symbols such as "/" or "[]" might return error.

    For example: https://plume.pullopen.xyz/~/Inspirations-T%C3%A4uschungen/%E5%9B%A0%E7%82%BA%E4%B8%80%E5%88%87%E5%BF%AB%E6%A8%82%E8%A6%81%E6%B1%82%E6%B0%B8%E6%81%86%20%5B%E2%85%A0%5D with a "[" and "]" in it.

    and: https://plume.pullopen.xyz/~/%E5%A4%A7%E6%B5%B7%E8%B4%BC%E5%92%8C%E4%BB%96%E4%BB%AC%E7%9A%84%E5%B4%BD%E5%B4%BD/%E3%80%90%E6%B5%B7%E8%B4%BC%E7%8E%8B%2F%E4%BA%B2%E5%AD%90%E5%90%91%E3%80%91%E6%88%90%E9%95%BF%E7%97%9B with a "/" in it.

    • Plume version: 0.7.3 - dev
    • Operating system: windows
    • Web Browser: firefox
    C: Bug 
    opened by pullopen 1
  • Add ability to purge remote content and search index

    Add ability to purge remote content and search index

    Is your feature request related to a problem? Please describe. I notice that after a while, the search_index and database file grows bigger and bigger, filled with remote article that we usually do not need or understand, and taking too much disk space.

    Describe the solution you'd like I would like to have a plm order to purge remote content as well as the related search index.

    Describe alternatives you've considered Or would you please give me some instruction?

    opened by pullopen 2
  • sitemap.xml request

    sitemap.xml request

    Is your feature request related to a problem? Please describe. the site can't be searched by google

    Describe the solution you'd like update sitemap.xml hourly or daily

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    opened by starsareintherose 0
  • Reply from mastodon does not appear in notification

    Reply from mastodon does not appear in notification

    1. Other replies my plume article from mastodon.
    2. I can see the reply under my article, but it doesn't show in notification.
    3. When someone replies as plume user, I can see the notification in plume.

    Would you be able to figure it out?

    • Plume version: 0.7.3-dev
    • Operating system: Windows
    • Web Browser: Firefox
    C: Bug 
    opened by pullopen 0
  • 0.7.2(May 11, 2022)

    We are pleased to announce this new alpha version of Plume. This release has no migration. You don't need run it before updating.

    The most major change is internal one: ActivityPub library’s upgrading.

    We also added changes to home page and timeline. See a blog post for details.

    In addition, a problem that activities don’t reach other instances is solved. We should have fixed it, but other cause have remained. It should be away.



    • Basque language (#1013)
    • Unit tests for ActivityPub (#1021)
    • Move to action area after liking/boosting/commenting (#1074)


    • Bump Rust to nightly 2022-01-26 (#1015)
    • Remove "Latest articles" timeline (#1069)
    • Change order of timeline tabs (#1069, #1070, #1072)
    • Migrate ActivityPub-related crates from activitypub 0.1 to activitystreams 0.7 (#1022)


    • Add explanation of sign-up step at sign-up page when email sign-up mode (#1012)
    • Add NOT NULL constraint to email_blocklist table fields (#1016)
    • Don't fill empty content when switching rich editor (#1017)
    • Fix accept header (#1058)
    • Render 404 page instead of 500 when data is not found (#1062)
    • Reuse reqwest client on broadcasting (#1059)
    • Reduce broadcasting HTTP request at once to prevent them being timed out (#1068, #1071)
    • Some ActivityPub data (#1021)
    Source code(tar.gz)
    Source code(zip)
    plume-postgres.tar.gz(27.43 MB)
    plume-sqlite.tar.gz(27.43 MB)
  • 0.7.1(Jan 13, 2022)

    We are pleased to announce this new alpha version of Plume. It includes database schema change. You need run migration before start new version. See documentation for the steps.

    This update added MAIL_PORT environment variable support. See documentation for details.

    Also it added sign-up feature. You can see how to set up at SIGNUP variable in Useful environment variables page. A blog post might help you.



    • Introduce environment variable MAIL_PORT (#980)
    • Introduce email sign-up feature (#636, #1002)


    • Some styling improvements (#976, #977, #978)
    • Respond with error status code when error (#1002)


    • Fix comment link (#974)
    • Fix a bug that prevents posting articles (#975)
    • Fix a bug that notification page doesn't show (#981)
    Source code(tar.gz)
    Source code(zip)
    plume-postgres.tar.gz(26.64 MB)
    plume-sqlite.tar.gz(26.65 MB)
  • 0.7.0(Jan 2, 2022)

    We're pleased to annouce new Plume version v0.7.0. It includes a security fix. All administrators are encouraged to update it.



    • Allow dir attributes for LtoR text in RtoL document (#860)
    • More translation languages (#862)
    • Proxy support (#829)
    • Riker a actor system library (#870)
    • (request-target) and Host header in HTTP Signature (#872)
    • Default log levels for RUST_LOG (#885, #886, #919)


    • Upgrade some dependent crates (#858)
    • Use tracing crate (#868)
    • Update Rust version to nightly-2021-01-15 (#878)
    • Upgrade Tantivy to 0.13.3 and lindera-tantivy to 0.7.1 (#878)
    • Run searcher on actor system (#870)
    • Use article title as its slug instead of capitalizing and inserting hyphens (#920)
    • Extract a function to calculate posts' ap_url and share it with some places (#918)
    • Keep title in URI (#920)


    • Percent-encode URI for remote_interact (#866, #857)
    • Menu animation not opening on iOS (#876, #897)
    • Make actors subscribe to channel once (#913)
    • Upsert posts and media instead of trying to insert and fail (#912)
    • Update post's ActivityPub id when published by update (#915)
    • Calculate media URI properly even when MEDIA_UPLOAD_DIRECTORY configured (#916)
    • Prevent duplicated posts in 'all' timeline (#917)
    • Draw side line for blockquote on start (#933)
    • Fix URIs of posts on Mastodon (#947)
    • Place edit link proper position (#956, #963, #964)


    • Update dependencies including XSS vulnerability.
    Source code(tar.gz)
    Source code(zip)
    plume-postgres.tar.gz(26.69 MB)
    plume-sqlite.tar.gz(26.69 MB)
  • 0.6.0(Dec 30, 2020)

    We are pleased to announce this new alpha version of Plume. It includes a security fix. All administrators are encouraged to update it. Also, now the development gets more slower. It might be better for you to consider other software such as WriteFreely and WordPress's ActivityPub plugin, although it is still alive.



    • Vazir font for better support of languages written in Arabic script (#787)
    • Login via LDAP (#826)
    • cargo-release (#835)
    • Care about weak ETag header for better caching (#840)
    • Support for right to left languages in post content (#853)


    • Bump Docker base images to Buster flavor (#797)
    • Upgrade Rocket to 0.4.5 (#800)
    • Keep tags as-is (#832)
    • Update Docker image for testing (#838)
    • Update Dockerfile.dev (#841)


    • Recreate search index if its format is outdated (#802)
    • Make it possible to switch to rich text editor (#808)
    • Fix margins for the mobile devices (#817)
    • GPU acceleration for the mobile menu (#818)
    • Natural title position for RtoL languages (#825)
    • Remove link to unimplemented page (#827)
    • Fix displaying not found page when submitting a duplicated blocklist email (#831)


    • Validate spoofing of activity

    Updating your instance

    Please refer to our documentation for the update procedure.

    Source code(tar.gz)
    Source code(zip)
    plume-postgres.tar.gz(22.86 MB)
    plume-sqlite.tar.gz(22.88 MB)
  • 0.5.0(Jun 21, 2020)

    We are pleased to announce this new alpha version of Plume. It is a bit smaller than previous release, the development slowed down a bit, but the project is still alive!


    New features

    • Email blocklisting (#718)
    • Syntax highlighting (#691)
    • Persian localization (#782)
    • Switchable tokenizer - enables Japanese full-text search (#776)
    • Make database connections configurable by environment variables (#768)


    • Display likes and boost on post cards (#744)


    • Fix parsing of mentions inside a Markdown code block (be430c6e6c46f249be74715727b756a30188b42f)
    • Fix RSS issues (#720)
    • Fix Atom feed (#764)
    • Fix default theme (#746)
    • Fix shown password on remote interact pages (#741)
    • Allow unicode hashtags (#757)
    • Fix French grammar for for 0 (#760)
    • Don't show boosts and likes for "all" and "local" in timelines (#781)
    • Fix liking and boosting posts on remote instances (#762)


    • Rust 2018 (#726)
    • Bump to LLVM to 9.0.0 to fix ARM builds (#737)
    • Remove dependency on runtime-fmt (#773)
    • Drop the -alpha suffix in release names, it is implied that Plume is not stable yet because of the 0 major version (Plume 1.0.0 will be the first stable release).

    Updating your instance

    Please refer to our documentation for the update procedure.

    Source code(tar.gz)
    Source code(zip)
    plume-postgres.tar.gz(20.09 MB)
    plume-sqlite.tar.gz(20.13 MB)
  • 0.4.0-alpha-4(Dec 23, 2019)

    The release article is available on our blog.


    New features

    • Add support for generic timeline (#525)
    • Federate user deletion (#551)
    • import migrations and don't require diesel_cli for admins (#555)
    • Cache local instance (#572)
    • Initial RTL support #575 (#577)
    • Confirm deletion of blog (#602)
    • Make a distinction between moderators and admins (#619)
    • Theming (#624)
    • Add clap to plume in order to print help and version (#631)
    • Add Snapcraft metadata and install/maintenance hooks (#666)
    • Add environmental variable to control path of media (#683)
    • Add autosaving to the editor (#688)


    • Update follow_remote.rs.html grammar (#548)
    • Add some feedback when performing some actions (#552)
    • Theme update (#553)
    • Remove the new index lock tantivy uses (#556)
    • Reduce reqwest timeout to 5s (#557)
    • Improve notification management (#561)
    • Fix occurrences of 'have been' to 'has been' (#578) + Direct follow-up to #578 (#603)
    • Store password reset requests in database (#610)
    • Use futures and tokio to send activities (#620)
    • Don't ignore dotenv errors (#630)
    • Update default license (#659)
    • Paginate the outbox responses. Fixes #669 (#681)
    • Use the "classic" editor by default (#697)
    • Fix issue #705 (#708)


    • Remove r (#535)
    • Fix certain improper rendering of forms (#560)
    • make hashtags work in profile summary (#562)
    • Fix some federation issue (#573)
    • Prevent comment form submit button distortion on iOS (#592)
    • Update textarea overflow to scroll (#609)
    • Fix arm builds (#612)
    • Fix theme caching (#647)
    • Fix issue #642, frontend not in English if the user language does not exist (#648)
    • Don't index drafts (#656)
    • Fill entirely user on creation (#657)
    • Delete notification on user deletion (#658)
    • Order media so that latest added are top (#660)
    • Fix logo URL (#664)
    • Snap: Ensure cargo-web doesn't erroneously adopt our workspace. (#667)
    • Snap: Another fix for building (#668)
    • Snap: Fix build for non-Tier-1 Rust platforms (#672)
    • Don't split sentences for translations (#677)
    • Escape href quotation marks (#678)
    • Re-add empty strings in translation (#682)
    • Make the search index creation during migration respect SEARCH_INDEX (#689)
    • Fix the navigation menu not opening on touch (#690)
    • Make search items optional (#693)
    • Various snap fixes (#698)
    • Fix #637 : Markdown footnotes (#700)

    Internal (refactoring, CI, etc.)

    • Upload artifacts to pull request deploy environment (#539)
    • Remove Canapi (#540)
    • Make comments in styleshhets a bit clearer (#545)
    • Rewrite circleci config (#558)
    • Use openssl instead of sha256sum for build.rs (#568)
    • Upload artifact of wasm binary (#571)
    • Update dependancies (#574)
    • Fix Crowdin upload (#576)
    • Refactor code to use Shrinkwraprs and diesel-derive-newtype (#598)
    • Add enum containing all successful route returns (#614)
    • Update dependencies which depended on nix -- fixes arm32 builds (#615)
    • Update some documents (#616)
    • Replace the input! macro with an Input builder (#646)
    • Update dependencies (#643)
    • Remove use of rust in migration (#704)
    • Fix lettre (#706)
    • Make the comment syntax consistent across all CSS (#487

    Updating from Plume 0.3.0

    Please follow theses instructions.

    Installing Plume 0.4.0

    Please follow theses instructions.

    Source code(tar.gz)
    Source code(zip)
    plume-postgres.tar.gz(18.64 MB)
    plume-sqlite.tar.gz(18.67 MB)
  • 0.3.0-alpha-2(Apr 19, 2019)

    Notable changes

    • Cover for articles (#299, #387)
    • Password reset (#448)
    • New editor (#293, #458, #482, #483, #486, #530)
    • Search (#324, #375, #445)
    • Edit blogs (#460, #494, #497)
    • Hashtags in articles (#283, #295)
    • Federation improvements (#216, #217, #357, #364, #399, #443, #446, #455, #502, #519)
    • UI usability fixes (#370, #386, #401, #417, #418, #444, #452, #480, #516, #518, #522, #532)
    • API endpoints (#245, #285, #307)
    • A bunch of new translations! (#479, #501, #506, #510, #512, #514)
    • Improved build process (#281, #374, #392, #402, #489, #498, #503, #511, #513, #515, #528)

    For a more detailed changelog, please see the New Plume Alpha article.

    How to install a new instance

    Check out our installation documentation.

    How to update your instance

    We consider you were running the first alpha, and you installed Plume from source. If it is not the case, some commands may be unnecessary (feel free to ask on Matrix if you are not sure what to do).

    Run these commands, replacing DATABASE with either postgres or sqlite depending on what you use.

    cargo install diesel_cli --no-default-features --features DATABASE --version '=1.3.0' --force
    cargo install cargo-web
    cargo web deploy -p plume-front
    cargo install --no-default-features --features DATABASE --force
    cargo install --no-default-features --features DATABASE --path plume-cli --force
    diesel migration run
    plm search init

    Then update your config to add mail server settings:


    Finally, restart plume with one of these commands, depending on your init system:

    sudo systemctl restart plume
    # Or
    /etc/init.d/plume stop && /etc/init.d/plume start
    # Or
    service plume.service restart
    Source code(tar.gz)
    Source code(zip)
    plume-postgres.tar.gz(25.94 MB)
    plume-sqlite.tar.gz(25.90 MB)
  • 0.2.0-alpha-1(Apr 20, 2019)

    Originally released on September 12, 2018

    • Article publishing, or save as a draft
    • Like, or boost an article
    • Basic Markdown editor
    • Federated commenting system
    • User account creation
    • Limited federation on other platforms and subscribing to users
    • Ability to create multiple blogs

    The changelog bellow is no longer available:

    https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-may-2018/ https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-june-2018/ https://baptiste.gelez.xyz/~/PlumeDevelopment/this-month-in-plume-july-and-august-2018/ https://baptiste.gelez.xyz/~/PlumeDevelopment/plume's-first-release/

    Source code(tar.gz)
    Source code(zip)
Federated blogging (we moved to git.joinplu.me)
🐀 Building a federated alternative to reddit in rust

Lemmy A link aggregator / Reddit clone for the fediverse. Join Lemmy · Documentation · Report Bug · Request Feature · Releases · Code of Conduct About

LemmyNet 7.2k Jan 3, 2023
Federated Mint Prototype

MiniMint is tested and developed using rust stable, you can get it through your package manager or from rustup.rs.

FediMint 293 Jan 5, 2023
🐀 Building a federated link aggregator in rust

English | Español | Русский Lemmy A link aggregator / Reddit clone for the fediverse. Join Lemmy · Documentation · Report Bug · Request Feature · Rele

LemmyNet 7.2k Jan 2, 2023
First Git on Rust is reimplementation with rust in order to learn about rust, c and git.

First Git on Rust First Git on Rust is reimplementation with rust in order to learn about rust, c and git. Reference project This project refer to the

Nobkz 1 Jan 28, 2022
Do the RWKV thing, but now in Rust with GGML

RWKV, but in Rust with ggml A project which reimplementation llama.cpp in rustformers/llm style. Current situation Performance issue: current version

YorkZero 4 May 6, 2023
Coreutils - upstream mirror

These are the GNU core utilities. This package is the union of the GNU fileutils, sh-utils, and textutils packages. Most of these programs have sign

null 3.2k Jan 1, 2023
mass surveillance for block game - mirror

Snowstorm mass surveillance for block game Yet another Minecraft Server Scanner Scan the entire ipv4 address space for Minecraft servers, with dynamic

null 11 Mar 2, 2024
Achieve it! How you ask? Well, it's pretty simple; just use greatness!

Greatness! Achieve it! How you ask? Well, it's pretty simple; just use greatness! Disclaimer I do not believe that greatness is the best. It fits a me

Isacc Barker (Milo Banks) 107 Sep 28, 2022
Just a bot for Neovim's Matrix room(s)

nvim-matrix-bot Currently just supports replying to messages with :h <some_doc> or similar in them with a link to the docs on Neovim's website. Plan i

null 8 Aug 6, 2022
Gnu-copypasta-maker - You'd just wanna interject for a moment!

GNU Copypasta Maker To compile, use make. To install, use sudo make install or if you are root make install To uninstall, use sudo make uninstall or i

Ahmet Efe AKYAZI 3 Jan 30, 2022
Just toying with rust, nothing to see here :)

Just toying with rust, nothing to see here :)

Alexander Schüssler 1 Feb 24, 2022
🖊️ Just a place to paste

Just a place to paste API GET /p/:id - Get a paste by ID POST /p/n - Post a new paste GET /s - Get stats about the zer0bin instance Public instances S

mellowmarshe 68 Dec 28, 2022
A simple library with just one struct which is used to wrap around pointers

A simple library with just one struct which is used to wrap around pointers. This can be used to create pointers and share them across threads without the hassle of synchronization if you really do not care about that.

null 1 Apr 11, 2022
Just a personal Rust Playground to play around and understand the language.

Rust Proactive Introduction The code is a bit messy but it serves just as a personal Rust Playground to play around and understand the language. You c

Fernando Cejas 3 Dec 21, 2022
🖊️ // Just a place to paste

Just a place to paste Features ✨ Code highlighting and line numbers (default) ?? Markdown rendering (click the button) ?? Single-view pastes (click th

zer0bin 68 Dec 28, 2022
simple lottery maker made with rust, just web framework

Toy project for fun It's just for fun! making plausible lottery numbers for Korea made with rust This lottery web framework generates and presents pla

yacho (bakjuna) 4 Nov 24, 2023
QueingSimulator is an application that can be used to build intuitions about behavior of synchronous request/reply systems

Queueing Simulator QueingSimulator is an application that can be used to build intuitions about behavior of synchronous request/reply systems (such as

Joe Magerramov 7 Sep 11, 2022
Simple tray application which shows battery level for HyperX Cloud Flight Wireless Headset.

HyperX Cloud Flight Battery Monitoring Introduction Simple tray application which shows battery level for HyperX Cloud Flight Wireless Headset. Screen

Stefan Kondinski 18 Dec 27, 2022
An application for reading comics together.

Shared comic reader Creates a web server that serves image sets to one or more clients. When one of those clients turns a page, all other clients who

null 0 Dec 17, 2021