<pclass="no_toc">These FAQs are intended for developers of Blockstack.</p>
<ulid="markdown-toc">
<li><ahref="#im-a-web-developer--can-i-build-on-blockstack"id="markdown-toc-im-a-web-developer--can-i-build-on-blockstack">I’m a web developer. Can I build on Blockstack?</a></li>
<li><ahref="#im-a-non-web-developer--can-i-build-on-blockstack"id="markdown-toc-im-a-non-web-developer--can-i-build-on-blockstack">I’m a non-web developer. Can I build on Blockstack?</a></li>
<li><ahref="#whats-the-difference-between-a-web-app-and-a-blockstack-app"id="markdown-toc-whats-the-difference-between-a-web-app-and-a-blockstack-app">What’s the difference between a web app and a Blockstack app?</a></li>
<li><ahref="#do-i-need-to-learn-any-new-languages-or-frameworks"id="markdown-toc-do-i-need-to-learn-any-new-languages-or-frameworks">Do I need to learn any new languages or frameworks?</a></li>
<li><ahref="#how-does-my-web-app-interact-with-blockstack"id="markdown-toc-how-does-my-web-app-interact-with-blockstack">How does my web app interact with Blockstack?</a></li>
<li><ahref="#what-does-blockstackjs-do"id="markdown-toc-what-does-blockstackjs-do">What does <codeclass="highlighter-rouge">blockstack.js</code> do?</a></li>
<li><ahref="#how-do-i-use-blockstackjs"id="markdown-toc-how-do-i-use-blockstackjs">How do I use <codeclass="highlighter-rouge">blockstack.js</code>?</a></li>
<li><ahref="#how-can-i-look-up-names-and-profiles"id="markdown-toc-how-can-i-look-up-names-and-profiles">How can I look up names and profiles?</a></li>
<li><ahref="#how-can-i-read-my-public-app-data-without-blockstackjs"id="markdown-toc-how-can-i-read-my-public-app-data-without-blockstackjs">How can I read my public app data without <codeclass="highlighter-rouge">blockstack.js</code>?</a></li>
<li><ahref="#how-do-i-register-blockstack-ids"id="markdown-toc-how-do-i-register-blockstack-ids">How do I register Blockstack IDs?</a></li>
<li><ahref="#how-do-i-register-blockstack-subdomains"id="markdown-toc-how-do-i-register-blockstack-subdomains">How do I register Blockstack Subdomains?</a></li>
<li><ahref="#can-i-programmatically-register-blockstack-ids"id="markdown-toc-can-i-programmatically-register-blockstack-ids">Can I programmatically register Blockstack IDs?</a></li>
<li><ahref="#can-i-programmatically-register-blockstack-subdomains"id="markdown-toc-can-i-programmatically-register-blockstack-subdomains">Can I programmatically register Blockstack Subdomains?</a></li>
<li><ahref="#do-you-have-a-testnet-or-sandbox-to-experiment-with-blockstack"id="markdown-toc-do-you-have-a-testnet-or-sandbox-to-experiment-with-blockstack">Do you have a testnet or sandbox to experiment with Blockstack?</a></li>
<li><ahref="#does-blockstack-have-a-smart-contract-system"id="markdown-toc-does-blockstack-have-a-smart-contract-system">Does Blockstack have a smart contract system?</a></li>
<li><ahref="#can-blockstack-applications-interact-with-bitcoin-ethereum-smart-contracts-other-blockchains"id="markdown-toc-can-blockstack-applications-interact-with-bitcoin-ethereum-smart-contracts-other-blockchains">Can Blockstack applications interact with Bitcoin? Ethereum? Smart contracts? Other blockchains?</a></li>
</ul>
<h2id="im-a-web-developer--can-i-build-on-blockstack">I’m a web developer. Can I build on Blockstack?</h2>
<p>Yes! Blockstack is geared primarily towards web developers. All of your
existing knowledge is immediately applicable to Blockstack. Anything you can do
in a web browser, you can do in a Blockstack app.</p>
<h2id="im-a-non-web-developer--can-i-build-on-blockstack">I’m a non-web developer. Can I build on Blockstack?</h2>
<p>Yes! Blockstack implements a <ahref="https://core.blockstack.org">RESTful API</a> which
lets you interact with Blockstack from any language and any runtime. In fact,
the reference client
(<ahref="https://github.com/blockstack/blockstack.js">blockstack.js</a>) is mainly a
wrapper around these RESTful API calls, so you won’t be missing much by using a
language other than Javascript.</p>
<h2id="whats-the-difference-between-a-web-app-and-a-blockstack-app">What’s the difference between a web app and a Blockstack app?</h2>
<p>Blockstack apps are built like <ahref="https://en.wikipedia.org/wiki/Single-page_application">single-page web
apps</a>— they are, in
fact, a type of web application.</p>
<p>Blockstack apps are a subset of web applications that use Blockstack’s
technology to preserve the user’s control over their identities and data. As
such, they tend to be simple in design and operation, since in many cases they
don’t have to host anything besides the application’s assets.</p>
<h2id="do-i-need-to-learn-any-new-languages-or-frameworks">Do I need to learn any new languages or frameworks?</h2>
<p>No. Blockstack applications are built using existing web frameworks and programming
The only new thing you need to learn is either <ahref="https://github.com/blockstack/blockstack.js">blockstack.js</a> or
the <ahref="https://core.blockstack.org">Blockstack RESTful API</a>.</p>
<h2id="how-does-my-web-app-interact-with-blockstack">How does my web app interact with Blockstack?</h2>
any web application the ability to interact with Blockstack’s authentication and
storage services. In addition, we supply a <ahref="https://core.blockstack.org">public RESTful API</a>.</p>
<h2id="what-does-blockstackjs-do">What does <codeclass="highlighter-rouge">blockstack.js</code> do?</h2>
<p>This is the reference client implementation for Blockstack. You use it in your
web app to do the following:</p>
<ul>
<li>Authenticate users</li>
<li>Load and store user data</li>
<li>Read other users’ public data</li>
</ul>
<h2id="how-do-i-use-blockstackjs">How do I use <codeclass="highlighter-rouge">blockstack.js</code>?</h2>
<p>We have <ahref="/browser/hello-blockstack.html">several examples</a> you can use to get started. Please see the API documentation <ahref="https://github.com/blockstack/blockstack.js">here</a>.</p>
<h2id="how-can-i-look-up-names-and-profiles">How can I look up names and profiles?</h2>
<p>You can use <codeclass="highlighter-rouge">blockstack.js</code>, or you can use the <ahref="https://core.blockstack.org">public Blockstack Core
endpoint</a>.</p>
<h2id="how-can-i-read-my-public-app-data-without-blockstackjs">How can I read my public app data without <codeclass="highlighter-rouge">blockstack.js</code>?</h2>
<p>The URLs to a user’s public app data are in a canonical location in their
profile. For example, here’s how you would get public data from the
<ahref="https://publik.ykliao.com">Publik</a> app, stored under the Blockstack ID <codeclass="highlighter-rouge">ryan.id</code>.</p>
<h2id="how-do-i-register-blockstack-ids">How do I register Blockstack IDs?</h2>
<p>You should use the <ahref="https://github.com/blockstack/blockstack-browser">Blockstack Browser</a>.</p>
<h2id="how-do-i-register-blockstack-subdomains">How do I register Blockstack Subdomains?</h2>
<p>You can deploy and use a <ahref="/core/naming/subdomains.html">Blockstack Subdomain Registrar</a>, or
use an existing one.</p>
<h2id="can-i-programmatically-register-blockstack-ids">Can I programmatically register Blockstack IDs?</h2>
<p>Blockstack applications do not currently have
have access to the user’s wallet. Users are expected to
register Blockstack IDs themselves.</p>
<p>However, if you feel particularly ambitious, you can do one of the following:</p>
<ul>
<li>
<p>Set up a <codeclass="highlighter-rouge">blockstack api</code> endpoint (see the project <ahref="https://github.com/blockstack/blockstack-core/blob/master/README.md">README</a>) and write a
program to automatically register names. Also, see the <ahref="https://core.blockstack.org//#managing-names-register-a-name">API
documentation</a>
for registering names on this endpoint.</p>
</li>
<li>
<p>Write a <codeclass="highlighter-rouge">node.js</code> program that uses <codeclass="highlighter-rouge">blockstack.js</code> to register
names. This is currently in development.</p>
</li>
</ul>
<h2id="can-i-programmatically-register-blockstack-subdomains">Can I programmatically register Blockstack Subdomains?</h2>
<p>Yes! Once you deploy your own subdomain registrar, you can have your web app
send it requests to register subdomains on your Blockstack ID. You can also
create a program that drives subdomain registration on your Blockstack ID.</p>
<h2id="do-you-have-a-testnet-or-sandbox-to-experiment-with-blockstack">Do you have a testnet or sandbox to experiment with Blockstack?</h2>
<p>We have an <ahref="https://github.com/blockstack/blockstack-core/tree/master/integration_tests">integration test framework</a> that provides a
private Blockstack testnet. It uses <codeclass="highlighter-rouge">bitcoin -regtest</code> to create a private
blockchain that you can interact with, without having to spend any Bitcoin or
having to wait for blocks to confirm. Please see the
<ahref="https://github.com/blockstack/blockstack-core/blob/master/integration_tests/README.md">README</a> for details.</p>
<h2id="does-blockstack-have-a-smart-contract-system">Does Blockstack have a smart contract system?</h2>
<p>No, not yet. This is because
Blockstack’s design philosophy focuses on keeping system complexity at the
“edges” of the network (e.g. clients), instead of the “core” of the network (e.g.
the blockchain), in accordance with the <ahref="https://en.wikipedia.org/wiki/End-to-end_principle">end-to-end
principle</a>.
Generally speaking, this can be interpreted as “if you can do X without
a smart contract, you should do X without a smart contract.” This organizing
principle applies to a lot of useful decentralized applications.</p>
<h2id="can-blockstack-applications-interact-with-bitcoin-ethereum-smart-contracts-other-blockchains">Can Blockstack applications interact with Bitcoin? Ethereum? Smart contracts? Other blockchains?</h2>
<p>Yes! Since Blockstack applications are built like web applications, all you need to do is include the
relevant Javascript library into your application.</p>
<divclass="share uk-text-center">
<ahref="https://twitter.com/intent/tweet?text=Developer FAQs&url=https://docs.blockstack.org/core/faq_developer.html&via=&related="rel="nofollow"target="_blank"title="Share on Twitter"onclick="window.open(this.href, 'twitter', 'width=550,height=235');return false;"><spandata-uk-icon="icon: twitter; ratio: 1.2"></span></a>
/* A CSS selector that points to your search box */
searchBox: {
selector: '#searchBox'
},
results: {
embedConfig: undefined, // {'url':undefined,'contentBlock':'.page-content-body'}, // if url is given the page will change to that URL and look for the content block there to insert the results
fullScreenConfig: undefined, // {trigger: '#ss360-search-trigger', caption: 'Search this site'}, trigger is the CSS selector to the element that starts the search full screen overlay and searchCaption the caption on the full screen search page
caption: 'Found #COUNT# search results for \"#QUERY#\"', // the caption of the search results
group: true, // whether results should be grouped if content groups are available
filters: undefined,
num: 96, // the maximum number of search results to be shown
highlightQueryTerms: true, // whether to highlight the query terms in search results
moreResultsButton: "Show more results", // HTML for the more results button, all results will be shown if this is null
noResultsText: 'Sorry, we have not found any matches for your query.', // the text to show when there are no results
queryCorrectionText: 'Did you mean "#CORRECTION#"?',
searchQueryParamName: 'ss360Query', // the name of the search query parameter
linksOpenNewTab: false, // should clicking on the result links open a new tab/window?
showSearchBoxLayover: true, //whether to show search box in search result layover
moreResultsPagingSize: 12, // the number of new results to show each time the more results button is pressed (max: 24)
orderByRelevanceText: "Relevance" // the text to be shown in order select box to describe 'order by relevance' option
},
suggestions: {
show: true, // whether to show search suggestions
maxQuerySuggestions: 3, // the maximum number of query suggestions
querySuggestionHeadline: undefined, // the headline of the query suggestions, leave blank if no headline should be shown
emptyQuerySuggestions: undefined,
showImages: false, // show images in search suggestions
num: 6, // the maximum number of search suggestions to be shown
minChars: 3, // minimum number of characters before the suggestions shows, default: 3,
maxWidth: 'auto', // the maximum width of the suggest box, default: as wide as the input box, at least 275px
throttleTime: 300, // the number of milliseconds before the suggest is triggered after finished input, default: 300ms
extraHtml: undefined, // extra HTML code that is shown in each search suggest, you can even show values of datapoints here,
highlight: true, // whether matched words should be highlighted, default: true
},
smart404: { /* The caption of the search results. */
caption: 'These links might be useful', /* The string in the title that identifies the page as a 404 page. */
identifier: 'Page not found', /* A CSS selector that points to the area in which the alternative links should be shown. */