Quiver Data Format

Aurélien Noce edited this page Sep 14, 2017 · 13 revisions

A Quiver notebook is a directory with a special extension .qvnotebook. You should treat it exactly as a regular directory in your script. Each Quiver notebook has a meta.json file and a few Quiver notes inside.

Here is the tree structure of a Quiver notebook:

Tutorial.qvnotebook/
├── 23F6820E-0743-4256-9473-56FA58C25DD9.qvnote
│   ├── content.json
│   └── meta.json
├── B59AC519-2A2C-4EC8-B701-E69F54F40A85.qvnote
│   ├── content.json
│   ├── meta.json
│   └── resources
│       └── BCA3F8A8-C8CC-4FE5-AABB-C4262134B9E7.tiff
└── meta.json

The notebook JSON file is very simple:

{
  "name" : "Quiver Tutorial",
  "uuid" : "Tutorial"
}

Similarly, a Quiver note is a directory with a special extension .qvnote. You should treat it exactly as a regular directory in your script. Each Quiver note has a content.json and a meta.json file. The content JSON file contains title and cell contents, while the meta JSON file contains metadata such as title, created date, updated date. Note that the note title is stored in both meta.json and content.json, for performance reasons.

Here is the tree structure of a Quiver note:

B59AC519-2A2C-4EC8-B701-E69F54F40A85.qvnote/
├── content.json
├── meta.json
└── resources
    └── BCA3F8A8-C8CC-4FE5-AABB-C4262134B9E7.tiff

Resources are images pasted in text cells. They are stored together with the note so they work offline. If a note doesn't have any resource files, the resources folder may not exist.

A meta.json file looks like this:

{
  "created_at" : 1417080157,
  "tags" : [
    "quiver"
  ],
  "title" : "02 - Cells",
  "updated_at" : 1417080595,
  "uuid" : "9686AA1A-A5E9-41FF-9260-C3E0D0E9D4CB"
}

Note that created_at and updated_at use Unix timestamps.

And a content.json file looks like this:

{
  "title" : "02 - Cells",
  "cells": [
    {
      "type": "text",
      "data": "For example, this is a <b>text cell</b> with <i>some <u>formatting</u> applied</i>."
    },
    {
      "type": "code",
      "language": "javascript",
      "data": "void hello()\n{\n    console.log(\"Hello World!\");\n}"
    },
    {
      "type": "markdown",
      "data": "## Markdown Cell\n\nThis is a markdown cell. You can use common markdown syntax here.\n\nBasic formatting of *italic* and **bold** is supported.\n\nSo is `inline code`.\n\nAnd lists.\n\n### Ordered list\n\n1. Item 1\n2. A second item\n3. Number 3\n4. Ⅳ\n\n### Unordered list\n\n* An item\n* Another item\n* Yet another item\n* And there's more...\n\n### Quote\n\n> Here is a quote.\n\nCustom CSS options can be set in the *Preferences* panel.\n"
    },
    {
      "type": "diagram",
      "diagramType": "sequence",
      "data": "Alice->Bob: Authentication Request"
    }
  ]
}

Five cell types are currently supported: text, code, markdown, latex, diagram.

For code cells, a language code is required. Here are the currently supported languages and their codes.

For diagram cells, a diagram type is required: it is either sequence or flow.