This permission triggers a warning.
Description
Use the chrome.bookmarks API to create, organize, and otherwise manipulate bookmarks. Also see Override Pages, which you can use to create a custom Bookmark Manager page.
Permissions
bookmarks
Manifest
You must declare the "bookmarks" permission in the extension manifest to use the bookmarks API. For example:
{
  "name": "My extension",
  ...
  "permissions": [
    "bookmarks"
  ],
  ...
}
Objects and properties
Bookmarks are organized in a tree, where each node in the tree is either a bookmark or a folder (sometimes called a group). Each node in the tree is represented by a bookmarks.BookmarkTreeNode object.
BookmarkTreeNode properties are used throughout the chrome.bookmarks API. For example, when you
call bookmarks.create, you pass in the new node's parent (parentId), and, optionally, the
node's index, title, and url properties. See bookmarks.BookmarkTreeNode for information
about the properties a node can have.
Examples
The following code creates a folder with the title "Extension bookmarks". The first argument to
create() specifies properties for the new folder. The second argument defines a function to be
executed after the folder is created.
chrome.bookmarks.create(
  {'parentId': bookmarkBar.id, 'title': 'Extension bookmarks'},
  function(newFolder) {
    console.log("added folder: " + newFolder.title);
  },
);
The next snippet creates a bookmark pointing to the developer documentation for extensions. Since nothing bad will happen if creating the bookmark fails, this code doesn't bother to define a callback function.
chrome.bookmarks.create({
  'parentId': extensionsFolderId,
  'title': 'Extensions doc',
  'url': 'https://developer.chrome.com/docs/extensions',
});
To try this API, install the Bookmarks API example from the chrome-extension-samples repository.
Types
BookmarkTreeNode
A node (either a bookmark or a folder) in the bookmark tree. Child nodes are ordered within their parent folder.
Properties
- 
    childrenBookmarkTreeNode[] optional An ordered list of children of this node. 
- 
    dateAddednumber optional When this node was created, in milliseconds since the epoch ( new Date(dateAdded)).
- 
    dateGroupModifiednumber optional When the contents of this folder last changed, in milliseconds since the epoch. 
- 
    dateLastUsednumber optional Chrome 114+When this node was last opened, in milliseconds since the epoch. Not set for folders. 
- 
    folderTypeFolderType optional Chrome 134+If present, this is a folder that is added by the browser and that cannot be modified by the user or the extension. Child nodes may be modified, if this node does not have the unmodifiableproperty set. Omitted if the node can be modified by the user and the extension (default).There may be zero, one or multiple nodes of each folder type. A folder may be added or removed by the browser, but not via the extensions API. 
- 
    idstring The unique identifier for the node. IDs are unique within the current profile, and they remain valid even after the browser is restarted. 
- 
    indexnumber optional The 0-based position of this node within its parent folder. 
- 
    parentIdstring optional The idof the parent folder. Omitted for the root node.
- 
    syncingboolean Chrome 134+Whether this node is synced with the user's remote account storage by the browser. This can be used to distinguish between account and local-only versions of the same FolderType. The value of this property may change for an existing node, for example as a result of user action.Note: this reflects whether the node is saved to the browser's built-in account provider. It is possible that a node could be synced via a third-party, even if this value is false. For managed nodes (nodes where unmodifiableis set totrue), this property will always befalse.
- 
    titlestring The text displayed for the node. 
- 
    unmodifiable"managed" 
 optionalIndicates the reason why this node is unmodifiable. The managedvalue indicates that this node was configured by the system administrator or by the custodian of a supervised user. Omitted if the node can be modified by the user and the extension (default).
- 
    urlstring optional The URL navigated to when a user clicks the bookmark. Omitted for folders. 
BookmarkTreeNodeUnmodifiable
Indicates the reason why this node is unmodifiable. The managed value indicates that this node was configured by the system administrator. Omitted if the node can be modified by the user and the extension (default).
Value
"managed" 
 
CreateDetails
Object passed to the create() function.
Properties
- 
    indexnumber optional 
- 
    parentIdstring optional Defaults to the Other Bookmarks folder. 
- 
    titlestring optional 
- 
    urlstring optional 
FolderType
Indicates the type of folder.
Enum
"bookmarks-bar"  "other"  "mobile"  "managed" 
 The folder whose contents is displayed at the top of the browser window.
 Bookmarks which are displayed in the full list of bookmarks on all platforms.
 Bookmarks generally available on the user's mobile devices, but modifiable by extension or in the bookmarks manager.
 A top-level folder that may be present if the system administrator or the custodian of a supervised user has configured bookmarks.
Properties
MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE
Bookmark write operations are no longer limited by Chrome.
Value
1000000 
 
MAX_WRITE_OPERATIONS_PER_HOUR
Bookmark write operations are no longer limited by Chrome.
Value
1000000 
 
Methods
create()
chrome.bookmarks.create(
bookmark: CreateDetails,
callback?: function,
): Promise<BookmarkTreeNode>
Creates a bookmark or folder under the specified parentId. If url is NULL or missing, it will be a folder.
Parameters
- 
    bookmark
- 
    callbackfunction optional The callbackparameter looks like:(result: BookmarkTreeNode) => void - 
    result
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
get()
chrome.bookmarks.get(
idOrIdList: string | [string, ...string[]],
callback?: function,
): Promise<BookmarkTreeNode[]>
Retrieves the specified BookmarkTreeNode(s).
Parameters
- 
    idOrIdListstring | [string, ...string[]] A single string-valued id, or an array of string-valued ids 
- 
    callbackfunction optional The callbackparameter looks like:(results: BookmarkTreeNode[]) => void - 
    results
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode[]> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getChildren()
chrome.bookmarks.getChildren(
id: string,
callback?: function,
): Promise<BookmarkTreeNode[]>
Retrieves the children of the specified BookmarkTreeNode id.
Parameters
- 
    idstring 
- 
    callbackfunction optional The callbackparameter looks like:(results: BookmarkTreeNode[]) => void - 
    results
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode[]> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getRecent()
chrome.bookmarks.getRecent(
numberOfItems: number,
callback?: function,
): Promise<BookmarkTreeNode[]>
Retrieves the recently added bookmarks.
Parameters
- 
    numberOfItemsnumber The maximum number of items to return. 
- 
    callbackfunction optional The callbackparameter looks like:(results: BookmarkTreeNode[]) => void - 
    results
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode[]> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getSubTree()
chrome.bookmarks.getSubTree(
id: string,
callback?: function,
): Promise<BookmarkTreeNode[]>
Retrieves part of the Bookmarks hierarchy, starting at the specified node.
Parameters
- 
    idstring The ID of the root of the subtree to retrieve. 
- 
    callbackfunction optional The callbackparameter looks like:(results: BookmarkTreeNode[]) => void - 
    results
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode[]> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getTree()
chrome.bookmarks.getTree(
callback?: function,
): Promise<BookmarkTreeNode[]>
Retrieves the entire Bookmarks hierarchy.
Parameters
- 
    callbackfunction optional The callbackparameter looks like:(results: BookmarkTreeNode[]) => void - 
    results
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode[]> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
move()
chrome.bookmarks.move(
id: string,
destination: object,
callback?: function,
): Promise<BookmarkTreeNode>
Moves the specified BookmarkTreeNode to the provided location.
Parameters
- 
    idstring 
- 
    destinationobject - 
    indexnumber optional 
- 
    parentIdstring optional 
 
- 
    
- 
    callbackfunction optional The callbackparameter looks like:(result: BookmarkTreeNode) => void - 
    result
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
remove()
chrome.bookmarks.remove(
id: string,
callback?: function,
): Promise<void>
Removes a bookmark or an empty bookmark folder.
Parameters
- 
    idstring 
- 
    callbackfunction optional The callbackparameter looks like:() => void 
Returns
- 
            Promise<void> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
removeTree()
chrome.bookmarks.removeTree(
id: string,
callback?: function,
): Promise<void>
Recursively removes a bookmark folder.
Parameters
- 
    idstring 
- 
    callbackfunction optional The callbackparameter looks like:() => void 
Returns
- 
            Promise<void> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
search()
chrome.bookmarks.search(
query: string | object,
callback?: function,
): Promise<BookmarkTreeNode[]>
Searches for BookmarkTreeNodes matching the given query. Queries specified with an object produce BookmarkTreeNodes matching all specified properties.
Parameters
- 
    querystring | object Either a string of words and quoted phrases that are matched against bookmark URLs and titles, or an object. If an object, the properties query,url, andtitlemay be specified and bookmarks matching all specified properties will be produced.- 
    querystring optional A string of words and quoted phrases that are matched against bookmark URLs and titles. 
- 
    titlestring optional The title of the bookmark; matches verbatim. 
- 
    urlstring optional The URL of the bookmark; matches verbatim. Note that folders have no URL. 
 
- 
    
- 
    callbackfunction optional The callbackparameter looks like:(results: BookmarkTreeNode[]) => void - 
    results
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode[]> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
update()
chrome.bookmarks.update(
id: string,
changes: object,
callback?: function,
): Promise<BookmarkTreeNode>
Updates the properties of a bookmark or folder. Specify only the properties that you want to change; unspecified properties will be left unchanged. Note: Currently, only 'title' and 'url' are supported.
Parameters
- 
    idstring 
- 
    changesobject - 
    titlestring optional 
- 
    urlstring optional 
 
- 
    
- 
    callbackfunction optional The callbackparameter looks like:(result: BookmarkTreeNode) => void - 
    result
 
- 
    
Returns
- 
            Promise<BookmarkTreeNode> Chrome 90+Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
Events
onChanged
chrome.bookmarks.onChanged.addListener(
callback: function,
)
Fired when a bookmark or folder changes. Note: Currently, only title and url changes trigger this.
Parameters
- 
    callbackfunction The callbackparameter looks like:(id: string, changeInfo: object) => void - 
    idstring 
- 
    changeInfoobject - 
    titlestring 
- 
    urlstring optional 
 
- 
    
 
- 
    
onChildrenReordered
chrome.bookmarks.onChildrenReordered.addListener(
callback: function,
)
Fired when the children of a folder have changed their order due to the order being sorted in the UI. This is not called as a result of a move().
Parameters
- 
    callbackfunction The callbackparameter looks like:(id: string, reorderInfo: object) => void - 
    idstring 
- 
    reorderInfoobject - 
    childIdsstring[] 
 
- 
    
 
- 
    
onCreated
chrome.bookmarks.onCreated.addListener(
callback: function,
)
Fired when a bookmark or folder is created.
Parameters
- 
    callbackfunction The callbackparameter looks like:(id: string, bookmark: BookmarkTreeNode) => void - 
    idstring 
- 
    bookmark
 
- 
    
onImportBegan
chrome.bookmarks.onImportBegan.addListener(
callback: function,
)
Fired when a bookmark import session is begun. Expensive observers should ignore onCreated updates until onImportEnded is fired. Observers should still handle other notifications immediately.
Parameters
- 
    callbackfunction The callbackparameter looks like:() => void 
onImportEnded
chrome.bookmarks.onImportEnded.addListener(
callback: function,
)
Fired when a bookmark import session is ended.
Parameters
- 
    callbackfunction The callbackparameter looks like:() => void 
onMoved
chrome.bookmarks.onMoved.addListener(
callback: function,
)
Fired when a bookmark or folder is moved to a different parent folder.
Parameters
- 
    callbackfunction The callbackparameter looks like:(id: string, moveInfo: object) => void - 
    idstring 
- 
    moveInfoobject - 
    indexnumber 
- 
    oldIndexnumber 
- 
    oldParentIdstring 
- 
    parentIdstring 
 
- 
    
 
- 
    
onRemoved
chrome.bookmarks.onRemoved.addListener(
callback: function,
)
Fired when a bookmark or folder is removed. When a folder is removed recursively, a single notification is fired for the folder, and none for its contents.
Parameters
- 
    callbackfunction The callbackparameter looks like:(id: string, removeInfo: object) => void - 
    idstring 
- 
    removeInfoobject - 
    indexnumber 
- 
    nodeChrome 48+
- 
    parentIdstring 
 
- 
    
 
-