-
Notifications
You must be signed in to change notification settings - Fork 56
Background: Re-architect IPFS & libp2p Documentation #58
Description
Let’s develop a roadmap towards a new, improved docs site in this repo. Here’s my take to get us started:
Overall, I think there are a few major problems users and contributors are running into that the new docs need to solve. First here’s a breakdown of the typical introductor experience:
- For most all people, their journey with IPFS starts with blog post, Hacker News, or Reddit.
- The only official resource we have that comprehensively describes IPFS is the white paper and that’s where most people wind up next when they decide to try and actually learn about or use IPFS.
- Many folks skip or quickly skim this — its academic style can be intimidating and it assumes familiarity with a number of computer science or math concepts like graphs (as models of objects and relationships, rather than visualizations of 2/3/4-dimensional data)
- More enterprising folks or those with a more expertise read it, but it’s very broad and very old. It doesn’t connect especially well with the concrete reality of IPFS today.
- In both cases, people wind up making a number of assumptions that are inaccurate in different ways.
- Go through the getting started tutorial
- It doesn’t attempt to cover what is conceptually going on much at all, so any poor assumptions people have made from step 2 generally stay in place.
- It is focused on the CLI, which is off-putting to many folks with less expertise and leaves a lot of developers who are immediately wondering how to interface with it programmatically in the cold.
- It doesn’t leave you with any suggestions for next steps or what to do.
- ???? At this point, we see a wide variety of things:
- Giving up because it’s not clear
- Try storing or sharing some files with a friend, which might work, but often leads to oddball questions about the basics on discuss.ipfs.io, IRC, or GitHub, because of conceptual assumptions they’ve made in steps 2 and 3. Some examples are questions about “uploading” (people with less expert programming background) or questions about why an IPFS hash doesn’t match a simple SHA-256 (or even a multihash) of the file they added to IPFS (more expert).
- Spend a lot of time digging through GitHub trying to figure out how best to program against it as a library (especially if their primary language is not JS or Go). There is little about using IPFS programmatically on the docs site. We have a lot of docs that people never find because:
- They’re buried in a source code repo.
- They’re not even in the repo they’d expect. The docs in
ipfs/interface-ipfs-core
are dramatically better than the Rest API Docs, for example. One person said knowing those were there would have made things way easier, but they’d never seen them because they are only well linked fromjs-ipfs
and this person wasn’t writing JavaScript (or Go). - There might be useful generated API docs, but we often don’t link them. (e.g.
go-ipfs
)
See lots more of this stuff over at #52 or https://gateway.ipfs.io/ipns/ipfs-docs-research.robbrackett.com/html/General-Notes.html .
What are the big learning/documentation problems here?
- No clear introduction to the overall idea of exactly how IPFS works and what it’s doing
- Lots of new concepts (whether you are knowledgeable about things like graphs or not) that are just very different from the web technologies people know today.
- Docs are inconsistently located and spread across a number of repos people have to hunt through.
- Clear, standard API docs are not always available.
- Hunting through GitHub is hard. (Which repos have docs? Where in the repo are they? Which projects are important and how do they relate to the others? Which repos and docs are up-to-date?)
What do we need to do?
High priority:
-
Write a new introductory guide that focuses on what IPFS is doing conceptually, explaining how addresses and lookups and the DAG work. It should use the CLI as an concrete example of these things rather than the other way around, as the current getting started guide does. (Write new “Introduction to IPFS” guide #60)
-
Build a concepts dictionary that provides a brief and clear overview of major concepts in IPFS. ([NEW CONTENT] [BOUNTY] Glossary #56)
- Some examples:
- https://qri.io/docs/datasets/
- Items under the “concepts” heading in Stellar’s docs, e.g: https://www.stellar.org/developers/guides/concepts/accounts.html (disclosure: I worked on this)
- Slack sort of does this with the “app features” category in the docs sidebar: https://api.slack.com (they’re somewhere between conceptual and tutorial, and may or may not be more detailed than we want to need to be)
- Some examples:
-
Link to (not necessarily embed) our best existing reference docs and major repos (Gather & organize links to existing docs and examples #59)
-
link to (not necessarily embed) our best existing example projects (e.g. https://github.com/ipfs/js-ipfs/tree/master/examples) (Gather & organize links to existing docs and examples #59)
-
Clean up the problems in GitHub organization that make things hard to find: GitHub Hygiene: Develop a standard way to indicate a repo/project is deprecated #54, GitHub Hygiene: Make sure every repo has a description and readme #55, GitHub Hygiene: Develop a standard way to indicate non-code repos #57, and some parts of Provide clear, reliable, up-to-date roadmaps and information about statuses of features #53)
-
Design a site layout that can accommodate the above and launch it :) (Refactor/expand docs on ipfs.io #36?)
Note that 3 & 4 are about linking and not about embedding docs. I think we should focus on getting links to what we’ve already got (we have a lot of stuff) first. Simply having the docs site serve as an index to all the things that would be useful but people aren’t finding is incredibly helpful and relatively quick to do.
This is way more minimal than the expansive set of content currently described in #36, but that was half a year ago, so I it might make sense to focus on something smaller for now.
Later:
(To be clear, I think things below like improving existing API docs is much less important than #53 — giving people a clear picture of the status and direction of various APIs and concepts. Developers are getting by, though with plenty of trouble, with what they’ve got. But nothing solves the “where is this going and how should I think about using/not using it?” question for them. Addressing that in some form is critical.)
Not necessarily in any order:
-
Add some brief narrative/introductory guides on using
go-ipfs
,js-ipfs
,*-ipfs-api
as libraries. -
Document how all the various sub-libraries relate to each other and to the top-level libraries (i.e.
go-ipfs
andjs-ipfs
). (Covering these relationships is one of the major missing pieces in a lot of the READMEs.) -
Improve the REST API docs with more detailed information about arguments (many are missing) and example input/output. More than one person was blown away by how useful the docs in
interface-ipfs-core
were compared to the REST API or Commands docs, which they had been depending on. -
Start to generate/embed API docs from all the code projects.
-
Create guides/tutorials for common use cases
- Archiving big datasets
- Hosting your web site
- Dynamic data & (web) apps
- Securing content
- Storing/referencing data in non-file data structures (e.g. IPLD)