Curio 12.0 Release Notes

Release Date

April 24, 2018

Requirements

Curio 12 runs on macOS Sierra (10.12), High Sierra (10.13), or Mojave (10.14).

Feature Availability

Features only available in certain editions will be listed with colored tags like or .

Executive Summary

Curio 12 is packed with incredible new productivity enhancements:

  • Modernized toolbar and key interface improvements.
  • Extensive new markdown functionality with support for markdown syntax during editing, master markdown styles, and automatic generation of markdown during export, including full project exports as markdown, as well as markdown import.
  • New export PDF functionality including automatic generation of PDF table of contents outlines, plus clickable PDF links for weblinks, figure actions, idea space links, jump actions, and much more.
  • Search now supports boolean and regular expressions, plus numerous other search-related improvements.
  • New OmniOutliner Pro, Taskpaper, and OneNote integrations.
  • Extensive figure meta import and export support.
  • Improved support for exporting figures, idea spaces, and projects as plain text or rich text with images.
  • Numerous list, mind map, stack, and table enhancements.
  • New toggle tag meta feature.
  • The Status shelf gains markdown live exports, tag emojis, and other enhancements.
  • The Projects popup and galleries are improved, plus Organizer filtering improvements.
  • Dozens of miscellaneous optimizations, tweaks, and fixes.
  • Massive code updates with improved memory management, performance, and stability improvements.

As mentioned above, please note that some features are only available in certain editions of Curio as indicated by colored tags like .

What's New?

Features

Interface Refresh

Modernized Toolbar

Curio now has a modernized toolbar! Here's what it looks like with Curio Professional:

You'll note several key improvements:

  • Capsule-style buttons.
  • Color!
  • Shelf buttons are now merged into a single control, ร  la iWorks.
  • Now using vector PDF images for buttons so gorgeously scalable.
  • users now activate scribble mode with the single tool then use the various brushes and eraser in the inspector bar.

No Title Bar ๐Ÿ˜ฎ

Optionally you can enable a new Window Title Hidden advanced setting to go for the super-skinny look:

Note that with no window title there are some drawbacks:

  • You don't see your project title (obviously, since there's no title bar), although presumably you know what project you're looking at. Of course, if you have several projects open within tabs then the tab title will show the project's title.
  • You can't show toolbar button titles as non-title bar windows don't support toolbar button titles.
  • It's a bit wider since all the toolbar buttons are now alongside the window close/minimize/full screen jewels.

Shelf Tweaks

The active shelf module no longer has a title bar so each shelf can be a bit bigger and the buttons for certain modules, like the inspector and library, now line up with the inspector bar.

Plus the Organizer header bar and inspector bar now match the same coloring as the shelf tab buttons so it has a cleaner look.

Miscellaneous Tweaks

  • All user interface elements, such as the inspector panels, are now using the system font, which is San Francisco as of macOS Sierra. Previously we forced Helvetica because pre-Yosemite Lucida Grande was tired and Yosemite's Helvetica Neue was too thin.

Markdown

Curio Professional and Standard now have a ton of markdown features!

Markdown Support

Curio Text Figures

Curio text figures now support the following markdown rich text syntax when rendering, importing, or exporting.

AttributeExampleRendering
Italic*italic* or _italic_italic or italic
Bold**bold**bold
Bold and italic***bold and italic*** or ___bold and italic___bold and italic or bold and italic
Underline__underline__underline
Strikethrough~~strikethrough~~strikethrough
Monospace 12.1`monospace`monospace
Inline Links[Zengobi](https://www.zengobi.com)Zengobi
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

Inline Lists 12.2### Inline lists! You can mix attributes and **markdown**. #### A Simple List - Flight tickets - Book flight! - 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.

Inline lists!

You can mix attributes and markdown.

A Simple List

  • Flight tickets
    • Book flight!
  • 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.
Using Markdown in a Text Figure

To enable markdown rendering in a Curio text figure, select the figure, and use the new markdown control button in the text inspector bar or inspector to enable markdown rendering.

  1. Markdown Rendering Off
    Treat this as a normal rich text figure, so any markdown syntax is ignored and no markdown rendering is performed. (This is the default.)
  2. Markdown Rendering On
    This figure may contain markdown (**bold**) and/or normal rich text (bold) so render any markdown on the fly when the figure isn't being edited. (Make default.)
Example

While editing the text figure you will see the raw markdown syntax:

Use markdown while editing a text figure

...but when you finish editing Curio will render it on the fly:

When done editing, the markdown is rendered

Escaping

Markdown's escaping syntax is supported via the backslash character. So, for example, \*this will not be in italics\*.

Permanent Rich Text Markdown Conversion

Optionally, instead of on-the-fly markdown rendering, you can tell Curio to permanently convert markdown into rich text by setting the Text Convert Markdown advanced setting to yes. Similar to the above, you can enter markdown while editing a figure but when you finish editing Curio converts it into rich text permanently. If you edit the text figure again you won't see markdown, only the rich text.

Limitations
Markdown Tables

Curio's text figures cannot render inline markdown tables. However, as detailed below, Curio can import a markdown table directly into a native Curio table collection figure, and when exporting, markdown for Curio's native tables will be generated automatically.

Markdown Images

Curio's text figures cannot render inline markdown images. However, as detailed below, when exporting, markdown for image figures will be generated automatically.

Advanced Markdown Editing

Please note that Curio's text figures are not meant to be a replacement for a full-featured markdown editor like Marked or MultiMarkdown Composer. Those apps can convert much more complex markdown into HTML, apply customizable CSS style sheets, and render the results in a web view, as opposed to a text view. You can also use those apps to render and view markdown exported by Curio.

Master Markdown Styles

In Curio 11, Curio Pro added support for master styles, master stencils, and master idea space templates. When a master item is changed, those changes are broadcast throughout the project to dynamically update all items based on those masters.

Now, Curio 12 Pro extends that master functionality with master markdown styles. Using a specified style file, Curio can apply styling attributes to certain markdown elements, specifically the six markdown headers (#, ..., ######).

Here's an example style file which defines the style to use for the # and ## markdown headings:

# = font-family:Helvetica Neue UltraLight;font-size:32;font-color:#376098; ## = font-family:Helvetica;font-size:28;font-color:#ff00ff;font-bold:1;

It's a pretty simple text file format:

  • Each header element (#, ..., ######) is defined on its own line.
  • The font attributes are a semicolon-delimited collection of key/value pairings each separated by a colon.
  • Spaces before and after the =, :, and ; are ignored.
Supported Style Elements
Attribute ExampleDescription
font-family:HelveticaThe specific font face like "Helvetica Neue UltraLight" or general font family like "Helvetica".
font-color:#ffff00The color for the font, in hex syntax.
font-bold:1Enable bold. Useful if a general font family is specified instead of specific font face.
font-italic:1Enable italics. Useful if a general font family is specified instead of specific font face.
font-underline:1Enable underline.
font-strikethrough:1Enable strikethrough.
line-height-multiple:1.2The natural line height will be multiplied by this value (default is 1).
line-spacing:5The additional distance in points between lines (default is 0).
paragraph-spacing-before:5The distance in points before this header (default is 5).
paragraph-spacing-after:2The distance in points after this header (default is 2).
Using Master Markdown Style Files
Edit Master Markdown Style File

Use the Format > Edit Master Markdown Style File menu item to edit your project's master style file in the default editor for .txt files, such as TextEdit.

When you save your changes and switch back to Curio, Curio will automatically notice the updates and re-render your visible idea spaces and queue up preview regeneration for all project idea spaces just in case they contain markdown as well.

If you remove the contents of the style file then the file itself will be automatically removed from the project package when you switch back to Curio.

Import Master Markdown Style File

Alternatively, if you have an existing markdown style file you wish to use, choose the Format > Import Master Markdown Style File menu item and the file will be copied into your project and then stylings applied throughout.

Global Master Markdown Style File

If you place a Markdown Styles.txt in your ~/Library/Application Support/Curio/Version 12/Repository folder then it will be used to define default master markdown styles for all Curio projects. Styles defined in that file will be read first, then you can override or add more styles with your project specific master markdown styles.

Exporting Markdown

You can now export your project, idea space, or selected figures as markdown!

Markdown syntax that you entered within Curio's text figures are simply exported as-is. However Curio will also automatically generate markdown syntax based on any rich text it finds thus automatically converting bold to **bold** for example.

The result is pretty awesome: a single markdown file (and optional accompanying assets folder) where your Curio text figures turn in markdown rich text blocks; your Curio lists, mind maps, and stacks turn into markdown list blocks; Curio tables into markdown tables; Curio image figures into inline markdown images; asset figures into markdown file links; link figures into markdown links; etc.

You can then view the exported markdown file with your favorite markdown app like Marked or MultiMarkdown Composer.

In addition, you can select one or more figures and choose Edit > Copy As > Markdown as well to place the markdown on the clipboard for instant pasting into another app.

A key point to emphasize is that you don't have to know markdown to export your project as markdown! Curio will completely handle exporting your rich text, lists, mind maps, images, links, etc, into markdown's syntax.

Markdown Rich Text

Curio's markdown converter will convert your rich text figures directly into markdown! Curio uses each figure's markdown control button in the text inspector to determine how to perform this conversion:

  1. Markdown Rendering Off
    If the markdown inspector button is off then this is a figure which doesn't contain any entered markdown. So Curio will automatically convert any rich text attributes to the supported markdown rich text syntax as described above. For example, if Curio finds bold text it is turned into **bold**. As a note, to determine if a line of rich text should be a markdown header (ex: "# header 1") Curio looks for text where the entire line is bold and of a certain font size. Headers 1 through 6 (i.e. #, ##, ###, ####, #####, ######) will be created with bold text of size 32, 24, 18, 16, 13, 11, respectively.
  2. Markdown Rendering On
    If you set the markdown inspector button is on then Curio will take the text figure's text and leave any existing markdown that you entered as-is, but it will also conveniently convert any attributed text it finds to markdown's rich text syntax. So, if a text figure contains the following text: "This is a mix of *italicized* markdown syntax and bold attributed text." then will take that italicized markdown as-is but convert the bold text to **bold**.
Markdown Lists

Curio exports hierarchical data such as lists, mind maps, and stacks as markdown lists, with the following considerations:

  • While basic markdown doesn't support nested lists, many extensions such as MultiMarkdown and CommonMark use tab indentions to indicate nesting, so Curio supports this as well.
  • Markdown only supports simple bullets (via the * markup) and numbering (via the 1. 2. 3. markup) so Curio's extensive per-level prefixing is automatically narrowed to those two available options during export.
  • The individual text figures that make up the Curio collection figure are converted into markdown's rich text syntax as described above.
  • If a list item has line breaks within then those are merged into a single text line for the export.
  • Curio will output the * as the list marker for bullets. You can optionally change this to the - marker if you wish.
  • List titles have to be output with a blank line between the title and the actual markdown list, as per markdown rules. Personally I wish it didn't need this but, if it's not there, then lists won't render correctly.

An example list exported as markdown:

**Tasks** * Plan vacation * Contact hotel * Find restaurants * Pack bags * Do kids need new bags? * Have fun!

And here's how it appears in a markdown renderer (Marked):

Markdown Tables

Curio exports its tables as markdown tables, with the following considerations:

  • While basic markdown doesn't support tables, many extensions such as MultiMarkdown support a common syntax for markdown tables which Curio uses.
  • Markdown only supports a header row, so Curio's footer row and header & footer columns are simply rendered in markdown as normal cells.
  • Markdown column alignment syntax is not output since Curio's can be individually specified per cell.
  • Each row has a leading and trailing pipe ("|"), which some markdown viewers require, but can be disabled.

An example exported markdown table:

| Region | 2017 | 2018 | 2019 | | --- | --- | --- | --- | | US | $14,832 | $18,799 | $20,703 | | Europe | $11,633 | $13,452 | $16,879 |

And here's how it appears in a markdown renderer (Marked):

Markdown Image and File Links

In the markdown export dialog you can choose whether to export images and other figure assets. These are exported to a folder created alongside the resulting markdown file. Each exported figure asset will be contained within uniquely named subfolder to avoid file name collisions.

By default this assets folder will be named based on the markdown file name. For example, if you specified "Project" for the exported markdown file, then the assets folder will be named "Project Assets". You can customize this format string, where a %@ token in the format string, if found, is replaced with the markdown file's name.

Note the resulting markdown links, like [An image](Project%20Assets/7832-3982/Notes.pages), will reference this folder location so you can't rename it in the Finder later! Instead you will need to delete the previous export and re-export.

Inline Image Links

For simple image types (png, jpg, etc... but not pdf), Curio will use the ![title](path) markdown syntax to show the image inline on the markdown page. Or, if you don't want to see the inline image, you can export as a normal markdown link instead. Curio will scale the exported image so it's the same size as rendered on the idea space, but you can export the full size image if you wish.

File and URL Links

For all other asset types, Curio will use the [title](path) markdown link syntax thus creating a clickable link to the asset.

Of course weblink figures use the [title](path) markdown link syntax as well thus creating a clickable link to the site.

Compatibility

The ability to render and handle these links depends on your markdown viewer, although Marked and MultiMarkdown Composer seem to handle them beautifully.

Limitations

Note that this feature works for images and files that exist as asset figures. Curio will not parse, extract, and export images that exist within the rich text content of a Curio text figure.

Markdown Footnotes

If you have enabled copying or exporting figure notes (via the Edit > Copy As menu or the export dialog, respectively) then Curio will export those notes as markdown inline footnotes that MultiMarkdown supports.

This is a figure.[^And this is its note as an *inline* footnote.]

And here's how it appears in a markdown renderer (Marked):

You can customize the markdown prefix and suffix, and tell Curio to not strip note line breaks if you wish.

Figure Meta

Curio can include figure meta information with exported data, like this:

Deliver presents. @progress(75) @priority(1) @due(2018-12-25 02:00) @resources(Santa)

Tons of details regarding exporting meta is in the Exporting Meta section below.

Holy Cow! ๐Ÿ™Œ

Yes, this means you can export your project as markdown which contains the content of all of your idea spaces, including figure text, notes, meta, images, and files. This is arguably Curio's most complete, platform independent export format, ever.

Importing Markdown

Pasting Markdown

If you have markdown on the clipboard then use the new Edit > Paste Markdown As submenu (or right-click option) to paste as text, list, mind map, or table.

... As Text

Curio will construct a new text figure containing the markdown text and the text inspector's markdown button enabled (you can make it off if you wish).

... As a Collection

If you have a markdown list on the clipboard, you can use Paste Markdown As > List (or Mind Map) to construct a list (or mind map). Likewise with a markdown table on the clipboard, you can use Paste Markdown > Table to construct a table.

Importing Markdown Files

When inserting or dragging in a .markdown file keep in mind the following:

  1. The markdown file contains a single markdown list, either with or without a list title. This can be converted into a Curio list figure, mind map figure, or the file itself is simply inserted into the idea space.
  2. The markdown file contains a single markdown table. This can be converted into a Curio table or the file itself is simply inserted into the idea space.
  3. Otherwise Curio will ask if it should be converted into a markdown text figure, or inserted as a file into the idea space.
Collection Rich Text Handling

When importing markdown as a list, mind map, or table, Curio will convert markdown rich text syntax into actual rich text attributes. That is, if it finds **text** then it is turned into text.

Alternatively, you can tell Curio to import the markdown text as-is with its figure's button set to enabled or disable depending on the markdown default, or as-is with the figure's markdown button enabled.

Importing as List

As a note, when importing a markdown list Curio supports wrapped lines appropriately. For example, the following markdown file...

**An Example** * Parsing text * A normal item. * This item has something in *italics* * This **bold** line has some text which is wrapped down here on this second line. This is the second paragraph for this same list item, thus the indention is required, with more wrapped text here. * Another main item. * With a subitem.

... turns into this Curio list:

As an option, if you'd rather have Curio directly join "...here on this second line." with "This is the second paragraph..." without adding the line break then you can use this advanced setting.

Importing as Table

Curio can handle importing simple markdown tables. For example, the following markdown file...

Region | 2017 | 2018 | 2019 --- | --- | --- | --- US | $14,832 | $18,799 | $20,703 Europe | $11,633 | $13,452 | $16,879

... turns into this Curio table:

Note that Curio ignores any column alignment rules in the markdown, and that leading and trailing pipes ("|") are optional.

Figure Meta

When importing lists Curio can also parse out figure meta information, so this:

Dev Tasks Code product. @progress(75) @priority(1) @due(2018-02-28) @resources(George)

... will turn into this:

Tons of details regarding importing meta is in the Text Importing section below.

PDF Outline

For Curio Professional and Standard, the PDF's generated using Export as PDF and PDF Mirror now have an embedded PDF document outline for easy navigation using PDF viewers that support that standard PDF feature (see "12.3.3 Document Outline" in the PDF 1.7 specification).

In Apple's Preview app, for example, choose View > Table of Contents to see the PDF's hierarchical document outline.

In the screenshot on the right, you see a Curio window in the background showing a project's Organizer, while the foreground window shows Preview's table of contents for that project's exported PDF.

Compatilbility

The PDF outline is part of the PDF standard so most standards-following PDF readers should support it. We have tested it with the macOS Preview and Adobe Reader apps as well as the following iOS apps: Dropbox, Readdle's PDF Export and PDF Viewer, Good.iWare's GoodReader, Branchfire's iAnnotate PDF, and LiquidText.

Limitations

  • If printing to PDF and you click the button to Open PDF in Preview then Curio isn't given that temporary filename so is unable to modify the generated PDF to include the outline. So either use print to a PDF file and then open it, or use export as PDF.

When you export idea spaces via Export as PDF or PDF Mirror ( ), the resulting PDF will now have clickable links for:

  • Weblink figures, like an URL dropped from a browser into an idea space.
  • Figures with URL actions.
  • Weblinks and figure URL actions that are inner project hyperlinks (ex: curio://?ideaspace=062...).
  • Idea space links to other inner project idea spaces.
  • Jump anchors to inner project locations.
  • Figures with jump actions to inner project locations.
  • Figures with first, last, previous, or next idea space jump directions.
  • For PDF Mirror, you have the option of exporting assets as well, such as images and documents, so those figures would have links to their corresponding exported asset files. See the note below for compatibility details.

Compatilbility

PDF links are part of the PDF standard so most standards-compliant PDF readers should support it. We have tested it with the macOS Preview and Adobe Reader apps as well as the following iOS apps: Apple's Files, Dropbox, Readdle's PDF Export and PDF Viewer, Good.iWare's GoodReader, Branchfire's iAnnotate PDF, and LiquidText.

PDF Mirror Asset Links

While PDF Mirror includes support for exporting assets, please note that clickable asset links to files is very dependent on which PDF reader app you use. For example, Preview doesn't support PDF file links at all, perhaps for security reasons. Others, like Adobe Acrobat on macOS and PDF Expert on iOS work very well, but require certain export options in the PDF Mirror actions menu. See the PDF Mirroring idea spaces in Help > Documentation for many more details.

Limitations

  • Curio doesn't generate PDF links for a selection of text within a text figure that has a link attribute. This is a tricky one to solve as (a) Curio would have to scan all text figures when exporting to find any NSLinkAttribute attributes which could be very slow, (b) the resulting selection may consist of wrapped lines of text complicating the generation of potential PDF annotation link(s).
  • If printing to PDF and you click the button to Open PDF in Preview then Curio isn't given that temporary filename so is unable to modify the generated PDF to include the PDF links. So either use print to a PDF file and then open it, or use export as PDF.

Tech Note: PDFKit's Growing Pains

First introduced back in Mac OS X 10.4, Apple's PDFKit framework permits developers to dive into PDF internals and provides much of Curio's underlying PDF capabilities. Unfortunately it's had a tumultuous past few years.

Apple decided to perform a major rewrite of PDFKit in macOS 10.12 in order to consolidate the macOS and iOS code bases into a single, cross-platform framework. Great, except the result was a mess of broken functionality in PDFKit and in apps that use PDFKit such as Apple's own Preview app. Although some of these issues were fixed in subsequent 10.12.x releases, many others remained.

The good news is that Apple tackled more issues in macOS 10.13, plus added new functionality in PDFKit's API, even replacing techniques that were just introduced in 10.12. While there's very little documentation, it does appear to follow the official PDF spec a little more closely.

So, within Curio 12, we now conditionally call macOS 10.12 or macOS 10.13+ methods, depending on the OS you are running. This allows us to provide the best PDF support possible.

"Tooltip" Rendering Issue

The macOS Preview app and/or PDFKit in 10.12 and 10.13 appears to have a bug with the "text" annotation type which Curio uses to show a figure's notes in the PDF via a popup tooltip. Prior to 10.12 you would see Curio's nicely rendered note adornment next to a figure and then click it and see popup tooltip appear in your PDF viewer.

This still works, but Preview/PDFKit is now overlapping our note adornment with a flat, yellowish square of fixed size. There appears to be no way to control its size, coloring, or visibility, at least so far. If you hate this look you can tell Curio to not show notes at all with the PDF Note Tooltips advanced setting set to no.

My hope is that the generated PDF is actually okay, but it's the rendering of the note in the PDF — either in the macOS Preview app or in PDFKit which it uses — which has the bug. Other PDF apps may, and hopefully should, render note annotation popups correctly.

Boolean Expressions

The Search shelf text field now supports simple boolean expressions.

Boolean Expressions
Search CriteriaExplanation
zengobi or curioMatches figures with either 'zengobi' or 'curio' as whole words.
zengobi and curioMatches figures with both 'zengobi' and 'curio' as whole words.
#zengobi or #curioMatches figures tagged with either 'zengobi' or 'curio'.
#zengobi and #curioMatches figures tagged with both 'zengobi' and 'curio'.
#zengobi and @georgeMatches figures tagged with 'zengobi' and the resource 'george'.
#zengobi #curioMatches figures tagged with both 'zengobi' and 'curio'.
#zengobi or curioMatches figures with either the tag 'zengobi' or 'curio' as a whole word.
#zengobi and curioMatches figures with both the tag 'zengobi' and 'curio' as a whole word.
#zengobi or @george or curioMatches figures with either the tag 'zengobi', or the resource 'george', or 'curio' as a whole word.

Currently you can't mix or and and expressions.

Regular Expression Support

For Curio Professional users, the Search shelf text field now supports regular expressions.

Internally Curio uses the Mac's built-in NSRegularExpressions class for searching so it uses that syntax. For more information see this tutorial and Apple's guide.

Regular Expressions
Search CriteriaExplanation
curioA normal search; matches figures with 'curio' anywhere even if within another word, like 'zengobicurio' or 'curiosity'.
^curioMatches figures only if 'curio' is the first word.
\bcurioMatches figures only if 'curio' begins a word thus matches 'curiosity' but not 'zengobicurio'.
curio\bMatches figures only if 'curio' ends a word thus matches 'zengobicurio' but not 'curiosity'.
zengobi|curioMatches figures with either 'zengobi' or 'curio' anywhere, even if within another word.
\bzengobi\b|\bcurio\bMatches figures with either 'zengobi' or 'curio' as whole words.
zengobi.*curio|curio.*zengobiMatches figures with both 'zengobi' and 'curio' anywhere, even if within another word.
\bzengobi\b.*\bcurio\b|\bcurio\b.*\bzengobi\bMatches figures with both 'zengobi' and 'curio' as whole words.
Asset Support

Curio uses SearchKit to search embedded assets which, fortuitously, seems to support the same regular expression syntax. For example, searching for (withholding|zengobi) matches an embedded PDF with the word 'withholding' as well as an image figure with the word 'zengobi' in its title.

However, this won't work if you're using Curio's external asset library support where the asset library exists alongside the project file. In that case Curio uses Spotlight to search assets which unfortunately doesn't support the same regular expression syntax.

Resource Prefix

As you noticed in the examples above, you can now search in the text search field for resources with the @ prefix, like @george, similar to how you can search for tags with a # prefix, like #home.

The search will match partial matches, so if you have a resource in your project named George Browning and another named Greg Casey then you can match the former with @ge, @george, or @georgebrowning.

Search Shelf Now Queries All Organizer Item Titles

The Search shelf will now query all Organizer item titles (not just idea space titles) and show them in the search results if they match the text search parameter.

Keyboard Refinements

Pressing ⌘F remembers the current shelf, or opens the shelf if necessary, then reveals the Search shelf. If you then press Escape or click Cancel Search then the shelf is restored to its previous state: either to its previously displayed shelf, or the shelf is closed.

If you enter search criteria and begin the search then you will see the search results. If you then press ⌘F or click the Refine Search button then you can edit your existing search critiera. If you press Escape or click Cancel Search then the search criteria is cleared and you are brought back to the search criteria screen to enter new search parameters.

Tag Inheritance

Prior to Curio 12, figures on an idea space would automatically inherit tags associated with the idea space itself. This no longer occurs since this inheritance was not obvious, not that useful in practice, and a pain if you simply wanted to find idea spaces associated with a tag. You can re-enable, if you wish, by setting the Search Tags Inherit Idea Space Tags advanced setting to yes.

Status Shelf Enhancements

Markdown Export

The Status shelf now supports markdown exports and Live Exports via the Tasks actions menu. Sample output is to the right as rendered in Marked.

Export Tag Emojis

The RTF, CSV, and HTML exports now include a figure's associated tag emojis if they exist.

Hiding Empty Tag Set Groupings

Curio will now automatically hide tags from the Flags tag set that don't contain any entries, thus dramatically reducing clutter. For instance, if you don't have any figures with the Flag Yellow tag then that tag name won't appear in the Status tasks results list.

We don't think this issue comes up with any other tag sets but you can set the Status Tag Sets Hide Empty Groups advanced setting to a comma-separated list of tag set names that should hide empty groups. Or set the Status Tag Sets Hide All Empty Groups advanced setting to yes to hide empty groups for all tag sets.

Hiding When Exporting

On a related note, Curio will now hide empty tag set groupings for all tag sets when exporting, by default. This reduces clutter in the CSV, RTF, and HTML exports.

If you don't want this to happen set the Status Export Tag Sets Hide All Empty Groups advanced setting to no to show empty groups for all tag sets. You can then set the Status Export Tag Sets Hide Empty Groups advanced setting to a comma-separated list of tag set names to selectively hide a tag set's empty groups, like Flags.

Project Enhancements

Projects Popup Menu

The popup menu that appears when you click on the Projects toolbar button has been cleaned up, with a more readable font size, and includes project icons or previews.

Also the recent projects submenu always lists projects sorted by last-opened date, to match the File > Open Recent listing.

Projects Gallery

Cleaner colors and sharper project previews, plus the recently opened smart category is now always sorted by last-opened date.

Organizer Enhancements

Filter using Milestones

You can now choose, add, or remove project milestones from the Organizer's date filter popup, just like from the Search shelf's modified popup.

Organizer Fixes

  • To play it safe, if you drag .doc or .docx files to the Organizer as Organizer documents, they are only displayed as previews instead of editable just in case Apple's NSAttributedString class messes up the formatting.
  • After using the Organizer filter, any previously-expanded Organizer items are now restored correctly.
  • Organizer documents now show up correctly in the Library when looking at "all kinds" of assets in the project.
  • Fixed an issue when saving an idea space as a personal template, so that the current idea space itself will become an instance of the template. Now if that idea space is selected and you choose Add Idea Space With Current Style, Curio will know which template to use to create the new idea space.

OmniOutliner Pro Support

Curio Standard and Professional have some new abilities when bringing in lists from OmniOutliner Pro!

As before, you can drag an OmniOutliner-generated OPML export file into your Curio idea space and it can be converted into a list or mind map figure. But now Curio can check for specifically named columns in that OPML export, created using OmniOutliner Pro, and convert that info into meta data.

For example, this OmniOutliner Pro file exported as OPML:

Becomes this in Curio:

Supported OmniOutliner Pro Column Names
Column NameValuesDescription
ProgressA number from 0 to 100The figure's percent complete.
RatingA number from 1 to 5The figure's rating value (number of stars).
PriorityA number from 1 to 5The figure's priority value from 1 meaning urgent priority to 5 meaning very low priority.
StartA date with or without a time valueThe figure's start date.
DueA date with or without a time valueThe figure's due date.
DurationA duration string, like 2wThe figure's duration.
TagsA comma separated list of tagsThe figure's tags. Tag name only or with tag set prefix: Like, Context.Home, detailed tasks.in flight
ResourcesA comma separated list of resourcesThe figure's resources. First or full name: george, Steve Jobs

Some notes:

  • Curio also parses OmniOutliner's _status="checked" entry that indicates a checked figure.
  • Each column name can be customized by clicking on the appropriate link above.
  • 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 Preferences > 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.
  • Duration abbreviations for year, month, week, day, hour, minute can also be customized.

TaskPaper Support

Curio now supports TaskPaper!

Import a TaskPaper File

Drag-and-drop a TaskPaper file directly into Curio Standard or Professional 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.

Note that currently Curio only supports TaskPaper files containing a single project for importing. That project turns into a single Curio list or mind map, where the title is the project's title. A future release will allow you to import a TaskPaper file containing multiple projects.

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.

For example, here in TaskPaper, drag the dot on the left side of "Begin Project"...

... directly into your Curio idea space to create this:

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.

Exporting as TaskPaper

Via the Share menu or toolbar button, you can now export a selected list, stack, or mind map as a TaskPaper document.

Figure meta information is automatically exported as well.

Note that @done is output for any completed items, and @progress() for all other items. This includes 0% done, so you will see a @progress(0) for unchecked items, so you can perform @progress searches in TaskPaper, as described below. You can turn this off if you'd rather only see this tag when progress has been made.

TaskPaper Meta Search Tips

Curio will output meta information to TaskPaper using the markdown-style syntax described in Exporting Meta. Thus @progress(25) to indicate a task is 25% done and @resources(George, Greg) to indicate resources.

TaskPaper supports advanced searching queries that can dive into this meta information. Here are some examples:

TaskPaper Example Queries
ExampleDescription
@progress >[n] 20Find all tasks more than 20% completed (that aren't done, which would have a @done tag instead of @progress).
@tags contains[l] homeFind all tasks with a tag of Home.
@resources contains[l] georgeFind all tasks assigned to George.
@due < [d] 2018-06Find all tasks due before June 2018 (more date tips here and here).
@due <[d] next week and @progress =[n] 0Find all tasks due in the next week that haven't been started.
@due <[d] next week except @doneFind all tasks due in the next week that aren't done.

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.

OneNote List Support

Via Paste As > List and Paste As > Mind Map, Curio can now create lists and mind maps from lists copied in from Microsoft's popular OneNote product. 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 Prefixes
ExamplesParsing Rule Details
1., 1), (1), 1st, 1-An optional "(" then a 1 to 3 digit number then an optional "st", "nd", "rd", or "th", then an optional ")" or "." or "-" then whitespace
i., iv), (X), xxviii.An optional "(" then a 1 to 6 digit roman numeral then an optional ")" or "." then whitespace
a., b), (C), DD.An optional "(" then a 1 to 3 digit letter then an optional ")" or "." then whitespace
-, โ€ข, โ—‹, ยง, ยทA single punctuation then whitespace

You can disable prefix stripping by setting the Skip Prefixes advanced setting to no.

Importing Meta

Special meta text tags are now parsed and extracted when:

  1. Importing markdown lists and tables via .markdown files or the Edit > Paste As Markdown > menu (disable).
  2. Pasting any type of non-markdown text as lists, mind maps, or tables via the Edit > Paste As > menu (disable).

For example, if you Edit > Paste As > List some text that looks like this:

Dev Tasks Code product. @progress(75) @priority(1) @due(2018-02-28) @resources(George)

...Curio will turn it into this:

Using Meta Text Tags

While a meta tag can appear anywhere in the text, a space must prefix each @meta item! Thus...

This will not be parsed because it's smushed.@progress(75)@priority(1)

But this will work beautifully! @progress(75) @priority(1)

Imported Meta Text Tags
Meta ExampleValuesDescription
@progress(50)A number from 0 to 100The figure's percent complete.
@doneNoneFrom TaskPaper, indicates the task is 100% complete (enable).
@rating(2)A number from 1 to 5The figure's rating value (number of stars).
@priority(1)A number from 1 to 5The figure's priority value from 1 meaning urgent priority to 5 meaning very low priority.
@start(2018-04-15)A date with or without a time valueThe figure's start date (custom date and time format).
Note that @defer is also supported as an alternate for OmniFocus support.
The date determination is set to manually specified since you are specifying a specific date.
@due(2018-04-25 20:00)A date with or without a time valueThe figure's due date (same customizations).
The date determination is set to manually specified since you are specifying a specific date.
@duration(2w)A duration stringThe figure's duration. Normally the duration is simply extracted out of the text and not used to set the duration value, since Curio usually uses the start and due dates to automatically determine durations. However you can enable durations and the duration will be set for the figure. The abbreviations for year, month, week, day, hour, minute can all be customized.
@tags(Home, NextAction)A comma separated list of tagsThe figure's tags. You can specify a tag either with just its name (Home), and Curio will find it, or the tag set and the tag name (Context.Home). Curio ignores case when searching. Note that tags must already exist and will not be added dynamically. You can also enable tag parsing for @-signed tags like @Home @NextAction or #-signed tags like #Home #NextAction. However note that no spaces are allowed so you need to concatenate them together, like @DetailedTasks.InFlight.
@resources(George, Greg)A comma separated list of resourcesThe figure's resources. You can enter your resource names either with just first names or full names, with or without spaces or underscores, and Curio ignores case when searching, so all of these would work: george, george_browning, George Browning, GeorgeBrowning. Note that resources must already exist and will not be added dynamically. You can also enable tag parsing for @-signed tags like @George @Greg. However note that no spaces are allowed so concatenate or use an underscore.

Exporting Meta

You can now include figure meta when copying figures as text, via the Edit > Copy As > menu:

Or when exporting as text in the export dialog:

Rich and Plain Text Exports

Supported Export Meta
Meta OutputValuesDescription
50% completeA number from 0 to 100If checkmarks visible, the figure's percent complete.
โ˜…โ˜…โ˜…โ˜†โ˜†A number of starsThe figure's rating value (number of stars).
urgent priorityDescription of priorityThe figure's priority from urgent priority to very low priority.
start 2018-04-15A date with or without a time valueThe figure's start date (custom date and time format).
due 2018-04-25 20:00A date with or without a time valueThe figure's due date (same customizations).
2 weeksA duration stringThe figure's duration is normally not exported, but can be enabled.
Home, NextActionA comma separated list of tagsThe figure's tags. Choose to export just the tag or tag set and tag: Home or Context.Home.
George, GregA comma separated list of resourcesThe figure's resources. Choose how much of the resource name to export: George, or GeorgeBrowning, or George Browning, or George_Browning.

For example:

Simple figure (25% complete; โ˜…โ˜…โ˜…โ˜…โ˜†; urgent priority; Feb 14, 2018 - Mar 15, 2018 3:00 PM; duration 20 days; Love, Home; Kat, George) (Some notes for this figure.)

Exporting Notes

If you enabled copying or exporting figure notes via the Edit > Copy As menu or export dialog, respectively, then the note is tacked on to the end parenthetically. You can customize the plain text prefix, suffix, and strip line breaks, and rich text prefix, suffix, and strip line breaks settings.

Markdown Exports

Supported Export Meta
Meta OutputValuesDescription
@progress(50)A number from 0 to 100If checkmarks visible, the figure's percent complete (@done for 100% if enabled).
@rating(3)A number from 1 to 5The figure's rating value (number of stars).
@priority(1)A number from 1 to 5The figure's priority value from 1 meaning urgent priority to 5 meaning very low priority.
@start(2018-04-15)A date with or without a time valueThe figure's start date (custom date and time format).
@due(2018-04-25 20:00)A date with or without a time valueThe figure's due date (same customizations).
@duration(2w)A duration stringThe figure's duration is normally not exported, but can be enabled. The abbreviations for year, month, week, day, hour, minute can all be customized, note that month uses "x" by default like TaskPaper.
@tags(Home, NextAction)A comma separated list of tagsThe figure's tags. Choose to export just the tag or tag set and tag: Home or Context.Home. You can also choose the format: @tags(Home, NextAction), or @Home @NextAction, or #Home #NextAction.
@resources(George, Greg)A comma separated list of resourcesThe figure's resources. Choose how much of the resource name to export: George, or GeorgeBrowning, or George Browning, or George_Browning. You can also choose the format: @resources(George, Greg) or @George @Greg.

For example:

Simple figure[^Some notes for this figure.] @progress(25) @rating(4) @priority(1) @start(2018-02-14) @due(2018-03-15 15:00) @duration(20d) @tags(Love, Home) @resources(Kat, George)

Optionally, when exporting markdown, you can specify that the normal plain text output is used for meta if you'd rather see 25% complete instead of progress(25).

Exporting Notes

If you enabled copying or exporting figure notes via the Edit > Copy As menu or export dialog, respectively, then the note is appended directly after the text, before the meta, so they can be displayed as an inline footnote.

Exporting Rich Text with Images

When you copy figures as rich text, Curio can now include image figures in the results via a new setting in the Edit > Copy As menu:

Note that an image figure's captions are included as well, if enabled.

Likewise the Export As > Rich Text dialog gives you an option to include image figures, thus creating an .rtfd file instead of .rtf:

This is pretty cool since you can now export multiple idea spaces into a single .rtfd file containing not just your rich text figures but your image figures as well.

Exporting Text as a Single File

Previously if you exported multiple idea spaces as text Curio would create a .txt or .rtf file per idea space. So, if you have 100 idea spaces that's 100 separate text files. Yuck.

Curio will now generate a single export file and put all the contents into that single file. Therefore Curio's text exports are now more similar to its PDF export in that a single file is created. Although you can choose separate files if you really want it that way.

Idea Space Separators

When combining into a single export file text file, Curio will separate the contents of each idea space from each other.

Rich Text

For rich text exports, Curio inserts a page break character (technically a NSFormFeedCharacter or 0x000c) between idea spaces. Curio will also set a special document attribute for the resulting file (NSViewModeDocumentAttribute), which is the same as TextEdit's Format > Wrap to Page menu item.

The combination of those two tweaks means that TextEdit will render the pages distinctly instead of displaying them as a continuous feed. Use TextEdit's Format > Wrap to Window menu to switch to continuous feed if you'd like. You can also customize the page break and turn off the special document attribute altogether.

Plain Text

For plain text exports, Curio separates the exported idea spaces from each other with this text block:




--------------------------------------------------------------------------------



This can be customized (to enter a new line in the popup alert type a Control-Return).

Markdown

For markdown exports, Curio separates the exported idea spaces with that same text block which markdown viewers render as an HTML <hr/> horizontal line. And of course this can be customized, as well.

Figure Separators

When exporting multiple figures on an idea space as text Curio will separate the contents of each figure from each other using two line breaks. Why two? To make it an obvious break since a text figure could contain multiple paragraphs with line break separating them.

As an example, here is an export (with visible line break markers):

This is a text figure containing this first paragraph with multiple lines within it. โŽ And also this second paragraph. โŽ โŽ And here is another text figure! (Notice the 2 line breaks before this?)

If you want more prominent separators between figures, like โŽโŽ========โŽโŽโŽ, then use the plain text, rich text, and markdown advanced settings. Note, when clicking those links, if you want to enter a new line (โŽ) type a Control-Return.

List Enhancements

Sorting

Lists, mind maps, and stacks can now be sorted in ascending or descending order, as shown in the screenshot to the right.

List Fixes

  • Fixed situation in lists where if every item in a hierarchical level had a mix of text colors then Curio might assume the defacto level style should have black text.
  • Fixed the OPML exporter so text figures are exported with variables replaced.

Mind Map Enhancements

Radial Maps

The layout for radial mind maps is a bit tighter now, plus some spacing and drawing fine-tuning to clean it up.

Top-Down and Bottom-Up Maps

The layout for vertical mind maps has been majorly overhauled to look a million times nicer.

A top-down map rendered with the old Curio 11 (or earlier) ๐Ÿ˜ฌ

The new Curio 12 top-down map ๐Ÿ˜€

Sorting

As mentioned above, lists, mind maps, and stacks can now be sorted in ascending or descending order.

MindNode 5.0.6 Compatibility

Curio is now compatible with MindNode's new file format introduced in MindNode 5.0.6.

Mind Map Fixes

  • Fixed the OPML, iThoughts, MindNode, and MindManager exporters so text figures are exported with variables replaced.

Stack Enhancements

Auto Size

Stack collection figures can now automatically size themselves. Of course they normally grow automatically as you add items, but now they can shrink to their minimum size as items are removed. You can use the Stack Is Auto Size advanced setting to make auto-size enabled by default, if you wish.

Sorting

As mentioned above, lists, mind maps, and stacks can now be sorted in ascending or descending order.

Conversion

You can now use the Arrange > Convert Into menu to convert lists and mind maps into stacks, and vice versa. Note, however, that stacks only support a single level of hierarchy so only simple lists and mind maps can be turned into stacks.

Table Enhancements

Shift Key Super Powers

When you use the table inspector to change the number or rows or columns in a table, Curio normally maintains the table's current size. However, if you hold the Shift key while clicking the stepper to change the number of rows or columns, Curio will allow the table to grow or shrink as needed.

Similarly right-clicking on a table cell and adding a row or column normally maintains the table size, although holding Shift will grow or shrink the table size as needed.

Table Fixes

  • Fixed some subtle clipping and row line shifts that could occur in table with flags.

Tag Enhancements

Tag Sets With Only One Active Tag

You can now specify that a tag set can have only have one of its tags active at a time. This is particularly useful when a tag indicates the state of a tag set. Thus setting a new tag will automatically turn off the previous tag.

For example, with the Detailed Tasks tag set you are specifying a GTD-style state for that task like pending, active, or done. If the current state of a figure is active then setting a tag of done will automatically turn off active.

Tag Adornment Cycling

If your tag set has 3 or fewer tags with images then clicking the tag's image adornment will cycle through the tags in the set.

For example, here the Love tag set has two tags within it: Love? (a hollow heart) and Love (a filled heart). You can simply click the tag image to cycle beween its two states.

Tag Adornment Popup Menu

If your tag set has more than 3 tags, then clicking the tag's image adornment reveals a popup so you can quickly choose the new tag.

You can change the toggle-to-popup cutoff from 3 to another value if you wish via the Popup For Tags At advanced setting.

Bundled Tag Sets

Curio now includes several new "state" tag sets: Love, Like, and Correct. In addition, the Context, Detailed Tasks, and GTD bundled tag sets are now set to allowing only one active tag as well.

Tags in the Figure Context Menu

Right-clicking a figure will now let you toggle tag associations for the selected figures via the figure context menu.

Copy/Paste Enhancements

Pasting into an Idea Space

Pasting into an idea space — on the background, not within a collection — has been cleaned up as follows.

With Items Copied from Outside Curio

An item copied from outside of Curio, such as text or an image, will now paste into an idea space according to the following logic:

  1. If a figure is selected then the new figure will be cascaded below and to the right of that selected figure.
  2. Else, if the user clicked on this idea space and that location is within this idea space's visible area, then the new figure will be pasted with that location as the new figure's top-left corner.
  3. Else, the new figure will be pasted in the center of the visible idea space area.

With Figures Copied from Within Curio

Figures copied from inside of Curio will now paste according to the following logic:

  1. If the user hasn't clicked yet within this idea space and the copied figure's location is within this idea space's visible area, then the new figure will be pasted in that same location in this idea space. This feature makes it easy to copy items from one idea space to another while maintaining their exactly positioning within the idea space.
  2. Else, it follows the same rules as above for items copied from outside of Curio.

Smarter Hyperlinks

After selecting a figure and choosing Copy As > Hyperlink, and then you select a different figure and choose Paste As > URL Action for Selected Figure, Curio will now convert the hyperlink into a relative hyperlink, without the project's path information, so the inner project link will work even if you move or rename the project.

Rich Text Font Color

Normally the coloring of text is maintained when you copy or export rich text. That way if you copy red text, it will paste as red text in another application.

However if the text was white, perhaps because its figure had a dark fill color, then, that could cause problems pasting into another application, which presumably has a white background, like in TextEdit, Word, or Pages, since you won't see your pasted text.

So, by default, if the text color is white, Curio will change it to black.

You can turn off this feature via an advanced setting. Or tell Curio to always force black text if it's any color at all, not just white.

In a similar manner, Curio removes paragraph attributes, such as a list title being horizontally centered, since the result could be pasted text centered or on the far right of your Pages document. You can turn off this feature if you wish.

Web View Enhancements

Web View Searching

If you drag a website to the Organizer then you can browse that HTML content within Curio's environment. You can now press ⌘F to bring up a search bar to search within the HTML content.

This comes in handy when searching Curio's advanced settings (via Help > Curio Advanced Settings), for example.

Improved Restrictions

Folder Restrictions

You can now specify permissions restrictions for folders via the Info inspector.

Inherited Restrictions

Restrictions are now automatically inherited by the children of Organizer folders and idea spaces.

For example, say you have an Organizer folder with the "exporting allowed" checkbox unchecked. Any idea spaces or folders hierarchically contained within that folder will automatically inherit that restriction as well. And, since they inherit that restriction, and cannot override it, the restriction checkbox is disabled in their Info inspector.

As another example, if you have an idea space with a "no presenting" restriction, then any child idea spaces hierarchically under that idea space will also be skipped when presenting.

This makes it very easy to quickly restrict or unrestrict an entire hierarchy of items just by nesting the items appropriately.

Smarter Selected Items Hierarchy

On a related note, when you choose to print, export, or mail Organizer items then Curio presents a dialog asking if you want only the selected Organizer items or all items. If you choose only the selected items then Curio is now smarter about determining what items are automatically added to that selection.

  • If a selected item is a folder, then all of that folder's contents are included (assuming they abide by any restrictions), recursively, which includes any subfolders and even nested idea space hierarchies. After all it doesn't make sense to just print or present the folder itself, thus Curio assumes you want everything nested within that folder.
  • If a selected item is an idea space, then only that idea space is printed, exported, or mailed. Child items nested under that idea space are not included unless explicitly selected, as well. This means you can finally print just a handful of specific idea spaces without the children getting printed automatically, as well.

Sleuth Updates

  • Sleuth Unsplash
    New Sleuth site added for the Unsplash image service.
  • Sleuth Fixes
    Numerous Sleuth site definition files have been updated for https support or modified search form submission variables.

Miscellaneous Tweaks

  • Copy as Hyperlink
    When you copy a figure or idea space as a hyperlink, it is now encoded with two slashes, like curio://path_to_project..., instead of three slashes. The latter is technically more correct, since an absolute path follows, but doesn't work as a valid URL in some apps. Curio itself can handle Curio hyperlinks with either two or three slashes.
  • Image Resizing
    If a figure is marked as proportionally sized in the Geometry inspector, like image figures are by default, then holding the Shift key when resizing has no effect just like in Keynote (instead of temporarily allowing a non-proportional resize). This reduces confusion, since Shift is generally associated with a forced proportional sizing.
  • Strikethrough Menu
    Curio now include a Strikethrough item under the Format > Text menu.
  • Quick Look
    Curio's integrated Quick Look plugin now generates nicer thumbnails for Curio projects with a thin black border and shadow.
  • Notes Windows
    More descriptive Notes window title when a figure is selected.
  • Project Last Saved Variable
    The Project Last Saved date and time variables (via the Insert menu or toolbar button) now reflect a more accurate timestamp for when the project was modified by the user, not simply the last modified date of the project file which could change due to a number of other reasons.
  • Link Color
    You can now turn off link coloring, like when typing an URL in a text figure or when dragging in an URL from the browser. Just set the Link Color advanced setting to the clear color: rgba(0,0,0,0). Note the existing Link Underline setting can be used to turn off the underline if you wish. Note, we also got rid of the unreliable Disable Link Color and Disable Link Underline settings.
  • Asset Figure Previews
    You can drag in a non-image documen, right-click and Show as Preview, then use Format > Set Default Style for Document Figure so that future dragged-in documents will also show as preview by default.
  • Duration Units
    New Duration Units advanced setting (minutes=1, hours=2, days=3, weeks=4, months=5, years=6) to set the pre-selected default duration unit popup in the figure meta inspector.
  • Due Date Adornment
    Previously if a figure had both start and due dates that began at 12:00 AM then the date adornment would show the day before the due date instead of the actual due date, thus showing range of days you have to work on the task (since the due date's time is 12:00 AM). But this was confusing since it didn't match the due date specified in the inspector. This has been changed so it always shows the actual due date. And where the previous adornment used a "โ†’" between the dates to indicate this is a range, the new adornment uses a simple "-" between the dates. You can revert to the old range style if you wish.

Project Load Optimizations

A few optimizations have been added to the project load sequence.

Asset Alias Resolution

Previously, as a project was loaded, Curio attempted to resolve each asset alias within the project. If an alias couldn't be resolved then a popup dialog would appear allowing you to skip, delete, or fix the broken alias. This occurred for each broken alias, although there was an option to skip or delete them all. This process interrupted the project opening, thus your ability to quickly get into your project, when, perhaps, all the assets were simply on a currently unattached file server or external drive.

Now, in Curio 12, the project will be loaded completely and unresolved aliases will simply appear as broken aliases on the idea space or in the Library, as shown here:

When you attempt to open the figure (on the idea space) or asset (in the Library) Curio will present a dialog allowing you to fix the broken alias.

Or if muliple items in the Library are selected you can fix or delete them all more quickly:

Clicking the Fix button will present a standard File Open dialog so you can find the replacement target for the alias. Clicking the Delete button will delete the alias, so the asset will no longer be associated with an aliased file.

You can also right click on a figure or asset and choose Fix Broken Alias:

Jump Target Alias Resolution

Just like with asset aliases, previously, as a project was loaded, Curio also attempted to resolve each jump target alias within the project. That is, jump actions that referenced a figure or idea space in a different project. This would interrupt project loading with numerous popup dialogs asking the user to fix or delete those aliases.

Now, in Curio 12, jump target actions are only resolved when you attempt to perform the jump by double-clicking on the figure, or clicking the jump adornment or jump anchor. If the alias could not be resolved then a dialog will appear:

When you fix or delete the reference to that remote project, Curio will automatically update all other jump targets that reference that same project.

Miscellaneous Fixes

Presentations

  • Presentation mode CoreImage and Quartz Composer transitions are now animating a bit more smoothly, with a more reliable technique to step through the keyframes.
  • In addition, Quartz Composer transitions have some Retina fixes.

Figures

  • Figure shadows are more reliable now for various image types, including pasted PNG images (like macOS screenshots). For example, during an image paste, Curio will now quickly scan the pixels of a potentially transparent PNG image to determine if it truly has any non-opaque pixels. If none then Curio can store them as more efficient, opaque JPGs which will render shadows reliably.

Collection Fixes

  • Fixed issue where undoing the drag of a figure into a collection wasn't restoring the figure's original style attributes.
  • Fixed issue where pinboard style previews in the gallery didn't have correctly rendered titles.

Other

  • Fixed issue with HTML export "Organizer" icons being way too big on Retina Macs.
  • Fixed scaling issues when printing with a forced scaling specified in Page Setup.
  • The Actions inspector's Open URL action now properly handles URLs with accented (or non-ASCII) characters such as https://fr.wikipedia.org/wiki/Mont_Mรฉgantic.

Technical Improvements

Updated 3rd Party Frameworks

Curio 12 includes updated releases of the following embedded 3rd party frameworks.

Massive Code Updates

Curio's entire codebase was massively overhauled for this release. This took a considerable amount of time but the result is a much, much better product.

Automatic Memory Managemement ๐Ÿ—„

At long last Curio's code has adopted Apple's robust Automatic Reference Counting (ARC) method for internal memory management, instead of manual memory management techniques. Bugs related to attempting to access inadvertently freed or invalidated memory, which are especially hard to track down in a complex, multithreaded app like Curio, should now be a thing of the past. Ditto memory leaks where previosly allocated memory was never freed.

This transition to ARC involved modernizing and updating almost every source module, some of which was a laboriously manual process, while other parts were greatly assisted by Xcode's conversion tools. Undertaking this huge migration was not taken lightly which is why we wanted to make sure ARC was super-robust before moving to it.

Xcode 8 → Xcode 9 ๐Ÿ› 

Upgrading from Xcode 8 to Xcode 9 allowed us to adopt Apple's latest suggested project settings, which revealed a few dozen nitpicky code warnings, which were all tackled.

Code Analysis ๐Ÿ•ต๏ธโ€โ™€๏ธ

Using Xcode's Static Analyzer we found several potential code hotspots which were then rewritten to ensure more robust handling. The analyzer tries out thousands of possible code paths in a few seconds, reporting potential logic flaws, memory bugs, and API usage bugs that would have been difficult to replicate in normal testing.

Code Profiling ๐Ÿ‘ฎโ€โ™€๏ธ

Using Xcode's Instruments profiler we verified memory usage to verify no memory leaks and took care of a few performance bottlenecks.

We also found a number of areas where redraws were not fully optimized (like when dragging figures around an idea space) so those were rewritten for faster drawing performance.

Code Diagnostics ๐Ÿ‘ฉ๐Ÿผโ€โš•๏ธ

Using Xcode's diagnostic runtime checks (Address Sanitizer, Thread Sanitizer, Undefined Behavior Sanitizer, and new Main Thread Checker) helped discover more areas of contention which were cleaned up.

For example, the Main Thread Checker check was useful in finding threading issues with the Status shelf and Evernote shelf. With those issues fixed both are now much more robust.

Preview Generation Improvements

In addition, some of this analysis unearthed threading problems with the way Curio generated idea space previews in the background, due to threading limitations of Apple's AppKit. With this in mind, the entire preview generation process has been rewritten to ensure Curio's robustness while minimizing the impact to user interactions:

  1. Thumbnails
    While you're working on an idea space, Curio will very quickly refresh a small thumbnail image for display in the Organizer.
  2. Full Size Previews
    When you switch to another idea space a full-sized preview will be created. And, when you close the project, Curio will run through and generate full-sized previews for all idea spaces that have outdated previews.

Plus, with help from Xcode's Instruments profiler, we now have preview bitmaps being generated 70-80% faster than before: a complex idea space preview went from 0.331 to 0.053 seconds, a more typical idea space preview went from 0.039 to 0.011 seconds.

Sierra and High Sierra

Requring Sierra as the minimum macOS brought out dozens of deprecation warnings so many of these were cleaned up as well. These are classes or methods that Apple has indicated it will eventually remove in a future macOS release.

The big one for this release was tearing out the IKImageBrowser views used in all of Curio's various galleries and replacing them with customized NSCollectionViews. This new UI component was first introduced back in macOS 10.6 but wasn't reliable or feature complete until macOS 10.11. The look and feel is essentially identical but Apple's new class is more optimized internally.

In Short...

What does all of this mean? Curio 12 is more robust, more optimized, and more future-proof than ever! 💪