{"id":19903916,"url":"https://github.com/zerotohero-dev/sif","last_synced_at":"2026-05-30T23:31:19.292Z","repository":{"id":141697526,"uuid":"38192714","full_name":"zerotohero-dev/sif","owner":"zerotohero-dev","description":"sif is an intelligent curator that makes information meaningful and findable; it's a command line interface that runs as fast as you think. — Oh, she's also known as a Norse goddess.","archived":false,"fork":false,"pushed_at":"2016-05-09T11:52:50.000Z","size":677,"stargazers_count":3,"open_issues_count":48,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-09T16:02:14.244Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zerotohero-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2015-06-28T09:00:56.000Z","updated_at":"2023-10-03T04:37:09.000Z","dependencies_parsed_at":"2023-07-21T20:24:34.698Z","dependency_job_id":null,"html_url":"https://github.com/zerotohero-dev/sif","commit_stats":null,"previous_names":["v0lkan/sif"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/zerotohero-dev/sif","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2Fsif","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2Fsif/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2Fsif/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2Fsif/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zerotohero-dev","download_url":"https://codeload.github.com/zerotohero-dev/sif/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2Fsif/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33714033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"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":[],"created_at":"2024-11-12T20:25:58.905Z","updated_at":"2026-05-30T23:31:19.273Z","avatar_url":"https://github.com/zerotohero-dev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e **NOTE**\n\u003e\n\u003e This project is no longer maintained (*at least for a while*).\n\u003e\n\u003e If you want to be the maintainer, contact me\n\u003e at me@volkan.io\n\u003e\n\n```\n   _,                            ,--.   ,---.\n  /(_                     ,---.  `--'  /  .-'\n |   '-._        . ' .   (  .-'  ,--.  |  `-,\n \\    ,-.)      -= * =- .-'  `)  |  |  |  .-'\n  \\((` .(        '/. '  `----'   `--'  `--'\n   )\\  _/        /         just like magic\n.-'   '--.      /\n\\,         \\   /|\n ';,_) _)'\\ \\,//\n  `\\   (   '._/\n   |  . '.\n   |      \\\n   |  \\|   |\n    \\  |  /\n     '.| /\n```\n\n## Summary\n\n`sif` is an intelligent **curator** that makes information **meaningful** and\n**findable**; it's a command line interface that runs **as fast as you think**.\n— Oh, she's also known as a Norse goddess.\n\nYou can, for example, call [`sif find tutorial`](#searching) and `sif`\nwill display you a list of tutorial links.\n\n`sif`'s main focus is on sifting through and finding links. You can think of it as a\ncommand-line bookmark manager.\n\n[Read the usage examples section](#usage-examples) to learn more about what\n`sif` is capable of.\n\n## Dependencies\n\n`sif` is a [Node.JS][nodejs] command line application. So it requires a\n[Node.JS][nodejs] runtime.\n\nTo install `sif`, you will also need [npm][npm], which comes bundled with\n[Node.JS][nodejs] most of the time.\n\n`sif` runs best in unix-like environments: It leverages the already\nsuperb file searching and sorting capabilities of unix, mainly [`egrep`][egrep]\nand [`sort`][sort].\n\n\u003e **Note**\n\u003e\n\u003e `egrep` and `sort` can be implemented in pure JavaScript (as streams) too;\n\u003e [implementing these in the future][issue-16], will make `sif` more portable\n\u003e and more platform-agnostic. Until then if you don't have [bash][bash],\n\u003e then you'll need an emulation layer to run `sif`.\n\n## Supported Operating Systems\n\n### Unix-Like Operating Systems\n\n`sif` works well in `unix`, and `Mac OS X`.\n\n### Windows\n\nFor `windows` the installer will reject to install. And even if you force it by\n`npm install sif -g --force` you will get error when you're running the program.\n\nThere are [open issues][issues] about that, so it'll be fixed in the future.\nIf you feel like you can fix it faster, fix it and make a pull request; we'll\nlove to have your help.\n\n## How to Install\n\nOnce you have [`node`][nodejs] and [`npm`][npm] installed, execute the following command to install `sif`:\n\n```bash\nsudo npm install sif -g\n```\n\nTo check that `sif` is up and running, simply call `sif` on the terminal.\nThis action will display an introductory help message.\n\n```bash\nsif\n\n     _,\n    /(_\n   |   '-._        . ' .\n   \\    ,-.)      -= * =-\n    \\((` .(        '/. '\n     )\\  _/        /\n  .-'   '--.      /\n  \\,         \\   /|\n   ';,_) _)'\\ \\,//\n\n\n  Usage: sif [options] [command]\n\n  … truncated …\n```\n\nYou can get further help by executing `sif help [cmd]` where `cmd` is the\ncommand name that you want to get help.\n\nFor example, to get further help about the `find` command, simply type the\nfollowing in the terminal:\n\n```bash\nsif help find\n```\n\n## How to Upgrade\n\nTo update `sif` to the latest version run a\n\n```bash\nnpm update sif -g\n```\n\n\u003e **Caveat**\n\u003e\n\u003e Updating `sif` will delete your data.\n\u003e So make sure that you backup your global `node_modules/sif/data` folder\n\u003e before doing an update.\n\u003e\n\u003e [Upgrading will be easier in the upcoming versions][issue-68]; but, it's\n\u003e not without side effects right now.\n\n## Configuration\n\nCurrently, there are no configuration options for `sif`; [this will change\nin the upcoming releases][issue-69].\n\n## Usage Examples\n\n### Searching\n\n```bash\nsif find \"jquery\"\n\n# You can use regular expressions too\nsif find \"jQuery.*css\"\nsif find \"jQ\\S*ry|atom|b..lerpl.te\"\n\n# Since this is a unix shell, you can do further filtering on the results:\nsif find \"jQ\\S*ry|atom|b..lerpl.te\" | grep boiler\n```\n\n### Aliases\n\nTODO:// this command has not been implemented yet.\n\n### Alias\n\n\u003e **Note**\n\u003e\n\u003e This command requires `sudo` access.\n\nAn alias is a single-word token with no spaces in it. Instead of typing\na complicated search RegExp over and over again you can just type the search\nalias preceeded by an \"@\" sign.\n\nFor example, the following statement defines a search alias:\n\n```bash\nsudo sif alias videos \"youtube\\.com|vimeo\\.com\"\n```\n\nAnd the following statement executes a search with the defined alias:\n\n```bash\nsif find @videos\n```\n\nIf you define an existing alias you overrite it.\n\n```bash\n# Define a search alias:\nsif alias test \"test\"\n\n# Update the alias:\nsif alias test \"test|sample\"\n```\n### Removing an Alias\n\nTo remove an alias use `rmalis`:\n\n```bash\nsif rmalias youtube\n```\n\nTODO:// this command is under development.\n\n### Tagging\n\n\u003e **Note**\n\u003e\n\u003e This command requires `sudo` access.\n\nYou can also add tags to a set of links that match a search query.\n\nTags can be any kind of text; try to keep your tags simple and memorable.\n\n```bash\n# Tag all links that match the \"cisco.com\" with 'cisco'.\nsudo sif tag \"cisco.com\" cisco\n```\n\n### Removing a tag\n\n\u003e **Note**\n\u003e\n\u003e This command requires `sudo` access.\n\nRemoving a tag is equally easy:\n\n```bash\nsudo sif rmtag \"cisco.com\" cisco\n```\n\n### Updating the `sif` Index\n\n\u003e **Note**\n\u003e\n\u003e This command requires `sudo` access.\n\nCalling `sudo sif update` will update the index file, amending necessary meta data\nif required.\n\n### Deleting Everything\n\n\u003e **Note**\n\u003e\n\u003e This command requires `sudo` access.\n\n`sif` gets bundled with a lot of useful information and links; yet if\nyou want to start with a blank slate, you can do so.\n\nThe easiest way to do that is to run the following in the command prompt:\n\n```bash\nsudo sif purge\n```\n\nBe warned that this command will delete all the data including the search\nindex, the runbooks, the aliases, and anything else.\n\n### Getting Help\n\nSimply typing `sif`, `sif help`, `sif --help` or `sif h` will display a help\nmessage.\n\nYou can display further help information by typing `sif help [cmd]`.\nFor example, to get help about the `sif find` command, just type\n`sif help find`.\n\n## Hey, I'm Stuck!\n\nFor any issues that you stumble upon, [feel free to open a ticket][new-issue].\n\nTODO:// Code documentation is not ready yet.\n\n## Supported Environments\n\n`sif` uses builtin [bash][bash] commands. So, to\nuse it, you will either need a unix flavor such as [Ubuntu][ubuntu]\nor [Fedora][fedora]; or a fake linux like [Mac OS][mac]; or a linux emulation\nlayer like [Cygwin (*for Windows*)][cygwin].\n\nTherefore, `sif` runs best in unix-like environments (*i.e., Mac OS, and\nLinux*).\n\n\u003e *Note*\n\u003e\n\u003e `sif` is not tested thoroughly on Windows, so your experience there\n\u003e may vary. — If you are a Windows user,\n\u003e [please report any issues you have][new-issue] so that it can be scheduled to\n\u003e be fixed in the upcoming releases.\n\n## Versioning and Backwards Compatibility\n\n`sif` follows [semantic versioning][semver] rules, and it is versioned in the\n\"**major**.**minor**.**patch**\" format.\n\n* Any breaking backwards-incompatible change will\nincrement the **major** version number.\n* Any backwards-compatible enhancement will increment the **minor** version\nnumber.\n* And any bug fixes that don't add extra features will increment the **patch**\nversion number.\n\n----\n\n## The Backstory\n\nI am addicted to links, and I touch a substantial amount of links while\nI'm doing my day-to-day work.\n\nI **collect**, **categorize**, sift through, and **organize** links.\n\nAnd guess what? After you browser's bookmark index grows above a few tens of\nmegabytes, using your browser becomes a burden. Your fellow browser becomes\na \"not-responding-and-unbearably-slow-big-fat-memory-hog\".\n\nAnd, believe me, that's **not fun**.\n\nThere are \"*social bookmarking as a service*\" websites to remedy, of course.\n\nThey, however, have their drawbacks:\n\nThese web applications require you\nto be online. Even if you are lucky to find an offline-enabled one, you'll\nstill need to hit their APIs to do any meaningful work\n(*like performing a search, for instance*).\n\nThe need to be connected; and the need to use some form of graphical interface\n(*be it the browser, or an app*)  introduce **friction** in the way you\nget things done.\n\n\u003e If being interrupted by your pointy-haired boss is the worst thing that kills\n\u003e productivity, **friction** is the next worst thing on the line.\n\nLast, but not the least, under poor network conditions there will be lots of\n**latency** when you are performing a search.\n\n\u003e The next worst annoying thing to having your pinky toe stub in the doorway\n\u003e is watching a spinner a whole minute only to see a \"*Connection Failed*\"\n\u003e error on a slightly-grayish blank page.\n\n`sif` doesn't have any of those problems:\n\n* It has **near-zero** search latency because everything is stored locally.\n* You don't need to push buttons to use it; you only need to **type**.\n* It is **fast**, **responsive**, and **free of distractions**.\n\n\u003e **Note**\n\u003e\n\u003e Along with sifting through links, in the future it will also be possible to\n\u003e search within arbitrary text data\n\u003e (*[such as runbooks](#the-directory-structure)*); however, the current focus\n\u003e of `sif` being the best program to index bookmarks locally.\n\n## Who Should Use `sif`?\n\nIf you love **links**; if you have hundreds (*if not thousands*) bookmarks\nwaiting to be organized; if you have used services like [pocket][pocket],\n[xmarks][xmarks], or [delicious][delicious] for a hope they will be good enough\nto sift through your links; if you love to keep your information all together,\nif you want to **find things without hassle**; and if you like the\n**speed**, **beauty**, and **simplicity** of the **command line**… then\n`sif` is just for you.\n\n----\n\n## Wanna Help?\n\nContributors are more than welcome.\n\nYou can help make `sif` even better by:\n\n* [Suggesting new features by opening issues][new-issue].\n* [Cleaning up open issues][issues].\n* [Finding bugs in the code and creating issues for that][new-issue].\n* Testing `sif` by using it, and [providing feedback][new-issue].\n* [Forking the code, making it better, and creating pull requests][git-pr].\n\n\u003e **Note**\n\u003e\n\u003e If you are planning to contribute to the source code, we won't bore you with\n\u003e a giant list of coding conventions **:)**. It's your contribution that\n\u003e that matters.\n\u003e\n\u003e Instead of a formal style guide, take care to maintain the existing\n\u003e coding style. Other than that, there's no formal contribution requirements.\n\nIf you want to dive into the code, then the following sections may be useful.\n\n## Local Development Setup\n\n\u003e **Note**\n\u003e\n\u003e In this section, we will use `~/PROJECTS/sif` as the project workspace,\n\u003e yours could be different.\n\nTo develop `sif` locally, first [fork it][git-fork] and then [clone][git-clone]\nit to your development environment.\n\nThen `cd` to the project folder:\n\n```bash\ncs ~/PROJECTS/sif\n```\n\nAfter that, `cd` to the project root do an `npm install`:\n\n```bash\nnpm install\n```\n\nThis will install a local development environment for `sif`.\n\nThen, from the project root, execute the following command:\n\n```bash\n./devbin/prepublish.sh\n```\n\nThen execute:\n\n```bash\nsource ./devbin/alias.sh\n```\n\n`alias.sh` will create an alias for `sif` that points to the `sif` executable\nin your project root (*i.e., `~/PROJECTS/bin/sif.js` in our case*).\n\n\u003e **Note**\n\u003e\n\u003e You can also use `npm link`, instead of using `./devbin/alias.sh`.\n\u003e\n\u003e However, [`npm link`][npm-link] will permanently replace your global\n\u003e `sif` command whereas `./devbin/alias.sh` will only replace it for the\n\u003e development session.\n\nYou will need the `.es6` files to be regularly transpiled to `.js` to be able\nto run, debug, and develop the code.\n\nTo make that easier, there is a watcher binary. If you run…\n\n```bash\nnode ./devbin/watch.js\n```\n\n…then whenever you change an `.es6` module, it will be automatically transpiled\nto `.js`.\n\n\u003e **Note**\n\u003e\n\u003e You can read more about **ES6** and transpilation at\n\u003e [Babel's documentation][babel].\n\n## `sif` Internals\n\n`sif` uses Linux [bash][bash] file processing commands,\n[child processes][child-process] and [streams][node-streams] to get the job\ndone. It's a command line shell that manages a large text file.\n\nThis large text file is **the index**. The following section has some additional\ndetails about that.\n\n### The Index (*data/index.idx*)\n\nThe index is a plain text file that can be modified with your favorite text\neditor.\n\nWhen you run a `sif update` this file is traversed and processed as follows:\n\n* The lines get sorted in alphabethical order\n* Some additional meta data (*such as description and titles*) is fetched from\nthe web and amended to the lines.\n\nThis index file is regularly updated, and you can get the most recent version by\nsimply running an `npm update sif -g` command.\n\nAdditionally, you are more than welcome to add links to it and [create\na pull request][git-pr] to get them merged back.\n\nTo do that simply…\n\n* [Fork this repository][git-fork].\n* [Clone your forked repo][git-clone].\n* Add the links you want to be merged to the end of `data/index.idx`.\n* Finally, [create a pull request][git-pr].\n\n### The Directory Structure\n\n* **bin**: Contains commands that the global `sif` application uses. The `sif`\n global is an alias to `bin/sif.js`. — `bin/sif.es6` is the entry point\n of the application.\n* **data**: The index file, and the runbooks are stored here.\n* **data/runbooks**: This is a proof of concept. It includes bite-sized\ninstructions to manage certain technical tasks, so that you don't have to google\nit over and over again.\n* **devbin**: Utility scripts that are used for developing, bundling, and\npublishing `sif`.\n* **lib**: Helper modules that the files in **bin** use.\n* **CHANGELOG.md**: A change log of what has been added recently.\n* **CODE_OF_CONDUCT.md**: Reminds you to be nice to others.\n* **README.md**: This readme you are looking at.\n* **LICENSE.md**: Boring copyright stuff.\n\n## Contact Information\n\n* **Project Owner**: [Volkan Özçelik](mailto:me@volkan.io)\n* **Project Website**: \u003chttps://github.com/v0lkan/sif\u003e\n\n## License\n\nMIT-Licensed. — See [the license file](LICENSE.md) for details.\n\n## Code of Conduct\n\nWe are committed to making participation in this project a harassment-free\nexperience for everyone, regardless of the level of experience, gender, gender\nidentity and expression, sexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\n[See the code of conduct for details](CODE_OF_CONDUCT.md).\n\n[git-clone]: https://git-scm.com/docs/git-clone\n[git-fork]: https://help.github.com/articles/fork-a-repo/\n[git-pr]: https://help.github.com/articles/using-pull-requests/\n\n[nodejs]: https://nodejs.org\n[npm]: https://www.npmjs.com\n[babel]: http://babeljs.io\n\n[pocket]: https://getpocket.com\n[xmarks]: http://www.xmarks.com\n[delicious]: https://delicious.com\n\n[ubuntu]: http://www.ubuntu.com\n[fedora]: https://getfedora.org\n[cygwin]: https://www.cygwin.com\n[mac]: http://www.wikiwand.com/en/Mac_OS\n\n[bash]: https://www.gnu.org/software/bash/\n[egrep]: http://ss64.com/bash/egrep.html\n[sort]: http://ss64.com/bash/sort.html\n[child-process]: https://nodejs.org/api/child_process.html\n[node-streams]: https://nodejs.org/api/stream.html\n[npm-link]: https://docs.npmjs.com/cli/link\n\n[semver]: http://semver.org\n\n[issues]: http://github.com/v0lkan/sif/issues/\n[new-issue]: http://github.com/v0lkan/sif/issues/new\n[issue-16]: https://github.com/v0lkan/sif/issues/16\n[issue-68]: https://github.com/v0lkan/sif/issues/68\n[issue-69]: https://github.com/v0lkan/sif/issues/69\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerotohero-dev%2Fsif","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzerotohero-dev%2Fsif","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerotohero-dev%2Fsif/lists"}