Here in the Sandstorm developer hub, you will find to resources to help you build new apps on top of Sandstorm, package existing apps, and understand how apps and Sandstorm fit together.
Sandstorm apps can be in any language so long as it runs on Linux (PHP, Python, Node.js, Ruby, etc.). The app bundles its dependencies so it runs in a consistent environment. Sandstorm handles user management and mitigates 95% of security issues. App authors don't have to run servers since users run your app on their own servers. Sandstorm's "grain" model allows developers to rely on Sandstorm for supporting multiple instances/documents rather than writing that code in the app. Read more on the developer features page.
Creating an app package
- Tutorial: Five minute packaging tutorial
- What makes a great Sandstorm app: App Developer Handbook
- Language support: Platform stacks for Meteor, Python, PHP, Node.js | Other
- Code & service dependencies: Code dependencies | MySQL | Other databases & services
- Troubleshooting: Package troubleshooting
- vagrant-spk in depth: Installation | Customizing & understanding vagrant-spk
How to leverage the community
The Sandstorm ecosystem is full of people who want to promote your app, give you feedback, and use it.
- Getting help: Community feedback and Q&A | Real-time IRC chat on libera.chat | Watch presentations on the Sandstorm YouTube channel
- Publicity: Share news about a meetup/conference talk about your app | Public demo service for all Sandstorm apps
- Read more: All community resources
All about grains
When a user runs an app within Sandstorm, they create one or more grains of the app. Read about how grains work and how they affect your app.
- Grain URLs and the grain-frame: URLs, domain names, page titles
- Sandstorm system architecture: How Sandstorm works | Grain isolation and other security practices in Sandstorm
- How to choose the granularity for your app: granularity
App sharing, publishing, & permission levels
Each app instance (aka "grain") is private by default to the user who created it. Read these documents to learn how access control works.
- Login & permissions: User authentication & permissions
- Making content accessible outside Sandstorm: Publishing static content, including to the user's domain | Exporting HTTP APIs for mobile, desktop, Javascript clients
- Further reading: Delegation is the Cornerstone of Civilization
Network access
By default, Sandstorm runs each app instance with no network access. Read these documents to configure an app to get access to services on the Internet or to each other.
- Supported protocol: SMTP (email)
- Other protocols: Work in progress.
- Inter-app communication: Work in progress.
Raw Sandstorm packaging
Most Sandstorm packages use sandstorm-http-bridge and vagrant-spk. However, these tools are independent and optional.
- Minimalist packaging: Raw SPK packaging guide
- Raw packaging & integration guides: Python | Ruby on Rails | Pure client apps
Powerbox & raw Sandstorm APIs via Cap'n Proto
To make components easier to isolate while retaining high performance, most communication in
Sandstorm occurs using Cap'n Proto. Cap'n Proto files in the Sandstorm source repository contain
useful design or implementation details. Note that Sandstorm typically depends on the unreleased
git master of capnproto. Configuration files such as sandstorm-pkgdef.capnp
use Cap'n Proto as
their file format.
- Overview: Cap'n Proto website | How Cap'n Proto makes Sandstorm more secure
- Implementation guide for app authors: Documentation on powerbox
- Example: Explanation of how drivers will work, found within ip.capnp
- Cap'n Proto implementations: C++, Erlang, Go, Javascript, Python, Rust, and others
- Further reading: A list of all Cap'n Proto files in the source repository
Documentation on how to contribute to Sandstorm
To see all the ways to contribute to Sandstorm, read the Sandstorm community page.
To learn about contributing code to Sandstorm itself, read how Sandstorm works and the GitHub wiki.