Rust-Plume 0.7.1: Plume — ActivityPub federating blogging application

icon
Latest Release: 0.7.1

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.

Changelog

Added

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

Changed

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

Fiexed

  • 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)

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.

Features

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:disroot.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.

Comments

  • Read all blogs or articles in someone's profile page
    Read all blogs or articles in someone's profile page

    Mar 10, 2021

    Is your feature request related to a problem? Please describe.

    Now in Plume, when I click into one's personal page, I can only read 6 newest articles, and nowhere shows how many blogs he/she has, or where to read all the other articles of this author.

    Describe the solution you'd like Add an interface/button to show more articles (like "next page" or something)

    Describe alternatives you've considered Or add a button /interface to show all the blogs the author has.

    Additional context Plume: 0.6.1-dev

    Reply
  • Add other users as co-writers to his blog. (For community based blogs)
    Add other users as co-writers to his blog. (For community based blogs)

    Apr 8, 2021

    I would like to use this software to build a community based blog. Could you somehow implement this feature? It would be really very cool if they would add this feature as soon as possible in one of the upcoming versions.

    Thanks

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    Describe the solution you'd like A clear and concise description of what you want to happen.

    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.

    Reply
  • registry.lollipopcloud.solutions/arm64v8/plume not accessible
    registry.lollipopcloud.solutions/arm64v8/plume not accessible

    Apr 11, 2021

    Hello I've been trying to get the registry.lollipopcloud.solutions/arm64v8/plume content on web.archive.org without success. I only managed to get this git-like page from a 2019 backup from which I got it's name's author KemoNine. But in its repository I found nothing about plume unfortunately.

    Has anybody saved its content ? I'm trying to create a docker image to be used on a Raspberry 4 unit.

    Any help would be deeply appreciated.

    BTW I found an existing docker image here and here but couldn't find any way to start it in Docker :-(

    Reply
  • Infinity loop: duplicate key value violates unique constraint
    Infinity loop: duplicate key value violates unique constraint "post_unique_slug"

    Apr 13, 2021

    Hi, sometimes my instance is doing infinity loops with this message in Docker containers:

    plume             | thread 'pool-thread-#5' panicked at 'Article from remote user couldn't be saved: Db(DatabaseError(UniqueViolation, "duplicate key value violates unique constraint \"post_unique_slug\""))', plume-models/src/remote_fetch_actor.rs:76:30
    plume-postgres    | ERROR:  duplicate key value violates unique constraint "post_unique_slug"
    
    • Plume version: Plume 0.6.1-dev with official Dockerfile image
    • Operating system: RaspiOS - Debian Buster with Docker
    • Web Browser: none
    C: Bug 
    Reply
  • BadConnection when configuring for SQLite in Docker
    BadConnection when configuring for SQLite in Docker

    May 20, 2021

    My configuration looks like this:

        DATABASE_URL=/usr/db/plume.db
        MIGRATION_DIRECTORY=migrations/sqlite
        BASE_URL=mission1701.com
        # TODO: Put this in a vault
        ROCKET_SECRET_KEY=a+qtw6697cIF0cmX7dar33s0SU6JrDemIvWCiLYFv0Ub
    

    When I launch Plume, I get the following error:

      $ k logs plume-7c8b66bc8f-jckbh -c install
    Configuration read from /app/.env
    thread 'main' panicked at 'Couldn't connect to the database.: BadConnection("missing \"=\" after \"/usr/db/plume.db\" in connection info string\n")', plume-cli/src/main.rs:35:40
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    
    • Plume version: latest Docker Hub image (0.6.0)
    • Operating system: Whatever is in the Docker image
    • Web Browser: Not applicable
    C: Bug 
    Reply
  • Blog sync with RSS
    Blog sync with RSS

    Jul 21, 2021

    Is your feature request related to a problem? Please describe. I have a Blog on WordPress, but now want it on Plume too. But I am way too lazy to add each Article to Plume by my own.

    Describe the solution you'd like So it would be cool, if I could create a Blog, which is synchronized with an RSS Feed.

    Additional context Obviously, the Article on Plume should Link the Original Article at the End of the Article.

    Edit: I also wanted to open this Issue on the Plume Git, but it didn't send me the authentication Mail…

    Reply
  • 503: Service Unavailable
    503: Service Unavailable

    Nov 13, 2021

    503: Service Unavailable
    
    The server is currently unavailable.
    Rocket 
    

    I repeatedly get this error when trying to publish a post on https://blog.antopie.org

    This has now happend so often and only on this specific route, that I'm beginning to suspect that this is a problem with Plume as well as with the instance.

    Reply
  • Add RSS/Atom Feeds From Any Website
    Add RSS/Atom Feeds From Any Website

    Nov 19, 2021

    Please allow a feature to add any RSS/Atom feeds from any website even outside of the Plume blogging network. This will allow one to use Plume as a RSS/Atom feed for all blogs on the web.

    Reply
  • Blogs tab on users page
    Blogs tab on users page

    Nov 19, 2021

    Please add a Blogs tab on the users page which will reveal what blogs the users is involved with. You can currently view the articles a users is involved with, their subscribers and what they are subscribed to.

    Reply
  • TOTP 2FA
    TOTP 2FA

    Nov 19, 2021

    Please add a TOTP 2FA option for making account more secure.

    Reply
  • Spaces get removed from tags
    Spaces get removed from tags

    Nov 9, 2020

    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;

    image

    image

    • Plume version: 0.4.0
    C: Bug 
    Reply
  • 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"

    Jul 1, 2019

    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!

    Reply
  • Arch Linux Packaging Question
    Arch Linux Packaging Question

    May 14, 2019

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

    ./etc/plume/config
    ./usr/share/licenses/plume/LICENSE
    ./usr/lib/systemd/system/plume.service
    ./usr/lib/sysusers.d/plume.conf
    ./usr/lib/plume/
    ./usr/bin/plume
    ./usr/bin/plm
    

    Here is the systemd file:

    [Unit]
    Description=plume
    
    [Service]
    Type=simple
    User=plume
    ExecStart=/usr/bin/plume
    EnvironmentFile=/etc/plume/config
    WorkingDirectory=/usr/lib/plume
    TimeoutSec=30
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    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 
    Reply
  • Big refactoring of the Inbox
    Big refactoring of the Inbox

    Feb 11, 2019

    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.

    Advantages:

    • 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 
    Reply
  • Liking and boosting posts does not work
    Liking and boosting posts does not work

    Dec 20, 2018

    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 
    Reply
  • arm64v8 builds fail due to outdated dependency
    arm64v8 builds fail due to outdated dependency

    Dec 10, 2018

    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                                                                                                                                                                                          
      |                                             
    [snip]
    
    
    
      = 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 
    Reply
  • Update without script
    Update without script

    Sep 8, 2018

    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 
    Reply
  • cargo release helper
    cargo release helper

    Jun 21, 2020


    how to use?

    cargo release --dry-run --workspace minor
    
    Reply
  • Duplicated articles in timelines
    Duplicated articles in timelines

    Dec 23, 2019

    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 
    Reply
  • plume docker postgres auth fails
    plume docker postgres auth fails

    Oct 5, 2021

    trying to install plume via docker following instructions database cannot connect

    [email protected]:~/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 
    Reply