[Markdown] 

Hubzilla Project: Home

Contents

    What is Hubzilla?

    Hubzilla is a free and open source decentralized communication and publishing platform that enables you to control access to your content by automatic encryption and finely grained access control. While the name "Hubzilla" is relatively new, the software itself has been evolving for many years. Read more...

    Where can I find more documentation?

    This wiki is designed to supplement the native documentation in the Hubzilla help pages, which are included with the core Hubzilla code.

    Some important terminology

    Term Definition
    hub An instance of the Hubzilla software running on a standard web server
    grid The global network of hubs that exchange information with each other using the Zot protocol.
    channel The fundamental identity on the grid. A channel can represent a person, a blog, or a forum to name a few. Channels can make connections with other channels to share information with highly detailed permissions.
    clone Channels can have clones associated with separate and unrelated accounts on independent hubs. Communications shared with a channel are synchronized among the channel clones, allowing a channel to send and receive messages and access shared content from multiple hubs. This provides resilience against network and hardware failures, which can be a significant problem for self-hosted or limited-resource web servers. Cloning allows you to completely move a channel from one hub to another, taking your data and connections with you. See nomadic identity.
    nomadic identity The ability to authenticate and easily migrate an identity across independent hubs and web domains. Nomadic identity provides true ownership of an online identity, because the identities of the channels controlled by an account on a hub are not tied to the hub itself. A hub is more like a "host" for channels. With Hubzilla, you don't have an "account" on a server like you do on typical websites; you own an identity that you can take with you across the grid by using clones.
    Zot The novel JSON-based protocol for implementing secure decentralised communications and services. It differs from many other communication protocols by building communications on top of a decentralised identity and authentication framework. The authentication component is similar to OpenID conceptually but is insulated from DNS-based identities. Where possible remote authentication is silent and invisible. This provides a mechanism for internet-scale distributed access control which is unobtrusive.

    Context Help Translations

    Context Help Translations

    Plugins

    Here's a partial list of available plugins, including both official and community plugins.

    The official Hubzilla plugin repository is located here: https://github.com/redmatrix/hubzilla-addons

    Note that community plugins are unofficial and not supported by the Hubzilla project. They are listed here for convenience and accessibility only. There is no guarantee that the code is not dangerous or malicious The hub admin is ultimately responsible for evaluating these community plugins prior to installation.

    Frequently asked questions

    I'm trying to understand the complex permissions in Hubzilla and just want to know if got it right. Can you clarify some things?

    1. There are two different methods to manage my privacy: permission roles and access control
    2. The different permission roles define the permission limits. I can use predefined roles or edit individually any permission setting by choosing the 'exper/custom mode'. Is there a mapping between the different permission roles and the permission settings? I.e. 'Social - mostly public' corresponds to which settings in the 'Custom/Expert mode'?
    3. I can change these permissions for individuals or guest tokens, but I cannot deny permissions which are set by my permission role. I can only give more permissions to an user.
    4. When there are is no access control for a published thing, the permission limits apply.
    5. I.e. when I share a new item I can set the access control to this item. I can choose who can see this (public, individuals, groups)by using the lock. How is this list I can choose from restricted by my permission role?

    Mostly correct.

    1. There are two different methods to manage my privacy: permission roles and access control

    At the base level we have permission limits and access control. If you have anything in the access control list, it takes priority. If you remove everything from the access control list, the limits take priority (see #4). The 'public' selection in the ACL tool basically removes everything from the access control list. Permission roles define the defaults, but you can often over-ride these for any published thing. So if you've got a 'mostly private' channel, you can still make something public, and if you've got a 'mostly public' channel you can still make things private by using the ACL tool. But by default the ACL tool will be preset for your preferred way of interacting.

    1. The different permission roles define the permission limits. I can use predefined roles or edit individually any permission setting by choosing the 'expert/custom mode'.

    Almost. Permission roles in fact set all kinds of different things to implement the named role. Such as setting default limits, whether or not there is a default ACL (usually the Friends group), and whether or not to automatically approve connections, and what permissions to give new connections. There are technically three tables working together. Limits, the default ACL, and connect permissions. Additionally there are obscure settings such as 'auto-approve', hide online presence, show in directory, and auto-add new connections to your Friends group. All of these settings are available in expert/custom mode, but using the named roles makes it much easier to get what you want without a lot of fuss.

    1. I can change these permissions for individuals or guest tokens, but I cannot deny permissions which are set by my permission role. I can only give more permissions to an user.

    This is probably correct.

    1. When there are is no access control for a published thing, the permission limits apply.

    Correct.

    1. I.e. when I share a new item I can set the access control to this item. I can choose who can see this (public, individuals, groups)by using the lock. How is this list I can choose from restricted by my permission role?

    The permission role usually predefines what the ACL contains. The word 'public' will change depending on the permission limits for that type of object, but indicates that the ACL has zero entries. For instance if the limit is 'everybody in the network', you should see that displayed instead of 'Public'.

    For most of the roles, you will have either 'public' or the 'Friends' group chosen in the ACL depending on whether the role is more public or is restricted/private. If you are using expert mode and have modified the default ACL, your custom access list will be automatically selected in the ACL tool.

    Some of the terms get confusing - such as limits vs. roles and should probably have better names. If I was to simplify everything, it would be simply:

    1. Use permission roles if you can because there is a lot of subtle detail involved.
    2. If you must use a custom mode to achieve your goals, start by selecting (and changing to) the closest available role first. Then change the setting to custom/expert and only modify the one or two things you feel you need to adjust for your situation.
    3. in expert mode the 'connection permissions' will be available on the side menu. It's probably important to review this as well as the limits and ACL settings because this determines what permissions are given to somebody you connect with and perhaps it should be located in the permission section with everything else that's related to permissions, but it isn't currently.
    4. (Just to document this) the Diaspora and GNU-Social connectors (and the future ActivityPub connector) use hard-wired connection permissions because many permissions are hardwired by those networks' policies and over-riding them is likely to cause inter-operability issues.

    I would like to make channel which is publishing rss feeds. But don't know how. Can someone point me to the solution?

    Visit your Connections page and add a new connection. Provide the URL of the feed. We'll attempt auto discovery of the feed if you supply the link to the corresponding HTML page but a lot of corporate sites stopped supporting auto discovery so if this fails, supply the feed URL. This will connect the channel to the feed but not republish it.

    This next bit requires a techlevel of 3 (Advanced) if you're on a 'pro' server. Set the techlevel (if necessary) on Settings -> Account page. On 'standard' servers this setting does not exist, but you also won't need it.

    Visit Settings -> Additional Features and enable 'Channel Sources' and save.

    Visit Settings -> Channel Sources and add a new source. Type in part of the name of the feed and it should auto-complete. Make any additional source settings here that you desire and save. This will republish the feed.

    I am unable to use Wiki despite of enabling the Wiki plugin. I can not see Wiki page anywhere in my profile. Do I need to do something else to make it work ?

    The plugin is meant to read wikis from an older version. The newest wiki can be found on the apps page, accessible by clicking on the top right menu button, then chosing "add apps". You can pin apps to the app menu by clicking on the star on the bottom left of each app.

    There is a menu at the upper right corner. There is "Add Apps".

    If running in "professional" hub mode, you must first increase the tech level in your channel account settings so you can access the additional features settings page, where you enable the wiki for your channel.

    Can't the wiki page be seen beside general post section, so that who ever comes to the profile page can have a direct look at it? Its hidden under the side menu bar where there is less chance to be seen by general public.

    This is a content management system so yes this can be accomplished in a number of ways. First you may need to enable webpage creation in your feature settings. Then visit the webpage-tools page and create a menu containing your wiki. In your channel settings you will then find an entry at the bottom ('miscellaneous settings') that let's you add a custom menu to your "profile". Select the menu you created and it will show up on the sidebar of your channel's pages.

    That's the easiest way. You can also change your entire channel page to display pretty much whatever you want and add/remove different widgets or add custom blocks/ menus/ content/ whatever to the page as desired or change the layout and theme to your liking. It's completely under your control.

    We keep this stuff hidden behind a curtain because a lot of folks can't handle this level of control and run away screaming that they aren't smart enough to use this software. But once you've peeked behind the curtain you'll realise that anything is possible.

    I can't communicate with people using OStatus or Diaspora. Is that because of missing plugins on the instance I'm using, or is this at the moment not available? I can do all this in Friendica. What is the reason for not having it available in Hubzilla?

    We think nomadic identity is the most important feature of any decentralised communication system and we think it's critically important that it works correctly out of the box. As soon as you include friends from non-nomadic networks it loses its usefulness in a big way because these other networks don't support nomadic use. Diaspora and GNU-Social are incompatible with nomadic identity. Hubzilla is not by design a federated communications system like Friendica. It was designed to be used in different ways - as personal cloud storage and content management and private media access. The protocols mentioned were provided as optional addons for those who are primarily interested in the social network aspects of hubzilla and care a bit less about these other advanced features or are willing to live with the short-comings of having friends on networks that don't have these features. Traditionally these addons are provided 'as-is'. We know that a lot of Hubzilla features don't work correctly with either and probably never will be compatible because we're providing functionality and features that are light years ahead of them.

    So... we want you to decide if you want to allow them both on a site level, and also on a personal level.

    At the site level, enable Diaspora Protocol and GNU-Social Protocol plugins. Then each channel which wishes to use these needs to enable them individually from Settings -> Addon/Feature Settings. It's possible for site admin to enable this for all site members, but isn't done by default for the above reasons.

    Also there have been huge changes in both of these connectors over the last 2 months and they will work best from code in the 'dev' repository rather than 'master' which uses the "old" Diaspora protocol and the GNU-Social protocol has serious issues with Mastodon (which had a bug in their salmon implementation that took a lot of time and effort to discover and work around).

    How does Hubzilla ensure your content gets deleted on a remote hub? Surely the administrator of the remote hub would be able to configure their Hub to not delete any recieved content?

    Nothing prevents a rogue admin from refusing requests to delete content on their hub. They have complete control over that hub and can modify the software to do what they wish. For the rest of the network running official versions of Hubzilla, items are marked as deleted for a period before they are truly removed. The deleted item often contains information about who it was delivered to. We need that information to send the deletion messages to all the right places (and they can be queued for a few days). We also provide updates in our feeds about these deleted items which can federate to things like drupal that imported our feed. So we need to provide time for all these delete messages and notifications to work their way through the system before we can physically remove the item from the database.

    We also used to null out the message content when we deleted something, but this turned out to be a bad decision because the content can contain delivery instructions (such as forum tags). We need those delivery instructions to ensure the forum receives the message to delete the content (and forwards it appropriately).

    Some questions about channels

    1. In the settings for a channel there is the possibility to "Expire other channel content after this many days" what's meant with "other"?

    2. Are only posts exported? what about the pictures containing these posts?

    3. Are the complete settings exported? What about addons?

    4. Is a channel export useful as a backup? Can this backup used for a restore if my channel gets damaged?

    5. Is the export of a particular year/month only contents? Can this be imported on a different hub to a different channel?

    6. Is there a difference in importing channels via file or importing via network?

    7. Is there a best practice in how to clone channels? Or is this just export, import on other hub, select primary channel?

    8. How do you move a channel? Export, import, delete or deactivate old channel?

    9. If you delete a channel:

      • will my channel automatically disappear from my connections?
      • will there be a notification to the connections of my channel?
      • what happens to my posts?
      • what happens to my data, database entries?
      • what happens if I export my channel, remove it and import it again on the same server?
    10. what happens with my clones if I remove my primary channel?

    11. what happens with my posts when I remove a clone (not primary)

    Answers:

    1. posts that were created by a different channel.

    2. Export exports everything that belongs to you. Posts and stored files (including photos) are handled separately because of memory usage.

    3. Settings are exported as well as addon settings.

    4. Yes. Yes.

    5. Yes. Yes.

    6. Not really.

    7. Best practice would be to create a clone very soon after creating a channel. This way files and photos will be synced from the start. Syncing files and photos afterwards is possible but may require a bit of hand holding and is not very seamless.

    8. Recent versions (2.x or later) allow you to move a channel. It currently works by making the original channel "read-only". This way you can still migrate files and photos and content if you have a large quantity of any of these. You cannot use the original channel to post new content and any later changes will not be synced.

    9. If you delete a channel:

      • will my channel automatically disappear from my connections? yes

      • will there be a notification to the connections of my channel? no

      • what happens to my posts? deleted (though federated deletion could take several days)

      • what happens to my data, database entries? gone (the channel record remains as a security measure for the Diaspora network)

    How do you switch a hub to the dev branch?

    Assuming that you installed your hub web root at /path/to/hub/webroot and that you installed the addons repo under the name "official", the following commands will switch your hub to the dev branch

    cd /path/to/hub/webroot
    git checkout dev
    cd extend/addon/official
    git checkout dev
    cd /path/to/hub/webroot
    util/update_addon_repo official
    

    Questions about channel migration

    Can I rename an existing channel

    If you mean the username, not currently on the same site. You can do it on two sites by modifying a JSON export file and editing channel['channel_address']. The clone will get the new username. Moving this back to the first site will require a wizard.

    If I import the profile to the other hub and make that the primary hub, what does that mean and can I remove the old channel if I like to?

    It means that profile links on other sites will point to the new primary hub. You can remove the old channel.

    How will it work from a users point of view with a channel on two nodes?

    Assuming everybody involved uses Hubzilla, it just works. You can post from and access your channel from either site. Changes are synced between the two sites.

    If I create a new channel with a better selected name and do export/import via JSON-files, will I get my contacts into the new channel then?

    No.

    Is there a mobile app being developed for Hubzilla?

    Hubzilla does not currently have a dedicated mobile app, but there has been some exploratory work by a very inexperienced developer. The browser-based interface has been the focus of development because it is the most compatible and because the number of developers is so small. If you have mobile app development experience and would like to help make one for Hubzilla, you would be very welcome to do so.

    Can I follow #hashtags in Hubzilla?

    Hubzilla allows you to search for items tagged with a #hashtag by clicking on the hashtag, but results include only items from the originating hub. Hashtags are not federated, because decentralized search is a complex problem that has not been implemented yet in Hubzilla. Typically in Hubzilla, you follow a channel, which might represent a forum or an individual for example. If you set the permissions for your connection to a channel appropriately, then publications from that channel will appear in your network stream automatically as you would expect when "following" something.

    If you have the Diaspora protocol enabled you should check /settings/featured.

    How do I configure an external SMTP service for hub notification emails?

    The hub admin may install the "PHPMailer" addon (see Plugins Table) and add the following lines to the .htconfig.php file in the hub webroot, customized with the values required by the external SMTP service.

    // PHPMailer addon
    
    App::$config['phpmailer']['mailer'] = 'smtp';
    App::$config['phpmailer']['host'] = 'smtp.example.com';
    App::$config['phpmailer']['port'] = '2525';
    App::$config['phpmailer']['smtpauth'] = 1;
    App::$config['phpmailer']['smtpsecure'] = 1;
    App::$config['phpmailer']['username'] = 'smtp-service-username';
    App::$config['phpmailer']['password'] = 'smtp-service-key';