Crossbow

by shoedler
5
4
3
2
1
Score: 51/100

Description

Category: Note Enhancements

The Crossbow plugin enhances your Obsidian workflow by providing intelligent suggestions for linking headings, tags, and files, making it easier to interconnect your notes and build a cohesive knowledge graph. Suggestions are displayed in a sidebar and can be applied directly to occurrences within the current note. The plugin ranks matches based on relevance and offers a variety of customization options to tailor the suggestion process, including filtering by word length, case sensitivity, and ignored terms. With its intuitive interface and seamless integration with Obsidian's cache, Crossbow helps users streamline their note-linking process efficiently.

Reviews

No reviews yet.

Stats

53
stars
8,437
downloads
1
forks
1,102
days
914
days
914
days
11
total PRs
0
open PRs
0
closed PRs
11
merged PRs
23
total issues
7
open issues
16
closed issues
0
commits

Latest Version

3 years ago

Changelog

What's Changed

  • Fixes contrast issue by @usernotnull in https://github.com/shoedler/crossbow/pull/29
  • Fixes Bug #22 . It's now possible to have multiple char-by-char identical suggestions, e.g. a file named "REST" and headings named "REST" don't overwrite each other.
  • Some progress on Bug #28. Still not working properly
  • Some UI refinements in the side-panel (tree view), including "pills", and some typography improvements image

Some technical detail on the work done for the side-pane (Tree view):

  • Model objects now implement a new TreeNode interface, so they can be easily mapped to tree nodes in the DOM.
  • Implemented batch-updating the DOM via requestAnimationFrame
  • Improved retrieval of targetEditor - fixes updating via manual refresh button (Couldn't have worked - ever)

New Contributors

Full Changelog: https://github.com/shoedler/crossbow/compare/1.3.0...1.4.0

README file from

Github

🏹 Crossbow

image

Crossbow is a plugin for Obsidian.

Boost your Obsidian note-taking workflow with this plugin that offers handy suggestions for links to headings, tags, and files, helping you effortlessly weave a web of interconnected notes and supercharge your note graph.

How to use

Just open the crossbow sidebar by clicking on the crossbow icon in the ribbon. All the suggestions will appear within the sidebar.

Applying suggestions

Clicking on a suggestion in the sidebar will show you a list of occurrences of the word in the current note. Clicking on one of the occurences will scroll to it and show you a list of matched cache items that you can link to. These matches are ranked, based on the quality of the match.

You can apply a match by clicking the appropriate icon next to the match:

image

which will insert the following link:

image

In Obsidian a pipe (|) inside a link denotes the "display text" of the link. This means that the text after the pipe will be shown instead of the link.

Temporarily disabling suggestions

You can temporarily disable suggestions by righ-clicking the crossbow icon of the crossbow view and selecting "Close". This will close the sidebar and disable suggestions. To re-enable suggestions, just click the crossbow icon in the ribbon again.

Under the hood

What is a suggestion?

A suggestion is a word in your active editor (current note) that can be linked to a heading, a tag, or a file in your vault:

mindmap
  root((Suggestion))
    Word in your current note
    Obsidian Vault Cache Item
      Heading
      File
      Tag

Crossbow leverages Obsidian's internal cache and does not manually parse your vault. To find matches in your current note, it strips the active editors content of any markdown syntax and then searches for suggestion in the stripped content.

A word about how suggestions are matched

Crossbow is opinionated, but also configurable about how it creates suggestions. As of 1.1.1 the process of filtering looks like this:

Initially, it gathers all the words in the active editor (current note) and all the cache items (Identified by their cache key) in the vault. Then, it follows a simple process for each word and cache key to create a suggestion:

graph TD
    START((Start))
    Q_ACT_EDITOR["1. <b>Cache key</b> stems from active editor? <br>Configurable, see setting <i>Make suggestions to items in the same file</i>"]
    Q_EXCT_MATCH["2. Exact match (case sensitive) between <b>word</b> and <b>cache key</b>?"]
    Q_WORD_SHORT["3. <b>Word</b> is too short? (Currently fixed to 3 chars)"]
    Q_CKEY_SHORT["4. <b>Cache key</b> is too short? <br>Configurable, see setting <i>Minimum word length of suggestions</i>"]
    Q_IS_SUBSTRG["5. <b>Word</b> is a substring of <b>cache key</b> or vice versa?"]
    Q_WORD_UCASE["6. <b>Word</b> starts with an uppercase letter? <br>Configurable, see setting <i>Ignore occurrences which start with a lowercase letter</i>"]
    Q_CKEY_UCASE["7. <b>Cache key</b> starts with an uppercase letter? <br>Configurable, see setting <i>Ignore suggestions which start with a lowercase letter</i>"]
    Q_MATCH_INSV["8. Exact match (case insensitive) between <b>word</b> and <b>cache key</b>?"]
    Q_LEN_SIMILR["9. Similarity of less than 20% length-wise between <b>word</b> and <b>cache key</b>?"]

    STOP((STOP))

    SUCCESS_1["Add as very good suggestion (🏆)"]
    SUCCESS_2["Add as good suggestion (🥇)"]
    SUCCESS_3["Add as mediocre suggestion (🥈)"]
    SUCCESS_4["Add as 'not-very-good' suggestion (🥉)"]


    START --> Q_ACT_EDITOR

    Q_ACT_EDITOR -- Yes --> STOP
    Q_ACT_EDITOR -- No --> Q_EXCT_MATCH

    Q_EXCT_MATCH -- Yes --> SUCCESS_1 --> STOP
    Q_EXCT_MATCH -- No --> Q_WORD_SHORT

    Q_WORD_SHORT -- Yes --> STOP
    Q_WORD_SHORT -- No --> Q_CKEY_SHORT

    Q_CKEY_SHORT -- Yes --> STOP
    Q_CKEY_SHORT -- No --> Q_IS_SUBSTRG

    Q_IS_SUBSTRG -- Yes --> STOP
    Q_IS_SUBSTRG -- No --> Q_WORD_UCASE

    Q_WORD_UCASE -- Yes --> STOP
    Q_WORD_UCASE -- No --> Q_CKEY_UCASE

    Q_CKEY_UCASE -- Yes --> STOP
    Q_CKEY_UCASE -- No --> Q_MATCH_INSV

    Q_MATCH_INSV -- Yes --> SUCCESS_2 --> STOP
    Q_MATCH_INSV -- No --> Q_LEN_SIMILR
    Q_LEN_SIMILR -- Yes --> SUCCESS_4 --> STOP
    Q_LEN_SIMILR -- No --> SUCCESS_3 --> STOP

Then, suggestions which match the ignored words are removed:

graph TD
    START((START))
    FE["For each result"]
    Q_WORD_IGNOR["Remove if <b>Word</b> is on ignore list (case sensitive) <br>Configurable, see setting <i>Ignored words</i>"]
    STOP((STOP))

    START --> FE
    FE --> Q_WORD_IGNOR
    Q_WORD_IGNOR --> FE
    Q_WORD_IGNOR --> STOP

Keep in mind that these steps are processed in order. For example, take a look at the length filter in step 9. At this point, the word and cache key are already a substring of each other (step 5), meaning that this step adds things like "donut" and "donut hole punching machine manual". Not things that are in general vastly different to each other, which would create a lot of false positives.

How to install manually

  1. Clone this repo.
  2. npm i or yarn to install dependencies
  3. npm run build to build crossbow.
  4. Copy main.js, styles.css, manifest.json into a folder called crossbow in your vault's .obsidian/plugins/ folder.

Similar Plugins

info
• Similar plugins are suggested based on the common tags between the plugins.
Note Linker
4 years ago by Alexander Weichart
🔗 Automatically link your Obsidian notes.
Add links to current note
6 years ago by MrJackphil
This plugin adds a command which allows to add a link to the current note at the bottom of selected notes
Callout Suggestions
2 years ago by Casey Fryer
Obsidian Plugin for autocompleting callouts.
Quick Preview
2 years ago by Ryota Ushio
An Obsidian plugin to quickly preview a suggestion before selecting it in link suggestions & quick switcher.
Boost Link Suggestions
3 years ago by Jacob Levernier
An Obsidian (https://obsidian.md) plugin for altering the order of inline link suggestions by link count and manual boosts.
Cardify
3 years ago by joshuakto
plugin to create individual pages for line separated elements
Silicon AI
3 years ago by deepfates
Add some intelligence to your notes with Silicon AI for Obsidian
Send to Canvas
10 months ago by wenlzhang
An Obsidian plugin that allows you to send tasks, blocks, and notes to Canvas files as plain text, links, and embeds.
Related Notes
a year ago by Oluwasanya Awe
AI bot
a year ago by kuzzh
The AI Bot Plugin is a powerful tool designed to enhance your note-editing experience in Obsidian by leveraging the capabilities of AI. This plugin allows you to interact with an AI assistant directly within Obsidian, making it easier to generate, edit, and organize your notes with intelligent suggestions and automated tasks.
Note Linker with Previewer
2 years ago by Nick Allison
Obsidian Plugin to find and Link notes
Mention Things
a year ago by Philipp Stracker
Obsidian plugin to use the familiar @-notation or other symbols to trigger linked autocompletions
Weekly Review notes linker
2 years ago by Aditya Khowal and Brandon Boswell
Suggest Notes
2 years ago by Doggy-Footprint