← All packages
The record · v0.1.0 · Apache-2.0

@flashyos/assetmesh

An asset does not need its own market. It needs a unit somebody already holds

rwa/1 — a machine-readable record of a real-world asset, the attestations that stand behind it, and the obligations issued against it. Dependency-free, publishable at your own domain, verifiable by anyone.

npm install @flashyos/assetmeshnpm ↗source ↗

Why it exists

Tokenising a real-world asset has meant minting a token and then hunting for a market, which is why almost every RWA token is illiquid — each asset becomes its own market, and a market of one asset has no depth on any day its owner is not selling. `rwa/1` gives an asset a denomination instead: obligations are issued in a unit that already circulates, so a reward against a Chicago office building and one against a Vancouver hotel are the same unit in a holder’s hands. There is no per-asset liquidity to bootstrap because there is no per-asset unit.

What it refuses to do
It refuses a reward whose worth moves with the asset — an obligation that rises with rent, occupancy or sale proceeds is an investment contract nearly everywhere it is offered, and the flag is required on every obligation so the question is answered rather than noticed later. It refuses an independent claim made by the issuer, because an appraisal signed by the owner is a number in a PDF. And it refuses its own starter: `adopt` writes a record that does not validate, because a checker that says “valid” over org/your-organisation teaches an adopter on their first run that a green check means nothing.

How it works

`rwa/1` is one JSON file an organisation publishes at `/.well-known/rwa.json`: the assets it holds, the dated attestations behind each one, and the obligations issued against them. No account, no server, no chain — a stranger fetches it and checks it offline, and the validator imports nothing but `node:` builtins so it runs before an install and in a browser.

Five rules, each a refusal rather than a warning: a reward may not be performance-linked; an independent claim (appraisal, audit, custody, title, insurance, environmental, occupancy) may not be made by the issuer; every attestation carries an expiry after the date it is true as of; money and units are integer minor units; and the starter’s own placeholders are rejected.

It is the present tense, and it takes `backlog/1`’s shape rather than `shipped/1`’s — an asset record is a standing description restated as facts change and stale when nobody restates it. For the same reason it is not a `checkpoint/1` leaf source: nothing here is sealed, so there is no digest to commit to.

Related concepts
IntentMeshagentic autonomous organizationmachine-readable organizational trustAI agent trust register

Use it

Write a record, then check it
npx assetmesh adopt
npx assetmesh check

Installing it puts this command on your path — read from the package’s own manifest, so this list cannot drift from what you actually get.

assetmesh

In practice

Issue a reward against a building without issuing a security
A property group publishes an asset with a `reward` obligation denominated in a unit that already circulates. `performanceLinked` must be false, so the one instrument shape that is reliably a security cannot be emitted by accident.
Let a stranger check who actually made the valuation
Every attestation names its author and its expiry. An appraisal by the owner is refused, and a valuation with no expiry — the most common way an asset record misleads without anybody lying — does not validate.

How it stays honest

The validator has no dependencies at all, so nothing about the verdict depends on this estate: `npx assetmesh check` runs the same rules a stranger runs, and `vendor-assetmesh.mjs` runs them with nothing installed. The JSON Schema and the validator are differentialled against each other rather than eyeballed, and the vocabulary it borrows from `directory/1` is compared against the real package by a drift test, because a copy does not break when it drifts — it disagrees, silently, about whichever field somebody has just changed.

Questions

What is rwa/1?
An open record format for a real-world asset: what it is, what independent parties claim about it and until when, and what obligations have been issued against it. One file at your own domain, checkable offline by anyone.
Does a valid record mean the claims in it are true?
No. A record that validates is well-formed, not true. No format can vouch for the claims inside it, and one that implied it could would launder an assertion into a verdict. What you get is who claims what, as of when, until when, and whether the party making a claim is the party it is about.
Why can a reward not be performance-linked?
Because an obligation whose worth rises with rent, occupancy or sale proceeds is an investment contract nearly everywhere it is offered. The field is required on every obligation, so it is answered every time rather than discovered later.
Why does npx assetmesh adopt write something that fails?
Deliberately. Every id in the starter is a placeholder the validator rejects. A checker that reported “valid” over org/your-organisation would teach the adopter, on the first run they ever do, that a green check means nothing.

The licence

Apache-2.0, read from the package’s own manifest. Embed it in anything, including closed software — that is what makes a spec adoptable and a verifier worth running. FlashyOS’s server side is AGPL-3.0-only instead, and a test in the monorepo asserts the direction between them: AGPL code may consume this, this may never consume AGPL code.

Keep reading

AssetMesh
Also in the record
@flashyos/canon@flashyos/directory@flashyos/backlog@flashyos/shiplog@flashyos/checkpoint@flashyos/delivery@flashyos/playbook@flashyos/mesh@flashyos/holding@flashyos/frontdoor