The Simple URF (SURF) format aims to be a replacement for JSON that meets modern needs by providing types such as dates, IRIs, UUIDs, binary data, and decimal numbers. SURF maintains JSON's spirit of simplicity while transparently building on the Uniform Resource Framework (URF) for robust, consistent semantics.

Backwards-Compatible with JSON

{
  …
  "ten" : 10
  "twenty" : 20
  …
}

JSON “objects” are interpreted as maps.

Custom Types and Properties

Identify object types, and use real properties. Sets. Comments. And no more profuse commas.

*User:
  name = "Jane Doe"
  ! the usernames property uses a set
  usernames = (
    "jdoe"
    "janed"
  )
;

Dates

*User:
  …
  "joinedOn" = @2016-01-23
  …
;

Date and time types are built in. No need for an extra parsing later with arbitrary formats.

True Decimal Type

If you store currency in the JSON number type, you are doing it wrong.

*BankAccount:
  balance = $12345.90
  fee = $0.30
;

It is impossible for floating point numbers to represent 12345.90 - 0.30 = 12345.60 correctly. A decimal type must be used.

Semantic model

SURF is built on top of Uniform Resource Framework (URF) semantic framework, allowing transformations to other URF formats as well as reasoning via a reference engine.

Learn More

Read the Quick Start for an overview. Then learn more about SURF and serialization formats in general. The technical details are spelled out in the SURF specification.