Figures

In Curio, anything placed on an idea space is a figure. It can represent a basic flowcharting shape such as a square or octagon. Or more complex items such as text, images, web links, movies, music, or any type of document. A figure can also represent a collection of contained figures. For example, a mind map or a list outline.

With any type of figure, not only can you specify its look through fonts and colors, you can also specify meta information such as tags, and start/due dates.

Terminology

A figure is the most basic entity within Curio such as a text figure, an image figure, a document asset figure, and a line figure.

A collection figure is a special type of figure that contains, manages, and positions figures within it. Examples include Curio’s list, mind map, table, index card, pinboard, and album collection figures. While a collection figure can contain other figures it cannot contain another collection. For example, you can’t place a table into a mind map or an index card into a list.

A figure style defines the look of the figure including properties such as color, border, font, and shading. You can apply a style to a new or existing figure.

On the other hand, a figure stencil is a re-usable figure that can includes richer data such as placeholder or boilerplate text. You create a copy of a stencil.

A simple figure stencil is a stencil that is a single figure. Even if that figure itself is a collection figure such as a mind map or list it and therefore contains figures within it, the collection figure itself is just a single figure, thus it is a simple figure stencil.

A complex figure stencil is a stencil made up of multiple figures. A perfect example is a landscaping stencil where flowers, shrubs, and trees are represented by individual figures, images, or grouped figures.

If you change or update the original style or stencil Curio does not change any instances either in the current project or in projects stored on your hard disk. The change will only be reflected in new instances that you create or apply in the future. However, Curio Professional users have access to master styles and master stencils that allow this functionality which we’ll discuss here.

Selection Glow Colors

Figures will glow when selected:

Insert Popover

The insert popover can appear in one of two ways:

  1. Click the Insert toolbar button.
  2. Press the i key on your keyboard.

In the popover that appears Curio shows you all the types of figures you can insert into your idea space.

You can select an item with the mouse or trackpad, or use the arrow keys to move around, or press the first letter of the item such as m for mind maps (note that some items have different key shortcuts, like Stack = k, due to conflicts with other entries).

Basic Shapes

A gallery appears showing off many of the basic figure shapes that can be inserted including simple text figures, lines, and various geometric shapes.

Clicking an item will insert a shape of that style into the idea space.

Double-click the resulting text or geometric figure to add text.

Styled Shape or Stencil

A gallery appears with all figure styles and stencils available within your personal repository, Curio’s bundled repository, and any shared repositories you have configured in Settings.

Double-clicking a style or simple stencil will insert that figure into your idea space, or you can select the item and click the Insert button.

Complex Stencils

Complex stencils, which are stencils that contains multiple figures, are displayed in the gallery with the number of figures it contains in parentheses.

Selecting a complex stencil and clicking the Insert button will insert the entire stencil into your idea space. However, double-clicking will drill down into the stencil so you can choose a specific figure within the stencil to insert. You can click the Back button to come back out.

For example, say you have a landscaping complex stencil with figures for various types of trees, plants, and hardscape. You can insert the entire stencil where all of the figures are inserted, or you can double-click and drill down to choose a specific tree figure to insert.

Stencils Library

If you’re a frequent user of figure stencils you should definitely check out the Stencils Library shelf module.

List / Mind Map / Table / Index Card / Album / Pinboard

These are all of Curio collection figures which we go into great detail here.

A gallery appears with all appropriate styles and stencils available within your personal repository, Curio’s bundled repository, and any shared repositories you have configured in Settings.

Clicking an item will insert that figure into your idea space.

These specific Insert choices have a sneaky feature. If, in the list that appears when you click the Insert toolbar button, you click on the icon next to the item name (like “List” or “Mind Map”) then Curio will instantly insert the appropriate collection with its default styling without showing the gallery.

Note that your toolbar can also have a dedicated button for a specific collection type. For instance, a List button that brings you instantly to the List gallery. Right-click on the toolbar and choose Customize to add or remove these toolbar buttons.

Audio Recording

A panel appears where you can configure the audio input and check the audio input level.

Click the Insert button to begin recording.

To stop and play the recording use the media controls in the inspector bar.

Video Recording

A panel appears where you can configure the audio and video inputs and check the audio input level.

Click the Insert button to begin recording.

While recording a floating video preview window will appear so you can see what is being recorded. You can position or close that preview window. Curio will restore the last-saved preview position the next time you record.

To stop and play the recording use the media controls in the inspector bar.

YouTube / Vimeo Video

A panel appears where you can paste in the URL to a YouTube or Vimeo video (such as https://www.youtube.com/watch?v=NQ7kqwbqeiI or https://vimeo.com/35396305) and then click Insert.

Curio will then parse the URL to extract out the actual movie name then turn it into an embed URL. A web view with a nice default size is then created, the embed URL is set, and the resulting web view is placed on your idea space ready for viewing.

Note

For faster embedded videos, simply drag-and-drop a YouTube or Vimeo URL from your browser directly to the Curio idea space and Curio can instantly turn that into an embedded video figure.

YouTube Start/End Parameters

This YouTube video insertion feature supports mapping various flavors of YouTube URL start time parameters, like t=60 or t=60s, to a valid embedded URL start= parameter, like start=60. You can edit the URL in the inspector bar and manually add an end time if you wish with the end= parameter where you specify the seconds value when playback should stop.

Resizing and Moving

You can resize the resulting embedded video by dragging on the figure’s selection handles. The figure will resize proportionally maintaining the video’s aspect ratio.

Since clicks within the video bounds are processed by the embedded video controller, it’s a bit tricky to move the figure, so here are some tips:

  • You can move the video if you click and drag on the very edge of the frame, or
  • First click Stop Playing in the inspector bar, which deactivates the embedded playback control, and then you can click and drag from anywhere in the figure bounds. Click Start Playing or double-click the figure to activate the video player again.

Instant Document

A panel appears where you can choose a personal or bundled instant document for inserting. An instant document is a blank or boilerplate document for another application that you can create and install within Curio. Examples include Word documents, OmniGraffle diagrams, or Photoshop drawings. See more details below.

Equation

An equation editor appears so you can enter your equation using either LaTeX, AsciiMath, or MathML and see an instant, real-time preview. Pressing the Insert button places a high-resolution, resizable PDF rendering of the equation on your idea space or into a currently editing text figure as an image or in markdown math syntax.

Web View

A new web view is instantly inserted into your idea space. Use the controls on the inspector bar to surf within the web view, and to specify and save a specific URL for the new web view.

Sign In Via Passkeys

Unfortunately passkeys aren’t supported in web views (an Apple WKWebView limitation), so you have to use a password to gain access to any service. Lots of developers are hoping Apple adds support for passkeys to web views one day soon.

Resizing and Moving

You can resize the resulting embedded web view by dragging on the figure’s selection handles. The figure will resize proportionally maintaining the video’s aspect ratio.

Since clicks within the web view bounds are processed by the embedded web content, it’s a bit tricky to move the figure, so here are some tips:

  • You can move the web view if you click and drag on the very edge of the frame, or
  • First click Stop Browsing in the inspector bar, which deactivates the embedded web view control, and then you can click and drag from anywhere in the figure bounds. Click Start Browsing or double-click the figure to activate the web view control again.

Google Doc

A new web view is instantly inserted into your idea space going directly to the Google Docs web URL. Use the web surfing inspector bar to specify and save a specific URL if you wish to point to a specific document within Google Docs.

See above for tips on resizing and moving this web view control.

Note

Google is making it a bit more difficult to embed Google docs web views so please see some of the advanced settings you may need to change depending on what Google web apps you’d like to use.

Date and Time

A panel appears where you can choose a pre-formatted date and time. The selected item will appear as a new text figure or inserted into an existing text figure being edited.

Variable

A panel appears where you can choose a special variable which will be dynamically filled out by Curio. For instance, you can insert a variable for the current project name, idea space name, and its last modified date and time. A variable can be inserted as a new text figure or into an existing text figure being edited.

The resulting variable looks like {%IdeaSpaceTitle} in your text.

Note

Curio Professional customers can create their own custom variables!

Optional Date Styles

You can optionally append one of the following styles to the date and time related variables:

  • Short
  • Medium
  • Long
  • Full
  • ISO8601
  • RFC3339

The first few correspond to the Short, Medium, Long, and Full styles found in the Dates and Times tabs in System Settings > Language & Region > Advanced.

ISO 8601 is a standard date and time format which includes time zone information, such as 2021-12-25T15:00:00-0500 indicating the -5 hour EST offset from GMT.

RFC 3339 is similar to ISO 8601 but with GMT/Zulu times such as 2021-12-25T20:00:00Z, so it adds 5 hours to our EST example to bring it up to GMT/Zulu.

Some examples:

  • {%IdeaSpaceDateAddedShort} → 1/25/22
  • {%IdeaSpaceDateAddedMedium} → Jan 25, 2022
  • {%IdeaSpaceDateAddedLong} → January 25, 2022
  • {%IdeaSpaceDateAddedFull} → Tuesday, January 25, 2022
  • {%IdeaSpaceDateAddedISO8601} → 2022-01-25
Dates With Time

The various date-related variables can include the phrase WithTime before the style and the date will include the time in the resulting output.

So, instead of using the separate {%ProjectDateCreatedMedium} date and {%ProjectTimeCreatedMedium} time variables, you can just say {%ProjectDateCreatedWithTimeMedium}.

Some examples:

  • {%IdeaSpaceDateAddedWithTimeLong} → January 25, 2022 at 2:45:24 PM
  • {%FigureStartDateWithTimeISO8601} → 2021-12-25T20:12:45-05:00
Custom Format

Curio has basic support for custom date formatting via a Format: style with a specified date pattern.

For example:

  • {%ProjectDateCreatedFormat:yyyy-MM-dd'T'HH:mm:ssZ} → 2021-11-16T18:51:41-0500
Optional Casing

You can optionally append one of the following casing extras to the variable preceded by a / symbol:

  • uppercase
  • lowercase
  • capitalize

For example, {%IdeaSpaceTitle/uppercase} might result in MY ITINERARY.

All Variables

Project Variables

  • {%ProjectTitle}
  • {%ProjectURL} - a curio:// hyperlink to the project
  • {%ProjectFilePath}
  • {%ProjectDateCreated}
  • {%ProjectTimeCreated}
  • {%ProjectDateSaved}
  • {%ProjectTimeSaved}

Section Variables

  • {%SectionTitle} - the immediate section which owns this item
  • {%RootSectionTitle} - the root, top-most section which owns this item

Folder Variables

  • {%FolderTitle} - the immediate folder which owns this item
  • {%RootFolderTitle} - the root, top-most folder which owns this item

Organizer Hierarchy Variables

  • {%ContainerTitle} - the title of the parent containing item that contains the current idea space. This could be a parent idea space, a containing folder, or the current section. If the current section is simply the default section and no other sections exist then the title of the project itself will be output.

Idea Space Variables

  • {%IdeaSpaceTitle}
  • {%IdeaSpaceURL} - a curio:// hyperlink to the idea space
  • {%IdeaSpaceDateAdded}
  • {%IdeaSpaceTimeAdded}
  • {%IdeaSpaceDateModified}
  • {%IdeaSpaceTimeModified}
  • {%JournalSubtitle} - inserts a Journal entry’s custom subtitle

Figure Variables

  • {%FigureURL}
  • {%FigureDateAdded}
  • {%FigureTimeAdded}
  • {%FigureDateModified}
  • {%FigureTimeModified}
  • {%FigureStartDate}
  • {%FigureDueDate}
  • {%FigureDoneDate}
  • {%FigureTagName} - replaced with the name of the tag associated with a figure, ex: a Stack figure title which dynamically changes based on what tag is associated with the title figure
  • {%FigureTagNames} - replaced with a comma separated list of all the associated tags (remove tag set prefix, remove spaces)
  • {%FigurePercentComplete}
  • {%FigureCustomData} or {%FigureCustomData:KeyName} - see Custom Data Variables for details
  • {%FigureCustomDataDelimited}

Container Figure Variables

  • {%ContainerFigureItemCount} - replaced with the number of items in the collection figure
  • {%ContainerFigureDateModified}
  • {%ContainerFigureTimeModified}

Asset Variables

  • {%AssetDateCreated}
  • {%AssetTimeCreated}
  • {%AssetDateModified}
  • {%AssetTimeModified}

Other Variables

  • Use the Info inspector to give a figure an identifier of {%IdeaSpaceTitle} and the figure’s content and the idea space’s title in the Organizer will automatically stay in sync regardless of which one you change.
  • Use the Info inspector to give a figure an identifier of {%IdeaSpaceTagNames} and the figure’s content and the idea space’s associated tags will automatically stay in sync regardless of which one you change.

List/Mind Map/Table From File

A standard Mac open panel will appears allowing you to select a file which will be converted into a native Curio list, mind map, or table collection figure, as appropriate. You can also perform this conversion simply by drag-and-dropping a file into your idea space from the Finder.

The import formats currently supported are as follows:

  • Lists: OPML.
  • Mind Maps: OPML, Mindjet MindManager, iThoughts, MindNode, iMindMap.
  • Tables: CSV.

Curio can also export collections in those same formats. Collection import and export conversions are discussed in greater detail in that collection’s section later in this documentation.

File

A standard Mac open panel will appears allowing you to select a file to insert into your idea space. Use the popup at the bottom of the dialog to specify whether Curio should:

  • Copy and embed the selected files into your project,
  • Store aliases to the selected files in your project,
  • Move and embed the selected files into your project.

As mentioned below, you can also simply drag files from the Finder into an idea space, which will copy and embed by default. Hold ⌥ while dragging to store an alias. Hold ⌘ while dragging to move and embed.

Important

Please note that some sync servers, like Synology Cloud Station servers, do not support aliases to files so any aliases created in Curio will break!

Insert Menu

To quickly insert certain types of figures without going through a gallery window you should check out the Insert menu in the main menu bar.

With the menu, as opposed to the Insert popover, you won’t see a gallery. Instead the figure will be inserted instantly into the idea space with its default styling.

There are options for the collection figures such as lists and mind maps, as well as menu items for Web Views and Google Docs views. Plus submenus for variables and date/time options.

Insert Other Content

From the Finder

You can drag files from the Finder or your Desktop directly to your Curio idea space.

By default Curio copies the file and embeds it within your project’s internal asset library. Then appropriate asset figures are created on the idea space itself, like an image asset figure if you drag in an image file.

If you hold ⌘ down while dragging you will move the file into your project, therefore removing the file from its original location.

If you hold down the ⌥ key while dragging then Curio will create an alias to the original file. When you later double-click the file to open it on the idea space you will be opening the original file, not an embedded copy. You can always convert aliases to embedded files at a future date using the Info inspector.

Important

Please note that some sync servers, like Synology Cloud Station servers, do not support aliases to files so any aliases created in Curio will break!

If the dragged-in file has a csv extension Curio will ask if it should be converted into a native Curio table. If the extension is opml, Curio can convert it to a list or mind map. If the extension is md or markdown, Curio can handle it as a markdown insert. If the extension is a popular mind mapping file format then Curio can convert it into a mind map. More details on supported mind map import files are in the mind map section of this manual.

Image Text Recognition

Curio uses Apple’s Vision framework (VNRecognizeTextRequest)to automatically scan imported images for text (aka OCR) which can then be searched for using Quick Find or the Search shelf. The resulting found image figures are highlighted, although the recognized text within the images are not.

See the Image Text Recognition area of the figure’s Info inspector to view the recognized text and change the detection language.

Experimentally it looks like very neat handwriting is recognized although isn’t nearly as accurate as printed text.

As a reminder, if an image figure is selected then press the Spacebar to see the Quick Look preview. Apple’s Live Text feature allows you to select and copy text directly off that image preview.

From Curiota

Curiota is a free companion app from Zengobi that opens up even more productivity with Curio.

Curiota runs silently in the background, consumes very little memory, and has a minimal user interface: you just see a simple icon up in the menu bar. Click on that icon to create quick notes, or drag files and links to the icon to quickly add files.

Curiota also supports print services (so you can “print” to Curiota), works as an macOS Share extension, is accessible via your Services menu, and is easily scriptable.

All of the submitted notes and files are accessible and searchable using Curio’s Local library shelf, discussed below. More information about Curiota can be found at www.zengobi.com/curiota.

From the Web

If you are running Safari or another web browser you can select images and text and drag them to your Curio idea space. In most cases, especially for Safari, Curio can determine where the selection came from so we can associate that web URL with the text or image. In the case of text, Curio will add an attribution line at the bottom of the text stating the source URL for the text.

For images, you can right-click on the image and choose Open Link with Browser to jump to its source location. If you drag in a YouTube or Vimeo video URL from the browser to your idea space, Curio will ask if an embedded video figure should be created for easy playback.

You can also drag in selections from Sleuth, Curio’s built-in internet research assistant, as it uses Safari’s same web rendering engine (WKWebView).

From Mail

You can drag in a message from Mail to embed a copy of the message into your project. When you double-click the message it will be opened and viewed with Mail. Currently you can’t drag in multiple messages at the same time.

Generally what Curio receives is a file with an eml extension. If you are having problems with the mail client app that opens the message, say you’d like it to be Outlook for example, then drag a message to your Desktop, use the Finder to Get Info on it and make sure the Open With selection is set to your mail client. Click Change All so that all files with that extension are opened with the appropriate client app.

The IBM Notes email client is a bit odd so we have a workaround. First drag the mail message to your Desktop and a dialog will appear asking if you want the full file or a link. Choose a link which will create a inetloc file on your Desktop. Then hold down the Command key and drag that file into Curio which will move the item from your Desktop into your project.

From Contacts

You can drag in people and other contacts from Contacts (or Lion’s Address Book) to embed copies of the contact information into your project. When you double-click the contact it will be found and viewed within Contacts, if not found then Contacts will ask if you want to add it.

From Calendar

You can drag in events from Calendar and copies of the event will be embedded into your Curio project.

Curio will maintain a link to the original event in Calendar, if possible. Double-click the Calendar event figure to open Calendar and display details about the event. If Calendar cannot find the event, it will offer to add it as a new event. This is useful if you want to share events with other users by sending your Curio project to them.

Note that Calendar entries are found via the event name. To ensure correct operation, entries in Calendar that are added to Curio should have unique event names. Once added to Curio you can rename the title of the figure Curio creates to anything you want, but the event in Calendar must keep its original name.

From OneNote

Curio can create lists and mind maps from lists copied in from Microsoft’s popular OneNote product via Curio’s Paste As > List and Paste As > Mind Map. To do this, Curio’s parser carefully strips out OneNote’s existing prefixes so you end up with just the list items themselves.

For example, if you copy a numbered list from OneNote that used with roman numerals surrounded by parentheses, like (iii), then Curio’s Paste As > List will now cleanly remove those prefixes so that Curio’s list code can take over the enumeration.

Supported OneNote List Prefix Format #1

Examples: 1., 1), (1), 1st, 1-

Rule: An optional “(” then a 1 to 3 digit number then an optional “st”, “nd”, “rd”, or “th”, then an optional “)” or “.” or “-” then whitespace.

Supported OneNote List Prefix Format #2

Examples: i., iv), (X), xxviii.

Rule: An optional “(” then a 1 to 6 digit roman numeral then an optional “)” or “.” then whitespace.

Supported OneNote List Prefix Format #3

Examples: a., b), (C), DD.

Rule: An optional “(” then a 1 to 3 digit letter then an optional “)” or “.” then whitespace.

Supported OneNote List Prefix Format #4

Examples: -, •, ○, §, ·

Rule: A single punctuation then whitespace.

From TaskPaper

There are a couple of ways to bring TaskPaper tasks into Curio.

Import a TaskPaper File

Drag-and-drop a TaskPaper file directly into Curio and it can be converted into a list or mind map, or simply inserted as a file asset figure, including any meta tags as mentioned in Importing Meta. In addition, any TaskPaper line entries that aren’t tasks (that is, don’t start with a -) will be considered as figure notes for the previous line item.

Dragging in a TaskPaper Project Outline

In TaskPaper, drag a project line’s dot (located on the left side of the project’s title) directly into your Curio idea space to instantly create a Curio to-do list, akin to importing a TaskPaper file described above. You can optionally right-click on the list to turn it into a mind map, if you wish.

Pasting a TaskPaper List

You can also do this via copy and paste. In TaskPaper, simply copy a list of task items then paste into Curio using Edit > Paste As > List. If a project line is copied then it will become the title of the resulting list, and task items will turn into Curio list items. Any meta tags will be handled automatically.

OmniFocus Tip

OmniFocus supports TaskPaper integration so that means it plays well with Curio’s new TaskPaper features as well!

Specifically, if you use OmniFocus’s Copy as TaskPaper feature to copy a selection of tasks as TaskPaper tasks, then Curio will parse the @defer tag as an alternate to the usual @start tag.

Exporting as TaskPaper

Note that Curio can export to TaskPaper as well! More details below.

From OmniOutliner

Drag an OmniOutliner-generated OPML export file into your Curio idea space and it can be converted into a list or mind map figure.

OmniOutliner Pro Super Powers

OmniOutliner Pro supports custom named columns and, when exported as OPML, those turn into data fields that Curio can import!

Curio will look for specifically named columns in that OPML export and convert that info into meta data.

  • Curio also parses OmniOutliner’s _status="checked" entry that indicates a checked figure.
  • Each column name can be customized by clicking on its link below.
  • Specified tags and resources must already exist in the project. They will not be automatically added.
  • The default date format is the “short” format listed in System Settings > Language & Region > Advanced > Dates, thus like 12/25/18 for US but 25/12/18 for Europe, but can be customized. A time is optional, but the default time format is the 24-hour format like 15:45, but can be customized via Advanced Settings.
  • Duration abbreviations for year, month, week, day, hour, minute can also be customized via Advanced Settings.
Column Name Values Description
Progress A number from 0 to 100. The figure’s percent complete. As a note, if a node has children then Curio ignores its Progress value and instead rolls it up from the Progress values set to its child nodes.
Rating A number from 1 to 5. The figure’s rating value (number of stars).
Priority A number from 1 to 5. The figure’s priority value from 1 meaning urgent priority to 5 meaning very low priority.
Start A date with or without time value. The figure’s start date.
Due A date with or without time value. The figure’s due date.
Duration A duration string, like 2w. The figure’s duration.
Tags A comma separated list of tags. The figure’s tags. Tag name only or with tag set prefix:
Like, Context.Home, detailed tasks.in flight.
Resources A comma separated list of resources. The figure’s resources. First or full name:
george, steve jobs

Insert from Library

Files stored in Library shelf can be dragged into your idea space, as well.

Project Library

When dragging items in from the Project library, the result will be another asset figure instance of the dragged asset, that is the asset will only exist once in the project’s internal library and your new asset figure will simply point to it.

Local Library

When dragging items in from the Local library, the file is copied into your idea space. If you hold down the ⌘ key while dragging then the file will be moved into your idea space, therefore removed from its original location.

Sleuth Library

Once you complete a search in the Sleuth library you may be able to drag the results, say an image or some text, into your idea space, depending on the site being searched.

Evernote Library

When dragging items in from the Evernote cloud library, the file is downloaded and copied into your local asset library. If you hold down the ⌘ key while dragging then the file will moved into your idea space, therefore removed from the Evernote cloud. If you hold ⌥ while dragging then an alias to the Evernote note will be created such that double-click the alias will open the note within the Evernote Mac app.

Spread PDF

Curio includes a special feature you can use with PDF assets called Spread PDF. If you have a multipage PDF file that you would like to spread across a single idea space or across multiple idea spaces, Curio makes it super simple. This feature is mainly used when taking notes alongside slides or annotating the slides in a PDF presentation.

You can spread a PDF across a single idea space. This is useful when spreading a short PDF or only the first few pages of a longer PDF to prepare it for spreading across multiple idea spaces.

You can also continue a spread across multiple idea spaces if you have an especially long PDF.

Spread PDF Within This Idea Space

  1. Create a new idea space or use an existing idea space.
  2. Drag the PDF into the idea space.
  3. Resize and position the PDF figure any way you wish. If you wish, create a text figure for text annotations and/or a list figure for key points or questions then place those next to the PDF with some placeholder text.
  4. Select those figures then right-click on the selected figures and choose Spread PDF Within This Idea Space. A single idea space has a 20 page spread limit primarily for performance reasons.
  5. You can then enter in how many columns and rows of the pages you’d like to create, plus the spacing gap between those columns and rows.
  6. Curio will duplicate the figures and spread them across then down the idea space, growing the idea space as necessary, where each PDF figure instance shows the subsequent page in the PDF document. After the process is completed you can move the figures around manually if you wish.

Tip

Read the tips below for more information on working with PDF figures.

Spread PDF Across Idea Spaces

  1. Begin just like spreading a PDF file across a single idea space, as described above. Note that this idea space you create will be used as a template when creating the subsequent idea spaces. Any other figures that you add to this idea space will be replicated on all the other idea spaces.
  2. Right-click on the idea space in the Organizer and choose Spread PDF Across Idea Spaces.
  3. Curio will generate a copy of the idea space as many times as needed to show all the pages in the PDF.

Instant Document Templates

You can insert new documents of any type from within an idea space using document templates. This comes in handy when you want to quickly expand upon some ideas in a new TextEdit document or perform some advanced drawing in a new Photoshop document.

Create a New Instant Document in an Idea Space

  1. Choose the document you wish to create from the Insert > Instant Document submenu.
  2. A copy of the chosen template document is automatically embedded in your project and added to the current idea space. Simply double-click the document to launch it in its native application.

Add Custom Entries to the Instant Document Menu

  1. You first need to create a document that you wish to use as a template. Launch the appropriate application, such as Photoshop or Word, then create a new document and save it anywhere on your hard disk. The name of this file will be used as the template name later in step #3. Alternatively, if there’s an existing document you wish to use as a template then you can skip this step.
  2. Choose Insert > Instant Document > Add File as Instant Document from the main menu.
  3. In the Open dialog, locate and select the document you wish to add as a template and click the Add button.
  4. A copy of the document you selected is created in your Home directory’s ~/Library/Application Support/Curio/Version XX/Repository/External Document Templates folder. The document’s name is also added to the document templates submenu.
  5. You can create multiple template documents of the same type, but make sure they have descriptive names so you can tell them apart in the document templates submenu.

Remove Custom Entries from the Instant Document Menu

  • Choose Insert > Instant Document > Remove Instant Document from the main menu, and then choose the template to remove and click Remove.

Tools Palette

In the toolbar you’ll find a small palette of tools, appropriately labeled “Tools”. This palette contains the toolbar you’ll use to manipulate figures on the idea space and easily create a few new items as well.

The Select Tool

The select button looks like a standard mouse pointer. This is the default tool and is automatically chosen if you press the Escape key on your keyboard.

With the select tool you can click on figures and select them for modification.

Selecting a Figure

  • With the Select tool active simply click on a figure. A glow will appear around the figure and resizing handles will appear on the figure if appropriate.

Selecting Multiple Figures

  1. Generally you can hold down the ⌘ key while selecting items.
  2. If you have a collection with a series of items, like the siblings in a list or mind map, then you can select one then hold Shift and select another and you will select the range between the first and last selected item.

Drag Selecting Figures

  • Normally when you drag out a region with the select tool Curio will select both figures and any sketches you made with the brushes or pens. However, if you hold the ⌥ key then only figures will be selected. Hold both ⌘ and ⌥ and then only sketches will be selected in the resulting region.

Insert a New Text Figure Using the Select Tool

  • Double-click anywhere in the idea space to create an automatically sized text figure, or double-click-drag the mouse to define a specific width for the new figure. Press Escape when you’re done editing the text figure.

Edit an Existing Text Figure Using the Select Tool

  • Double-click on the text figure to begin editing. Press Escape when you’re done editing the text figure.

The Text Tool

In the toolbar you’ll find a small palette of tools, appropriately labeled “Tools”. This palette contains the toolbar you’ll use to manipulate figures on the idea space and easily create a few new items as well.

The text tool button looks like a little ‘T’. You can press the T key on your keyboard to quickly choose this tool.

While the Select tool can be used to edit figure, if you plan to edit lots of text figures using the text tool may be more convenient as you only need to click once to create and edit text figures.

Session Styles

If, after clicking the text tool but before clicking on the idea space, you change any text attributes using the various inspectors then those attributes will be stored in-memory as the session style for the text tool.

For example, click the text tool then use the inspector to make the text bold with a red color. Then when you click on the idea space you’ll create a new bold-red text figure. Later, when you use the text tool again, you can create another bold-red text figure.

These style changes are just for the current session of Curio, they aren’t stored to disk. To make permanent styles you should use Curio’s figure style feature.

Insert a New Text Figure Using the Text Tool

  • Click anywhere in the idea space to create an automatically sized text figure, or click and drag the mouse to define a specific width for the new figure.

Edit an Existing Text Figure Using the Text Tool

  • Click on the text figure to begin editing. Press Escape when you’re done editing the text figure or click on another to begin editing that figure.

The Line Tool

The line tool button looks like an angled line. Click and hold on the line tool button to bring up a quick list of common lines including nondirectional, directional, and bidirectional. You can press the L key on your keyboard to quickly choose the line tool; repeatedly press L to cycle through the line choices.

Use the line tool to go into a line drawing mode useful when drawing lots of lines, for example when connecting several figures together with the sticky lines feature.

Tip

You may also want to read about Idea Graphs which use line figures to connect figures together.

Drawing a Line

  1. Click on the Line tool in the toolbar.
  2. Change any attributes such as color or arrowhead shape that you wish to make the default for this line using the Shape inspector, discussed below.
  3. Click and drag an area on the idea space to draw the line. Repeat this step as needed to draw multiple lines using the same style.

Drawing a Multipoint Line

  1. Draw a line as described above, however, before you release the mouse button hold down the ⌥ key. When you release the mouse you’ll find that you’ve dropped a midpoint and now you’re placing a new endpoint. Continue holding down Option to keep dropping midpoints as you release the mouse. If you’re done, just release the Option key before you drop your last point.
  2. Repeat step 1 to draw multiple multipoint lines using the same style.

Tip

Read more about line figures below.

The Shapes Tool

The shape tool button looks a geometric shape. You can press the F key on your keyboard to quickly choose this tool.

With the shape tool you can easily create figures such as rectangles, rounded rectangles, circles, octagons, hexagons, trapezoids, brackets, vertical brackets, triangles, diamonds, semicircles, ovals, underline, speech bubbles, and clouds.

Using the shape inspector you can always change a shape to any other geometric figure, as we’ll detail in the sections ahead.

The shape tool on the toolbar has an arrow located in the lower right portion of the button. When you click and hold the mouse on the button a menu displays the list of predefined shapes you can choose. Once you choose a shape, your choice is reflected by the button’s image. Simply clicking the button will reselect the displayed shape.

Adding Text

You can add text to a shape simply by double-clicking it. Note that these figures are considered freeform shapes where you control the width and height. Therefore text can be clipped if the figure dimensions are not large enough. Any contained text is centered both horizontally and vertically within the shape. You can toggle off the freeform sizing using the figure’s right-click context menu or the the Paragraph inspector.

Additional Shapes

As you’ll learn more about later, the shape inspector allows you to modify a corners attribute of the figure. For a rectangle, this turns it into a rounded rectangle. But for other shapes the change may be more dramatic. More details later when we discuss the shape inspector.

Drawing a Shape

  1. Click on the Shape tool in the toolbar (hold the button down to display a popup menu of shape choices).
  2. Change any style attributes that you wish to make the default for this shape using the Shape inspector.
  3. Click and drag an area on the idea space to draw the shape.
  4. Repeat step 3 to draw multiple shapes using the same style.

The Scribble Tools

These brush and pen tools are covered in greater detail in the section on Scribbles.

Working with Figures

Select One or More Figures

  • Using the Select tool, click on a figure. Select additional figures by holding ⌘ or use the Shift key to select a range of figures in a collection. Or use the Edit > Select All menu item to select all figures on the idea space or within the active collection figure.

Adjust a Figure Location

  1. Simply drag the figure using the mouse to the new location on the idea space.
  2. Or use the arrow keys to move figures around. Hold Shift to move in greater increments. If an idea space grid is active then the figures will move based on the grid spacing.
  3. Or use the Geometry inspector to set a specific value.

Adjust a Figure Size

  1. Drag on the handles that appear around the border of a selected figure.
  2. Or use the Geometric inspector to set a specific height or width.
  3. If a scaled image figure then you can press the N key or click the Natural Size in the Geometry inspector to reset the image to its unscaled size.
  4. If an image figure then by default resizing is proportional. This can be toggled in the Geometry inspector or by holding down the Shift key while resizing.

Rotation

  1. Hold ⌘ while dragging a resize handle to rotate the figure.
  2. Or, to quickly rotate a figure in 45° increments, simply press the R key (hold down the Shift key to rotate the figure in a clockwise direction).
  3. To quickly set the rotation angle of a figure to 0°, press the Z key.
  4. You can exert more control over the exact rotation angle and rotate multiple figures at once by using the controls of the Geometry Inspector.

Image Flipping

  1. Select an image figure.
  2. In the Geometry inspector, in the Arrange panel, click the “Flip Horizontal” or “Flip Vertical” button.

Moving a Figure in Front to Back Ordering

  1. Select the figure.
  2. Choose Arrange > Send Backward or Arrange > Bring Forward to move a figure one position closer to the front or back of the stack. Choose Arrange > Send to Back or Arrange > Bring to Front to move a figure to the very bottom or top of the stack. Toolbar buttons are also available for this via Customize Toolbar.

Locking and Unlocking Figures

  1. Select the figures you wish to lock.
  2. Choose Arrange > Lock from the main menu. This will lock both the content and position by default.
  3. Alternatively, you could choose a subitem — Content or Position — to lock just one of those attributes.
  4. When a figure with any lock attribute is selected it will have a thin, gray glow. If only the text content is locked, it will show selection handles as well, since the figure can still be moved and resized.
  5. To unlock a figure choose Arrange > Unlock to remove all lock restrictions.

Using Snap Guides

  • Choose Arrange > Show Snap Guides from the main menu. You can toggle the appearance of edge and center snap guides independently by choosing Arrange > Edge Snap and Arrange > Center Snap from the main menu.

Align Figures

  1. Select the figures you wish to align.
  2. Choose one of the alignment options from the Arrange > Align submenu, or use the buttons in the Geometry inspector.
  3. If only a single figure is selected then it will be aligned within the idea space itself.

Distribute Figures

  1. Select the figures you wish to distribute.
  2. Choose one of the distribution options from the Arrange > Distribute submenu, or use the buttons in the Geometry inspector.

Grouping Figures

A grouped figure converts a selection of several figures into a single figure. Once within a grouped figure the individual figures can no longer be selected, resized, or re-styled.

  1. Select the figures you wish to group.
  2. Choose Arrange > Group from the main menu.
  3. To ungroup figures, select the group and choose Arrange > Ungroup from the main menu.

Groups vs Followers vs Bundles

  • A group figure encapsulates figures within itself. You can even create nested groups. The end result is a single figure so can be used in places that take a single figure, like a mind map node. Accessing figures deep within a group hierarchy can be difficult.

  • A follow figure is a figure that follows the movements of an assigned leader figure. Move the leader and all the followers move, too. Followers are otherwise completely independent and can be selected, moved, resized, styled, edited, deleted, copied, etc. A leading figure could have many followers scattered anywhere on an idea space. Right-clicking a leader or follower gives you quick access to related actions.

  • A bundle figure is almost identical to the following figures but they all follow each other if any of them is moved. You can temporarily disable the bundle to move one or more then re-enable the bundle to track movements again. Right-clicking a bundled figure gives you quick access to related actions.

Following Figures

You can create a loose collection of figures which follow the movements of their assigned leading figure. The followers are independent and can be easily repositioned, edited, deleted, styled, and sized, but will move with the main figure.

Any figure on the idea space can be a leader or follower including collection figures. However, figures within a collection are excluded since the collection itself manages the layout of its contained items.

These are very useful in many situations:

  • You want to create a bunch of annotation figures alongside a main figure, pointing out or discussing areas of interest. You can easily reposition, add, or remove annotations, yet they move with the main figure.
  • You want to create a large title or caption figure above or below a main figure that can be positioned and sized independently yet moves with the main figure.

Tip

Learn more about groups vs followers vs bundles.

Video ▶️

Watch a following figures demonstration video on our YouTube channel.

Follow a Figure

  1. Select a figure that will act as the leading figure.
  2. Hold Shift and continue selecting figures that will be the followers of that first selected figure.
  3. Choose Arrange > Follow > Follow First Selected from the main menu or via the right-click context menu.
  4. You can add more followers at any time by repeating this process.

When you move a leading figure, its followers will move as well. However, you can move followers independently to reposition them around the leader. All figures are independent and can be edited, selected, deleted, cut, copied, exported, printed, etc without impacting the others.

Adding More Followers

There are several ways to add more followers to an existing leading figure.

  1. You can follow the steps above and select the leading figure, then the figures you wish to follow that figure, and choose Arrange > Follow > Follow First Selected.
  2. You can select a mix of existing followers and figures you want to become followers and choose Arrange > Follow > Follow Same Leader.
  3. You can copy/paste, duplicate, or ⌥drag an existing follower and the new created figure will also be a follower of that same leader.

Glow Colors for Leaders and Followers

  • When you select a leading figure its followers will have a yellow glow.
  • When you select a follower its leader will have an orange glow.

Note these associated glowing figures aren’t selected, the glow is only used to indicate the leading/following relationship.

Unfollow a Figure

At any time you can specify that one or more figures should no longer follow a figure:

  • Select one or more figures and choose Arrange > Follow > Unfollow from the main menu or via the right-click context menu.

Selecting Leaders and/or Followers

  1. Select either the leading figure or one of the following figures.
  2. Choose Arrange > Follow > Select Leader, or Arrange > Follow > Select Followers, or Arrange > Follow > Select Leader and Followers from the main menu.

Context Menu

If you right-click on figures to show the figure context menu a handy Follow submenu will be available to give access to common follow figure actions.

Toolbar Button

If you right-click on the toolbar and choose Customize Toolbar you can drag a Follow button onto your toolbar.

This button acts as a toggle based on the selected figures to easily follow or unfollow a leading figure.

Bundling Figures

Similar to the following figures described above, you can create a loose collection of figures but instead of following a single leading figure, they follow each other. Move any figure in the bundle and they all move, yet you can still resize and edit individual figures within the bundle.

So, how do you move a single item? You can temporarily toggle off the bundle (described below), reposition the figures within the bundle, then turn it back on.

Any figure on the idea space can be in a figure bundle including collection figures. However, figures within a collection are excluded since the collection itself manages the layout of its contained items.

Tip

Learn more about groups vs followers vs bundles.

Video ▶️

Watch a bundling figures demonstration video on our YouTube channel.

Bundling a Figure

  1. Select several figures.
  2. Choose Arrange > Bundle > Bundle from the main menu or via the right-click context menu.
  3. If any of the selected figures are already in a bundle then the unbundled figures will be added to the same bundle, else a new bundle will be created with all selected figures.

Note that if you select several figures in a mix of existing bundles then you can’t bundle them together, as a safety precaution. You would first need to unbundle those figures, then bundle them in a new bundle.

When you move any figure in the bundle, all figures in the bundle will also move. Yet those individual figures can still be independently edited, resized, selected, deleted, cut, copied, exported, printed, etc without impacting the others.

Adding More Bundled Figures

There are several ways to add more figures to an existing bundle.

  1. You can select a mix of existing bundled figures and figures you want to to add to the bundle and choose Arrange > Bundle > Bundle.
  2. You can right-click to temporarily disable the bundle, then copy/paste, duplicate, or ⌥drag an existing bundled figure and the new created figure will also be in the same bundle. You can then right-click to re-enable the bundle via the context menu.

Glow Colors for Bundled Figures

When you select any figure in a bundle the other figures in the bundle will have a yellow glow so you know they’re associated with each other.

Note these associated glowing figures aren’t selected, the glow is only used to indicate the bundle relationship.

Unbundle a Figure

If you want to remove one or more figures from the bundle then:

  • Select one or more figures and choose Arrange > Bundle > Unbundle from the main menu or the right-click context menu.

Select Bundle

To select all the figures in a bundle:

  1. Select any figure in a bundle.
  2. Choose Arrange > Bundle > Select Bundle from the main menu.

Temporarily Disable Bundle

To temporarily disable a bundle:

  • Select any figure in the bundle and choose Arrange > Bundle > Temporarily Disable Bundle or via the right-click context menu.

You can now freely reposition any of the figures in the bundle.

The bundle will be re-enabled automatically if you go to another idea space or close the project, or you can manually do this by toggling toff the Temporarily Disable Bundle menu item or via the right-click context menu.

Context Menu

If you right-click on figures to show the figure context menu a handy Bundle submenu will be available to give access to common follow bundle actions.

Toolbar Button

If you right-click on the toolbar and choose Customize Toolbar you can drag a Bundle button onto your toolbar.

This button acts as a toggle based on the selected figures to easily create or add figures to a bundle, or unbundle the selected items.

Asset Figures

Creating Asset Figures

Drag a file from the Finder or your browser into an idea space to create an asset figure.

In general the asset figure is rendered as a simple icon and file title. If an image or video file, it is rendered in preview form so you see the image and can interact with the video.

Opening/Editing

Double-click the figure to open its corresponding asset file in the appropriate editing application.

If it’s opening in the wrong application you may want to right-click and choose Reveal In Finder, then use the Finder’s Get Info to see what application is associated with that file extension. Choose a more appropriate application then click the Change All button so all files with that extension open with that app.

Alternatively right-click on the asset figure and choose Open With and select an application on-the-fly.

Quick Look Preview

Press Spacebar to see a popup Quick Look preview of the file.

Show As Icon or Preview

Right-click on an asset figure and choose Show As Icon or Show As Preview, to change how the asset figure is rendered. If you choose preview then, for image types, the image itself is rendered, otherwise a Quick Look preview is retrieved and rendered.

Default Show As Per File Type

You can set the default state for whether a type of file dragged into Curio shows as icon or preview. First, drag in a representative file (image, PDF, video file, or other document) then select the figure and use the Format > Default Figure Settings submenu to set the default show as format as either icon or preview for that specific file type.

Show As Text Figure

(Also known as file-backed text figures.)

When you drag a text file into Curio it is normally displayed as an asset figure with simple icon. To get a read-only view of the contents of the file, you could press Spacebar or right-click and choose Show as Preview. To edit those contents, you have to double-click the asset figure to open the text file in its appropriate editing application.

A much more powerful feature is to right-click on the asset figure and choose Show As Text Figure. The result looks and acts like a normal Curio text figure, however instead of storing the text figure’s contents in the figure’s internal data, it is stored within the asset text file, thus a file-backed text figure.

  1. Drag any text file into Curio and insert it as a normal file asset figure, displayed with its icon.
  2. Right-click and choose Show As Text Figure.

FileBackedTextFigureBefore

Important

If you don’t see a normal asset figure when you drag in a markdown file then it may be that you’ve told Curio to always insert markdown files as text figures directly, where Curio extracts the content of the file and inserts it into a new figure. To fix this click here to reset the alert then drag a markdown figure into Curio again. This time make sure to choose “As File” from the alert that appears so it comes in as a normal embedded or aliased file. Now you should be able to right-click on it and choose Show as Text Figure.

Now the asset figure looks like a normal text figure:

FileBackedTextFigureAfter

To change it back to a normal asset figure with icon:

  • Right-click on the figure and choose Show As Icon.

Plain text, rich text, markdown, and even simple HTML files are supported. If the file has a markdown or md extension then markdown rendering will automatically be enabled for the figure. For rich text, if images are added to or removed from the figure then the file will automatically be converted between rtfd and rtf formats.

Video ▶️

Watch a file-backed text figures demonstration video on our YouTube channel.

Duplicates Share Contents

As with any asset figure, if you duplicate the figure, all copies share the same underlying asset file. So all copies of the figure will render and modify the contents of that same underlying file. This means editing any text figure will dynamically update all the others.

Copies of a file-backed text figure can all be styled independently. The styling associated with a figure is applied to the shared text content right before rendering.

Using File Aliases

This asset file can be an embedded file, or an aliased file that you Option-dragged into the idea space.

In the case of an alias, changing that text file outside of Curio will cause all the text figures that use that file to dynamically update themselves.

For instance, you could store the results of a lab experiment in a separate file elsewhere on your hard disk, and those results can be included in multiple text figures within your project.

This file, if located within a folder synced by a cloud service like iCloud or Dropbox, could even be edited on an iOS device which will then sync back to your Mac for rendering within Curio!

Tip

If focus is on Curio and you use another device to change an underlying cloud-synced text file, you may need to either go to another idea space and back or switch to another app and back to force Curio to refresh the idea space.

Important

Please note that some sync servers, like Synology Cloud Station servers, do not support aliases to files so any aliases created in Curio will break!

Opening Associated Text File

If you press and hold the Option key while double-clicking the text figure then the associated text file will be launched for editing.

Alternatively you can right-click on the text figure and choose to open the file, or open it with a specified editing application.

Styling File-Backed Text Figures

The contents of the text backing file are used as the contents of the text figure. So how is that text styled within Curio’s figures?

Plain Text Files

If the text file is a plain text file, then the figure’s style such as font, font size, text color, etc, is applied to that content.

Similarly markdown files, which are simply plain text files, are styled the same way, then the markdown-specific attributes, such as those for headings and list items, are then applied.

Duplicates of the figure, which share the same underlying text file, are handled by applying that figure’s text syling right before rendering. Thus the same plain text content can look vastly different in various figure instances as those instances apply their figure stylings to it.

Rich Text Files

Rich text files add a wrinkle since they already contain text stylings. Characters, words, and paragraphs may already have certain fonts, font sizes, traits such as bold and italics, foreground text colorings, and background highlight colorings. And there may be duplicates of a figure, each independely styled.

How are figure styles applied to those rich text contents?

Curio tries its best to adopt as much of each figure’s style to the figure without impacting the contained text using the following logic:

  1. Same Font and Font Size Throughout
    If the entire text content shares the same font and font size (and ignoring traits like bold and italics) then the figure’s font and font size are applied to those contents right before rendering. Subtext containing bold and italic attributes remain intact after applying the new font.

  2. Same Font Size Thoughout
    Else, if the entire text content has a mix of fonts but they’re all the same font size, then the figure’s font size is applied to those contents right before rendering. So the mix of fonts remains intact but they all adjust in size. Bold and italic attributes also remain intact.

  3. Text Coloring
    Curio will then apply the figure style’s foreground text coloring to the text, while making sure colored subtext remains intact.

If there’s a mix of fonts and sizes then Curio leaves the text formatting as-is as it doesn’t want to jeopardize your rich text formatting by applying a new syling erroneously.

Lastly, after editing a figure and making changes to the text, then the reverse happens: the original font, font size, and text coloring based on the original styling from the rich text file when it was first read in, is then re-applied to the text before saving, using the same logic as detailed above. That way the figure’s styling is independent of the styling saved to disk. However, if you’ve edited the figure and, using Curio’s text inspectors, modified the text so it’s a mix of fonts and sizes, then Curio will keep all of this intact when saving to disk, so it doesn’t jeopardize your applied formatting.

Compared to Synced Figure Instances

Curio has a similar feature called Synced Figure Instances which you can read about below. With that feature, you can copy a text figure then paste synced instances throughout your project.

Like asset figures displayed as text figures changing the contents of any copy will be reflected to the others throughout your project. However, there are some key differences:

  1. Synced figure instances store their text data within the figure data itself, not to a separate text file.
  2. Synced figure instances will also sync figure meta information. Checking off or changing the due date on one will change all the others. With file-backed text figures each figure is independent and only the content is synced since they share the same underlying asset file. (Technically, for historical reasons, tags are synced between file-backed text figures as they are associated with the asset, not the figure.)
  3. Synced figure instances allow you to easily jump between the original and instances of that original.

Cool Trick

You can actually create a synced figure instance of a file-backed text figure to get the best of both worlds: synced figure meta with synced text contents stored to a file which can be embedded within the projet or even aliased to a file possibly synced via a cloud service to your other Macs and devices.

Text Figures

Create a Text Figure

  1. With the Select tool, double-click anywhere in the idea space to create an automatically sized text figure, or double-click-drag the mouse to define a specific width for the new figure.
  2. Or, with the Text tool, single click anywhere in the idea space to create an automatically sized text figure, or click-drag the mouse to define a specific width for the new figure.

Style a Text Figure

  1. Using the controls on the inspector bar or inspector shelf to style your figure.
  2. You can also set options such as enabling a minimum height or freeform sizing.

Stop Editing a Text Figure

  • Press Escape or click on the Select tool when you’re done editing the text figure.

Access the macOS Ruler

  • While editing text figures you can use the standard macOS ruler for additional options. Toggle the ruler visibility using the View > Show Ruler menu item. The ruler includes tab stops and controls for text styles, alignment, spacing, and simple text lists.

Syncing with External Files

Curio Pro supports two methods for syncing text figures with external files which may be useful:

  1. File-Backed Text Figures.
  2. Sync File Figures.

Sync Figure Text to Organizer Title

  • Use the Info inspector to give a figure an identifier of {%IdeaSpaceTitle} and the figure’s content and the idea space’s title in the Organizer will automatically stay in sync regardless of which one you change.

Image Figures

Drag any image from the Finder, a browser, or an app like Photos directly into your Curio idea space.

Images can be resized, rotated, and styled using the style inspector.

Markup Image

You can right-click on a jpeg or png image figure and choose File > Markup Image to bring up the standard macOS markup popover. This allows you to crop, annotate, highlight, and scribble on the image then instantly see the result on your idea space.

Note that while markup operations, including crop, are undoable during your run session in Curio, once you close the project the changes cannot be undone.

Resample Image

Large jpg and png images, Retina (144 DPI) screenshots, and iOS photos in Apple’s new HEIC image file format can all be slow to load and manipulate on an idea space, and consume lots of disk space in your project.

ResampleImage

Resampling an image so it has smaller dimensions, a 72 DPI resolution, and/or a more efficient format is an easy way to boost this performance and save some disk space.

  1. Right-click on a jpg, png, or heic image figure.
  2. In the sheet that appears you can choose the jpg or png format, a jpg compression factor, new width and height dimensions, new DPI resolution, and optionally change its file name as well.
  3. While you make changes the resulting dimensions and file size are displayed so you can see the impact.

After committing the resample you can undo the operation if you don’t like the changes.

Optimized Image Loads

When Curio loads the image for an image figure from disk, it uses the Mac’s Core Graphics method to retrieve an image for a given file no larger than 1500 × 1500, proportionally sized, which allows much faster inital rendering and reduced memory usage.

If you resize the image figure to a size larger than that, Curio will simply scale that initially loaded image. Resizing to a smaller size will cause Curio to re-render from that initial image, consuming even less memory.

Of course, double-clicking the image figure opens the full-sized image in the appropriate application.

You can customize that 1500 × 1500 size via Curio’s advanced settings if you’d like to retrieve full-size images no matter how large.

Natural Size

After importing the image, Curio may size the loaded image to a smaller size if going into a mind map or list, for example.

You can use the Natural Size button in the Geometry inspector (or press the N shortcut) and the image figure will grow to its natural size, but remain constrained by the current width of the idea space.

When clicking Natural Size or pressing N, you hold one these key modifiers:

  • Hold the Shift key and the idea space will expand if necessary.
  • Hold the Option key and the full, non-optimized image will be reloaded, in case a size constraint was imposed on a large image for optimization reasons, and the idea space will expand if necessary.

SVG Images

Curio includes support for SVG image figures. Simply drag in a .svg file or paste a raw text SVG and a scalable, vector-based image will be rendered.

Note that the SVG format itself defines the various fills, gradients, and stroke colors for the internal vector paths within the image. The Curio figure inspector’s stroke and fill color settings can’t override those internal values.

Also, the ISVG library that Curio may not support every feature of SVG. For instance, currently the text element is not supported in SVG images.

Several of these SVG image repositories include an integrated editor. You can either download the SVG file and drag it in or, even faster, click the Copy button to copy it then paste it into Curio.

  • SVG Repo - can change the stroke coloring on the site before copying
  • Phosphor - can change the stroke coloring on the site before copying/downloading
  • Remix - can change the stroke coloring on the site before copying/downloading
  • Iconify - can change the stroke coloring on the site before copying/downloading
  • Lucide - can change the stroke coloring on the site before copying/downloading
  • Tabler
  • Feather - can change the stroke coloring on the site before downloading
  • Huge - stroke icons are free, can change stroke color before downloading but have to manually edit svg text file and tweak the currentColor attribute with the actual color from the <svg> line.
  • Framer Shapes - cool gradient shapes
  • Sketch Shapes - several massive collections of colored icons
  • Bootstrap
  • SVG Viewer - you edit the svg code live on the site to tweak shape and colors with preview before copying or downloading
  • SVG Shape Generator - random, organic blobs
  • ssshape - more absract organic blobs
  • SVG Backgrounds - interesting shape collections, can change the stroke coloring on the site before copying/downloading
Online graphics editors that support SVG editing

You can either download the SVG file and drag it in or click the Copy button to copy it then paste it into Curio.

Commercial online graphics editors that support SVG editing
Commercial Mac apps that support SVG editing

Markdown

Markdown is a simple markup language to add formatting to plain text.

For example typing this:

Here is a *simple* example of **markdown** with a list of pets:

- Butternut is a ***dog***.
- Marshmallow is a ***cat***.

And a numbered list:

1. The first has a link to [Zengobi](https://zengobi.com).
1. The second has `monospace` and ~~strikethrough~~.

Will turn into this when you’re done editing:

Here is a simple example of markdown. And here is a list:

  • Butternut is a dog.
  • Marshmallow is a cat.

And a numbered list:

  1. The first has a link to Zengobi.
  2. The second has monospace and strikethrough.

Curio’s text figures support a number of markdown syntax elements. While editing the text figure you will see the raw markdown syntax, but when you finish editing Curio will render it on the fly.

Using Markdown

Markdown Detection

The first time you edit a text figure and use markdown syntax Curio will ask if automatic markdown detection should be enabled. You can also control whether markdown is enabled or disabled for a specific figure, regardless of the global default.

If you never or rarely use markdown then perhaps disable it by default, and only enable it for specific figures when you need it. On the other hand, if you’re a fan of markdown, enable automatic detection and enjoy using markdown in any figure.

  • Global Default
    Use the Format > Default Figure Settings > Detect Markdown menu item to toggle the global setting. This setting is applied to a figure when you first create it, so existing figures won’t suddenly change if you change the global.
  • Per Figure
    If a text figure is selected or being edited, you can use the markdown button on the inspector bar or text inspector to explictly enable or disable markdown rendering just for this figure.

Mixing Markdown and Rich Text

Within a text figure you can mix markdown syntax with normal attributed text. The latter comes in handy when you’d like to use attributes not supported by markdown, such as text and background coloring.

Rich Text Syntax

Curio supports on-the-fly rendering of the following markdown rich text syntax:

Attribute Example Markdown Rendering Enabled
Italic *italic* or _italic_ italic or italic
Bold **bold** bold
Bold and Italic ***bold and italic*** or ___bold and italic___ bold and italic
Underline __underline__ underline
Strikethrough ~~strikethrough~~ strikethrough
Highlight ==highlight== or ^^highlight^^ or ::highlight:: highlight
Inline Code `printf()` printf()
Inline Links Visit [Zengobi](https://www.zengobi.com) Visit Zengobi
Images ![Curiota icon](https://www.zengobi.com/images/curiota32x32.png) Curiota icon
Wikilinks Read [[Overview]]
Read [[Overview|Alt Title]]
Read Overview
Read Alt Title
Headers # header 1
## header 2
### header 3
#### header 4
##### header 5
###### header 6

header 1

header 2

header 3

header 4

header 5

header 6

Intra-word Italics

For intra-word italics, like if you wanted to say magnificent, use the asterisk, not the underscore. Underscores for italics can only be used at the start and end of a word. This allows you to enter text with intra-word underscores like Steven_Paul_Jobs without rendering any italics.

Escaping Markdown

The backslash character can be used to escape text so it won’t be interpreted as markdown syntax. So, for example, \*this will not be in italics\*.

The markdown link syntax of the form [title](link) is supported within Curio.

The Smart Paste URL feature make it easy to create links. Simply paste a copied link on selected text to turn it into a markdown link of the form [selection](link).

Given that pasting on selected text could also create a rich text clickable link, when does paste create a rich text link vs a markdown link?

  • If a text figure has markdown explicily disabled (via the inspector bar) then a rich text link is created, and if explicity enabled then it will create a markdown link.
  • If markdown hasn’t been explicity enabled or disabled and Detect Markdown is enabled (via the Format > Default Figure Settings menu) then it’s still unclear if you want paste to create a rich text link or a markdown link. This is solved with the Prefer Markdown Formatting option under that same menu. Enabling this option means Curio should assume you prefer markdown formatting so a markdown link will be created.

Curio’s link parsing cannot handle URL’s with parentheses, as those are nested within markdown’s link syntax parentheses. This is a complex problem to resolve as inner parens may not be paired - that is, you could have an uneven number of left vs. right parens - and regex parsers can’t handle this very easily.

An easy workaround is to escape the left and right parenthesis with %28 and %29, respectively.

Thus instead of this markdown:

[Set](https://en.wikipedia.org/wiki/Set_(mathematics))

You would do this instead:

[Set](https://en.wikipedia.org/wiki/Set_%28mathematics%29)

Markdown Emoji

While editing a markdown text figure, you can type in over 800 markdown emoji cheat codes, such as :laughing: and :heart_eyes_cat: and many of the others published at the Emoji Cheat Sheet they’ll be converted into the appropriate emoji character, like 😆 and 😻 when you finish editing.

MarkdownEmoji

Helpfully Curio will show you an autocomplete popover as you start typing. For example type :s and the popover will show all the markdown emojis codes that start with s, type an m after, so you’ve typed :sm, and you’ll see options like smile and smiley_cat. Use the arrow keys to choose one and press Return and the word is autocompleted for you and the ending : appended if necessary.

Markdown Images

Curio supports markdown’s image syntax like this:

![Curiota icon](https://www.zengobi.com/images/curiota32x32.png)

When you finish editing your markdown, the specified image references are rendered into the resulting rich text figure that appears on the idea space.

You can also specify a local file-based image reference like this:

Here is an image ![Butternut](file:///Users/gbrowning/Desktop/Butternut.jpeg)

Mac App Store Restriction

Only secure https links are supported for images as insecure http links are not allowed.

Image Size

While there isn’t an official standard method for overriding an image’s size in markdown, Curio supports this popular syntax:

  • ![title|20x50](image.png) = size the image to 20x50
  • ![title|20](image.png) = proportionally size the image to a 20 pixel width
  • ![title|x50](image.png) = proportionally size the image to a 50 pixel height

Image Retrieval

It is important to note that a text figure’s markdown syntax is parsed and rendered dynamically by Curio when it loads an idea space or when the text content is changed. Any referenced markdown images are retrieved during rendering, as there are no embedded images within the text figure.

This retrieval is a synchronous action, with a 15 second timeout, as it could impact the layout of other figures on the idea space, and needs to be completed before exporting, printing, or presenting, as well. You can remove the timeout to wait indefinitely, or set a negative timeout if you don’t want it to retrieve any images.

Curio uses a standard shared URLCache configured with a 10MB memory cache and 50MB disk cache to minimize repeated downloads from the internet. For markdown image retrieval Curio uses the default caching policy, thus paying attention to HTTP caching and expiry headers from the server, although there are other options which you can set. You can enable logging to learn more.

If you wish to statically store an embedded image into a Curio text figure, instead of dynamically retrieving it via a markdown image URL, then it would be better to simply copy the image from a browser page or elsewhere and then paste it into text figure, permanently embedding it within the stored rich text.

Markdown Horizontal Rules

Curio supports markdown horizontal rules via the CommonMark-standard ***, ---, or ___ syntax.

By default *** will draw a strong line, --- a regular line, and ___ a thin, dotted line. However, the color, thickness, width percentage, dash pattern, and space before and after can be customized for each.

For example, here we have a markdown text figure with the three types of horizontal rules:

# Horizontal Rules

Heavy (3 asterisks)
***
Regular (3 dashes)
---
Light (3 underscores)
___
The color, thickness, width percentage, dash pattern, and space before and after can be customized for each.

And here’s what it looks like we’re done editing the figure:

HorizontalRulesRendered

Horizontal Rule Styling

Syntax
Color Thickness Width Dash Pattern Space Before Space After
*** #222222 2 100% none 30 30
--- #888888 1 100% none 30 30
___ #999999 0.5 100% 2,4 30 30

The dash pattern follows this format: pixels on, pixels off, pixels on, pixels off, …, repeat. So 2 would indicate 2 pixels on then 2 pixels off, repeat. And 2,4 would indicate 2 pixels on then 4 pixels off, repeat.

If you have Curio Professional you can also customize the style of horizontal rules by using master markdown styles.

Markdown Equations

LaTeX math equations can be entered directly into Curio’s markdown text figures.

Block equations ($$⏎...⏎$$), inline equations (\(...\), $...$), and math code blocks (```math⏎...⏎```) are all supported.

Important

Make sure markdown is enabled for the text figure using the markdown button on the inspector bar to see the rendered equation.

Equation Rendering Details

Read the details on how equation rendering works in Curio and how it can be customized. Curio normally needs internet access to retrieve the latest MathJax rendering script but local offline rendering can be configured.

For example, here we have a markdown text figure with block and inline equations:

An approximation can be given by replacing $N-1$ with $N-1.5$, yielding:

$$
\hat{\sigma}= \sqrt{\frac{1}{N-1.5}\sum_{i=1}^{N}\left(x_i-\bar{x}\right)^2},
$$
The error in this approximation decays quadratically (as $\tfrac{1}{N^2}$), and it is suited for all but the smallest samples or highest precision: for $N=3$ the bias is equal to 1.3%, and for $N=9$ the bias is already less than 0.1%.

A more accurate approximation is to replace $N-1.5$ above with $N-1.5+\tfrac{1}{8(N-1)}$.

And here’s what it looks like we’re done editing the figure:

MarkdownMathJaxRendered

Block equations are center aligned by convention but you can override the default to left or right. Likewise the default 10 pixel spacing before and 10 pixel spacing after can be changed.

Curio will automatically cache rendered math equation images to disk with the figure’s data so editing text outside the equation itself won’t cause a re-render. However, if you change any style information like the figure’s base font, master markdown styles, or MathJax-specific settings then that would cause equations to re-render.

If you modify the markdown figure’s text size using techniques such as the following, your equations will scale and and adjust baselines to match automatically:

  • Select the figure itself and use ⌘+ or ⌘-.
  • Select the figure itself and use the inspector text size control.
  • The master markdown style entry for body has a custom font-size.

FYI, for those syncing their text figures with other apps or services:

  • Obsidian supports $$⏎...⏎$$ for blocks and $...$ for inline.
  • GitHub supports $$⏎...⏎$$ for blocks, $...$ for inline, and ```math⏎...⏎``` code blocks.

Markdown Equations With Equation Editor

While you can type your LaTeX equations directly into your markdown text, you can also use Curio’s Equation Editor, with integrated preview, to create and edit your LaTeX equations.

When you’re editing a text figure and markdown is either enabled or markdown autodetect is enabled the Equation Editor will automatically insert LaTeX into your markdown.

Inserting an Equation
  1. Edit a markdown text figure and position the text cursor where you would like to place the equation. If the cursor is on its own line then you’ll insert a “block” equation, else if between existing text you’ll insert an “inline” equation with automatic baseline adjustment to align itself with neighboring text.
  2. Choose the Insert > Equation menu item (⌃⌘E) or click the Insert toolbar button then choose Equation.
  3. Use the equation editor to enter your equation. A preview area below shows what your equation will look like.
  4. Click Insert to insert the LaTeX into your text figure. Curio will automatically prepend and append the appropriate block ($$⏎...⏎$$) or inline ($...$) delimiters to the equation for proper rendering.
  5. When you finish editing the figure the equations will be dynamically rendered.
Editing an Equation

When you need to edit your LaTeX equation you can do it by hand, of course, or you can use the Equation Editor:

  1. Edit the markdown text figure and position the text cursor anywhere within the equation text.
  2. Choose the Insert > Equation menu item (⌃⌘E) or click the Insert toolbar button then choose Equation.
  3. Use the equation editor to edit your equation.
  4. Click the Update button when you finish your changes and the LaTeX markdown will be updated.

Markdown Equation Resources

Online LaTeX equation editors:

Learn more about LaTeX equations:

Markdown Equation Meta

LaTeX conviently supports a comment symbol: %. Everytihng after a % is ignored and not rendered. Curio uses that ability to support meta attributes tacked onto the end of your LaTeX equation.

For example, this block equation will be left aligned and scaled by 70%:

$$
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} % align:left; scale:0.70
$$

And this inline equation has a baseline of 2.3 points to better position itself vertically with neighboring text:

This $\sqrt{b^2-4ac}%baseline:2.3$ is an inline formula.

Multiple meta key:value pairings should be separated by semicolons. Spaces are ignored.

Meta
Value Example Comment
align left, center, right align:left Block equation horizontal alignment.
scale number scale:0.7 Scales the image.
margin-top number margin-top:5 The margin above a block equation in points.
margin-bottom number margin-bottom:5 The margin below a block equation in points.
baseline number baseline:2 The baseline for an inline equation.
baseline-adjust number baseline-adjust:-3.2 An adjustment applied to the inline equation’s baseline.

Warning

If you’re syncing your markdown text with other editors that support equations then please note that while they should ignore LaTeX comments, they may not. For example, Obsidian ignores comments in block equations (yay!) but unfortunately doesn’t ignore them in inline equations (boo!).

Markdown Lists

Curio text figures support bulleted and numbered inline markdown lists, like these:

#### Simple
- Flight tickets
    - Are we on Southwest this time?
- Hotel confirmation number
    - `83729293`
- Don’t forget *passports*!

#### A Mixed List
1. Pack bags
    1. Get new swimsuit
    1. Sunscreen
1. Reserve rental car
    * Ask Dan for suggestions
    * Get a convertible!
1. Put newspaper and mail on hold.

And here are the results when rendered:

Simple
  • Flight tickets
    • Are we on Southwest this time?
  • Hotel confirmation number
    • 83729293
  • Don’t forget passports!
A Mixed List
  1. Pack bags
    1. Get new swimsuit
    2. Sunscreen
  2. Reserve rental car
    • Ask Dan for suggestions
    • Get a convertible!
  3. Put newspaper and mail on hold.

Tip

Use the handy Format > Markdown > Bulleted List / Numbered List menu to convert selected lines of text (even another type of list) into a bulleted or numbered list.

Markdown List Notes

Curio’s markdown list rendering matches match popular renderers such as Obsidian and Github-Flavored Markdown apps:

  • If spaces are used for indention, instead of tabs, Curio counts the number of spaces used for the first indented item it finds and uses that as the number considered a single indention. Generally most use 4 spaces as an indent but some, including ChatPT, use 2 spaces.
  • Lists will be rendered with blank line gaps between list items if any markdown list item has a blank line between them.
  • Lines of text that follow a list item that don’t start with a bullet or number prefix marker are considered “continuation” lines. These are rendered with “soft returns” directly under the current list item so they are horizontally indented and aligned with its list item’s text. Any preceding whitespace is ignored for these lines.
  • A list item will render its continuation lines with a blank line gap between each line if any of its continuation lines have a blank line between them.

Markdown Checklists

Curio supports the markdown extended syntax for checklists as either an inline checklist within a text figure or converted into a native Curio list collection figure.

A markdown checklist looks like a normal bulleted list but uses [ ] and [x] to indicate unchecked and checked items, respectively.

- [ ] Checklists are fun.
- [x] A checked item.
- [ ] An unchecked item.

Inline Checklist

You can create a text figure which includes one or more inline checklists and Curio will render [ ] as ☐ and [x] as ☑. You can even click to toggle the rendered checkmarks and it will change the underlying markdown syntax.

MarkdownInlineChecklistRawMarkdownInlineChecklist

Since any text figure can include an inline checklist this means nodes in a mind map figure or cells in a table figure can include checklists as well!

Checklist Shortcuts

Instead of typing - [ ] and - [x] you can type this instead:

  • Begin a new line with x then press spacebar and it will be replaced with - [ ] (disable).
  • Begin a new line with [] then press spacebar and it will be replaced with - [ ] (disable).
  • Begin a new line with [x] then press spacebar and it will be replaced with - [x] (disable).

Tip

Use the handy Format > Markdown > Checklist menu to convert selected lines of text (even another type of list) into a checklist. There’s also a menu item and shortcut to toggle the checked state of selected lines.

Limitations
  • The checklist line items aren’t treated as individual figures within Curio so can’t be tracked by the Status shelf or synced to Calendar, but they’re perfect for simple checklists mixed in with other markdown content.
  • To abide by the markdown extended syntax, prefixes like bullets and numbering are ignored for checklists.
Inline Checklist Styling

If you have Curio Professional you can customize the style of lists by using master markdown styles.

Native List

Alternatively you can paste or import a markdown list onto the idea space and it can be converted into a native Curio list collection containing individual checked or unchecked text figures.

MarkdownChecklistsRawMarkdownChecklists

And, when exporting a Curio list collection figure as markdown the appopriate checklist syntax will be used for checked/unchecked items within the list.

Markdown Dashed Lists

Markdown traditionally renders either * or - as a bulleted list item. However, using the Format > Markdown > Support Dashed Lists menu item you can optionally enable or disable - for dashed lists for the current project or for all projects.

Apple Notes users in particular may like this as both Notes and Curio use the same * and - characters and ⇧⌘7 and ⇧⌘8 shortcuts to create bulleted and dashed lists.

This distinction is only visible within Curio. When exporting and rendering in a traditional markdown viewer, dashes will render as bullets as normal.

By default, any text figures that back to an external markdown file (aka file-backed text figures or sync file figures) will continue to render as bullets within Curio, however you can enable dashed lists for these as well.

When support for dashed lists is toggled Curio will automatically regenerate updated previews for all idea spaces in the current project. This doesn’t happen automatically in other projects but can be forced by holding Option and choosing Help > Advanced > Regenerate All Idea Space Previews.

On a related note, normally Format > Markdown > Bulleted List uses * by default but this can be customized to one character when dashed lists are disabled and a different one when dashed lists are enabled, if you wish.

Markdown Tables

Curio supports the markdown extended syntax for tables as either an inline table within a text figure or converted into a native Curio table collection figure.

Inline Table

You can create a text figure which includes one or more inline tables:

MarkdownInlineTableRawMarkdownInlineTable

Markdown tables also support column alignments.

Here’s a more sophisticated example with alignments and custom table stylings supported by Curio Professional:

MarkdownInlineTableStyledRawMarkdownInlineTableStyled

Tip

Use the handy Format > Markdown > Table menu to convert the selected tab-delimited lines of text into a markdown table (where columns are indicated via tabs). The first line is assumed to be a header line. This technique is a much easier way to create markdown tables! If already a markdown table then this menu will convert it back into tab-delimited lines of text.

Inline Table Styling

If you have Curio Professional you can customize the style of tables by using master markdown styles.

For instance, here is the style sheet used to style the table above:

table-cell = border-color:#d4d9dd; 
table-cell-odd = cell-color:#f6f8fa
table-cell-header = cell-color:#666666; border-color:#d4d9dd; font-color:#ffffff; font-size:14; font-bold:1
table-cell-footer = cell-color:#dddddd; font-bold:1
table-cell-left = cell-color:#eeeeee
table-cell-right = cell-color:#eeeeee

Native Table

Alternatively you can paste or import a markdown table onto the idea space and it can be converted into a native Curio table collection containing individual text figures for each cell in the markdown table. Specified column alignments are supported.

And, when exporting a Curio table collection figure, markdown table syntax will be generated automatically.

Markdown Block Quotes and Callouts

Markdown block quotes using the > prefix are supported. Plus, a popular extension to block quotes, called callouts or alerts, are supported, as well.

For example, here we have a markdown text figure with the a normal block quote as well as the five types of callouts:

# Block Quotes and Callouts
Here is a normal block quote:

> A normal block quote. This paragraph also has lots of text so you can see how it wraps on subsequent lines.
> And this is a second line of text to see how paragraph gaps look.

> [!note]
> A *note* callout. Useful info that you should know. This paragraph also has lots of text so you can see how it wraps on subsequent lines.
> And this is a second line of text to see how paragraph gaps look.

> [!tip]
> A *tip* callout. Helpful advice to do things more efficiently or easily.

> [!important]
> A *important* callout. Key info to achieve your goal.

> [!warning]
> A *warning* callout. Urgent info to avoid mistakes or problems.

> [!caution]
> A *caution* callout. Advises about risks or negative outcomes.

> [!note] This note has a custom title
> A *note* callout with custom title.

> [!info]
> This has an invalid callout type so it rendered as a normal block quote.

And here’s what it looks like we’re done editing the figure:

BlockQuotesCalloutsRendered

Tip

Use the handy Format > Markdown > Block Quote menu to toggle the selected lines of text into a block quote.

Block Quote and Callout Styling

By default, normal block quotes will use the body font color, clear background color, a gray border color drawn only on the left, padding of 8 on top/bottom and 16 on left/right, at 100% of the body font’s size, a 1.2 line height multiplier, a 5 point paragraph spacing before, and will not add a blank line before and after the block quote.

The supported callout types have additional styling:

Callout Type Title Color Border Color Background Color Border Character Icon
note blue blue light blue left only note
tip green green light green left only tip
important purple purple light purple left only important
warning brown brown light yellow left only warning
caution red red light red left only caution

If you have Curio Professional you can also customize the style of block quotes and callouts by using master markdown styles.

Markdown Code Blocks

Using construct markdown code blocks with either backticks (```⏎...⏎```) or tildes (~~~⏎...⏎~~~). Type the following into a text figure:

```
// Hello world!
import Swift
print(“Hello world!”)
```

And when rendered the text will be shown with a monospaced font and gray background:

// Hello world!
import Swift
print("Hello world!")

Note that content within code blocks and inline code syntax is not interpreted by Curio and is simply output as-is. Thus code containing asterisks, dashes, brackets, hash marks, etc, can all be safely used without worrying about inadvertently changing font attributes or creating lists, wikilinks, tags, etc.

Tip

Use the handy Format > Markdown > Code Block menu to toggle the selected lines of text into a code block.

Code Block Styling

By default, Curio will use the Menlo font (for compatibility with older Curio releases, you may want to change to the more modern SFPro), at 100% of the body font’s size, #f1f1f1, the font color will match the surrounding text, padding of 0, no border color, no border width, and will not add a blank line before and after the code block.

If you have Curio Professional you can also customize the style of code blocks and inline code by using master markdown styles.

Markdown Math Code Blocks

You can construct your math equations code block with either backticks (```math⏎...⏎```) or tildes (~~~math⏎...⏎~~~).

Here is the Discrete-Time Fourier transform of unit step function:

```math
u(n) \Leftrightarrow \frac{1}{{(1 - e^{ - j\omega } )}} + \sum\limits_{k =  - \infty }^\infty  {\pi \delta (\omega  + 2\pi k)}
```
Impressive!

And here’s what it looks like we’re done editing the figure:

MathCodeBlockRendered

Math code blocks are left aligned by convention but you can override the default to center or right. Likewise the default 10 pixel spacing before and 10 pixel spacing after can be changed.

Curio will automatically cache rendered math code block images to disk with the figure’s data so editing text outside the code block itself won’t cause a re-render. However, if you change any style information like the figure’s base font, master markdown styles, or MathJax-specific settings then that would cause math code blocks to re-render.

Equation Rendering Details

Read the details on how equation rendering works in Curio and how it can be customized. Curio normally needs internet access to retrieve the latest MathJax rendering script but local offline rendering can be configured.

Markdown Mermaid Code Blocks

Curio Pro expands its markdown support with the ability to render Mermaid code blocks.

You can construct your Mermaid code block with either backticks (```mermaid⏎...⏎```) or tildes (~~~mermaid⏎...⏎~~~).

Tip

Curio Pro supports Mermaid figures, Mermaid in markdown code blocks, and Mermaid Organizer documents. If you’d like to see Mermaid in action you might check out Mermaid Live and Mermaid Chart.

Mermaid Rendering Details

Read the details to learn more about Mermaid diagrams, how Mermaid rendering works in Curio, and how it can be customized. Curio normally needs internet access to retrieve the latest Mermaid rendering script but local offline rendering can be configured.

For example, here we’re editing a markdown text figure with a Mermaid diagram code block:

Here is some **markdown** text and a *Mermaid* diagram:

```mermaid
sequenceDiagram
    Kat->>Cooper: Hello Cooper, how are you?
    Cooper-->>Kat: Great!
    Kat-)Cooper: See you later!
```

Wow! That’s cool!

And here’s what it looks like we’re done editing the figure:

MermaidCodeBlockRendered

When rendering these diagrams a max width of the figure’s width is generally used although it is constrained by a default max width, which is 800, and a default min width, which is 300, which will be used if you make the figure too small (and then the result is scaled down to the figure’s width).

Curio will automatically cache rendered Mermaid code block images to disk with the figure’s data so editing text outside the code block itself won’t cause a re-render. However, if you change any style information like the figure’s base font, master markdown styles, or Mermaid-specific settings then that would cause Mermaid code blocks to re-render.

Markdown Language Code Blocks

Curio Pro expands supports syntax coloring using the [HighlightJS](https://highlightjs.org.

You can construct your language code block with either backticks (```language⏎...⏎```) or tildes (~~~language⏎...⏎~~~). Where language is replaced with your code’s language, or use auto and it will try to auto-detect the language.

Here is the list of all supported languages.

Language Code Block Rendering Details

Read the details on how language code block rendering works in Curio and how it can be customized. Curio normally needs internet access to retrieve the latest Highlight rendering script but local offline rendering can be configured.

For example, here is an example we’re editing a markdown text figure with two language code blocks both colored with the default github theme:

Some Swift code:
```swift
let model = SystemLanguageModel.default
let session = LanguageModelSession(model: model)

let response = try await session.respond {
    Prompt("Explain quantum computing in one sentence")
}
```
And some HTML code:
```html
<!doctype html>
<html lang="en-US">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Hello</title>
    <style>
      body {
        font-family: Helvetica, sans-serif; /* Sets the default font */
        background-color: #f4f4f4; /* Sets a light gray background color */
        margin: 20px; /* Adds a margin around the entire body */
      }
    </style>
  </head>
  <body>
    <p>Hello world.</p>
  </body>
</html>
```

And here’s what it looks like we’re done editing the figure:

LanguageCodeBlockRendered

Curio will automatically cache rendered language code block rich text to disk with the figure’s data so editing text outside the code block itself won’t cause a re-render. However, if you change any style information like the figure’s base font, master markdown styles, or Highlight-specific settings then that would cause language code blocks to re-render.

Language Code Block Styling

By default, Curio will use the SFMono font, at 100% of the body font’s size, the github theme, padding of 10, no border color, no border width, will replace white and clear theme backgrounds with #f9f9f9, and will add a blank line before and after the code block.

If you’re curious about what parameters other sites (ChatGPT, Github) and apps (Obsidian) use you might want to see these notes.

You can also use global or per-project master markdown styles to add language code block styles and even different styles for specific languages.

Markdown YAML Front Matter

Curio’s markdown renderer ignores any YAML front matter at the beginning of your markdown.

Markdown Text Figure Limitations

While Curio’s text figures have impressive support for most common markdown syntax, they are rendered as rich text, not as HTML content, so this limits Curio’s ability to support markdown’s more advanced features.

They aren’t meant to be a replacement for a full-featured markdown apps like Marked and MultiMarkdown Composer that render markdown syntax into an HTML web view using more advanced parsers, apply customizable CSS style sheets, and support on-the-fly inline equation generation.

Markdown Previews Using Marked App

Using the View > Stream Selected to Marked menu item the contents of the selected figure(s), or the currently edited figure, or the currently edited markdown document in the Organizer, is streamed in markdown format to the Marked app for instant preview.

Text Figure Attachments

You can attach a file to a text figure which can be useful in a number of situations, such as associating a Microsoft Excel document file with a mind map text node.

If the file attachment is an image file type, then the resulting attachment will be displayed as a preview image, otherwise for other file types a thumbnail icon will be displayed for the attachment image. The size of the image or icon is controlled using the Icon Size slider in the Shape inspector popover’s Options tab.

As with preview captions, the attachment is an actual component of the text figure, not a trick using a grouped figure. This feature is particularly useful in mind maps where an attachment can be associated with an existing node in the mind map instead of added as a separate child node.

Attach an External File Located on Your Hard Disk to a Text Figure

  • Right-click on a text figure and choose Attach File then choose a file from anywhere on your hard disk in the dialog that appears. This file can be copied or moved into the project as an embedded asset or referenced as an alias.

Attach an Image from Outside of Curio to a Text Figure

  1. Copy an image from outside of Curio, perhaps from Safari for example.
  2. Right-click on a text figure and choose Paste As > Attachment For Selected Text Figure. The image will be added as a new asset to your project and will be displayed as an attachment for the text figure.

Attach a Existing Asset to a Text Figure

  1. Select an existing asset figure on an idea space or an asset in the Library and copy it to the clipboard.
  2. Right-click on a text figure and choose Paste As > Attachment For Selected Text Figure. Here the attachment will simply reference the same underlying asset.

Change the Size of the Attachment Icon

  • Use the icon size slider in the Display panel of the shape popover inspector.

Remove a Text Figure Attachment

  • Right-click on a text figure and choose Remove Attachment.

Multimedia Figures

You can play back videos, music, and sounds directly within an idea space.

Playing a Video or Audio Multimedia Figure

  1. Double-click the figure to begin playback, or click the Play button on the media bar.
  2. To stop playback, click the Stop button on the media bar.

Media Controls

When you click on a multimedia figure notice media controls appear on the right side of the inspector bar next to the navigator controls.

These media controls can be used to control playback of the multimedia figure with common operations like play, pause, fast forward, and rewind. If you need more control of the playback then right-click and choose Open With Finder to open the media file in QuickTime Player.

Action Button

The media controls includes an action button with additional functionality in its popup menu:

  • Start Time.
During playback of a movie or audio file, pause the playback then, if necessary, use the time scrubber (or arrow keys) in the media player’s overlay controls to find a precise moment. Then set the current time as the new starting time for the media file.
  • Stop Time.
Similarly you can specify a stop time for the movie or sound file.
  • Loop.
You can specify that the media playback continuously loops during playback.
  • Poster Frame.
You can set a new poster frame for a movie, which is displayed before the movie begins playing.
  • Copy Frame.
Grab the current frame of a movie as an image for pasting within your idea space or elsewhere.

During Playback

If the media asset figure is rotated, then it will automatically change to a 0º angle of rotation for playback, then return to its original rotation angle when playing stops.

Inline Movie Controls

Inline movie controls appear briefly on top of the media playback when it first starts and if you move the mouse over it. You can use these controls to scrub to a specific location.

URL Figures

Curio supports URL figures which can be displayed as simple URL links with icons, as web preview figures, or as live web views so you can surf within Curio itself.

Creating URL Figures

Copy or drag an URL from your browser’s location bar and place it directly on an idea space to create an URL figure.

Curio will attempt to download the referenced URL and parse out any specified OpenGraph meta information including image, description, and title.

By default Curio will automatically choose how to display the URL figure based on the information retrieved from the page. If OpenGraph meta information exists Curio will construct an image figure using the OpenGraph image with the OpenGraph description as the image caption.

If no OpenGraph image is found then a normal link figure with icon is displayed. If the site favicon can be retrieved then that is used in place of a generic URL icon.

You can turn off this automatic preview vs icon determination if you wish, then Curio will create URL icon figures by default, unless overridden with styles as described below.

Double-clicking the URL figure or right-clicking and choosing Open Link in Browser will launch the URL in your browser.

URL Figure Display Options

Generally when you drag or paste an URL into Curio it will create an asset figure in preview mode, if OpenGraph meta data is found on the page. The caption of the preview will use the OpenGraph title (no title, max length), description, and URL (no URL).

Otherwise, if no OpenGraph meta data is found it is added in icon mode.

Right-click on an URL figure to switch between icon, preview, or live web view modes.

If preview mode is specified for an URL figure with no OpenGraph meta info then a generic web icon is displayed.

URLFigureIcon

URLFigurePreview

URLFigureLiveWebView

Disabling Auto Preview Mode

If you right-click on an URL figure and switch it to icon mode Curio will remember this state as the default and future pastes or drops will also default into icon mode.

If you right-click and change an URL figure to preview mode then Curio will automatically re-enable automatic preview detection for future pastes or drops and use it if OpenGraph data is found.

You can permanently disable auto preview mode detection.

URL Figure Styles

Use the Format menu to create figure styles for URL figures shown in preview mode, including caption background color and text color. All URL figure preview styles are grouped together in their own style category.

When you set a new default style for URL figures displayed as previews Curio will also store the size of the selected figure and use that size as the new default for future URLs dragged into Curio.

Live Web Views

If an URL figure is displayed as a live web view then Curio will construct a live web browser embedded within the idea space allowing you to browse a site from within Curio. If a web view figure is selected, the inspector bar displays the appropriate web browsing controls.

Note: The following is for web view figures that exist on an idea space. If you drag a URL to the Organizer then the browsing tools on the inspector bar are always available as the web view completely fills the content area of the Curio window. For more information, see the section on Organizer Documents.

Tip

There are some advanced settings you can use to change the live web view’s user agent if you wish.

Activated state

When you first create a live web view it is activated and rendered live.

If the web view is in a deactivated state then after clicking the Start Browsing button or by double-clicking the web view, the web view is activated and the view is rendered live.

You can now interact with the web site by clicking, dragging, and typing within the web view.

You are able to browse around within the live web view and even surf to different locations. However, the default URL associated with the web view will stay as-is unless you click the Save URL button in the inspector bar.

Click Stop Browsing when you are done. This will happen automatically if you go to another idea space or close the project.

Deactivated state

When in deactivate state, the web view displays a slightly faded preview of the web URL so you realize that it’s not a live connection to the web site. The preview was generated and stored the last time you surfed to that location.

When in this mode it acts as a normal figure where it can be easily moved, resized, and various figure attributes can be changed in the inspectors.

You can right-click and choose Open Link in Browser to launch the URL in your browser.

Resizing and Moving

You can resize the resulting embedded web view by dragging on the figure’s selection handles. The figure will resize proportionally maintaining the video’s aspect ratio.

Since clicks within the live web view bounds are processed by the embedded web content, it’s a bit tricky to move the figure, so here are some tips:

  • You can move an activated, live web view if you click and drag on the very edge of the frame, or
  • First click Stop Browsing in the inspector bar, which deactivates the live web view, and then you can click and drag from anywhere in the figure bounds. Click Start Browsing or double-click the figure to activate the web view control again.

Grab Web Archive

In the right-click context menu for the URL figure you can choose Grab Web Archive to download the contents of the weblink as a paginated PDF, a PDF image, or a web archive (which can be opened with Safari). This new figure will be created and placed alongside the selected URL figure.

Note that Curio is unable to grab a web archive for sites that require a user name and password entered via popup dialog. Also note that Curio from the Mac App Store doesn’t support remote, insecure http web links when retrieving web archives.

Mac App Store Restriction

Remote, insecure http connections are not supported in embedded web view figures, as Organizer documents, as Sleuth sites, or during web archive or favicon retrieval. However, you can create insecure http web link figures and figure actions, which will open in your default browser.

PDF Figures

When you drag a PDF file to your idea space Curio will construct a PDFView to render the PDF and permit annotation. If a PDF figure is selected, the inspector bar displays the appropriate PDF navigation and annotation controls.

Note

The following is for PDF figures that exist on an idea space. If you drag a PDF to the Organizer then the annotation tools on the inspector bar are always available as the PDF completely fills the content area of the Curio window. For more information, see the section on Organizer Documents in this user manual.

Tip

You may also want to check out Curio’s amazing Spread PDF feature!

Deactivated State

Normally the PDFView displays the contents of the PDF but the annotation tools in the inspector bar are not enabled. When in this mode it acts as a normal figure where it can be easily moved, resized, and various figure attributes can be changed in the inspectors.

Activated State

After clicking the Start Annotating button (or Option-double-clicking) the PDFView is activated and the annotation controls become available in the inspector bar. By carefully grabbing the border area the PDFView can still be moved and resized. However, you can now interact with the PDF by clicking and dragging within the PDFView.

Click Stop Annotating or press the Escape key when you are done annotating the page and the updated PDF will be saved to disk.

Annotation Tools

Select text within the PDF and use the annotation tools in the inspector to apply highlighting colors, strikethrough, or underline.

Only the PDF annotation tools on the inspector bar can create annotations that are embedded within the PDF itself. Anything you create on top of or around the PDF figure using any other Curio features — such as text figures, images, scribbles, lists, mind maps, etc. — are not stored within the PDF and only exist on the idea space.

If you need more annotation tools than what Curio offers you can double-click on the PDF figure to launch the PDF file in your default PDF viewing application. After annotations are made, returning back to Curio will cause the PDF to refresh itself on the idea space to reveal those new annotations.

Resizing and Moving

You can resize the resulting embedded PDFView by dragging on the figure’s selection handles. The figure will resize proportionally maintaining the video’s aspect ratio.

Since clicks within the PDF view bounds are processed by the embedded PDFView, it’s a bit tricky to move the figure, so here are some tips:

  • You can move the PDF view if you click and drag on the very edge of the frame, or
  • First click Stop Annotating in the inspector bar, which deactivates the embedded PDFView control, and then you can click and drag from anywhere in the figure bounds. Click Start Annotating or double-click the figure to activate the PDF view control again.

Working with PDF Figures

Some tips when laying out and working with your PDF figures:

  • Make sure to size them so they are somewhat readable, altough they don’t need to be too large because you can zoom into them.
  • For example, use the Smart Zoom feature so can double-tap to quickly zoom into a PDF figure for reading and annotating then double-tap again to restore your zoom.
  • While PDF figures should be quick to render, keep in mind that dozens of PDF figures or PDF’s with pages containing complex fonts or embedded graphs can be slow to render.
  • You can extract a selection of text from a PDF figure and paste it on the idea space as a new text figure, complete with a jump action link to the original selection in the PDF, via Copy As Jump Target.

Mermaid Figures

Curio Pro includes support for Mermaid, a popular and extensible diagramming format also used by AI services like ChatGPT, Claude, and Gemini.

MermaidFigures

Tip

Curio Pro supports Mermaid figures, Mermaid in markdown code blocks, and Mermaid Organizer documents. If you’d like to see Mermaid in action you might check out Mermaid Live and Mermaid Chart.

Mermaid Rendering Details

Read the details to learn more about Mermaid diagrams, how Mermaid rendering works in Curio, and how it can be customized. Curio normally needs internet access to retrieve the latest Mermaid rendering script but local offline rendering can be configured.

Creating a Mermaid Figure

  1. Drag in Mermaid files (.mermaid or .mmd) or copy Mermaid source code from elsewhere then use Curio’s Paste As > Mermaid Diagram to instantly see a rendered diagram.
  2. The generated PDF image has a transparent background and will resize, zoom, and print perfectly.

Editing a Mermaid Figure

  1. Double-click to open your Mermaid diagram’s source code in a text editor.
  2. Make your changes and save.
  3. When you switch back to Curio your diagram will automatically refresh itself.

Sizing a Mermaid Figure

  • To resize the rendered diagram simply resize the figure and the PDF will scale itself proportionally. This means everything within the PDF, including fonts and diagram elements, will all resize.

Rendering Using a Figure’s Width

When generating the Mermaid image a max width has to be given to the rendering system. The default for new figures dragged or pasted into Curio is 800.

Again, the is the max width, and most Mermaid diagrams size themselves to a natural size which may be smaller than than that max width. Curio will make sure the PDF bounds tightly enclose the rendered diagram.

However, some diagrams, like Gantt chart, will fill the given max width, even if that means some elements have huge spacing gaps or are too close with overlapping edges.

To better support those types of diagrams you can resize the diagram then right-click and choose Render Using Width as Max and Curio will re-render the diagram using the figure’s width as the max. The result isn’t a scaled version of the original diagram but allows the diagramming algorithm to best fill the width if it needs it.

Here’s an example:

1️⃣ Initial diagram:

MermaidGanttStart


2️⃣ Resizing the generated PDF simply scales everything including fonts:

MermaidGanttResize


3️⃣ Render Using Width as Max gives the diagram more room to position elements:

MermaidGanttRerender

Notice the original font sizes are maintained and the “Completed Task” element is inside its rectangle now that it has more room.

Equation Editor

Create and edit equations using LaTeX, AsciiMath, or MathML syntax. Previews are instantly rendered as you type your equation. When you click to Insert or Update the equation the final high quality and scalable PDF rendering occurs instantly.

Curio renders your typed equations using MathJax, the de facto standard in web-based equation typesetting for mathematics, science, and engineering. MathJax accepts three different standard equation syntaxes:

  • LaTeX
    x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
  • AsciiMath
    ``x=-b+- sqrt(b^2-4ac}/(2a)``
  • MathML
    <math ...</math>

Of the three, LaTeX is the most popular by far. It is also the standard format for markdown equations which Curio also supports.

Equation Rendering Details

Read the details on how equation rendering works in Curio and how it can be customized. Curio normally needs internet access to retrieve the latest MathJax rendering script but local offline rendering can be configured.

Curio supports equations in several ways:

  1. As a standalone figure on the idea space.
  2. As an equation written in the LaTeX markdown syntax within a markdown text figure.
  3. As an equation image within a rich text figure.

Standalone Equation Figures

To insert an equation figure on the idea space:

  1. Make sure you aren’t editing a text figure.
  2. Choose the Insert > Equation menu item (⌃⌘E) or click the Insert toolbar button then choose Equation.
  3. Use the equation editor to enter your equation. A preview area below shows what your equation will look like.
  4. Click Insert to insert a PDF rendering of the equation on the idea space.

Equation

Help with Equations

Click the help button in the equation editor window to see the popup menu displayed here. It includes several examples in LaTeX, AsciiMath, and MathML form, and includes links to several useful websites for more information.

Equation Delimiters

Curio assumes an entered equation is LaTeX unless it finds one of the following in your typed equation:

  • `` - Indicates that this is an AsciiMath equation of the format ``...``
  • <math - Indicates that this is a MathML equation of the format <math ... </math>

Complex Equations

Your equation can include other text, other equations, and even special color tags as demonstrated here:

EquationComplex

If you mix non-equation text and/or multiple independent equations then you’ll need to surround your equations with the appropriate delimiters so MathJax will recognize the equations.

Use $$⏎...⏎$$ delimiters for block equations on their own lines and either $...$ or \( ... \) delimiters for inline equations within other text.

Alignment

By default equations are centered when rendered, although you can choose the left, center, or right alignment buttons can be used to change this alignment. This only impacts the alignment of the entered equation and non-equation text, not how it is placed within a text figure. If inserting into a rich text figure then you can use the normal text paragraph alignment inspector buttons to horizontally align the paragraph containing the equation image.

Editing an Equation Figure

Simply double-click your equation on the idea space to bring it back into the equation editor. Then click the Update button when you finish your changes.

Equations in Markdown Text Figures

Curio includes native support for LaTeX markdown equations. This means you can enter your equation in LaTeX syntax directly into the markdown text figure and see the results instantly when you finish editing. Block equations ($$⏎...⏎$$), inline equations (\(...\), $...$), and math code blocks (```math⏎...⏎```) are all supported.

That said, you can also use the Equation Editor and its handy live preview to create, insert, and edit your markdown LaTeX equations!

Inserting a New Equation

When you’re editing a text figure and markdown is either enabled or markdown autodetect is enabled the Equation Editor will automatically insert LaTeX into your markdown:

  1. Edit a markdown text figure and position the text cursor where you would like to place the equation. If the cursor is on its own line then you’ll insert a “block” equation, else if between existing text you’ll insert an “inline” equation with automatic baseline adjustment to align itself with neighboring text.
  2. Choose the Insert > Equation menu item (⌃⌘E) or click the Insert toolbar button then choose Equation.
  3. Use the equation editor to enter your equation. A preview area below shows what your equation will look like.
  4. Click Insert to insert the LaTeX into your text figure. Curio will automatically prepend and append the appropriate block ($$⏎...⏎$$) or inline ($...$) delimiters to the equation for proper rendering.
  5. When you finish editing the figure the equations will be dynamically rendered.

Editing an Existing Equation

When you need to edit your LaTeX equation you can do it by hand, of course, or you can use the Equation Editor:

  1. Edit the markdown text figure and position the text cursor anywhere within the equation text.
  2. Choose the Insert > Equation menu item (⌃⌘E) or click the Insert toolbar button then choose Equation.
  3. Use the equation editor to edit your equation.
  4. Click the Update button when you finish your changes and the LaTeX markdown will be updated.

Learn more about Curio’s support for markdown equations and how equation sizing is determined.

Equations in Rich Text Figures

Inserting a New Equation

For rich text figures you can use the Equation Editor to insert equations:

  1. Edit a text figure and position the text cursor where you would like to place the equation. If the cursor is on its own line then you’ll insert a “block” equation, else if between existing text you’ll insert an “inline” equation.
  2. Choose the Insert > Equation menu item (⌃⌘E) or click the Insert toolbar button then choose Equation.
  3. Use the equation editor to enter your equation. A preview area below shows what your equation will look like.
  4. Click Insert to insert a PDF rendering of the equation into the text figure as an inline image.

These images will render identical to markdown block and inline equations.

Here is an example text figure with a block equation on its own line and an inline equation within some text:

TextFigureEquations

Tip

While Curio will attempt to vertically align the baseline of an inline equation with its surrounding text as best it can, you can fine tune the baseline by selecting the equation image and using the Format > Font > Baseline > Raise/Lower menu. If you do this often you may want to set up a keyboard shortcut via System Settings > Keyboard > Shortcuts > App Shortcuts. BaselineRaiseLower

Editing an Existing Equation

Double-click a text figure to begin editing its text then double-click the equation image to edit the equation. Click the Update button when you finish your changes.

Rich Text Figure Equation Sizing

The size of the equation is based on the font size of the surrounding text. Its baseline is also set to align it with the baseline of the surrounding text.

If you modify the figure’s text size using techniques such as the following, your equation will scale its size and baseline to match automatically:

  • Select the figure itself and use ⌘+ or ⌘-.
  • Select a range of text within the figure and use ⌘+ or ⌘-.
  • Select the figure itself and use the inspector text size control.
  • Select a range of text within the figure and use the inspector text size control.

Exporting Rich Text Figure Equations

The inline equation is a PDF image attachment within your text figure so will be included automatically if you export as rich text. And since we’re using the standard baseline attribute to adjust its vertical placement it should render correctly in other editors that adhere to that standard such as TextEdit.

If you export as markdown then instead of the image the actual MathJax equation syntax will be output within $$⏎...⏎$$ or $..$ delimiters, unless your equation text includes its own delimiters. That way any markdown renderer with MathJax support will render it on-the-fly correctly.

Table of Contents Figure

Curio Professional and Standard customers can now insert a Table of Contents as a native Curio list or mind map collection. This collection is dynamically generated and dynamically updates if changes are made to your project’s Organizer hierarchy.

Dynamic Content

It’s important to remember that the information in the Table of Contents is dynamic and not a static snapshot. If you modify any items within the Table of Contents or their expand/collapse states then this will be reset the next time it has to regenerate.

If you drag the idea space containing the Table of Contents to a different location in the Organizer it will regenerate itself based on its new placement. Similarly, a duplicate or copy/paste of the idea space containing the Table of Contents will regenerate based on its new placement.

Of course, the specified Table of Contents style will be kept between regenerations.

Create a Table of Contents Figure

  1. Insert a Table of Contents either via the Insert main menu or the Insert toolbar button.
  2. A list or mind map collection is inserted into the current idea space and automatically populated. The collection is comprised of idea space link figures, displayed in icon mode, to all Organizer items after the idea space that contains the Table of Contents itself.
  3. Clicking a link will jump to that idea space in your project. If you export your project as PDF, then clicking a link in the exported Table of Contents will jump to the appropriate page within the PDF.

Managing the Contents of the Table of Contents

The hierarchy included in the Table of Contents is based on where its containing idea space is located in the Organizer:

  1. If the next Organizer item after this idea space is a child, thus this idea space is a parent, then the Table of Contents is of those children, recursively. This option, in particular, is useful if you’d like to create multiple Table of Contents within the same project or section.
  2. Else the Table of Contents is made up of the siblings that come after this idea space and the children of those siblings, recursively.

Styling the Table of Contents

  1. Table of Contents collection is made up of standard idea space link figures, displayed in icon mode. The containing list or mind map collection can be styled with any bundled or personal list or mind map style simply by choosing the style from the inspector style galleries.
  2. You can also customize the collection then use Format > Set as Default Style to store that as the new default style. For example, choosing Format > Set as Default Style for List (Table of Contents) Figure will make it the new default for list Table of Contents.

Updating the Table of Contents

  1. The titles and previews of the idea space link figures which make up the Table of Contents will update automatically if changes are made to their destination idea spaces.
  2. And, when the Table of Contents idea space is revisited, either manually or when exported or printed, the Table of Contents will automatically determine if it contains an out of date hierarchy and regenerate itself, if necessary.
  3. You can also press the Regenerate button in the Table of Contents inspector to force a regeneration.

Table of Contents Inspector

Select a Table of Contents then click its inspector icon in the inspector bar to change the following attributes.

  • Text Only Starting at Level
    By default, Curio includes previews until hierarchical level 3 when it switches to text only entries.
  • Collapse at Level
    By default, Curio automatically collapses the 2nd hierarchical level in the Table of Contents. If you’d like to see more, simply click a parent’s expand widget to see those child items.
  • Include up to Level
    By default, Curio includes the first 3 hierarchical levels in the Table of Contents. For complex projects, reducing the number of levels can make generation faster. Note that Curio may throttle the specified value if a massive number of entries would be created, see below for more details.

The Table of Contents detects when it needs to be regenerated automatically, but you can click a button here to force a refresh.

Line Figures

Creating Lines

Lines can be created in many ways including:

Styling a Line

  1. Use the Shape inspector to change the pen color (aka border color) and pen pattern.
  2. Use the Line inspector with more options specific to lines such as scaling, and head and tail arrowheads.
  3. Right-clicking on a line allows you to quickly change multipoint lines between straight, curved, and orthogonal line styles.

Sticky Lines

  1. Make sure Sticky Lines is checked in the Arrange menu. If not, select it to enable the sticky lines feature.
  2. Drag the endpoint or midpoint on the line.
  3. As you hover that point over another figure, you can stick to specific points on the figure:
    1. Specific Connection Point
      If you hover and release on a specific connection point along the edge of the figure then it will stick to that specific connection point even if the connecting figures are rotated or moved.
    2. Closest Connection Point
      If you hover and release close to but not on a connection point along the edge of the figure then it will dynamically connect the line to the closest connection point, potentially connecting to a new connection point if the connecting figures are rotated or moved.
    3. Towards the Center
      Otherwise if you hover and release along the edge of the figures away from any connection points then it will connect against the edge of the figure pointing towards the figure’s center.
    4. Specific Position
      If you hover and release anywhere else within the figure or if you hold the Command key, then it will stick to a specific position on the figure. Note the position will scale appropriately if the figure itself is scaled. Also note that if you stick a line to a position on another line it will also scale if the line is scaled.
    5. Non-Sticky Point
      If you press the Control key the figure will stop glowing and the line will not stick to the figure at all. The Control key temporarily disables the sticky feature.
  4. As described above for multipoint lines, if you also hold down the ⌥ key during the creation of a new line then you can create a multipoint line on-the-fly where any of the points on that line can be stuck to other figures using the normal sticky techniques. Note this Option key trick only works when dragging out brand new lines, not editing existing lines.
Sticky Curved Lines

If you use a sticky line to connect two figures, and the line is a curved type with no midpoints then Curio will internally create the midpoints necessary to render an elegant, swoopy curved line.

If you add midpoints then Curio will curve the line through those defined points instead.

Adding and Removing Midpoints

  • Right-click on a line to quickly add a midpoint at the given click location.
  • Right-click on a midpoint to remove it.

You can also use the main menu’s Insert > Line > Midpoint menu item to insert a midpoint into a selected line.

Adding a Label to a Line

  1. Double-click on a line figure to create one or more text figures which can act as line labels. These text figures are just like regular Curio text figures, thus they support the same formatting features, but they are stuck to the line.
  2. You can slide a text figure up and down along the line using the mouse or the arrow keys to reposition it. Using the arrow keys on the keyboard is generally more accurate especially for curved lines. You can also hold Shift while pressing the arrow keys to move the label in larger steps.
  3. To remove the label, select it and press the Delete key.

Idea Graphs

Sometimes you need more flexibility than a mind map. Fortunately Curio makes it incredibly easy to quickly create a flowchart or freeform graph of figures connected together with line figures. Curio calls these Idea Graphs.

An Example Workflow

Create a text figure, hold ⌘ and click to a blank area on your idea space, and instantly a new text figure will be created at that location with an automatic sticky line between the previous and new text figures.

These automatically created lines are true Curio line figures so you can change the line color, dash pattern, width, and arrowheads using the inspector controls. You can also double-click on a line to add line labels, or right-click on a line and add one or more midpoints to make it a curved or orthogonal line.

Creating Idea Graphs

There are 4 ways to create idea graphs within Curio.

Tip

There are a number of advanced settings you can set for idea graph lines to change their default style including color; dash pattern; straight, curved, or orthogonal; auto added midpoint; head and tail decoration; and much more.

1. Via Insert > Line

  1. Select two figures.
  2. From the main menu choose a type of line under the Insert > Line submenu including nondirectional, directional, or bidirectional.
  3. A sticky line will be created going from the first figure you selected to the last figure you selected.

2. Via Figure Resize Handles

  1. Select an existing figure.
  2. Hold ⌥ and click and drag on any resize handle.
  3. This will create a directional line (one arrowhead, →) allowing you to quickly connect it via Sticky Lines to another figure.

3. Via Command Clicks

  1. Edit or select an existing figure.
  2. Click on the idea space background while pressing one of the following modifier key combinations:
    • ⌘: directional line (one arrowhead, →)
    • ⌘⇧ (Command-Shift): bidirectional line (two arrowheads, ⟷)
    • ⌘⌥ (Command-Option): nondirectional line (no arrowheads, —)
    • ⌘⌥⇧ (Command-Option-Shift): nondirectional dashed line (no arrowheads, ┈)
  3. A new figure will be created and joined to the currently selected figure with the appropriate line.
Pinboard Exception

Technically you can make these types of connected figures within one specific type of collection: a pinboard. Just drag one figure on a pinboard on top of another figure while holding one of the key modifiers above.

The resulting line will connect the two figures and move if either figure is moved. If both figures are within the same pinboard then the line itself will be owned by the collection so moving the pinboard will move the connection line, as well.

Collection Figures

Note that if the Select tool is active in the toolbar, and the currently selected item is a collection figure (such as a list, mind map, table, or index card), then the created connected figure will be that same type of collection. Using this technique you can quickly create a connected graph of index cards, for example.

However, if the Text tool is active instead then the created connected figure will always be a text figure. This way you can easily create a text figure connected to a collection.

4. Via Drag and Drop

This drag-and-drop method will work on the idea space but not within collections:

  1. Drag figure A on top of figure B and, before dropping, press and hold one of the following modifier key combinations and the mouse pointer change to a little curly icon:
    • ⌘: directional line (one arrowhead, →)
    • ⌘⇧ (Command-Shift): bidirectional line (two arrowheads, ⟷)
    • ⌘⌥ (Command-Option): nondirectional line (no arrowheads, —)
    • ⌘⌥⇧ (Command-Option-Shift): nondirectional dashed line (no arrowheads, ┈)
  2. Release the mouse and figure A will move back to its original position and the appropriate line will be created connecting figure A to figure B.

Sync File Figures

Curio Pro can sync the contents of text figures and list, mind map, stack, and table collection figures to external files, either bidirectionally, export only, or import only.

That file can be located anywhere including within a cloud-synced folder like iCloud or Dropbox. For example, you can sync a Vacation to-do list figure with a markdown list file located within a cloud-synced Obsidian vault allowing you to add, remove, modify, and rearrange items using Obsidian on iOS which are instantly reflected back to your Curio on macOS. Synced list items can include images and meta such as checkmarks and dates.

When Syncs Occur

When the project is loaded Curio will check for sync file modification and import the changes.

Then while the project is open, the figure and sync file are constantly monitored to export or import changes as appropriate. The file syncing occurs instantly when a change is detected either to the figure or the sync file. You don’t have to manually refresh the figure or force a save for the sync to occur.

Versus File-Backed Text Figures

While this feature is somewhat similar to Curio’s file-backed text figures (FBTF) there are some key differences:

  • Text Figures Only
    • A FBTF is only for text figures.
    • In contrast, a sync file can be established for more complex types like list and table collection figures.
  • Text Content Only
    • A FBTF only deals with the content of the text figure.
    • In contrast, a sync file for figures includes not only the content of each contained item but also any meta information. For collection figures it also includes the arrangement of its contained figures.
  • File Formats
    • A FBTF can render many different text formats including md, rtf, and any type of text file.
    • In contrast, a sync file can only sync with specific file formats.
  • Content Storage
    • A FBTF doesn’t store any content of the underlying file’s data within Curio itself. It simply renders the contents of its backing file. If that file is deleted or missing then Curio can’t render anything.
    • In contrast, an item with a sync file stores its data within Curio and syncs those contents with the sync file. If the sync file is lost or deleted then that’s okay.
  • Bidirectional or One Way
    • A FBTF is essentially bidirectional as the file itself is the backing store for the text figure.
    • In contrast, a sync file can be bidirectional, export only, or import only. The latter two options are useful if you only want to export up-to-date contents to a remote file or if you only want an item within Curio to reflect the contents of the remote file but not change it.

Working with Sync Files

Connecting to a Sync File

  • Option-drag a file into the idea space and Curio will ask if an appropriate figure should be created and sync with that file. For example, Option-drag in a markdown file containing only a simple list and Curio will ask if a list, mind map, or stack collection figure should be created and begin syncing with that file.
  • Or right-click on an existing figure and choose to sync it with a new or chosen file.
    • If syncing with a new file then Curio creates the file, immediately exports the figure to that file, and then begins bidirectional sync.
    • If you choose an existing file then Curio immediately imports that file, replacing the current contents of the figure, and then begins bidirectional sync.
    • You can also specify whether the sync is bidirectional, export only, or import only.

The sync file location is stored internally as an alias to the file. This means when Curio isn’t running, you can move or rename the sync file and macOS should be able resolve the alias in most situations. If not, you can simply disconnect and re-connect manually.

Changing the Sync File Direction

  • Right-click on a the figure with the sync file and choose Bidirectional, Export Only, or Import Only.

Revealing the Sync File

  • Right-click on a the figure with the sync file and choose Reveal in Finder.

Disconnecting the Sync File

  • Right-click on a the figure with the sync file and choose Disconnect Sync File.

Finding Figures with Sync Files

  • Use Quick Find or the Search shelf to search for #meta/syncfile or choose Meta Misc > Has Sync File from the typing button menu.

Undoing a Sync Change

  • Curio records a sync import as an undoable change so if you don’t like how a list was updated after a sync import you can just press ⌘Z to undo it.

Sync File Finder Attributes

When you connect a figure with a sync file that file is given two Finder attributes. These attributes are automatically removed if you disconnect the figure from the file.

The Curio Sync File Tag

The Curio Sync File Finder tag will be associated with the sync file.

With that tag in place you can find all Curio sync files on your machine:

  • Via a Spotlight query: tag:"Curio Sync File"
  • Or the Finder’s File > Find (⌘F): Tags matches Curio Sync File
  • You can also save that query as a Finder Smart Search.
The Where From Attribute

The Where From Finder extended attribute will be set for that file to the curio://... link to the figure.

Then in the Finder you can select the file and choose File > Get Info (⌘I) and you will see that link in the More Info section. Right-click on the link and choose Open Link to open that Curio project and jump directly to the figure.

With that extended attribute in place you can find all Curio sync files on your machine:

  • Via a Spotlight query: wherefrom:curio://
  • Or the Finder’s File > Find (⌘F): Where From begins with curio://
  • You can also save that query as a Finder Smart Search.
  • If want to find all sync files that jump to a specific project you can look for curio://projectname instead of just curio://.

Sync File Formats

Curio syncs with file formats appropriate for the synced item:

  • Text figures can sync with markdown md files.
  • List, mind map, and stack collections can sync with lists in md files, opml files, or taskpaper files.
  • Table collections can sync with tables in md files, csv files, or tsv files.

Sync With Markdown Files

Markdown is the preferred format as it offers several advantages:

  • Support for rich text attributes via markdown syntax.
  • Support for images, such as images within list figures, although images embedded within a rich text figure are not supported.
  • Support for exporting and importing meta attributes such as checked/unchecked state, progress, start/due dates or duration, tags, priority, rating, resources, and figure notes.

As a tip, if you want to add a web link to the markdown file, you can type the full weblink like https://zengobi.com, and Curio will automatically turn that into a web link figure and export as a markdown link during the next sync.

Markdown Collection Files

If the markdown file contains only a single collection then it can sync with a native collection figure:

  • Markdown list ↔︎ Native list, mind map, or stack
    Option-drag a .md file containing only a single markdown list and it can become a native list figure, mind map figure, or stack figure (if the markdown list has a single level of hierarchy).
  • Markdown table ↔︎ Native table
    Option-drag a .md file containing only a single markdown table and it can become a native table figure.

If the markdown file contains multiple collections or a mix of collections then Curio falls back to creating a markdown text figure.

When you release the dragged file Curio will ask what you want to create and if the sync should be bidirectional, import only, or export only.

SyncFileFigure

Markdown Meta

As mentioned, generated markdown list items support meta attributes during export and import. Here are some additional notes:

  • If the item has a markdown checkbox like [ ] or [x] and is 0 percent or 100% done then Curio does not output @progress(). (force always output)
  • Relatedly if in-between 0 and 100 Curio will still output [ ] and not [-] as that’s not a widely used standard. (force output mixed)
  • @duration is output only if due=start+duration, likewise if @duration is there then @due is ignored and instead due is computed via due=start+duration.
  • Inline tags and resources, like #vacation @george, remain as inline meta and the @tags() and @resources() meta attributes are used for non-inline tag and resource associations.
  • Importing a markdown footnote into a figure’s note is normally disabled but can be enabled as detailed in meta import.

Also csv and tsv supports this meta syntax as well.

Markdown Images and Assets

During sync export, if Curio encounters an image or asset figure, an _Assets folder is created and the asset file is copied to that location.

  1. If the file name already exists, like Image.jpg, then the new image will be give a new name in sequence, like Image 2.jpg.
  2. A _Manifest.plist file will be created within the _Assets folder to help map the internal asset ID with its exported name.
  3. The generated markdown for this item will include an encoded ID as detailed below.
Markdown Image Size Formats

Standard Markdown doesn’t support image sizes but there are some popular markdown syntax extensions that Curio can support via the Export Markdown Image Size Format setting:

Setting Title
Example
Description
0 Resized export ![fred](fred.jpeg) The default. No size specification, the exported image is resized to the image figure’s displayed size on the idea space.
1 Full size export ![fred](fred.jpeg) No size specification, the full size image is exported.
2 Full size export but sized when rendered using Obsidian syntax ![fred|100](fred.jpeg) The full size image is exported but sized when rendered using Obsidian width syntax.
3 Full size export but sized when rendered using Marked syntax ![fred](fred.jpg =100x) The full size image is exported but sized when rendered using Marked width syntax.

Markdown Identifiers

During the sync import process the item’s contents are completely recreated based on the sync file. For example, a synced list will be cleared and instantly re-filled based on the items within the sync file, as an undoable step.

Because of this Curio will sometimes encode a short identifier within a comment alongside an item. This is used for several purposes such as re-establishing jumps to figures and re-connecting a figure to its underlying image asset file.

For example, a checklist item with an image may look like this:

- [ ] ![Image|250](_Assets/Image.png) <!--id:GnR-->

That <!--id:GnR--> is the comment, which is not visible when rendered by markdown renderers. The GnR short ID is used internally to find the figure that previously existed within the list. An ID is only exported if Curio deems it necessary to re-establish certain properties when reconstructing the contents during import.

Limitations

  • Text figures within collections should be relatively simple in content. Text and rich markdown syntax is fine, but they can’t include one or more markdown lists, tables, code fences, images, etc, as Curio can’t encode/decode all of that into a form that could fit neatly into a single markdown list item or markdown table cell.
  • During import the figure’s contents are completely recreated from the sync file. This means any overriding styles or attributes made to individual items unsupported by the sync file format will be lost.
  • You shouldn’t point mutiple collections to the same underlying sync file due to the possible use of identifiers, detailed above, which can only work with a single owning collection figure.

Can you connect multiple text figures to the same sync file?

Technically yes, since there are no identifiers embedded within, however there’s a more robust way to do this. Instead of having multiple text figures simultaneously monitoring and syncing with the same file use Curio’s synced figures feature:

  1. Create a text figure that is synced with a file.
  2. Copy that figure.
  3. Edit > Paste As > Synced Figure Instance, as many times as you’d like, anywhere in the project. (As a tip: if you copy a synced instance you can simply paste to create another synced instance.)

That way you change any of the figures and they’ll sync with each other and the original figure will then sync back to the file. Likewise if you make changes in the file then the original figure will sync import those changes and then update all of the synced instances throughout your project. This means only one figure is monitoring and syncing with the file which is a more robust solution.

Linking Figures

Curio has several methods for linking figures together including jump actions, jump anchors, idea space links, hyperlinks, and references.

Jump Actions

You can assign a jump action to a figure so that double-clicking that figure can navigate to a specific idea space or even a specific figure — even in another project!

The figure will also get a little jump image adornment so it’s clear that a jump action is associated with the item. You can use the Actions inspector to hide this adornment if you wish.

Set a Jump Action for a Figure via the Jump Popup

  1. Select the figure to which you wish to assign the jump action.
  2. Choose Format > Jump or press ⌘J to bring up the jump popup.
  3. The jump popup is based on the Quick Find popup which means:
    • Start typing to find a figure’s text or idea space’s title via autocomplete then choose a result.
    • Enter a query like @george or due < 2w or #active then choose a result.
    • If you’ve copied a figure or idea space from the same project you can simply paste into the jump popup and the item will appear in the results so you can select it.
    • If you’ve copied a figure or idea space from a different project you can simply paste the curio:// hyperlink into the jump popup and click Set.
  4. After choosing a destination for the jump the popup will be dismissed and a jump action assigned to your figure.

Set a Jump Action for a Figure via the Clipboard

  1. Select your jump destination: either a target figure within an idea space or a target idea space within the Organizer.
  2. Choose Edit > Copy from the main menu.
  3. Select the figure(s) to which you wish to assign the jump action.
  4. Choose Edit > Paste As > Jump Action to set the jump action.

Opening a Jump Action

  • Click on a figure’s jump action adornment.
  • If the jump destination is within this project it will appear in the current view, if Option (⌥) is held when clicking it will open in the opposite split view.
  • If the jump destination is in a different project, the jump will open in a separate window or tab (depending on your System Settings > Desktop & Dock tabs setting), if Option (⌥) is held when clicking it will open within the current window replacing the current project (reverse this).

Clear a Jump Action for a Figure

  1. Select the figure and choose Format > Jump or press ⌘J to bring up the jump popup then clear the current destination and press Set.
  2. Or, open the Actions inspector and click Restore Default.

Extract PDF Selection to Text Figure with Jump Action

You can extract a selection of text from a PDF figure and paste it on an idea space as a new text figure, complete with a jump action to the original selection in the PDF.

  1. Option-double-click a PDF figure on your idea space to begin PDF annotations.
  2. Select a region of text within the PDF.
  3. Choose Edit > Copy As > Jump Target.
  4. Elsewhere in the project choose Edit > Paste and a new text figure will appear containing the selected text from the PDF. A jump action to the original selection in the PDF figure will be automatically associated with the new figure. Clicking the figure’s jump adornment will jump to the idea space containing that PDF and highlight that selection of text within the PDF.

A wikilink is a special extension of markdown which looks like this [[Apple iMac]] when you’re editing but turns into a clickable link to an inner-project jump destination when rendered.

  1. Edit a text figure.
  2. Type [[ and the Format > Jump (⌘J) popup will automatically appear allowing you to find and select a destination figure or idea space.
  3. The jump popup is based on the Quick Find popup which means:
    • Start typing to find a figure’s text or idea space’s title via autocomplete then choose a result.
    • Enter a query like @george or due < 2w or #active then choose a result.
    • If you’ve copied a figure or idea space from the same project you can simply paste into the jump popup and the item will appear in the results so you can select it.
    • If you’ve copied a figure or idea space from a different project you can simply paste the curio:// hyperlink into the jump popup and click Set.
  4. After choosing a destination for the jump the popup will be dismissed and the wikilink will be inserted into your text figure.
  5. Note that markdown rendering will be automatically enabled for your figure if necessary.

The automatic jump popup when you type [[ can be disabled so you would have to press ⌘J to bring it up.

The automatic trailing bracket ] when you type a leading bracket [ can be disabled.

Alternative Title

Curio supports the [[title|alternate title]] wikilink syntax so if you don’t like the default title (which can be customized) you can give it an alternate which will be displayed when rendered.

You might wonder where Curio is storing the hyperlink to the jump destination, after all it’s not visible anywhere. When editing the hyperlink it is stored as a hidden rich text attribute across the wikilink. When rendered that attribute is turned into a standard rich text link attribute so you end up with a clickable link.

For the wikilink you can enter an idea space title that doesn’t exist yet and it will be automatically created as a sibling of the current idea space the first time you click on it.

Via Typing
  1. Edit a text figure.
  2. Type [[ and the Format > Jump (⌘J) popup will automatically appear.
  3. In the Jump popup, simply type a new title for your idea space and press Return or click the Set button. You don’t have to choose an existing destination.
  4. The title will be inserted into the wikilink brackets and the text cursor will be placed just after the wikilink.
  5. Continue editing your text if you’d like then press Escape when you’re done.
  6. The first time you click on the wikilink Curio will see if an idea space with that title already exists as a sibling of the current idea space. If not a new idea space with that title will be created as a sibling. The wikilink’s URL will then be refreshed to point to this idea space using its ID, which is more robust, and Curio will jump to that idea space.

Alternatively if you disable the automatic jump popup you can manually bring it up via ⌘J or simply type the new idea space title directly within the wikilink brackets.

Via Text Selection
  1. Edit a text figure.
  2. Select a range of text within the figure that you would like to turn into a wikilink.
  3. Type [ and you’ll see that the selected range gets left and right brackets on either side of the selection. Press [ again to get the second bracket to enclose the selection with the [[wikilink]] syntax.
  4. Press Return to skip past the wikilink.
  5. Continue editing your text if you’d like then press Escape when you’re done.
  6. The first time you click on the wikilink Curio will see if an idea space with that title already exists as a sibling of the current idea space. If not a new idea space with that title will be created as a sibling. The wikilink’s URL will then be refreshed to point to this idea space using its ID, which is more robust, and Curio will jump to that idea space.

This automatic selection bracketing can be disabled. Instead you would manually enclose the text with leading [[ and trailing ]].

Pressing Return within a wikilink to skip past it can also be disabled.

  1. Edit the text figure containing the wikilink.
  2. Place the text cursor anywhere within the wikilink itself and choose Format > Jump or press ⌘J to bring up the jump popup.
  3. Use the jump popup to find and select a different destination.

If the text cursor is anywhere within the wikilink then pressing Return will skip past the end of the wikilink. This feature can be disabled.

  1. If editing, move the text cursor anywhere within the wikilink and press Enter (not Return) to open the wikilink.
  2. If not editing, make sure the figure is selected then click the wikilink to open it.
    • If the jump destination is within this project it will appear in the current view, if Option (⌥) is held when clicking it will open in the opposite split view.
    • If the jump destination is in a different project, the jump will open in a separate window or tab (depending on your System Settings > Desktop & Dock tabs setting), if Option (⌥) is held when clicking it will open within the current window replacing the current project (reverse this).

Pressing Enter within a wikilink to open it can be disabled.

There are some key points to consider if you plan to use wikilink syntax within file-backed markdown text figures. Note this specifically applies to markdown (.md) backing files not rich text files.

The markdown file format is plain text which means Curio can’t store wikilink URL information in rich text attributes. This imposes limitations on what kinds of wikilinks Curio can dynamically reconstruct when it needs to render the markdown.

  • ✅ Wikilinks to sibling idea spaces will work. Curio will automatically try to find an idea space with the wikilink’s title as a sibling of the current idea space. If successful, it will dynamically construct a link to that idea space. If not, a new idea space with that title will be created as a sibling when the link is clicked.

  • ❌ Wikilinks to other non-sibling idea spaces in the project or to figures in the project will not work, as Curio doesn’t have enough information to reconstruct the link.

  • ⚠️ If syncing your file-backed markdown files with Obsidian then keep in mind Obsidian does not allow the following characters in markdown file titles: # ^ [ ] |. This means if you’re creating a wikilink to an idea space you may not want to use those characters in the idea space’s title. For example, a wikilink like [[Curio is #1]] to an idea space with that title wouldn’t work in Obsidian because it doesn’t allow you to create a markdown file named Curio is #1.md.

In contrast to a wikilink, which is a non-standard extension to the markdown syntax, you can also insert a standard markdown link for your jump links.

The format is a bit more verbose compared to wikilinks [title](link) where the link is a visible curio:// hyperlink, however it is standard markdown.

  1. Edit a text figure, markdown should be enabled if it isn’t already.
  2. Choose Format > Jump or press ⌘J to bring up the jump popup.
  3. The jump popup is based on the Quick Find popup which means:
    • Start typing to find a figure’s text or idea space’s title via autocomplete then choose a result.
    • Enter a query like @george or due < 2w or #active then choose a result.
    • If you’ve copied a figure or idea space from the same project you can simply paste into the jump popup and the item will appear in the results so you can select it.
    • If you’ve copied a figure or idea space from a different project you can simply paste the curio:// hyperlink into the jump popup and click Set.
  4. After choosing a destination for the jump the popup will be dismissed and a markdown link will be inserted into your text figure.

The wikilink is of the form [title](link). If you don’t like the default title (which can be customized) you can easily change it by replacing the contents of the [title] portion.

  1. Edit the text figure containing the markdown jump link.
  2. Place the text cursor anywhere within the markdown link and choose Format > Jump or press ⌘J to bring up the jump popup.
  3. Use the jump popup to find a different destination.

If you prefer rich text to markdown then you can also insert standard rich text links to jump destinations.

  1. Edit a text figure, markdown should be disabled if it isn’t already.
  2. Choose Format > Jump or press ⌘J to bring up the jump popup.
  3. The jump popup is based on the Quick Find popup which means:
    • Start typing to find a figure’s text or idea space’s title via autocomplete then choose a result.
    • Enter a query like @george or due < 2w or #active then choose a result.
    • If you’ve copied a figure or idea space from the same project you can simply paste into the jump popup and the item will appear in the results so you can select it.
    • If you’ve copied a figure or idea space from a different project you can simply paste the curio:// hyperlink into the jump popup and click Set.
  4. After choosing a destination for the jump the popup will be dismissed and a rich text link will be inserted into your text figure.

If you don’t like the default title (which can be customized) you can edit the link text.

  1. Edit the text figure containing the rich text jump link.
  2. Place the text cursor anywhere within the link text and choose Format > Jump or press ⌘J to bring up the jump popup.
  3. Use the jump popup to find a different destination.

Once you’ve established a number of jumps to various destination figures or idea spaces you may wonder, given a destination, what items link to it? Backlinks are jumps from other items to a given item.

  1. Right-click on a figure or Organizer item.
  2. In the context menu that appears, the Backlinks submenu will list all originating source figures by their title and location within the project.
  3. Choose one of those backlinks and you will promptly jump to that figure within the project, if Option (⌥) is held when clicking it will open in the opposite split view.

Note these only list jumps within the same project, not from other projects, and won’t include hyperlinks since those can be placed anywhere even outside of Curio.

Figures with backlinks can optionally show a link adornment if you’d like to make figures with backlinks more obvious. Then you can click on the link adornment to quickly access backlinks, in addition to the right-click context menu technique, if Option (⌥) is held when clicking it will open in the opposite split view. If a figure has references it’s already showing the link adornment so Curio will automatically show backlinks in that popup menu as well, regardless of this setting.

Renaming a Destination

If a jump destination figure or Organizer item is edited in a way that changes their link title then that change can propagate to all backlink figures that have inline links to that destination. However, the change will not be made if the inline link’s title has been modified by the user.

For example, if you have an idea space titled “Butternut” then rename it to “Peanut” then here’s what will happen to backlinked figures that have inline links to that idea space:

Inline Link Type Before Rename After Rename
Wikilink [[Butternut]] [[Peanut]]
Same wikilink but with modified title [[My Dog]] [[My Dog]]
Same wikilink with alternate display title [[Butternut|My Dog]] [[Peanut|My Dog]]
Markdown link [Butternut](curio://?i=87) [Peanut](curio://?i=87)
Same markdown link but with modified title [My Dog](curio://?i=87) [My Dog](curio://?i=87)
Rich text link Butternut Peanut
Same rich text link but with modified title My Dog My Dog

Jump Anchors

As an alternative to assigning a figure a jump action, you can use a jump anchor to jump to different locations. A jump anchor is a small, unassuming icon you can place anywhere on an idea space. When double-clicked the user will jump to the destination location.

Add a Jump Anchor

  1. Select your jump destination: either a target figure within an idea space or a target idea space within the Organizer.
  2. Choose Edit > Copy from the main menu.
  3. Go to the idea space where you want to place the anchor.
  4. Choose Edit > Paste As > Jump Anchor from the main menu.
  5. Curio will create a jump anchor figure. You can click and drag this figure anywhere. You can also copy & paste it, duplicate it, or change its attributes in the Inspector.

You can also create links between idea spaces even from different projects by adding an idea space link figure. When double-clicked the user will go to the destination idea space.

The new figure will display a preview of the represented idea space unless the represented idea space is the same as the idea space on which it was placed or is from a different Curio project. If the represented idea space is the same as the idea space on which it was placed, Curio will display a distinctive “you are here” icon. If the represented idea space is from a different Curio project, Curio will display a distinctive “external project” icon.

  1. Drag the idea space from the Organizer of a project window and drop it onto an idea space.
  2. A new idea space link figure will be created with a preview of the represented idea space.
  3. You can right-click on the resulting figure and choose “Show As Icon” then give the figure an appropriate title like “Click here to learn more”.
  4. The icon or preview image will automatically update as the destination idea space changes.
  5. When displayed as icon, the title automatically reflects the idea space’s title and dynamically updates if that title is changed. You are able to manually override the figure’s title with your own text if you wish and Curio won’t replace it. Later, if you’d like it to reflect that actual idea space title again, simply remove all text from the figure’s title and Curio will replace it.

You can easily create hyperlinks to figures or idea spaces within a Curio project for use outside of Curio, for example in a browser web page or another application. These are of the form curio://.

If you have text selected within the selected text or PDF figure then the hyperlink will deep link to that selection. Similarly if you’re playing back a video or audio figure then the hyperlink will deep link to that start location.

Clicking the resulting hyperlink, whether it’s in Curio or another application, will tell Curio to jump to that project, that idea space, and that figure, then set the selection of that text figure or PDF figure, or start playing back the media at that location.

If the hyperlink is used within the same project then it’s a relative link and doesn’t include project information, as it’s not necessary.

When exporting text as PDF, rich text, or markdown, local project hyperlinks, specified via rich text link attributes or markdown links or wikilinks, are converted into longer absolute hyperlinks that include project information suitable for use outside of Curio.

  1. Select an idea space in the Organizer or figure within an idea space. You can also select a range of text within a text figure or PDF figure, or start playing an video or audio figure, and the link will deep link to that selection or playback location.
  2. Choose Edit > Copy As > Hyperlink.
  3. Use it outside of Curio or even within Curio by selecting text and using the Format > Link menu (⌘K). If you use it within a text figure in the same project then the project path is removed automatically turning it into relative link so it will work even if the project is moved or renamed.
  4. Clicking the resulting hyperlink, whether it’s in Curio or another application, will tell Curio to jump to that project, that idea space, and that figure, then, if appropriate, set the selection of that text figure or PDF figure, or start playing back the media at that location.

Here’s an example Curio hyperlink:

curio://Biology?p=WJzoFVMoS9iltl5LziCxeQ&f=6SbyZLC1Rl6AQIQx5qdPPA

  • All Curio project hyperlinks start with curio://, which is our custom URL scheme.
  • Next, if this isn’t a relative link within the project, is the name of the project.
  • Next, if this isn’t a relative link within the project, is a p= variable with the project’s unique identifier (URL-safe base64 encoded) which is stored as a com.apple.metadata:kMDItemIdentifier metadata extended Finder attribute on the project file. Using that identifier we can use Spotlight to find the project if it has been moved, renamed, or is now on another volume. Note this only works if Spotlight is indexing the volume containing the project file. If you duplicate a project then it will also have the same unique identifier.
  • Next there may be optional variables based on the type of link.
    • i= the unique identifier to a specific idea space (URL-safe base64 encoded).
    • f= the unique identifier to a specific figure (URL-safe base64 encoded).
    • n= the page number of a PDF figure.
    • s= the starting selection range for text or time for an audio/video recording figure.
    • e= the ending selection range for text or time for an audio/video recording figure.

These terms may change as Curio’s hyperlink capabilities evolve.

Our hyperlink format from Curio 14 through Curio 27 included an encoded path to the original file:

curio://$Projects/Classes/Biology.curio?p=WJzoFVMoS9iltl5LziCxeQ&f=6SbyZLC1Rl6AQIQx5qdPPA

However, even though we used special smart variables to simplify the path, it wasn’t as robust as just using the project unique ID technique described above.

If Curio is unable to find the project based on the supplied link information, it will ask you to locate it via a standard Open dialog, then remember that new location so future links to that project will work automatically.

In the future Apple may migrate custom URL schemes, like curio:// links to a new type of link created by Apple called a Universal Link, such as:

https://www.zengobi.com/curio/link/Biology?i=y_6ticqKTl6

Universal links are more secure than custom URL schemes as they are tied to a registered Internet domain, instead of a programmer simply claiming a scheme potentially overriding someone else’s claimed scheme.

While Apple will presumably support custom URL schemes indefinitely, so existing app links won’t break, we’ve taken these preemptive steps in case Apple starts encouraging developers to do so:

  • On Apple’s developer portal, we’ve declared that our Curio app (with its com.zengobi.curio bundle ID) supports universal links and our registered domain is zengobi.com.
  • We’ve added the https://www.zengobi.com/.well-known/apple-app-site-association file to our website declaring that Curio handles universal links of the form: https://www.zengobi.com/curio/link/...
  • The Curio app itself already knows how to handle universal links of that form.
  • On a user’s machine, based on the apps installed, macOS periodically queries and locally caches this site association information so it immediately knows to launch Curio directly when clicking on a universal link.

Apple hasn’t shifted macOS to universal links yet, as they have on iOS, but we’re ready if they do!

Hookmark Integration

By default the popular Hookmark utility creates hook:// links to the current Curio project itself, not to the selected content within the project.

However, if you want Hookmark to track curio:// deep links to a specific idea space or figure, or even to selected range of text within a text figure or PDF figure, then you have two options:

  1. Enable Hookmark’s Curio AppleScript integration which will make Hookmark use Curio’s AppleScript interface to retrieve curio:// deep links for selected items.

  2. Or, use Curio’s Copy As > Hyperlink to place the deep link on the clipboard then use Hookmark’s Focus on Link in Clipboard.

Curio Professional customers can create cross references from Curio figures and Organizer items to other Curio figures, Organizer items, and even web sites using a sophisticated new feature we call references.

These reference connections can be of a specified type, such as a Rebuttal or Evidence, allowing you to create a number of typed connections between your Curio items, even if they’re scattered throughout a project or in different projects.

Compared to normal jumps or wikilinks and backlinks, a reference link is much more advanced since it includes the type of connection made between the two figures. Therefore you know why the items are connected.

ReferencesContextMenu

Sample Use Case

For example, say you’re using Curio to take notes on a research paper detailing a lab experiment. You can use references to associate your text figures detailing your experiment, to various image figures located elsewhere in the project, with a Experiment Snapshot reference type. They may also link to other notes which describe the results of prior experiments via Prior Data reference type.

Then, at any time, you can view a figure’s references, via the link adornment or context menu item. It lists all figures this figure refers to so you can jump to them with just a click.

If within the same project, you can even see all figures to point to it, thus are reference backlinks to this figure. (Note that a remote reference in a different project can’t see all the references that point to it.)

A single figure might have references to multiple figures such as two Source figures, three Rebuttal figures, and one Example figure. Likewise, a figure can have multiple figures that all point to it, such as a figure which is an Agree reference for some figures (thus a support for those statements), and Disagree reference for others (thus a counterargument).

Reference Type Scopes

Using the inspector shelf, click the Project tab and then use the new Reference Types inspector panel to see all the available reference types.

The Scope

There’s a popup at the top of this inspector panel where you can choose whether to view and modify:

  • Bundled reference types that are included with Curio.
  • Custom reference types for all projects.
  • Custom reference types for a specific project.

When you first launch Curio you won’t have any project or personal types, so let’s begin by looking at the bundled types.

Bundled Reference Types

Click the popup at the top to show all the bundled types. The list underneath will reveal the global reference types available to all projects including Agree, Disagree, and Example, among many others. Each type is color coded for quick identification, such as green for Agree and red for Disagree.

ReferenceTypesBundled

Editing

Bundled reference types are read-only, however, if there are types you don’t think you’ll ever use you can uncheck the visible checkbox and they won’t clutter your interface when creating references. They can be re-enabled at any time in the future if you change your mind.

Example

As an author of mystery novels, you might decide that you’ll never need the bundled Footnote, Rebuttal, and Response types so you uncheck them so they aren’t listed as choices when you make a reference association.

Custom Types for All Projects

At the top, switch the popup so you’re looking at the the custom types you’ve created and made available to all projects. This list is empty by default, of course, so you’ll need to add some types to get started.

ReferenceTypesPersonal

Example

Continuing the example above, let’s say you create a handful of custom global reference types that you’ll use as you brainstorm and organize your novels: Clue, Enemy, Foreshadow, and Friend. You can use these to quickly link notes together as you work on your latest mystery. These custom types will be available to all of your Curio projects.

Editing

As custom types you can edit these names and colors at any time. Uncheck a type if you no longer want it to be available for new references, or delete it via the Delete key or Delete Type button to remove it permanently.

Custom Types for This Project

And finally, switch the popup at the top so you can see the custom reference types you’ve created for this specific project.

ReferenceTypesProject

Example

To continue our earlier example, in this particular project you’re working on a novel that could use a couple of project-specific types, Persona and Scene, which you can use to help associate certain notes with specific notes and image figures which describe important themes.

Editing

As custom types you can edit these names and colors at any time. Uncheck a type if you no longer want it to be available for new references, or delete it via the Delete key or Delete Type button to remove it permanently.

Defining Reference Types

  1. Using the inspector shelf, click the Project tab and then use the new Reference Types inspector panel to see all the available reference types.
  2. At the top use the popup to specify whether you want to view and modify (a) bundled reference types that are included with Curio and available to all projects, (b) custom reference types for all projects, or (c) custom reference types for this project, specifically.
  3. Bundled reference types are read-only, however, if there are types you don’t think you’ll ever use you can uncheck the visible checkbox and they won’t clutter your interface when creating references.
  4. With custom types you can edit these names and colors at any time. Uncheck a type if you no longer want it to be available for new references, or delete it via the Delete key or Delete Type button to remove it permanently.

Adding a Reference

  1. Select and copy the figure or Organizer item you want to reference. This is the item you want to refer to.
  2. Next select one or more other figures where you want to add a new reference which points to that copied item. Right-click, and in the context menu that appears choose a reference type in the Add Reference to Copied Item As submenu to create your new reference.
  3. The reference connection has now been created, and a reference adornment will then appear beside both the source and destination figure, if within the same project.
  1. In your browser:
    • Right-click on a link and choose Copy Link, which should also give Curio the title of the page.
    • Or copy the link location itself (ex: www.zengobi.com/support).
  2. Next select one or more other figures where you want to add a new reference which points to that copied link. Right-click, and in the context menu that appears choose a reference type in the Add Link Reference As submenu to create your new reference.

Viewing an Item’s References

  1. If a figure either has references or is a reference (in the same project) then it will have a special references link adornment. Clicking it will list all references, grouped and color coded by reference type, and allow you to add or remove references.
  2. Alternatively, right-click on a figure or an Organizer item which either has references or is a reference and its context menu will contain a References submenu identical to the one displayed when clicking an adornment.
  3. From that menu you can select an item to instantly jump to it.
    • If the jump destination is within this project it will appear in the current view, if Option (⌥) is held when clicking it will open in the opposite split view.
    • If the jump destination is in a different project, the jump will open in a separate window or tab (depending on your System Settings > Desktop & Dock tabs setting), if Option (⌥) is held when clicking it will open within the current window replacing the current project (reverse this).

Removing a Reference

  1. Click on the references adornment or right-click and choose the References submenu.
  2. Within that menu you should see a Remove Reference option so you can select a reference to remove.

Search References

Once you’ve connected figures together via references Curio includes a number of ways to use those connections.

  • You can use the Quick Find popup or Search shelf to find all figures with which have references of a specific type (^agree), or even any reference type (^*).
  • You can also find all items that are references of a specific type (=^agree) or any type (=^*).
  • When you use the export button on the search results screen, any references associated with a figure are included in the resulting rich text, markdown, or CSV export.
  • By default, references are included in CSV exports under named columns such as “Agree Reference” and “Disagree Reference”. As each figure’s row entry is exported, if the figure includes one or more references of that type then those jump URLs are exported in that column. The search results export button also has a new menu option, Export Resulting References as CSV, which can be used to export only figure reference information to a separate CSV file with reference named columns.

Synced Figure Instances

You can create synced copies of a figure and Curio will sync the text contents and all meta properties (checked state, percent complete, dates, tags, resources, priority, etc.) between the original figure and all instances.

Modify the original figure or any of the instances and those changes will be synced to all other figures.

This means you can mark one as completed, and all will be marked as completed. Change a date, and all reflect that same date change. Modify the text context, and all have the updated text.

SyncedFigureInstances

The screenshot above shows a rich text figure marked as 25% complete with an #GTD/OnHold tag with its associated hourglass icon, with its content and meta synced to multiple instances each styled independently.

The figure styling is not synced and can therefore be different between all the instances. The styling associated with a figure is applied to the shared text content right before rendering.

So you can have an instance of an original figure in a list, in a mind map, and in multiple other places on idea spaces throughout your project, each styled independently, but their content and meta are all synced.

This is a powerful feature. A few other applications have similar functionality where it may be called transclusion or embedded block references. Some only allow the original figure to be edited, thus all instances are read-only, while a select few allow any instances to be edited as well (like Curio).

Video ▶️

Watch a synced figure instances demonstration video on our YouTube channel.

Creating a Synced Figure Instance

  1. Select one or more figures and copy them.
  2. Choose Paste As > Synced Figure Instance(s).

Some additional notes:

  • You can paste into a collection or onto an idea space.
  • Repeat the paste as synced figure instance as often as you wish.
  • Item order is preserved if you copy to/from collections. For example, if you copy items in a list then paste as synced figure instances into another list then the items will be in the same order.
  • If you duplicate or do a normal copy/paste of an instance then the duplicate is an instance of the original figure (it is not an instance of an instance).

Jumping to Figure Instances

  • Right-click on an original figure and choose an instance from the Synced Figure Instances submenu.

Given that the instances all have the same text content, the submenu is listed based on the containing idea space title, in alphabetically sorted order.

Jumping to the Original Figure

  • Right-click on a figure instance and choose Jump To Original Figure.

Disconnecting from the Original Figure

  • Right-click on a figure instance and choose Disconnect From Original Figure.

Deleting the Original Figure

If you attempt to delete a figure that has instances you will be warned that the syncs will no longer work.

The existing instances will maintain their text from the last sync. They will not be deleted as this could cause cascading issues if they are parent nodes in lists, etc.

Note that you aren’t warned if you delete one or more idea spaces or entire sections that happen to contain a figure within that is an original figure.

Glow Coloring

Instead of the normal blue selection glow color, you will see the following selection colors:

  • Purple, for figures that have instances.
  • Pink, for the instances themselves.

Note for performance reasons this is just a quick check. If you’ve deleted figures (or did an undo/redo of a figure deletion), or idea spaces, or sections that have original figures or instances then the quick check won’t be updated until project reload.

Limitations of Synced Figure Instances

Currently you cannot create synced figure instances of grouped figures, line figures, or collection figures like lists and mind maps.

Styling Synced Figure Instances

Styling synced figures figures is quite similar to the logic applied to styling file-backed rich text figures.

When you edit a figure those changes are then broadcast to each synced instance where the text contents are transformed to that figure’s styling using the following logic:

  1. Same Font and Font Size Throughout
    If the entire text content shares the same font and font size (and ignoring traits like bold and italics) then the figure’s font and font size are applied to those contents right before rendering. Subtext containing bold and italic attributes remain intact after applying the new font.

  2. Same Font Size Thoughout
    Else, if the entire text content has a mix of fonts but they’re all the same font size, then the figure’s font size is applied to those contents right before rendering. So the mix of fonts remains intact but they all adjust in size. Bold and italic attributes also remain intact.

  3. Text Coloring
    Curio will then apply the figure style’s foreground text coloring to the text, while making sure colored subtext remains intact.

If there’s a mix of fonts and sizes then Curio leaves the text formatting as-is as it doesn’t want to jeopardize your rich text formatting by applying a new syling erroneously.

Versus File-Backed Text Figures

Curio has a similar feature called File-Backed Text Figures where an asset figure that points to a text file can be displayed as a text figure which you can read about above. With that feature, you can drag in an embedded or aliased text file then right-click on it and choose to show it as a text figure.

Since it’s an asset figure, all copies of that figure will share the same underlying file asset. So changing the text contents of any of the copies will modify the shared underlying text file, thus updating all the other copies of the asset figure. This sounds much like the synced figure instance feature, right?

However, there are some key differences:

  1. Synced figure instances store their text data within the figure data itself, not to a separate text file.
  2. Synced figure instances will also sync figure meta information. Checking off or changing the due date on one will change all the others. With file-backed text figures each figure is independent and only the content is synced since they share the same underlying asset file. (Technically, for historical reasons, tags are synced between file-backed text figures as they are associated with the asset, not the figure.)
  3. Synced figure instances allow you to easily jump between the original and instances of that original.

Cool Trick

You can actually create a synced figure instance of a file-backed text figure to get the best of both worlds: synced figure meta with synced text contents stored to a file which can be embedded within the projet or even aliased to a file possibly synced via a cloud service to your other Macs and devices.

Focus

When working within Curio sometimes you’d like to focus on a specific branch in a mind map or list, or perhaps a particular figure on a busy idea space such as an album or text figure.

With Curio’s View > Focus feature this is easy to do.

Using Focus

  1. Select one or more figures and choose View > Focus or press ⌃F.
  2. All other figures on the idea space will become transparent. If the selected figures are parent figures in a hierarchical collection such as a list or mind map then any existing or new child nodes inherit focus as well.
  3. To turn off focus simply choose View > Focus or press ⌃F again. If you switch to another idea space or re-open your project focus is restored as well.
  1. All editions of Curio support the ` (backtick) feature. Simply press ` to instantly hide or show both the Organizer and Shelf which quickly declutters the interface.
  2. Likewise all editions of Curio support the standard macOS full screen mode toggled via the View menu or by pressing ⌃⌘F.

Figure Layers

Figure layers are incredibly useful with more complex idea spaces where you want to neatly separate figure content into separately manageable layers arranged in z-order.

Figures on top of Figures: On your idea space you have one or more figures, which are arranged and drawn in a back-to-front order. For example, with two rectangle figures, you can drag one and it will either drag behind or in front of the other. You can use the methods like the Arrange > Send to Back menu to rearrange this figure ordering.

Layers (of Figures) on top of Layers (of Figures): All of those figures currently exist on a single, default “foreground” layer on your idea space. With layers in Curio Professional, your idea space supports multiple independent layers, themselves arranged in a back-to-front order, each containing their own figures in back-to-front order.

LayersPopover

Example

For example, say you have a Background layer which is located under a Foreground layer. Curio will draw all the Background figures first in back-to-front order, then it will draw the Foreground figures in back-to-front order.

You could have a much more complex example, with a dozen layers that you use to encapsulate and order information. Layers can be visible or hidden, or perhaps visible in general but not printed or presented.

The Active Layer

A key aspect of layers is that only one layer at a time can be active. The active layer receives all mouse clicks and user interactions, essentially ignoring the other layers. This means you can select, create, delete, rearrange, and modify figures only on the active layer, which safeguards your other layers from accidental changes.

Layers Popup Menu

Curio has a quick access popup menu to switch layers, just hold Option (⌥) and click the Layers button to see the layers menu instead of the popover.

Activating a Layer

  1. Click the Layers popover button located in the far-right area of the inspector bar. This button may be titled “Layer 1” as that’s the default layer in all idea spaces.
  2. In the popover that appears, click the layer to switch to. This will be the new active layer and you can now create and modify figures on that layer.

Renaming a Layer

  1. Click the Layers popover button located in the far-right area of the inspector bar.
  2. Double-click on a layer to rename it, type in the new name, then press Return.
  3. Note you cannot rename a layer inherited from a master template. It can only be renamed in the master itself. An icon alongside the layer name indicates if it is inherited from a master template.

Inserting Layers

  1. Click the Layers popover button located in the far-right area of the inspector bar.
  2. Click either the Insert Above or Insert Below button to insert a new layer above or below the current, active layer.

Deleting the Active Layer

  1. Click the Layers popover button located in the far-right area of the inspector bar.
  2. Click the Delete Layer button to delete the layer. Or, with a touchpad or Magic Mouse, you can swipe a layer’s entry in the list to delete it.
  3. Note you cannot delete a layer inherited from a master template. It can only be deleted in the master itself. An icon alongside the layer name indicates if it is inherited from a master template.

Rearranging Layers

  1. Click the Layers popover button located in the far-right area of the inspector bar.
  2. Drag-and-drop to rearrange the front-to-back ordering of your layers.

Locking Layers

  1. Click the Layers popover button located in the far-right area of the inspector bar.
  2. Click the lock icon to lock a layer so its figures cannot be edited.

Changing the Visibility of Layers

  1. Click the Layers popover button located in the far-right area of the inspector bar.
  2. Click the visible icon to hide or show a layer. Note hiding a layer acts as a override forcing the layer to be hidden when printing, exporting, or presenting regardless of the restrictions discussed below.

Like Photoshop, the Layer popover inspector supports ⌥-clicking the visibility icon for a layer to instantly hide all other layers. ⌥-click the same visibility icon again and all other layers will be made visible once again.

Using Restrictions to Control the Visibility of Layers

  1. Click the Layers popover button located in the far-right area of the inspector bar.
  2. Assuming the layer is normally visible, you can restrict a specific layer from printing, exporting, or presenting by toggling the appropriate icon.

Moving Figures Between Layers

  • Right-click on selected figures and choose “Move Selected Figures and Switch” to move the figures to another layer and switch to that layer.
  • If Option is held when right-cilcking then it will say “Move Selected Figures and Stay” so you stay on the current layer.

You can also move figures via cut and paste:

  1. Select and cut the figures in their current layer.
  2. Activate the layer where you wish to place them.
  3. Paste the figures into this layer. They will be pasted in the same location as they were in their original layer.

Master Templates and Layers

  1. Layers that are inherited from a master idea space template will show a special masters icon.
  2. This indicates the layer cannot be renamed or deleted, although you can still rearrange, hide, or change its permissions.
  3. Changes made to that layer in the master template will automatically be reflected in all idea spaces that inherit that master.
  4. If you change to a different master template (via Change Masters) then any layers inherited from the current master will be removed and the new master layers added.
  5. Any layers that were created just for this idea space, thus not inherited, will remain as-is.
  6. Any edited figures that came from the previous master that have identifiers (via the Info inspector) will be copied over to figures with the same identifiers in the new master. So if you changed a figure identified as title from the old master then its content will be moved to a figure from the new master with the same identifier.

Figure Styles

As mentioned earlier, a figure style defines the look of the figure including properties such as color, border, font, and shading. You can apply a style to a new or existing figure.

Curio organizes figure styles based on the type of figure including:

  • Basic Figure
  • Document Icon (an asset figure displayed as icon)
  • Image (an asset figure displayed as preview) with distinctions made for PDF Image and Equation subtypes
  • URL (displayed as preview)
  • Line
  • List
  • Mind Map
  • Table
  • Index Card
  • Pinboard
  • Album
  • Stack

You can easily create new figures styles containing all of its display attributes.

Styles with Sizes

When you save certain types of figure styles, sizing information will automatically be saved as well. These figure types include images, albums, index cards, pinboards, stacks, and tables.

For image figures, Curio will then apply the style’s size if you save the style as a default for image figures (Format > Save as Default Image Style) and then drag in a new image, or if you apply a style to an existing image figure that you haven’t sized yet.

For the collection figures (albums, index cards, pinboards, stacks, and tables) these sizes be used when you create a new collection using that style, or if you apply a style to a collection that doesn’t have any content in it yet.

Styles with Captions

If captions are enabled for a figure when a style is created then the style will include that caption state and applying that style to figure will enable captions automatically.

However, by default if a style doesn’t include caption information then apply that style to a figure with existing captions will not hide those captions, although they can be hidden if you wish.

Create a New Figure Style

  1. Select a figure in an idea space.
  2. Configure the attributes how you want them.
  3. Right-click on the figure then choose “Save As FigureType Style” where FigureType will be replaced by the type of figure that is selected such as “Basic Figure” or “Line” or “Mind Map”.
  4. In the dialog that appears give the style a name and press the Save button.

Apply a Style to a Selected Figure

  1. Click on the Style inspector button or right-click on the figure and choose “Apply Style” to bring up the Style Gallery for that type of figure.
  2. The style popup menu will only display the named figure styles appropriate for the selected figure. For example, if you have selected an image figure, then only the image styles will be displayed.

Curio will also show the bundled, personal, and master styles in handy submenus under the Format menu, based on the selected figures or the idea space itself if no figures are selected.

Create a Brand New Non-Collection Figure Based on an Existing Style

  1. Click the Figures button on the toolbar.
  2. The Gallery containing basic text figure styles and all non-collection stencils will appear.
  3. Choose a style then click the Choose button. You may also simply double-click the style.
  4. Some boilerplate text will automatically be added to your new text figure so you can see the effects of the style more easily.

Create a Brand New Collection Figure Based on an Existing Style

  1. Click the appropriate collection button on the toolbar. For instance, click the List, Mind Map, Table, or Index Card toolbar button.
  2. The Gallery for that collection figure will appear.
  3. Choose a style then click the Choose button. You may also simply double-click the style.
  1. Click the Insert toolbar button or appropriate collection toolbar button to bring up a gallery.
  2. Drag-and-drop an item from the gallery to your idea space to create a new item.

GalleryDrag

  1. Click the Insert toolbar button or appropriate collection toolbar button to bring up a gallery.
  2. Drag the gallery popover to create a free-floating gallery that you can drag-and-drop from to create new items. You can even drag the Insert popover itself to turn it into a free-floating chooser.

GalleryDetach

  1. Within the Idea Space Style Gallery you can perform a number of operations to better manage your idea space styles.
  2. Copy a style simply by drag-and-dropping it into your Personal collection.
  3. Delete a Personal style by selecting the style and pressing the Delete key.
  4. Share a Personal style by right-clicking on the style and choosing Send to Friend or Send to Zengobi.

Default Figure Style

You can change the default look for several types of figures. For instance, you want all new text figures to be 10 point Times or new web link figures should be 14 point Helvetica with a curved, bordered, and gradient-shaded outline.

Default styles can be overridden for each of the following figure types independently:

  • Text
  • Each of the various geometric shapes including rectangle, rounded rectangle, triangle, circle, trapezoid, speech, cylinder, house, etc, available from the Drawing Tools popup or the Basic Shapes gallery.
  • Lines
  • Mind map relationship lines
  • Document Icon - any asset figure displayed as an icon
  • Images and asset figures displayed as preview with distinctions made for PDF Image and Equation subtypes
  • URL figures displayed as preview
  • Video
  • Audio
  • Groups
  • Lists
  • Mind maps
  • Tables
  • Index Cards
  • Pinboards
  • Albums
  • Stacks

All asset figures displayed as icons share the same “Document Attributes included in the stye include text attributes, border shape, color, thickness, and pattern, fill color and style, interior margin, opacity value, corners value, the visibility of shadows, to-do checkboxes, and ratings, and icon size.

Note if you’re using Curio Professional then if a master figure is selected when following the steps below then you are defining a default master style for the current project (since masters are local to the project) instead of a global default.

Asset Figure Default Stylings

Normally all asset figures displayed in icon mode share the same default “Document Icon” styling, so they all look similar. This styling can be overridden via the Format > Set Default Style For Document Icon Figure menu item.

Similarly normally all images or asset figures displayed as previews share the same “Image Figure” styling, with “PDF Image” and “Equation” as the only exceptions. This styling can be overridden via the Format > Set Default Style For Image Figure menu item.

If you switch back and forth between icon and preview, via right-click Show As Icon or Show As Preview, the appropriate default styling will automatically be applied.

You can set the default state for whether a file dragged into Curio shows as icon or preview via the Format > Default Figure Settings submenu.

Asset Figure Default Stylings For Specific Extensions

You can also set default stylings for specific file extensions for preview and/or icon display modes using advanced settings. For example, a specific default styling for PNG files dragged in and displayed as icons or previews.

Save a New Default Style for a Figure Type

  1. Select a figure of the appropriate type in an idea space.
  2. Change its look using the inspector, or apply an existing personal or bundled figure style from a Style popup. This is an important point as you can simply change the attributes directly without using a saved style if you don’t want to.
  3. Choose Format > Save as Default Style for Figure from the main menu.
  4. Any new figures of the given type will be created using the default style you set.
List and Mind Map Styles

Hierarchical collections, like lists and mind maps, store a style per hierarchical level.

This is important because when defining your own styles you need to make sure you style at least one figure for each hierarchical level, then save the collection style.

  1. Create the list or mind map collection.
  2. Quickly create a hierarchical series of child nodes: a child under the first, then a child under that child, then a child under that child, etc.
  3. Go as far as you’d like but perhaps 5 or 6 levels should do it.
  4. Style the child at each level the way you’d like it: border shape, color, and fill; text font, color, size; attributes like bold, italics, etc.
  5. Once you finish your 5 or 6 levels select the collection figure itself.
  6. Choose Format > Save as Default Style for Figure from the main menu.
Table Styles

Similarly tables store styles for each type of table cell, like a body cell vs a header cell, so you need to make sure you’ve defined a style to each type before saving your table style.

  1. Create a table.
  2. Show color or row headers and footers as you wish.
  3. Select each type of node and use the table inspector to set the style for that type of cell.
  4. Once you finish select the collection figure itself.
  5. Choose Format > Save as Default Style for Figure from the main menu.

Restore the Factory Default Style for a Figure Type

  1. Select a figure of the appropriate type in an idea space.
  2. If you’ve overridden its default styling then the Format > Restore Default Style for Figure menu will be available.
  3. Choose that menu item and the styling override will be removed from your settings and factory default styling for that figure type will be restored.
  4. Any new figures of the given type will be created using the factory default styling, and that factory styling is applied to the currently selected figure, as well.

Apply the Default Format for a Figure Type

  1. Select one or more unlocked figures on the idea space.
  2. Choose Format > Apply Default Style for Figure from the main menu.
  3. The appropriate default styling (whether that be the factory default or a user-overridden default) will be applied to all selected figures.

Figure Stencils

Curio users can easily create new figure stencils that define not only the look of the figure but can also contain placeholder or boilerplate text or figure items.

Recall that a simple figure stencil is one that includes a single figure. Even a single collection figure such as a mind map which can in turn contain multiple figures within it is considered a single figure.

On the other hand a complex figure stencil is a stencil made up of multiple top-level figures. A perfect example is a landscaping stencil where flowers, shrubs, and trees are represented by individual figures, images, or grouped figures. Those figures aren’t contained within a collection, they exist directly on the idea space.

Create a New Simple Figure Stencil

  1. Select a single figure or a single collection figure in an idea space which you would like to copy as a stencil.
  2. Right-click on the figure then choose “Save As Style”.
  3. In the dialog that appears give the stencil a name and press the Save button.

Create a New Complex Figure Stencil

  1. In an idea space, carefully arrange all the figures you would like to have in the resulting stencil. The stencil will be stored and displayed with the figures in these exact positions. So, in the landscaping example described above, you might place the flowers on one area of the idea space, trees in another, and shrubs in another.
  2. Select one or more figures from the idea space.
  3. Right-click and choose “Save As Complex Stencil”.
  4. In the dialog that appears give the stencil a name and press the Save button.

Create a New Complex Figure Stencil Using All Figures in an Idea Space

  1. If you want to grab all of the figures in an idea space, carefully position them as described above then right-click on the idea space in the Organizer then choose “Save Contents As Figure Stencils”.
  2. In the dialog that appears give the stencil a name and press the Save button.

Inserting a Stencil

  1. Click the Insert toolbar button and choose either Styled Shape or Stencil, for general figure stencils, or for collection-specific stencil click on that collection type like List or Mind Map and you will find those stencils within that gallery. More information below in the “Using the Stencils Gallery Window” topic.
  2. Drag and drop stencils from the Stencils Library shelf, which is discussed in detail below.
  3. Use the Insert main menu menu where you will find submenus for Bundled Stencil, Personal Stencil, and Master Stencil. Then choose the stencil to insert.
  1. You can easily manage your stencils from within the Gallery window (accessible via Insert toolbar button, then click the appropriate gallery you wish to see, like the List gallery) you can perform a number of operations to better manage your figure stencils.
  2. Create personal stencil tags by right-clicking in the Personal area in the repositories list on the left and choosing “Add Tag”. These tags are unique to the figure stencils repository and won’t conflict with tags created for idea spaces in the templates repository, for example. These tags are available to all types of stencils including collection stencils (lists, mind maps, etc.) and other simple and complex stencils.
  3. Organize your personal stencils by drag-and-dropping them into different tags. A template can be associated with more than one tag. So, a template can be in your “Favorites” and “Work” tagged collections.
  4. You can also associate or disassociate a personal stencil with a tag by right-clicking on the template and choosing a tag in the menu that appears.
  5. Rename a personal stencil tag by double-clicking it and entering a new name.
  6. Delete a personal stencil tag by selecting it and pressing the Delete key.
  7. Copy a stencil from another repository simply by drag-and-dropping it into your personal collection.
  8. Edit a personal stencil by right-clicking on the stencil and choosing Edit Stencil.
  9. Delete a personal stencil by selecting the template and pressing the Delete key.
  10. Share a personal stencil by right-clicking on the template and choosing Send to Friend or Send to Zengobi.

Using the Stencils Library Shelf

  • The Stencils library shelf perfect for power users of stencils, where you can easily drag-and-drop stencils from the shelf to your idea space. Read more in the Stencil library section below.

Equation Rendering Details

Curio renders your typed equations using MathJax, the de facto standard in web-based equation typesetting for mathematics, science, and engineering. Several packages are included such as color for coloring equation text, mhchem for chemical equations, and physics for additional symbols.

By default Curio will automatically use the most recent MathJax v3 release (3.2.2 at the moment).

At the time of this writing the long-awaited v4 was only recently released so MathJax v4 is unsupported. We’ll keep an eye on their releases for a bit before upgrading our default template. However, as detailed below, if you’re an advanced MathJax user you can customize which library is loaded and try it out yourself.

MathJax Fonts

There are 3 variables that impact the font and font size used during MathJax rendering:

  1. MathJax Font, ex: “mathjax-tex”, default: “mathjax-tex”
    This is the specialized math font MathJax uses for rendering the actual equation. MathJax v3 only supports its mathjax-tex custom font. MathJax v4 supports a few more custom math fonts. For those experimenting with MathJax v4, Curio can determine that your CSS font is sans serif and tell MathJax to use a different sans serif MathJax font like mathjax-fira.
  2. CSS Font Size, ex: 16, default: 16
    The font size in pixel units (px). 16px = 12pt. The most important factor in determining the equation size. This impacts the equation text and any non-equation text (which can appear in Complex Equations).
  3. CSS Font Family, ex: “times” or “helvetica, sans-serif”, default: “times”
    • If you use the Equation Editor to enter a mix of text and equations with delimiters as described in Complex Equations then this font is used for the non-equation text.
    • The CSS font family can also impact the size of the actual rendered equation because MathJax sizes equations to match the x-height of any potential surrounding text. Different font families may have a different x-height even at the same font-size, so equations can appear slightly larger or smaller. This is independent of the actual MathJax math font in use. For example, Helvetica has a larger x-height than Times New Roman (≈0.46 em vs ≈0.39 em), so with the same font-size: 16px, 1ex is bigger under Helvetica, and MathJax scales the equation up to match.

Here are all the places where you can use equations in Curio, what font attributes they use, and how you can override their defaults.

Context CSS Font Size CSS Font Family MathJax Font
Markdown Inline Equations default: inherit
change to: custom
matches Wikipedia
matches Obsidian
default: inherit
change to: custom
matches Wikipedia
Obsidian forces times?
default: mathjax-tex
change to: custom
Markdown Block Equations default: inherit
change to: custom
matches Wikipedia
matches Obsidian
default: inherit
change to: custom
matches Wikipedia
Obsidian forces times?
default: mathjax-tex
change to: custom
Markdown Math Code Blocks default: inherit
change to: custom
matches block
default: inherit
change to: custom
matches block
default: mathjax-tex
change to: custom
Standalone Equation Figure
via Insert > Equation
default: 24px
change to: custom
default: times
change to: custom
default: mathjax-tex
change to: custom
Text Figure Inline Equation
via Insert > Equation
default: inherit
change to: custom
matches inline
default: inherit
change to: custom
matches inline
default: mathjax-tex
change to: custom
Text Figure Block Equation
via Insert > Equation
default: inherit
change to: custom
matches block
default: inherit
change to: custom
matches block
default: mathjax-tex
change to: custom
The Inherited Font

The term “inherit” means that the attribute is inherited from the font around the equation.

  • For a markdown text figure:
    • If you have a master markdown style entry for body with font-family or font-size properties then that determines the body font.
    • Otherwise the body font is the font associated with the figure itself. If you select the text figure and change the font or font size then that changes the body font and therefore the font attributes sent to MathJax.
  • For a rich text figure:
    • If you are inserting an equation into a rich text figure you are actively editing then the font at the position of the text cursor is passed to MathJax.

For example, if the font used in Curio is Helvetica 15pt this maps to a CSS font size of 20px (15pt / 0.75 = 20px) and CSS font of “helvetica, sans-serif”.

Block vs Inline Sizing

Internally MathJax renders block equations ($$⏎...⏎$$) using LaTeX display style (\displaystyle) and inline equations (ex: $...$) using LaTeX text style (\textstyle). This mirrors TeX conventions: display equations are set as standalone blocks with larger operators, stacked limits, and more vertical spacing. The end result is that identical equations with the same font specifications will apper bigger as block equations than inline.

MathJax HTML Template

You can customize the HTML template Curio uses for rendering MathJax equations.

Important

Before overriding a bundled template please keep the following in mind:

  • Future Curio releases with fixes or changes to its code or bundled template may not be compatible with your overridden template. If you encounter problems, rename your template to hide it, then compare you template with the latest bundled template to see what has changed.
  • If you override the file you must be sure to keep all script and templated {{..}} variables in place so rendering continues to work properly.
  • A custom template with JavaScript bugs can cause Curio to hang so please be careful.
  1. Go to your Curio’s bundled repository. That specific location depends on what Curio you have installed:
    • If you installed Curio from the Zengobi website go here:
      ~/Library/Caches/com.zengobi.curio/XX/Repository/
    • If you installed Curio from the Mac App Store go here:
      ~/Library/Containers/com.zengobi.curio/Data/Library/Caches/com.zengobi.curio/XX/Repository/
    • Where XX should be replaced with your Curio version number, like 33.
  2. Copy the MathjaxTemplate.html file you find there and put the copy into your personal repository with the same name:
    • If you installed Curio from the Zengobi website it will go here:
      ~/Library/Application Support/Curio/Version XX/Repository/
    • If you installed Curio from the Mac App Store it will go here:
      ~/Library/Containers/com.zengobi.curio/Data/Library/Application Support/Curio/Version XX/Repository/
  3. Then customize the template as you wish.

Advanced users of MathJax and LaTeX might want to customize the template file to add additional packages to the tex.packages and loader.load lines. Here are the packages availble for v3 and for v4.

MathJax JavaScript

Curio loads the MathJax JavaScript package from a CDN (Content Delivery Network) so we don’t have to bundle those scripts with Curio itself. It is important to note Curio is only loading the MathJax JavaScript from the internet, your equation is not transmitted, and the rendering happens locally.

The default URL used to load the MathJax JavaScript is:

https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg-full.js

You can override this via the Mathjax URL setting.

For example, while unsupported currently, if you’re an advanced MathJax guru and would like to use MathJax v4 you can change the URL to:

https://cdn.jsdelivr.net/npm/mathjax@4/tex-svg.js

Note that Curio requires the SVG version of whichever MathJax library you choose.

MathJax CSS

Curio doesn’t include a default CSS style sheet for MathJax. You can place a MathJaxTemplate.css file in your personal repository, as detailed above, and the contents will be directly inserted into the style section of either the default template or your custom template.

MathJax Local Resources

On launch, Curio will look for an HTML Local folder in your personal repository. That specific location depends on what Curio you have installed:

  • If you installed Curio from the Zengobi website:
    ~/Library/Application Support/Curio/Version XX/Repository/HTML Local
  • If you installed Curio from the Mac App Store:
    ~/Library/Containers/com.zengobi.curio/Data/Library/Application Support/Curio/Version XX/Repository/HTML Local
  • Where XX should be replaced with your Curio version number, like 33.

If that folder is found then Curio will copy all files from that folder, including any subfolders, into the temporary location used for rendering. This only happens at launch. If you change, remove, or rename your HTML Local folder then Curio will notice that on next launch.

This means you can customize your MathJax HTML template to include other local scripts or images or anything else using relative links if the files are in this HTML Local folder.

MathJax Offline Rendering

Normally Curio requires internet access to load the latest MathJax JavaScript used to render your diagrams.

However, thanks to the HTML Local folder, you can download the required files to support completely offline rendering.

Here is the HTML Local directory hierarchy you want to create under your personal repository:

HTML Local/
├─ tex-svg-full.js
├─ input/
│  ├─ asciimath.js
│  ├─ mml.js
│  └─ tex/
│     └─ extensions/
│        └─ physics.js

For MathJax v3:

  • Download tex-svg-full.js and place it in HTML Local.
  • Download asciimath.js and place it in HTML Local/input.
  • Download mml.js and place it in HTML Local/input.
  • Download physics.js and place it in HTML Local/input/tex/extensions.
  • In case you need any other files you can find them here.

For MathJax v4:

  • Please remember that v4 is unsupported currently but if you’re an advanced MathJax guru who can diagnose their own install issues then go for it.
  • First set the Mathjax URL to https://cdn.jsdelivr.net/npm/mathjax@4/tex-svg.js and make sure v4 works from a CDN for you. If it does let’s set up the HTML Local. Curio will notice if the file specified in Mathjax URL is local and use it automatically.
  • Everything is the same as above except instead of tex-svg-full.js it’s now tex-svg.js.
  • Download tex-svg.js and place it in HTML Local.
  • Download asciimath.js and place it in HTML Local/input.
  • Download mml.js and place it in HTML Local/input.
  • Download physics.js and place it in HTML Local/input/tex/extensions.
  • In case you need any other files you can find them here.

If you end up customizing your template, as detailed below, then you can place any references files into their appropriate folder as all resources will be loaded relative to the “root” HTML Local folder.

Mermaid Rendering Details

Curio renders your Mermaid diagrams using the Mermaid JavaScript library.

Mermaid supports an incredibly diverse array of diagram types: flowcharts, sequence diagrams, Gantt charts, UML diagrams, and much more. Their website has all the details on how to construct diagrams. For example, here is their documentation for constructing flowcharts.

Mermaid Styles

You can change the look of your Mermaid diagrams on-the-fly using the “frontmatter” area at the top of the diagram source text.

For example, here we’re specifying that this diagram should use the forest theme.

---
config:
  theme: forest
---
sequenceDiagram
Kat->>Cooper: Hello Cooper, how are you?
Cooper-->>Kat: Great!
Kat-)Cooper: See you later!

While this one has a hand-drawn look with a custom primaryColor which will impact other colors automatically:

---
config:
  look: handDrawn
  theme: base
  themeVariables:
    primaryColor: '#e0a09A'
---
flowchart LR
  A[Start] --> B{Decision}
  B -->|Yes| C[Continue]
  B -->|No| D[Stop]

Learn more about Mermaid themes on their website.

Mermaid HTML Template

You can customize the HTML template Curio uses for rendering language code blocks.

Important

Before overriding a bundled template please keep the following in mind:

  • Future Curio releases with fixes or changes to its code or bundled template may not be compatible with your overridden template. If you encounter problems, rename your template to hide it, then compare you template with the latest bundled template to see what has changed.
  • If you override the file you must be sure to keep all script and templated {{..}} variables in place so rendering continues to work properly.
  • A custom template with JavaScript bugs can cause Curio to hang so please be careful.
  1. Go to your Curio’s bundled repository. That specific location depends on what Curio you have installed:
    • If you installed Curio from the Zengobi website go here:
      ~/Library/Caches/com.zengobi.curio/XX/Repository/
    • If you installed Curio from the Mac App Store go here:
      ~/Library/Containers/com.zengobi.curio/Data/Library/Caches/com.zengobi.curio/XX/Repository/
    • Where XX should be replaced with your Curio version number, like 33.
  2. Copy the MermaidTemplate.html file you find there and put the copy into your personal repository with the same name:
    • If you installed Curio from the Zengobi website it will go here:
      ~/Library/Application Support/Curio/Version XX/Repository/
    • If you installed Curio from the Mac App Store it will go here:
      ~/Library/Containers/com.zengobi.curio/Data/Library/Application Support/Curio/Version XX/Repository/
  3. Then customize the template as you wish.

Mermaid JavaScript

Curio loads the Mermaid JavaScript package from a CDN (Content Delivery Network) so we don’t have to bundle those scripts with Curio itself. It is important to note Curio is only loading the Mermaid JavaScript from the internet, your content is not transmitted, and the rendering happens locally.

The default URL used to load the Mermaid JavaScript is:

https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js

You can override this via the Mermaid URL setting.

Mermaid CSS

Curio doesn’t include a default CSS style sheet for Mermaid. You can place a MermaidTemplate.css file in your personal repository, as detailed above, and the contents will be directly inserted into the style section of either the default template or your custom template.

Mermaid Local Resources

On launch, Curio will look for an HTML Local folder in your personal repository. That specific location depends on what Curio you have installed:

  • If you installed Curio from the Zengobi website:
    ~/Library/Application Support/Curio/Version XX/Repository/HTML Local
  • If you installed Curio from the Mac App Store:
    ~/Library/Containers/com.zengobi.curio/Data/Library/Application Support/Curio/Version XX/Repository/HTML Local
  • Where XX should be replaced with your Curio version number, like 33.

If that folder is found then Curio will copy all files from that folder, including any subfolders, into the temporary location used for Mermaid diagram rendering. This only happens at launch. If you change, remove, or rename your HTML Local folder then Curio will notice that on next launch.

This means you can customize your Mermaid HTML template to include other local scripts or images or anything else using relative links if the files are in this HTML Local folder.

Mermaid Offline Rendering

Normally Curio requires internet access to load the latest Mermaid JavaScript used to render your diagrams.

However, thanks to the HTML Local folder, you can download the required files to support completely offline rendering.

Here is the HTML Local directory hierarchy you want to create under your personal repository:

HTML Local/
├─ mermaid.min.js

Then follow these steps:

Once you do that, simply relaunch Curio and your local resources will be used for Mermaid rendering.

Mermaid Advanced Settings

  • The default max width for rendering a new diagram is 800.
  • The default URL for the CDN-hosted Mermaid JavaScript is https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js.
  • The default Mermaid theme is default.
  • Curio uses a diagram cache for each launch session. This is enabled by default but can be disabled.

Language Code Block Rendering Details

Curio renders your language code blocks using the very popular Highlight JavaScript library.

Highlight HTML Template

You can customize the HTML template Curio uses for rendering language code blocks.

Important

Before overriding a bundled template please keep the following in mind:

  • Future Curio releases with fixes or changes to its code or bundled template may not be compatible with your overridden template. If you encounter problems, rename your template to hide it, then compare you template with the latest bundled template to see what has changed.
  • If you override the file you must be sure to keep all script and templated {{..}} variables in place so rendering continues to work properly.
  • A custom template with JavaScript bugs can cause Curio to hang so please be careful.
  1. Go to your Curio’s bundled repository. That specific location depends on what Curio you have installed:
    • If you installed Curio from the Zengobi website go here:
      ~/Library/Caches/com.zengobi.curio/XX/Repository/
    • If you installed Curio from the Mac App Store go here:
      ~/Library/Containers/com.zengobi.curio/Data/Library/Caches/com.zengobi.curio/XX/Repository/
    • Where XX should be replaced with your Curio version number, like 33.
  2. Copy the HighlightTemplate.html file you find there and put the copy into your personal repository with the same name:
    • If you installed Curio from the Zengobi website it will go here:
      ~/Library/Application Support/Curio/Version XX/Repository/
    • If you installed Curio from the Mac App Store it will go here:
      ~/Library/Containers/com.zengobi.curio/Data/Library/Application Support/Curio/Version XX/Repository/
  3. Then customize the template as you wish.

Highlight JavaScript

Curio loads the Highlight JavaScript package from a CDN (Content Delivery Network) so we don’t have to bundle those scripts with Curio itself. It is important to note Curio is only loading the Highlight JavaScript from the internet, your content is not transmitted, and the rendering happens locally.

The default URL used to load the Highlight JavaScript is:

https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/highlight.min.js

You can override this via the Highlight URL setting.

Highlight CSS

Curio doesn’t include a default CSS style sheet for Highlight. You can place a HighlightTemplate.css file in your personal repository, as detailed above, and the contents will be directly inserted into the style section of either the default template or your custom template.

Highlight Local Resources

On launch, Curio will look for an HTML Local folder in your personal repository. That specific location depends on what Curio you have installed:

  • If you installed Curio from the Zengobi website:
    ~/Library/Application Support/Curio/Version XX/Repository/HTML Local
  • If you installed Curio from the Mac App Store:
    ~/Library/Containers/com.zengobi.curio/Data/Library/Application Support/Curio/Version XX/Repository/HTML Local
  • Where XX should be replaced with your Curio version number, like 33.

If that folder is found then Curio will copy all files from that folder, including any subfolders, into the temporary location used for Highlight rendering. This only happens at launch. If you change, remove, or rename your HTML Local folder then Curio will notice that on next launch.

This means you can customize your Highlight HTML template to include other local scripts or images or anything else using relative links if the files are in this HTML Local folder.

Highlight Offline Rendering

Normally Curio requires internet access to load the latest Highlight JavaScript used to render your diagrams.

However, thanks to the HTML Local folder, you can download the required files to support completely offline rendering.

Here is the HTML Local directory hierarchy you want to create under your personal repository:

HTML Local/
├─ highlight.min.js
├─ styles/
│  ├─ github.css

Then follow these steps:

  • Download highlight.min.js and place it in HTML Local.
  • Download github.css and place it in HTML Local/styles.
  • Download any other theme styles you wish to use and place them into that same HTML Local/styles folder. Here’s where you can find all the names of the themes which you can then download.

Once you do that, simply relaunch Curio and your local resources will be used for Highlight rendering.