The Unstoppable Dapp
Unstoppable Dash Apps! An introduction to the 1st mainstream use-case for a permissionless + decentralized storage solution.
We’ve been conditioned to assume that we MUST subscribe for file hosting.
Unlike IPFS, which requires persistent management of the data that serves your applications; Dash Apps are permanent and require ZERO maintenance.
Services like Arweave (and the Permaweb) have redefined what it means to “host” public data.
Gold is solid. Wood is dense. And back when we still printed things on paper, a heavy stapler was a luxury.
If something is heavy, we assume it matters. And often, it does. Weight signals quality, durability, presence, permanence.
Data Contracts provide an OPEN program.
At first, we buy cheap, lightweight furniture—easy to build, easy to trash. But eventually, we want weight. A solid oak table. A leather armchair. Something built to last. Heavy things comfort us—a weighted blanket stills the body, a heavy door makes a home feel secure.
Winners of major awards almost always say the same thing as they lift the trophy: ‘Wow! It’s so heavy.’ As though the weight itself validates the achievement. Simple logic: Light achievements beget light awards. Heavy achievements beget heavy awards.
We accept this in the physical world.
But online, we forget.
The internet is (mostly) a machine for light things.
The modern makers’ machine does not want you to create heavy things. It runs on the internet—powered by social media, fueled by mass appeal, and addicted to speed. It thrives on spikes, scrolls, and screenshots. It resists weight and avoids friction. It does not care for patience, deliberation, or anything but production.
It doesn’t care what you create, only that you keep creating. Make more. Make faster. Make lighter. (Make slop if you have too.) Make something that can be consumed in a breath and discarded just as quickly. Heavy things take time. And here, time is a tax. And so, we oblige—everyone does.
We create more than ever, but it weighs nothing.
AI now promises results without the reckoning, but frictionless creation leads to weightless rewards. No one dreams of merely pushing a button to generate their magnum opus. The output matters, but the intention, the struggle, the care is what makes it count —what gives it weight.
Of course, there’s a range from light to heavy, and not all light things are bad. An entire economy thrives on lightness. Memes, breaking news, and celebrity drama shape culture in spades. But movement isn’t meaning. A million views doesn’t make a pound of significance. Light things shape culture, but rarely shape us.
Creation isn’t just about output. It’s a process of becoming. The best work shapes the maker as much as the audience. A founder builds a startup to prove they can. A writer wrestles an idea into clarity. You don’t just create heavy things. You become someone who can.
Let’s first take a look at the complete data contract for UdappRegistry.json
before we continue↴
{
"profile": {
"type": "object",
"indices": [
{
"name": "ownerId",
"unique": true,
"properties": [
{
"$ownerId": "asc"
}
]
},
{
"name": "ownerIdAndUpdatedAt",
"properties": [
{
"$ownerId": "asc"
},
{
"$updatedAt": "asc"
}
]
}
],
"required": [
"$createdAt",
"$updatedAt"
],
"properties": {
"avatarUrl": {
"type": "string",
"format": "uri",
"position": 0,
"maxLength": 2048,
"minLength": 1
},
"avatarHash": {
"type": "array",
"maxItems": 32,
"minItems": 32,
"position": 1,
"byteArray": true,
"description": "SHA256 hash of the bytes of the image specified by avatarUrl"
},
"displayName": {
"type": "string",
"position": 4,
"maxLength": 25,
"minLength": 1
},
"publicMessage": {
"type": "string",
"position": 3,
"maxLength": 140,
"minLength": 1
},
"avatarFingerprint": {
"type": "array",
"maxItems": 8,
"minItems": 8,
"position": 2,
"byteArray": true,
"description": "dHash the image specified by avatarUrl"
}
},
"minProperties": 1,
"dependentRequired": {
"avatarUrl": [
"avatarHash",
"avatarFingerprint"
],
"avatarHash": [
"avatarUrl",
"avatarFingerprint"
],
"avatarFingerprint": [
"avatarUrl",
"avatarHash"
]
},
"additionalProperties": false
},
"contactInfo": {
"type": "object",
"indices": [
{
"name": "ownerIdAndKeys",
"unique": true,
"properties": [
{
"$ownerId": "asc"
},
{
"rootEncryptionKeyIndex": "asc"
},
{
"derivationEncryptionKeyIndex": "asc"
}
]
},
{
"name": "ownerIdAndUpdatedAt",
"properties": [
{
"$ownerId": "asc"
},
{
"$updatedAt": "asc"
}
]
}
],
"required": [
"$createdAt",
"$updatedAt",
"encToUserId",
"privateData",
"rootEncryptionKeyIndex",
"derivationEncryptionKeyIndex"
],
"properties": {
"encToUserId": {
"type": "array",
"maxItems": 32,
"minItems": 32,
"position": 0,
"byteArray": true
},
"privateData": {
"type": "array",
"maxItems": 2048,
"minItems": 48,
"position": 3,
"byteArray": true,
"description": "This is the encrypted values of aliasName + note + displayHidden encoded as an array in cbor"
},
"rootEncryptionKeyIndex": {
"type": "integer",
"minimum": 0,
"position": 1
},
"derivationEncryptionKeyIndex": {
"type": "integer",
"minimum": 0,
"position": 2
}
},
"additionalProperties": false
},
"contactRequest": {
"type": "object",
"indices": [
{
"name": "ownerIdUserIdAndAccountRef",
"unique": true,
"properties": [
{
"$ownerId": "asc"
},
{
"toUserId": "asc"
},
{
"accountReference": "asc"
}
]
},
{
"name": "ownerIdUserId",
"properties": [
{
"$ownerId": "asc"
},
{
"toUserId": "asc"
}
]
},
{
"name": "userIdCreatedAt",
"properties": [
{
"toUserId": "asc"
},
{
"$createdAt": "asc"
}
]
},
{
"name": "ownerIdCreatedAt",
"properties": [
{
"$ownerId": "asc"
},
{
"$createdAt": "asc"
}
]
}
],
"required": [
"$createdAt",
"$createdAtCoreBlockHeight",
"toUserId",
"encryptedPublicKey",
"senderKeyIndex",
"recipientKeyIndex",
"accountReference"
],
"properties": {
"toUserId": {
"type": "array",
"maxItems": 32,
"minItems": 32,
"position": 0,
"byteArray": true,
"contentMediaType": "application/x.dash.dpp.identifier"
},
"senderKeyIndex": {
"type": "integer",
"minimum": 0,
"position": 2
},
"autoAcceptProof": {
"type": "array",
"maxItems": 102,
"minItems": 38,
"position": 6,
"byteArray": true
},
"accountReference": {
"type": "integer",
"minimum": 0,
"position": 4
},
"recipientKeyIndex": {
"type": "integer",
"minimum": 0,
"position": 3
},
"encryptedPublicKey": {
"type": "array",
"maxItems": 96,
"minItems": 96,
"position": 1,
"byteArray": true
},
"encryptedAccountLabel": {
"type": "array",
"maxItems": 80,
"minItems": 48,
"position": 5,
"byteArray": true
}
},
"canBeDeleted": false,
"documentsMutable": false,
"additionalProperties": false,
"requiresIdentityDecryptionBoundedKey": 2,
"requiresIdentityEncryptionBoundedKey": 2
}
}