Universe of Objects Support

User Guide and JSON Reference

Universe of Objects is a flexible personal data app that stores information as reusable objects inside separate universes. This page explains how to use the app, how data is organized, and how object JSON is structured for import, export, offline work, sync, and troubleshooting.

Tutorial Videos

Watch step-by-step guides to getting started and using Universe of Objects.

Watch Tutorial Videos

What the App Does

The app lets you create multiple universes, each acting as an independent workspace. Inside each universe you can store tasks, lists, checklists, boards, quadrants, text, key-value pairs, images, notes, markdown, records, maps, tables, layouts, diagrams, timelines, timelogs, events, and custom objects.

How to Think About It

A universe is a container. An object is a saved item inside that container. Different object types are edited in different views, but they all share a common idea: each object has a UUID, an object type, and type-specific fields.

Where Data Lives

Universes can use local file storage, Apple Cloud, AWS, static URLs, or Stream Pulse. Local universes typically create a JSON file named with the universe ID, while the configured universe list is stored separately. Local storage also makes it possible to keep working in offline mode and sync or export later.

Getting Started

1. Create a Universe

Start by creating a universe from the universe management screen. Choose a name and a storage type. For local storage the app creates a dedicated JSON file automatically.

2. Add Objects

Use the add menus to create objects such as tasks, notes, diagrams, tables, images, or custom object types. Each object is saved into the selected universe.

3. Open, Search, and Link

Use search, favourites, and object navigation to move between related items. Some views reference other objects by UUID, which makes the app behave like a lightweight object graph.

4. Use Visual Views

Boards, quadrants, layouts, maps, and diagrams provide visual ways to organize information. Diagram objects can also supports Mermaid flowcharts import/export, and export to PNG, PDF, SVG, and webpages.

5. Build and Reorganize Custom Boards

Board views are useful for grouping related objects into stacks. You can create custom object boards for your own workflows, then reorganize them by moving items between columns or changing the order inside a stack.

6. Work Offline and Export Later

If your universe uses local storage, you can continue working in offline mode without a network connection. When you are ready, you can export content such as JSON, diagram assets, or generated webpages for sharing and publishing.

Starter Universes

Which you can add as static url universes or download and modify

Name URL Download
Starter Universe https://s3.eu-west-2.amazonaws.com/ferristhegeek.co.uk/universes/starterUniverse.json Download JSON
EU Countries https://s3.eu-west-2.amazonaws.com/ferristhegeek.co.uk/universes/EUCountries.json Download JSON

Common Object Types

Object Type Purpose Core Fields
task Track work items and progress. objName, percentageComplete, content
list / checklist Simple or checkable item collections. objName, content
board / quadrant Organize object UUIDs into stacks or 2x2 areas. objName, boardObjects
note / markdown Write plain or markdown-rich text. objName, content
record Store related object UUID references. objName, ObjArray
table Structured row-and-column data. objName, schema, rows
layout Arrange referenced objects spatially. objName, locked, layoutObjects
diagram Store shapes and connectors for diagrams. objName, canvasWidth, canvasHeight, diagramShapes, diagramConnectors
image Save a base64-encoded image. objName, base64image
event, timeline, timelog Track time-based information. startDate, content, currentState, log
custom / customTemplate Extend the app with your own structures. customObjectType, fieldDisplayOrder

Recent Features

Shortcuts and Automation

The app supports Apple Shortcuts for tasks such as retrieving universes, searching objects, opening objects, reading object JSON, listing favourites, and generating diagram PNGs from Mermaid text. This makes the app usable both interactively and as part of automation workflows.

JSON Structure Details

Universe of Objects stores information as JSON-compatible dictionaries. Most object records follow a shared convention:

{
  "objectType": "task",
  "UUID": "A-UNIQUE-IDENTIFIER",
  "objName": "Title of the object"
}

Top-Level Universe List

The configured universe list is stored in storageOption.json as an array of universe definitions. Typical fields include:

[
  {
    "name": "My Universe",
    "id": "UNIVERSE-ID",
    "storageType": "localfilestorage",
    "url": null,
    "topicName": null,
    "topicUUID": null,
    "accessID": null,
    "secretKey": null,
    "filename": "UNIVERSE-ID.json",
    "lifeSpan": null
  }
]

Local Universe Object File

A local universe file is a JSON array of objects. The app may keep historical versions depending on storage and write behavior, so consumers should generally identify the latest active object by UUID.

[
  {
    "objectType": "note",
    "UUID": "OBJ-1",
    "objName": "Welcome",
    "content": "Hello world"
  },
  {
    "objectType": "diagram",
    "UUID": "OBJ-2",
    "objName": "System Map",
    "canvasWidth": 1800,
    "canvasHeight": 1200,
    "diagramShapes": [],
    "diagramConnectors": []
  }
]

Default Object Payloads

{
  "task": {
    "objectType": "task",
    "UUID": "UUID",
    "objName": "Task name",
    "percentageComplete": 0,
    "content": []
  },
  "list": {
    "objectType": "list",
    "UUID": "UUID",
    "objName": "List name",
    "content": []
  },
  "checklist": {
    "objectType": "checklist",
    "UUID": "UUID",
    "objName": "Checklist name",
    "content": []
  },
  "board": {
    "objectType": "board",
    "UUID": "UUID",
    "objName": "Board name",
    "boardObjects": []
  },
  "quadrant": {
    "objectType": "quadrant",
    "UUID": "UUID",
    "objName": "Quadrant name",
    "boardObjects": [
      { "stackName": "Top Left", "objectList": [] },
      { "stackName": "Top Right", "objectList": [] },
      { "stackName": "Bottom Left", "objectList": [] },
      { "stackName": "Bottom Right", "objectList": [] }
    ]
  },
  "string": {
    "objectType": "string",
    "UUID": "UUID",
    "string": "Text value"
  },
  "keyvaluepair": {
    "objectType": "keyvaluepair",
    "UUID": "UUID",
    "objName": "Pair name",
    "key": "key",
    "value": ""
  },
  "image": {
    "objectType": "image",
    "UUID": "UUID",
    "objName": "Image name",
    "base64image": ""
  },
  "note": {
    "objectType": "note",
    "UUID": "UUID",
    "objName": "Note name",
    "content": ""
  },
  "markdown": {
    "objectType": "markdown",
    "UUID": "UUID",
    "objName": "Markdown name",
    "content": ""
  },
  "record": {
    "objectType": "record",
    "UUID": "UUID",
    "objName": "Record name",
    "ObjArray": []
  },
  "location": {
    "objectType": "location",
    "UUID": "UUID",
    "objName": "Location name",
    "latitude": 0.0,
    "longitude": 0.0,
    "w3ws": ""
  },
  "map": {
    "objectType": "map",
    "UUID": "UUID",
    "objName": "Map name",
    "content": []
  },
  "table": {
    "objectType": "table",
    "UUID": "UUID",
    "objName": "Table name",
    "schema": [],
    "rows": []
  },
  "layout": {
    "objectType": "layout",
    "UUID": "UUID",
    "objName": "Layout name",
    "locked": false,
    "layoutObjects": []
  },
  "diagram": {
    "objectType": "diagram",
    "UUID": "UUID",
    "objName": "Diagram name",
    "canvasWidth": 1800.0,
    "canvasHeight": 1200.0,
    "diagramShapes": [],
    "diagramConnectors": []
  },
  "event": {
    "objectType": "event",
    "UUID": "UUID",
    "objName": "Event name",
    "startDate": "2026-01-01T12:00:00Z"
  },
  "timeline": {
    "objectType": "timeline",
    "UUID": "UUID",
    "objName": "Timeline name",
    "content": []
  },
  "timelog": {
    "objectType": "timelog",
    "UUID": "UUID",
    "objName": "Timelog name",
    "currentState": "Stop",
    "log": []
  },
  "custom": {
    "objectType": "custom",
    "UUID": "UUID",
    "objName": "Custom object",
    "customObjectType": ""
  },
  "customTemplate": {
    "objectType": "customTemplate",
    "UUID": "UUID",
    "objName": "Template name",
    "customObjectType": "Template name",
    "fieldDisplayOrder": []
  }
}
Some object types contain nested arrays of dictionaries, especially boards, layouts, diagrams, tables, and timelogs. If you are building import/export tools, preserve unknown keys when possible so app-specific metadata is not lost.

Support Tips