{"id":13446862,"url":"https://github.com/darekkay/static-marks","last_synced_at":"2025-04-07T11:17:38.770Z","repository":{"id":31817186,"uuid":"127005654","full_name":"darekkay/static-marks","owner":"darekkay","description":"Shareable bookmarks","archived":false,"fork":false,"pushed_at":"2024-05-23T16:35:36.000Z","size":1950,"stargazers_count":430,"open_issues_count":8,"forks_count":33,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-13T22:08:43.100Z","etag":null,"topics":["bookmarks"],"latest_commit_sha":null,"homepage":"https://darekkay.com/static-marks","language":"HTML","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/darekkay.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2018-03-27T15:12:37.000Z","updated_at":"2025-03-05T16:51:03.000Z","dependencies_parsed_at":"2024-01-13T17:36:02.016Z","dependency_job_id":"86839564-ec06-4497-8b19-95c69d24eaad","html_url":"https://github.com/darekkay/static-marks","commit_stats":{"total_commits":122,"total_committers":5,"mean_commits":24.4,"dds":0.319672131147541,"last_synced_commit":"d426d32b1c302aff4e8ce17d05d15ac6b5adca6b"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darekkay%2Fstatic-marks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darekkay%2Fstatic-marks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darekkay%2Fstatic-marks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darekkay%2Fstatic-marks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/darekkay","download_url":"https://codeload.github.com/darekkay/static-marks/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247640475,"owners_count":20971558,"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","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":["bookmarks"],"created_at":"2024-07-31T05:01:01.773Z","updated_at":"2025-04-07T11:17:38.739Z","avatar_url":"https://github.com/darekkay.png","language":"HTML","funding_links":[],"categories":["HTML","others"],"sub_categories":[],"readme":"# Static Marks\n\n[![Build](https://img.shields.io/github/actions/workflow/status/darekkay/static-marks/ci.yml?branch=master\u0026style=flat-square)](https://github.com/darekkay/static-marks/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/static-marks.svg?style=flat-square)](https://www.npmjs.com/package/static-marks)\n[![license](https://img.shields.io/github/license/darekkay/static-marks.svg?style=flat-square)](https://github.com/darekkay/static-marks/blob/master/LICENSE)\n\n\u003cdiv align=\"center\" class=\"text-center\"\u003e\n\nConvert your **plain bookmark** files into a **static web app**.\n\n![YAML to App diagram](assets/img/workflow.svg)\n\n\u003c/div\u003e\n\n- **Share** your bookmarks app via a single self-contained HTML file.\n- Use with **any modern browser**.\n- **Import** bookmarks from Chrome, Firefox or Pocket.\n- It's **free** and [open source](https://github.com/darekkay/static-marks).\n\n🔖 [**View Live Demo**](https://darekkay.com/static-marks/demo/default.html)\n\n## Demo\n\n\u003cdiv align=\"center\" class=\"text-center\"\u003e\n\n![Static Marks Screencast](assets/img/screencast.gif)\n\n\u003c/div\u003e\n\n## Features\n\n- Use custom browser search engines with a `?search=%s` URL param ([example](https://darekkay.com/static-marks/demo/default.html?search=fire)).\n  - In Firefox, right-click the Static Marks search field and select \"Add a Keyword for this Search\".\n- Use custom web page templates. If you don't like the default UI, provide your own ([example](https://darekkay.com/static-marks/demo/custom.html) based on [this template](https://github.com/darekkay/static-marks/blob/master/docs/examples/templates/custom.html)).\n- Dark Mode.\n\n## Quickstart\n\n- [Install](#installation) Static Marks:\n\n```shell\nnpm install -g static-marks\n```\n\n- Create a plain text `bookmarks.yml` [YAML file](#file-format) containing your bookmarks. Alternatively, [import](#import-bookmarks) your existing browser bookmarks:\n\n```shell\nstatic-marks import browser-bookmarks.html \u003e bookmarks.yml\n```\n\n- [Build](#build-bookmarks-app) your bookmarks app:\n\n```shell\nstatic-marks build bookmarks.yml \u003e bookmarks.html\n```\n\n- Open `bookmarks.html` in your browser.\n\n## Installation\n\nThis tool requires Node.js version 12+.\n\n- As a globally available CLI tool:\n\n```bash\nnpm install -g static-marks\n```\n\n- As a local dependency in your project:\n\n```bash\nnpm install --save static-marks\n```\n\n- Without installing:\n\n```shell\nnpx static-marks \u003ccommand\u003e\n```\n\n- As a [docker container](https://github.com/gaerfield/static-marks-docker) (unofficial).\n\n## Usage\n\n```\nstatic-marks [options] \u003ccommand\u003e\n\nOptions:\n  -V, --version               output the version number\n  -h, --help                  output usage information\n\nCommands:\n  build [options] \u003cfiles...\u003e  build bookmarks app\n  import [options] \u003cfile\u003e     import bookmarks from chrome, firefox or pocket\n  report \u003cfiles...\u003e           report bookmarks\n```\n\nRun `static-marks \u003ccommand\u003e --help` to view the usage of a specific command.\n\n### Build bookmarks app\n\n```\nstatic-marks build [options] \u003cfiles...\u003e\n\nOptions:\n  -o, --output [file]     output to a file (use stdout by default)\n  -t, --title [title]     set document title\n  --template-file [file]  use a custom web page template\n```\n\nExamples:\n\n```bash\nstatic-marks build -o bookmarks.html bookmark.yml  # Single file\nstatic-marks build bookmarks.yml \u003e bookmarks.html  # Alt. notation\nstatic-marks build f1.yml f2.yml \u003e bookmarks.html  # Multiple files\nstatic-marks build files/* \u003e bookmarks.html        # All files at path\n```\n\n### Import bookmarks\n\n```\nstatic-marks import [options] \u003cfile\u003e\n\nOptions:\n  -o, --output [file]  output to a file (use stdout by default)\n```\n\nExamples:\n\n```bash\nstatic-marks import exported.html \u003e imported.yml\nstatic-marks import -o imported.yml exported.html\n```\n\n### View a report for your bookmarks\n\nCurrently, the report contains only the total bookmarks count. In the future, it might be used for detecting duplicate and dead links.\n\n```bash\nstatic-marks report [options] \u003cfiles...\u003e\n```\n\nExamples:\n\n```bash\nstatic-marks report bookmarks.yml\nstatic-marks report files/*\n```\n\n## File format\n\nBookmark files are written in [YAML](http://yaml.org). There are multiple levels of hierarchy:\n\n```yaml\nCollection:\n  - Bucket:\n      - Link: https://example.com\n```\n\nA link URL can be expressed either as an item property or as a child item:\n\n```yaml\n- Link 1: https://example.com\n- Link 2:\n    - https://example.com\n```\n\nNotes and nested links are added as children of a link (the first element is the link URL). If the text is a valid-formatted URL it will be automatically converted to a link:\n\n```yaml\n- Link with notes:\n    - https://example.com\n    - This is a text note\n    - Link note: https://example.com\n    - https://example.net\n```\n\nFirst-level notes can be used to describe or structure a bucket:\n\n```yaml\n- Bucket:\n    - Link 1: https://example.com\n    - Carpe diem!\n```\n\nHere's a complete example:\n\n```yaml\nCollection:\n  - Bucket:\n      - Link 1: https://example.com\n      - Link 2:\n          - https://example.com\n      - Link with notes:\n          - https://example.com\n          - This is a text note\n          - Link note: https://example.com\n      - First-level note\n```\n\nThere is an optional 1st level hierarchy level available when you provide more than one bookmark file to `static-marks`. When passing multiple files, a header menu will be displayed to toggle between individual files and all bookmarks.\n\n```bash\n# file toggle menu not necessary/not available\nstatic-marks build file1.yaml\n\n# file toggle menu available\nstatic-marks build file1.yaml file2.yaml\n```\n\n## Troubleshooting\n\n### Encoding issues\n\nYou can use both `\u003e` to pipe the results of a `static-marks` command or the `-o` to provide an explicit output file. There might be cases where the `\u003e` variant doesn't play well with the shell encoding, though.\n\nSee [#46](https://github.com/darekkay/static-marks/issues/46) for more information.\n\n## Using Static Marks with Gitlab Pages\n\nYou can leverage [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/) to host your Static Marks instance. Check out the [example repository](https://gitlab.com/darekkay/static-marks-gitlab-ci) and a [live demo](https://darekkay.gitlab.io/static-marks-gitlab-ci).\n\n1. [Create](https://gitlab.com/projects/new) a new GitLab repository.\n2. Include the example [.gitlab-ci.yml](docs/examples/ci/.gitlab-ci.yml) file in the root directory.\n3. Add all your bookmark `*.yml` files in a `bookmarks` directory.\n\nAfter every push to the `master` branch, your Static Marks page will be rebuilt. By default, it will be available at `https://\u003cUSERNAME\u003e.gitlab.io/\u003cPROJECTNAME\u003e`.\n\n## Development and Contribution\n\nThe frontend part of Static Mark is maintained in [another repository](https://github.com/darekkay/static-marks-app), where a template file (`_template.html`) is being generated. This approach makes it possible to include the whole application and user-defined bookmarks in a single HTML file.\n\nIf you want to provide any frontend-related changes, please create a PR in the other repository. Changes to the core CLI application are handled here instead.\n\n## Contributors\n\nThanks goes to these wonderful people:\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://darekkay.com/' title='darekkay is awesome!'\u003e\u003cimg src='https://avatars0.githubusercontent.com/u/3101914?v=4' alt='darekkay' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/gaerfield' title='gaerfield is awesome!'\u003e\u003cimg src='https://avatars0.githubusercontent.com/u/13051868?v=4' alt='gaerfield' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/kaushalyap' title='kaushalyap is awesome!'\u003e\u003cimg src='https://avatars3.githubusercontent.com/u/24698778?v=4' alt='kaushalyap' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/k-kalinowski' title='k-kalinowski is awesome!'\u003e\u003cimg src='https://avatars2.githubusercontent.com/u/8605057?v=4' alt='k-kalinowski' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/g33k247' title='g33k247 is awesome!'\u003e\u003cimg src='https://avatars0.githubusercontent.com/u/8498814?v=4' alt='g33k247' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/dzmitry-lahoda' title='dzmitry-lahoda is awesome!'\u003e\u003cimg src='https://avatars3.githubusercontent.com/u/757125?v=4' alt='dzmitry-lahoda' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='http://www.diegomunozbeltran.com/' title='diegombeltran is awesome!'\u003e\u003cimg src='https://avatars2.githubusercontent.com/u/7081281?v=4' alt='diegombeltran' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='http://veereshr.me' title='veerreshr is awesome!'\u003e\u003cimg src='https://avatars0.githubusercontent.com/u/59141533?v=4' alt='veerreshr' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/nausher' title='nausher is awesome!'\u003e\u003cimg src='https://avatars3.githubusercontent.com/u/79359?v=4' alt='nausher' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/acer123acer123' title='acer123acer123 is awesome!'\u003e\u003cimg src='https://avatars3.githubusercontent.com/u/5222071?v=4' alt='acer123acer123' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/jflip' title='jflip is awesome!'\u003e\u003cimg src='https://avatars1.githubusercontent.com/u/9138082?v=4' alt='jflip' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://www.eduardominguez.es' title='e-minguez is awesome!'\u003e\u003cimg src='https://avatars.githubusercontent.com/u/346758?v=4' alt='e-minguez' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/iaeiou' title='iaeiou is awesome!'\u003e\u003cimg src='https://avatars.githubusercontent.com/u/69427615?v=4' alt='iaeiou' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://majiehong.com' title='Jiehong is awesome!'\u003e\u003cimg src='https://avatars.githubusercontent.com/u/1061229?v=4' alt='Jiehong' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/RishiKumarRay' title='RishiKumarRay is awesome!'\u003e\u003cimg src='https://avatars.githubusercontent.com/u/87641376?v=4' alt='RishiKumarRay' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href='https://github.com/overflowy' title='overflowy is awesome!'\u003e\u003cimg src='https://avatars.githubusercontent.com/u/98480250?v=4' alt='overflowy' width='45px' /\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://allcontributors.org) specification to acknowledge all contributions.\n\n## License\n\nThis project and its contents are open source under the [MIT license](https://github.com/darekkay/static-marks/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarekkay%2Fstatic-marks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdarekkay%2Fstatic-marks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarekkay%2Fstatic-marks/lists"}