Show HN: Graphite Publishing – A decentralized, user owned blogging platform
publishing.graphitedocs.com
publishing.graphitedocs.com
Otherwise I know this was a fun project, but it always helps to hone in on your audience on the landing page. Answer, Who's going to appreciate this the most?
Just so it's covered here, Blockstack is a decentralized application platform. It provides an authentication strategy that anchors your username/ID to the bitcoin blockchain. The benefit of this is not having to rely on a central authority for your username. Example: Google could terminate your access to your gmail account anytime they want. Graphite/Graphite Publishing can't do that with your Blockstack username.
As for your question about who would appreciate this most, I think Graphite Publishing is probably going to benefit people already interested in decentralization the most initially. However, it really does provide a more secure solution than using something like Squarespace, for example. If we stick with the Squarespace example, your content (design and words) are stored in Squarespace's database. The content can be accessed and changed (or deleted) by Squarespace at any time. With Graphite Publishing, your content is stored either in the default storage hub provided by Blockstack and encrypted, or it's stored in your own custom storage hub if you so choose. In either case, the content can't be accessed by anyone other than the user creating that content.
Again, thanks so much for the feedback! I really appreciate it.
There are two aspects of this implementation:
1. The Blockstack naming system is used to associate an immutable user identity with the routing path to their storage, for reads and writes.
For an application to store data in the gaia hub, they must sign a challenge text proving they have been whitelisted to write that data, but the data is associated with the users gaia hub.
If the user leaves the platform, all of their data is with them in their gaia hub, which can be used by another app (maybe a competing blogging app for example?).
2. Users host their own gaia hubs.
Right now, the barrier is high for people hosting their own gaia hubs, so Blockstack provides a default one that is associated with their identity, so the average user can focus on using the applications on Blockstack and less on the system administration like overhead in setting up a gaia hub.
However, this user onboarding default does not override the ownership the user has in that their id is the one whitelisting applications and allowing applications to store data, which they can then own and use in other places, or disconnect their gaia hub and simply keep the data as their own personal HD with user addressable content even if they did not want to use it anywhere else, with other apps, etc.
Users can host their own gaia hubs. We are working on migrations, images available on platforms and publishing instructions for how to utilise DO spaces and S3 in addition to the driver functionality that exists now for things like Azure blob storage and S3 buckets.
The newer development is focused around automating the driver with local disk so the same set up can be ported to images on the cloud as well as users hosting their own gaia hubs on a server somewhere. For example, many of our enthusiasts are asking how to host them on a rasberry pi.
Let me know if this answers your question. I would also love feedback or ideas in general.
So stay tuned.
I personally find Digital Ocean to be the most user friendly, so we are trying to lower barriers to make it as easy as possible to roll out gaia hubs by providing instructions for these kind of platforms.
We are also rolling out instructions and images for the major cloud hosting platforms. If you have any preferences for a particular platform you would like supported or any other feedback, let me know.
Currently on master branch, gaia supports the following drivers:
Amazon S3, Azure Blob Storage, Local disk (you must set up static web-hosting to point at this driver), and Google Cloud Storage
You can learn more about how to set up your own gaia hub here: https://github.com/blockstack/gaia/blob/master/hub/README.md
Gaia is not necessarily dependent on Blockstack, but it was designed to be modularized within this design, so users can control where their data is stored, which is not necessarily the case with IPFS.
It is pretty darn cool :)
Let us know if you have any more questions.
1) Encryption. Your content is encrypted with keys that you and you alone control. If there was ever a breach of your self-hosted WordPress server, all of your content (in progress or not) would be freely readable. With Graphite Publishing, your in progress posts are encrypted and in the unlikely event of a breach of the storage provider of your choice, your private, in progress posts would not be readable.
2) The application is managed for you. No downloading. No deployment. No choosing hosting providers. Some people like all that. A lot of people don't.
This is not to say Graphite Publishing is better than WordPress. WordPress has significantly more features at this stage, but I consider this the groundwork to creating something far better.
Block-chain: Solving imaginary problems that nobody has -- and doing a terrible job at it
I’m approaching this space in another way (search: “iSpooge Live”). I have an RSS/ActivityPub-like feed and reader pair, with network address as identity, generated statically and exposed via CDN w/ long cache TTLs. Sovereignty is the m.o. of the stack.
Great question!
Unfortunately, the Blockstack Browser (which is necessary for authentication) only works on those browsers if you download the local version here:
https://blockstack.org/install
That should be resolved very soon. All other browsers should not require that extra step.
I'm Justin Hunter, the founder of Graphite. Graphite is a decentralized and encrypted productivity suite, but the original app stemmed from my desire to own my writing. I'm a writer at my core, not a programmer, so anything tied to writing is always important to me, including blogging.
As a fun side project/experiment as an extension of the core Graphite product, I built Graphite Publishing. It uses Blockstack's authentication system for decentralized usernames, and it uses Blockstack's Gaia storage for decentralized storage. What this means is that Graphite Publishing never has access to any of your blog posts. Everything is encrypted until the moment you choose to publish it publicly.
The cool thing, in my opinion, is that you can design your entire site. Graphite Publishing has a built-in HTML editor for your main page and your individual posts page. Much like the old days of Blogger, where you could tinker with the underlying code, Graphite Publishing lets you customize your blog as much as you want...but it's much simpler than Blogger ever was ;)
It's still very much a beta product and will surely have bugs, but I'm excited to get some feedback and see what the community thinks.
Thanks!
It works well in Chrome, and it seems quite user-friendly. It looks like the posts/actual site won't really load—or they partially load. But the story editing, etc works well— just maybe focus on the UX a touch—make publishing the post easier to find.
Now for the stuff that always bothers me about decentralized publishing platforms like this—
if nobody can remove or alter your content, what is preventing people from posting harmful content (need I explain)? It also doesn't sound like there's any recourse for removal. It also sounds like you intend to monetize the platform, or at least parts of it. This could render you a provider of paid services to people who wish to find a space for permanently publishing those kinds of materials.
As a comparison, a publishing house would not print child pornography in the name of free speech. They're operating a business— it would be suicide.
I've just never heard a good answer to that one, so I'm curious about your take.
Blockstack uses a storage system called Gaia, which in a nutshell acts as an overlay on top of existing commodity storage systems (including cloud storage, your personal server, decentralized storage systems, etc.). Blockstack apps like Graphite Publishing interact with the user's data via the user's preferred Gaia hub. The Gaia hub holds the user's storage credentials (if applicable) and uses a storage driver to store data to the underlying storage system, so applications don't have to care about interfacing with a specific storage implementation (Gaia and Blockstack implement their own authentication mechanism for applications). In the default on-boarding flow, you get signed up to use a Gaia hub that uses Azure blob storage to host and serve data.
That said, if the operator of your Gaia hub's underlying storage system can determine that content you store is objectionable, then it would be obliged to take it down. However, to prevent such power from being abused, the user has the ability to switch Gaia hubs and migrate their data between Gaia hubs. If you notice someone storing objectionable material in Blockstack, you should notify the user's Gaia hub's storage provider so they can take the appropriate action.
We are looking to host a gaia website in the future to make it easier to find and easier for users to host gaia hubs in general.
Let me know if you have any feedback about gaia in particular.
Graphite cannot remove content. However, users are either choosing the storage provider supplied for free by Blockstack, or they are providing their own storage provider. Those storage providers can absolutely still shut down an account if there is illegal activity. So, unlike a p2p decentralized system like IPFS, addressing illegal content is pretty straight forward.
If it comes to Graphite's attention, we can notify the user's storage provider and they can take appropriate action. Additionally, another important point to make here is this is not the dark web. Users are more or less known. So law enforcement can take action as well.
Does that make sense? It's a really important question so I want to make sure it's addressed fully. Thanks!
The other commenter (jude-) explained more about the stack, which helped to make more sense of it. I had in mind a system more like IPFS.
The following are some functionalities unique to gaia, without the unpredictable lookup performances associated with ipfs.
With gaia, you can control where the data is stored, on your own server, a cloud hosting provider of your choice, etc.
Data is read write.
Writes permissions can be delegated.
Gaia can be used with an API where developers, like the developers of Graphite, can build applications on top of it without explicitly dealing with a blockchain using traditional knowledge of javascript or other front end languages and frameworks.
Listing permissions can be delegated.
Data is globally addressable.
It supports multiple backends natively, which supports users choosing where their data is hosted.
In IPFS, data may be initially hosted on just your server, but duplicated elsewhere when a call is made to it.
Like IPFS, it does not need a cryptocurrency to work, and space is reclaimed when data is deleted.
That being said, IPFS is very popular. We are working on ipfs drivers for gaia along with others. For now, we have prioritized drivers for cloud hosting providers to help users gain more control of where their data is stored and hosted.
Yet another example of solutions trying to seek a problem
Does blogging need block chain? Can't you be decentralized and encrypted without BC? From what I'm aware, the benefit of BC is that you get an audit-able history. Do we need that here? Like I get that it can serve as a backup, but does that work in practice? By using BC here can I roll back my blog (like in git)? And do you really need a full history? Couldn't you do just like 10 revisions? I'd even argue that a complete history could be dangerous.
This is a fundamental question that I have with block chain. It seems really cool, but from what I understand, there are other tools that solve these problems, don't require as many resources, and work faster.
Am I wrong in this? If so can someone explain?
If I'm right, can someone expand?
All data is stored in the storage hub of the user's choosing rather than being stored in a database centralized to Graphite Publishing. In fact, Graphite Publishing doesn't have access to anyone's data.
But you're right, a blockchain is not necessary for decentralized blogging and is not used for data storage at all in this app.
I suspect most users don't like dealing with multiple services for the same thing.
Logging in with Google or Facebook or any other third party service is probably the biggest problem with traditional apps. Perhaps more so than them storing your data. Sure, they can (and have sold user data), but if these providers are the owners of your digital identity, they also control whether or not you have access.
Slack, Twitter, Google, et al have been known to lock people out of their accounts without warning.
edit: sorry for reply to wrong post. Should have responded to jhunter1016 below.
if Bitcoin was under 51% attack, then we would simply accept the name state on the best fork. To learn more about how we would handle this case, you can look here: https://forum.blockstack.org/t/bitcoin-network-disruption/13...
Blockstack Core implements BNS and Atlas, the storage routing system for Gaia. Blockstack Core nodes form the backbone of the Blockstack network. Each node indexes the Bitcoin blockchain and maintains a full replica of all names, public keys, and storage routing information. This makes the Blockstack network particularly resilient to node failure---applications only need to talk to a single Blockstack Core node to work, and a new or recovering node can quickly reconstruct all of its missing state from its peers.
All Atlas nodes lie on top maintain a 100% state replica, and they organize into an unstructured overlay network. The unstructured approach is easier to implement, has no overhead for maintaining routing structure and is resilient against targeted node attacks. When a new Atlas node boots up, it first gets the index of all data keys and hashes of values stored in the blockchain. After getting the index, Atlas nodes talk to their peers to fetch key/value pairs they dont have. The Atlas network implements a K-regular random graph.
Let us know if you have any more questions.
1. How do you plan to make money with this?
2. If the data is owned by me, is there also an easy way to get all my blog posts out of the system in a usable format (e.g. so I could put it on my own server later)?
Quite honestly, we may not ever charge for this product. But some ideas are:
-Provide a custom Gaia Hub with encrypted storage that has higher limits than the default Blockstack hub. -Charge for additional features (integrations, team publications, etc) -Just charge a small amount for access and allow those who don't want to pay that the option to clone the open source repo and deploy it themselves
An export feature will be built into Graphite Publishing (much like the one that already exists in Graphite). But one of the core tenets of data ownership is you should not need to rely on the app to access your data. In that vein, there is still work to be done. But it is already possible to use the command line to export all your data without ever touching Graphite Publishing.
All content is in HTML format, so it should be usable in many different apps.
You can use the gaia cli to list all the files you have.
You can host your own gaia hub, or have a default hosted configuration, but still it is associated with your username/identity.
We are working on gaia hub migrations so you can easily migrate data from one place to the other. Soon we will have images to auto launch on most cloud hosting platforms. The docker-compose files should allow for setup on a local server as well. I am prioritizing users hosting gaia hubs on their own servers over any cloud host provider.
Let me know if you have any more questions.
But yes, the entire idea is centered around #2.
https://yourname.com/sites/[yourblockstackid]
But it's definitely an option! In fact, we deployed an example of this to another Blockstack app (Xor) that hosts static content and it worked like a charm.