Just a little feedback: as someone not deep in the blockchain world, I have no idea what Blockstack is, or why nothing happens when I click "sign in" or "start writing now". The page does a good job of describing the product benefits, but it doesn't cover square 1 and describe what I need in order to actually start using the product.
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?
Thanks! This is really helpful. I'll make sure to get the landing page updated.
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.
That clarifies some questions for me: I didn't know that Blockstack stores the content. The Graphite site looks like it's a hosting platform. The marketing angle might rely on getting the platform to look like something different or new, that seems less centralized. I don't know what that is.
The idea is that gaia hubs are owned by the users.
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.
"Blockstack stores the content" -- today this is true in that you are provided with a default storage bucket by Blockstack that amounts to Microsoft Azure space. It's been Blockstack's vision that you could select your own cloud storage upon account configuration (i.e. your own S3/Dropbox/IPFS storage), thus decentralizing your data storage away from the App developer. If you're willing to get your hands dirty, you can theoretically spin up your own Blockstack GAIA node and store your data there instead of the provided defaults. More info here: https://github.com/blockstack/gaia
By the end of this month we will have instructions on how to host your own gaia hub in DO spaces (on Digital Ocean) using the develop branch of gaia in our Blockstack docs located here:
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
Graphite never touches nor has access to any of the data you store. Choosing your own storage provider so you don't have to rely on Blockstack storing your data is quickly becoming much easier than it used to be. In fact, Graphite (the core product) and soon to be followed by Graphite Publishing will likely be one of, if not the, first apps to offer a simple option to plug in the storage provider of your choice.
So Graphite is just kind of like a headless CMS/front-end for drafting your blog content that is hosted/served by Blockstack (or the other storage options that you and others have detailed) ? If that description is close to what this then that sounds pretty darn cool to me..
Blockstack is an architecture which supports gaia storage, wherein the blockstack api supports routing the Blockstack identity via the BNS naming system to the users gaia hub, where they own and store their own data.
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.
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.
Is the system able to be used privately on networks without Internet
access? I think offline use is mandatory (think: RasPi LAN party in Kenya).
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.
Graphite Publishing supports offline storage (not yet implemented but will be soon). But some level of network connectivity is required to at least create your username and sign in for the first time. After that, network connectivity is not necessary (after the offline storage feature is released.
Seems to work on Chrome. I've grown quite accustomed to having to rely on Chrome quite a lot because a lot of websites nowadays are not optimized for any other browser.
I know Blockstack is working hard on a solution to make sure all browsers support authentication without having to download a local instance of the Blockstack Browser. But Chrome and any other browser based on Chrome's underlying technology (chromium) should work great!
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.
I have a question common to ventures like this, but I'll start with something objectively positive.
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 engineer here. Your points are well-taken, and are straightforward to address.
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.
This was helpful, thanks. I have to admit ignorance when it come to how Blockstack works. I had imagined it was more similar to how IPFS/similar systems functioned, where distributed permanence is a major goal.
I think that's what most people think of when they hear of decentralized protocols. I chose Blockstack for Graphite and for this project specifically because it handles decentralization differently.
Thanks so much for the feedback and the question! I actually get asked this a lot with the core Graphite product, so I (hopefully) have a sufficient answer.
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!
No problem. I know that a large number of major publishers use WordPress as their primary web publishing platform, so I recommend studying some of their UX to meet some general industry standards, but also recommend learning from their mistakes.
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.
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.
Thanks for the question! Graphite Publishing only uses blockchain for user identity. And even then, a user creating an account doesn't really see that in the experience.
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.
It absolutely could, but then you're giving ownership to whoever manages that authentication service. Since the creation of your username is what creates your key pair, you own your encryption keys. And since your username is anchored to the bitcoin blockchain, there is no central authority that can say "you no longer have access to this account."
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.
And when somebody takes your existing chain then generates a bunch of new users in a 51% attack, how do you recover the usernames on the alternate chain?
edit: sorry for reply to wrong post. Should have responded to jhunter1016 below.
The nice thing about Blockstack is it is not dependent on any one Blockchain. It can be ported to other blockchains and has been previously. Right now it sits on top of bitcoin as it is very hard to perform a 51% attack.
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.
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 own your own data in a "gaia hub" where apps have to have permission to write this data to your hub, permitted you give it to them. This way, if you ever leave graphite, or any other app in the eco system, you still have your data in the gaia hub.
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.
Blockstack engineer here. AFAIK Graphite Publishing will make your files accessible as URLs under graphitedocs.com, but since the code is open [1], you could run an instance on your own domain.
Yep this is spot-on. You can clone the repository today and run it on your own custom domain. Now, doing so will result in kind of a wonky URL structure unless you customize the code. Your site would live on something like:
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.
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?