{"id":14065148,"url":"https://github.com/orbikm/mkdocs-ezlinks-plugin","last_synced_at":"2025-09-25T19:05:56.604Z","repository":{"id":44737183,"uuid":"337879086","full_name":"orbikm/mkdocs-ezlinks-plugin","owner":"orbikm","description":"Plugin for mkdocs which enables easier linking between pages","archived":false,"fork":false,"pushed_at":"2024-07-25T22:16:38.000Z","size":1463,"stargazers_count":41,"open_issues_count":13,"forks_count":15,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-11T07:31:54.590Z","etag":null,"topics":["ezlinks","foam","mkdocs","mkdocs-ezlinks-plugin","obsidian","roam","wikilinks"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/orbikm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-10T23:10:38.000Z","updated_at":"2025-09-10T18:07:44.000Z","dependencies_parsed_at":"2024-05-27T23:18:34.997Z","dependency_job_id":"8a0e0932-5db1-428c-b710-8e95a881fe99","html_url":"https://github.com/orbikm/mkdocs-ezlinks-plugin","commit_stats":{"total_commits":36,"total_committers":1,"mean_commits":36.0,"dds":0.0,"last_synced_commit":"508c0d399428f0d7ae596881900aa11baf508526"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/orbikm/mkdocs-ezlinks-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orbikm%2Fmkdocs-ezlinks-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orbikm%2Fmkdocs-ezlinks-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orbikm%2Fmkdocs-ezlinks-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orbikm%2Fmkdocs-ezlinks-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orbikm","download_url":"https://codeload.github.com/orbikm/mkdocs-ezlinks-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orbikm%2Fmkdocs-ezlinks-plugin/sbom","scorecard":{"id":711635,"data":{"date":"2025-08-11","repo":{"name":"github.com/orbikm/mkdocs-ezlinks-plugin","commit":"508c0d399428f0d7ae596881900aa11baf508526"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/27 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/python-publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/orbikm/mkdocs-ezlinks-plugin/python-publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/orbikm/mkdocs-ezlinks-plugin/python-publish.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:24","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v_0.1.14 not signed: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/57865074","Warn: release artifact v_0.1.13 not signed: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/53876638","Warn: release artifact v_0.1.12 not signed: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/47180793","Warn: release artifact v_0.1.11 not signed: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/44524555","Warn: release artifact v_0.1.10 not signed: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/44237624","Warn: release artifact v_0.1.14 does not have provenance: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/57865074","Warn: release artifact v_0.1.13 does not have provenance: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/53876638","Warn: release artifact v_0.1.12 does not have provenance: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/47180793","Warn: release artifact v_0.1.11 does not have provenance: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/44524555","Warn: release artifact v_0.1.10 does not have provenance: https://api.github.com/repos/orbikm/mkdocs-ezlinks-plugin/releases/44237624"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-22T08:20:27.294Z","repository_id":44737183,"created_at":"2025-08-22T08:20:27.295Z","updated_at":"2025-08-22T08:20:27.295Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276966322,"owners_count":25736758,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-25T02:00:09.612Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ezlinks","foam","mkdocs","mkdocs-ezlinks-plugin","obsidian","roam","wikilinks"],"created_at":"2024-08-13T07:04:19.870Z","updated_at":"2025-09-25T19:05:56.587Z","avatar_url":"https://github.com/orbikm.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# mkdocs-ezlinks-plugin\n\n![](logo.png)\n\nPlugin for mkdocs which enables easier linking between pages.\n\nThis plugin was written in order to provide an up-to-date and\nfeature complete plugin for easily referencing documents\nwith a variety of features:\n\n* Optimized file name lookup\n* Code Block Preservation\n* File name linking (e.g. `[Text](file#anchor \"title\")`)\n* Absolute paths (e.g. `[Text](/link/to/file.md)`)\n* WikiLinks support (e.g. `[[Link#anchor|Link Title]]`)\n* Reference Link support (e.g. `[foo]: bar/ \"Foo Title\"`)\n\n# Install\n```\npip install mkdocs-ezlinks-plugin\n```\n\nEdit your mkdocs configuration file to enable the plugin:\n```\nplugins:\n  - search\n  - ezlinks\n```\n\u003e **NOTE**  \n\u003e   If you have no plugins entry in your config file yet, you'll likely also want to add the search plugin. MkDocs enables it by default if there is no plugins entry set, but now you have to enable it explicitly.\n\n# Release Log\n\n## Release 0.1.14\nThis is a bugfix release.\n\nIssues addressed:\n  * GH issue #35, `Links between deeply nested subfolders fails.`\n    Dev @Mara-Li reported an issue with wikilinks between deeply nested subfolders failing due to an incorrectly\n    rendered relative link to the file.\n\n  * An unreported Windows usage issue\n    It's possible this bug existed for quite some time. Basically, on Windows, there was disagreement between the\n    path separators used at different points in the file mapping and searching process. This unifies it to store\n    and search for paths only with the `/` delimiter instead of the OS defined separator.\n\n\n## Release 0.1.13\nAdds support for Reference Link parsing. This is to support certain Foam editors, which generate [Reference Links](https://spec.commonmark.org/0.29/#reference-link).\n\nIssues Addressed:\n  * GH Issue #31, `Add support for reference link definitions`. Allows compatibility with certain Foam editors which generate Reference Links.\n\n## Release 0.1.12\nThis is a bugfix release.\n\nIssues addressed:\n  * GH issue #25, `Absolute links not using http:// or https:// are treated as relative`.\n    Dev @robbcrg (thanks!) reported that links with protocol schemes other than those two should also be treated as\n    absolute links. The regex will exclude any link from a conformant protocol scheme from being converted using EzLinks.\n\n  * GH Issue #27, `Dictionary file cache is not being leveraged`.\n    An inverted comparison led to the fast file cache lookup never really being exercised. Now, if a filename is unique, it will find it in the fast file cache first, saving a more expensive full trie lookup.\n\n## Release 0.1.11\nThis is a bugfix release. The prior release switched from a dictionary lookup to a prefix trie lookup strategy, which allowed for better disambiguation between links, but is more expensive. The bug was that, even if a link was direct, it would trigger a full trie search. Now, direct links\nare checked and returned directly if the file exists.\n\nAdditionally, a slight performance improvement was made where, in the case that a filename is unique to the entire site, it will rely on a fast dictionary lookup instead of a trie lookup.\n\n# Configuration Options\n```\nplugins:\n    - search\n    - ezlinks:\n        warn_ambiguities: {true|false}\n        wikilinks: {true|false}\n        reference_links: {true|false}\n```\n## warn_ambiguities\nDetermines whether to warn when an abmiguous link is encountered. An ambiguous link is one that would have more than one possible targets. For example, if you had the following document setup:\n\n```\n+ folder1/\n  +-- index.md\n+ folder2/\n  +-- index.md\n```\n\nIf you had any links that targeted `index.md`, EzLinks is not able to determine _which_ of the instances of `index.md` to target, thus it is ambiguous.\n\n### Disambiguating links\nBy default, EzLinks will attempt to resolve the ambiguity automatically. It does this by searching for the file closest to the file that is linking (with respect to the folder hierarchy).\n\n```\n+ guide/\n  + test.md\n  + getting_started/\n      + index.md\n+ tutorials/\n  - test.md\n  + getting_started/\n      + index.md\n  + more_advanced/\n      + index.md\n```\nIf you placed a link inside `guide/getting_started/index.md` such as `[Test](test)`, the resulting link has ambiguity, but in the default case, the `guide/test.md` file is _closer_ than the `tutorials/test.md`, therefore, it will select that file.\n\nIn the circumstance above, it would be possible to disambiguate _which_ `test.md` by including the containing folder, e.g. `guide/test.md` or `tutorials/test.md`. Note: This also works in conjunction with extension-less targets, e.g. `guide/test` and `tutorials/test`.\n\nThis disambiguation can continue with as many parent directories are specified, for instance `folder1/subfolder1/subfolder2/test.md`, specifying as many path components as necessary to fully disambiguate the links.\n\nThis method of disambiguation is supported by each of the supported link formats (MD links, wiki/roamlinks). For instance, you can use `[[folder1/index|Link Title]]` and `[[folder2/index.md]]`.\n\n## wikilinks\nDetermines whether to scan for wikilinks or not (See [WikiLink Support](#wikilink-support)).\n\u003e **NOTE**  \n\u003e  This plugin feature does not function well when the 'wikilinks' markdown extension is enabled. This plugin's functionality should replace the need for enabling said extension.\n\n## reference_links\nDetermins whether to scan for Reference Links or not (See [Reference Links](https://spec.commonmark.org/0.29/#reference-link), e.g. `[foo]: /bar \"Foo Bar\"`)\n\n# Features\n## Filename Links\nGiven a layout such as\n```\n- index.md\n- folder/\n  +-- filename.md\n  +-- image.png\n```\n\nThe following links will result in the following translations,\n\n|Link|Translation|\n|----|-----------|\n| `[Link Text](filename)` | `[Link Text](folder/filename.md)`|\n| `[Link Text](filename#Anchor)` | `[Link Text](folder/filename.md#Anchor)`|\n| `[Link Text](filename.md)` | `[Link Text](folder/filename.md)`|\n| `[Link Text](filename.md#Anchor)` | `[Link Text](folder/filename.md#Anchor)` |\n| `![Image Alt Text](image)` | `![Image Alt Text](folder/image.png)` |\n| `![Image Alt Text](image.png)` | `![Image Alt Text](folder/image.png)` |\n| `![Image Alt Test](image \"Image Title\")` | `![Image Alt Text](folder/image.png \"Image Title\")` |\n\n\n## Absolute Links\nGiven a layout such as\n```\n- static/\n  +-- image.png\n- folder/\n  +-- document.md\n- index.md\n```\nGiven that we are entering the links into the `folder/document.md` file,\n\n|Link|Translation|\n|----|-----------|\n| `![Link Text](/static/image.png)` | `![Link Text](../static/image.png)` |\n\n# WikiLink Support\nGiven a layout such as\n```\n- folder1/\n  +-- main.md\n- folder2/\n  +-- page-name.md\n- images/\n  +-- puppy.png\n```\nand these links are entered in `folder1/main.md`, this is how wikilinks will be translated\n\n|Link|Translation|\n|----|-----------|\n| `[[Page Name]]` | `[Page Name](../folder2/page-name.md)` |\n| `![[Puppy]]` | `![Puppy](../images/puppy.png)` | `[[Page Name#Section Heading]]` | `[Page Name](../relative/path/to/page-name.md#section-heading)` |\n| `[[Page Name\\|Link Text]]` | `[Link Text](../folder2/page-name.md)` |\n| `[[Page Name#Section Heading\\|Link Text]]` | `[Link Text](../folder2/page-name.md#section-heading)` |\n\n# Attribution\nThis work is highly inspired from the following plugins:\n  - [mkdocs-autolinks-plugin](https://github.com/midnightprioriem/mkdocs-autolinks-plugin/)\n  - [mkdocs-roamlinks-plugin](https://github.com/Jackiexiao/mkdocs-roamlinks-plugin)\n  - [mkdocs-abs-rel-plugin](https://github.com/sander76/mkdocs-abs-rel-plugin)\n\n  I have combined some the features of these plugins, fixed several existing bugs, and am adding features in order to\n  provide a cohesive, up-to-date, and maintained solution for the mkdocs community.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forbikm%2Fmkdocs-ezlinks-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forbikm%2Fmkdocs-ezlinks-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forbikm%2Fmkdocs-ezlinks-plugin/lists"}