Arc

Arc Sidebar Items

Overview

Arc's sidebar replaces the tab strip and the bookmarks bar. Each Space has two sections, and each profile has a row of Favorites:

SectionWhat it isForensic meaning
PinnedTabs and folders the user pinned to a SpaceLong-lived resources the user deliberately kept
Today (Arc's unpinned container)Ordinary open tabsRecent browsing; archived automatically after a set period
FavoritesIcon row at the top of the sidebar, one set per profileThe user's most-used sites

All three are stored as items in StorableSidebar.json, not in Chromium's Bookmarks file. Each item records its URL, the page title, any title the user set, when it was created, and when it was last active. The sidebar can therefore show what a user had open and kept, with timestamps, independently of browsing history.

File Locations

ArtifactPath
Sidebar state~/Library/Application Support/Arc/StorableSidebar.json
Backups~/Library/Application Support/Arc/StorableSidebar.<yyyy-MM-dd-HH-mm-ss-SSS>.json
Archived tabs~/Library/Application Support/Arc/StorableArchiveItems.json

Item Structure

Items sit in the items array of the main sidebar container (the object after {"global" : {}}, see Spaces). Like the rest of the file, items alternates ID strings and item objects:

"items" : [
  "641CE573-48C7-417F-B014-7E45BE994A4C",
  {
    "id" : "641CE573-48C7-417F-B014-7E45BE994A4C",
    "parentID" : "87DC5386-D5EE-4447-AE0A-CE7E33E3128F",
    "childrenIds" : [ ],
    "title" : null,
    "createdAt" : 746426747.510035,
    "isUnread" : false,
    "originatingDevice" : "24564BF1-21DC-43F4-B69A-6991DBCCA1B0",
    "data" : {
      "tab" : {
        "savedURL" : "https:\/\/www.alfredapp.com\/help\/workflows\/inputs\/script-filter\/json\/",
        "savedTitle" : "Script Filter JSON Format - Alfred Help and Support",
        "timeLastActiveAt" : 746426762.639586,
        "savedMuteStatus" : "allowAudio",
        "activeTabBeforeCreationID" : "0604BE08-EC6A-4C41-A343-FB6BCD82649C"
      }
    }
  },
  …
]
FieldMeaning
idItem UUID
parentIDParent folder or root container; null for root containers
childrenIdsChild item IDs in display order
titleTitle the user set (null or "" if they never renamed it)
createdAtWhen the item was created (Mac absolute time)
isUnreadItem has not been viewed since it was added
originatingDeviceUUID of the Mac the item was created on (relevant with Arc Sync)
dataOne key giving the item type (below)

Item Types

data keyItemNotable fields
tabA web pagesavedURL, savedTitle, timeLastActiveAt, activeTabBeforeCreationID (the tab that was active when this one was opened), referrerID
listA folderUsually {}; a Live Folder carries automaticLiveFolderData with a dataSource (e.g. github)
splitViewTabs shown side by sideChildren are the tabs; layoutOrientation, focusItemID
easelAn Arc Easel (canvas)easelID, title (the content itself is stored elsewhere)
arcDocumentAn Arc document (note)arcDocumentID
itemContainerA root containercontainerType: spaceItems (a Space's pinned or Today section) or topApps (a profile's Favorites)

Resolving an Item's Section

An item does not record its section directly. Follow parentID upward, through any folders, until you reach a root itemContainer. Then identify that container:

  1. If a Space's containerIDs (or newContainerIDs) lists it under pinned or unpinned, the item is in that Space's Pinned or Today section.
  2. If topAppsContainerIDs lists it, the item is a Favorite of that profile.
  3. Otherwise, its containerType.spaceItems._0 still names the owning Space.

If parentID is missing, look for the item in another item's childrenIds. Folder titles passed on the way up give the item's folder path.

Timestamps

FieldMeaning
createdAtItem was added to the sidebar
data.tab.timeLastActiveAtTab was last the active (focused) tab

Both are Mac absolute time: seconds since 2001-01-01 UTC. Add 978307200 for Unix seconds.

Last-active time survives history clearing

timeLastActiveAt is written to the sidebar file, not the History database. When a user clears browsing history, pinned tabs, their URLs, and their last-active times can remain, along with copies in the timestamped backups.

Manual Analysis

List every tab with its Space, section, title, URL, and last-active time:

jq -r '
  .sidebar.containers as $c
  | ($c | to_entries | map(select(.value | type == "object" and has("global"))) | .[0].key) as $g
  | $c[$g + 1] as $main
  | ($main.items | map(objects) | map({key: .id, value: .}) | from_entries) as $items
  | ([ $main.spaces[] | objects | . as $s
       | (.containerIDs // []) as $ids
       | range(0; $ids | length; 2)
       | {key: $ids[. + 1], value: {space: $s.title,
           section: (if $ids[.] == "pinned" then "pinned" else "today" end)}} ]
     + [ $main.topAppsContainerIDs | range(1; length; 2) as $i
       | {key: .[$i], value: {space: "", section: "favorites"}} ]
     | from_entries) as $roots
  | def root($id): if $roots[$id] then $roots[$id]
                   elif $items[$id].parentID then root($items[$id].parentID)
                   else {space: "", section: "unknown"} end;
    $items[]
  | select(.data.tab)
  | root(.parentID) as $r
  | [ $r.space, $r.section,
      (if (.title // "") != "" then .title else .data.tab.savedTitle end),
      .data.tab.savedURL,
      ((.data.tab.timeLastActiveAt // 0) + 978307200 | todate) ]
  | @tsv' \
  ~/Library/Application\ Support/Arc/StorableSidebar.json

This recipe reads containerIDs only. For files that have only newContainerIDs, adapt it to match enum labels.

Archived Tabs

When Arc archives a Today tab (automatically after 12 hours by default, configurable by the user), the tab moves to StorableArchiveItems.json. That file has the shape {"version" : 1, "items" : [id, {…}, …]}. Each entry holds:

FieldMeaning
archivedAtWhen the tab was archived (Mac absolute time)
reasonWhy, e.g. auto for automatic archiving
source.space._0ID of the Space the tab came from
sidebarItemThe full item, in the same shape as above

Archived tabs hold recently closed browsing with exact archive times, a useful complement to History.

Not yet collected by macfor

macfor does not currently parse StorableArchiveItems.json. Collect it manually, or enable raw collection and copy the Arc directory.

Analysis Notes

  • Intent. A pinned tab took a deliberate action to create. Pinned and Favorite URLs are stronger evidence of regular use than a single history visit.
  • Custom titles. A user-set title that differs from savedTitle is the user's own label for the page and can reveal how they thought about it.
  • Folder paths. Folder names (e.g. "Clients / Acme / Contracts") add context to the URLs inside them.
  • Multiple devices. Different originatingDevice values show items created on another Mac and synced in through Arc Sync.
  • Unknown types. Arc adds new item types over time. Treat an unfamiliar data key as data to examine, not noise.

What macfor Collects

The browser.arc plugin emits one arc_sidebar_item record per tab, folder, split view, easel, or note in every sidebar container (main, Little Arc, and standalone windows), from the live file and every backup:

FieldMeaning
kindtab, folder, split_view, easel, arc_document, or the raw key for unrecognised types
sectionpinned, today, favorites, or unknown
space_id, space_title, profileResolved owning Space and profile directory
folder_pathTitles of enclosing folders, outermost first
title, saved_title, urlUser title, page title, URL
created_at, last_active_atConverted to UTC
is_unread, originating_device, live_folder_source, easel_idAs stored
container, is_backup, source_fileWhere the record came from

References

Previous
Spaces
Next
Boosts