{"id":20167655,"url":"https://github.com/iomz/bibfuse","last_synced_at":"2026-04-30T06:38:16.203Z","repository":{"id":46314683,"uuid":"416161258","full_name":"iomz/bibfuse","owner":"iomz","description":"A CLI tool to manage bibtex entries written in Go","archived":false,"fork":false,"pushed_at":"2025-11-23T14:35:37.000Z","size":113,"stargazers_count":3,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-23T16:19:13.554Z","etag":null,"topics":["bibtex","bibtexparser","go","latex","linter","sqlite3"],"latest_commit_sha":null,"homepage":"","language":"Go","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/iomz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null}},"created_at":"2021-10-12T02:55:34.000Z","updated_at":"2025-11-23T14:34:36.000Z","dependencies_parsed_at":"2022-09-18T11:02:17.104Z","dependency_job_id":null,"html_url":"https://github.com/iomz/bibfuse","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/iomz/bibfuse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fbibfuse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fbibfuse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fbibfuse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fbibfuse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iomz","download_url":"https://codeload.github.com/iomz/bibfuse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fbibfuse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32457110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"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":["bibtex","bibtexparser","go","latex","linter","sqlite3"],"created_at":"2024-11-14T00:54:38.422Z","updated_at":"2026-04-30T06:38:16.169Z","avatar_url":"https://github.com/iomz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"bibfuse\n=======\n[![Test](https://github.com/iomz/bibfuse/actions/workflows/test.yml/badge.svg)](https://github.com/iomz/bibfuse/actions/workflows/test.yml)\n[![Docker](https://github.com/iomz/bibfuse/actions/workflows/docker.yml/badge.svg)](https://github.com/iomz/bibfuse/actions/workflows/docker.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/iomz/bibfuse)](https://goreportcard.com/report/github.com/iomz/bibfuse)\n[![codecov](https://codecov.io/gh/iomz/bibfuse/branch/main/graph/badge.svg?token=fN1tyc6ssX)](https://codecov.io/gh/iomz/bibfuse)\n[![License](https://img.shields.io/github/license/iomz/bibfuse.svg)](https://github.com/iomz/bibfuse/blob/main/LICENSE)\n[![GoDoc](https://godoc.org/github.com/iomz/bibfuse?status.svg)](https://godoc.org/github.com/iomz/bibfuse)\n\nA CLI tool to manage bibtex entries using [nickng/bibtex](https://github.com/nickng/bibtex).\n\nbibfuse creates an SQLite database file (`--db`) from given BibTex files (`*.bib`), and generates a single *clean* `.bib` file (`--out`).\n\nThe filtering formats can be defined in the config file (`--config`). bibfuse takes the `bibfuse.toml` in this package by default.\n\nIf no `.bib` files are given, it just reads the database and updates the BibTex file.\n\n# Table of Contents\n\n* [Synopsis](#synopsis)\n  * [Usage](#usage)\n  * [Usage with Docker](#docker)\n* [bibfuse filters for BibTex format](#filters)\n  * [`todos` and `optionals` filters](#todo-optional)\n  * [`oneof_` filters with `-smart`](#oneof)\n  * [Citation Types](#cite-type)\n    * [@article](#article)\n    * [@book](#book)\n    * [@incollection](#incollection)\n    * [@inproceedings](#inproceedings)\n    * [@mastersthesis](#mastersthesis)\n    * [@misc](#misc)\n    * [@phdthesis](#phdthesis)\n    * [@techreport](#techreport)\n    * [@unpublished](#unpublished)\n* [Contribution](#contribution)\n* [License](#license)\n* [Author](#author)\n\n# Synopsis \u003ca name=\"synopsis\"/\u003e\n\n## Install \u003ca name=\"install\"/\u003e\n```console\n% go get -u github.com/iomz/bibfuse/...\n```\n\n## Usage \u003ca name=\"usage\"/\u003e\n\n```console\n% bibfuse -h\nUsage of bibfuse: [options] [.bib ... .bib]\n  -config string\n        The bibfuse.[toml|yml] defining the filters. (default \"bibfuse.toml\")\n  -db string\n        The SQLite file to read/write. (default \"bib.db\")\n  -no-optional\n        Suppress \"OPTIONAL\" fields in the resulting bibtex.\n  -no-todo\n        Suppress \"TODO\" fields in the resulting bibtex.\n  -out string\n        The resulting bibtex to write (it overrides if exists). (default \"out.bib\")\n  -show-empty\n        Do not hide empty fields in the resulting bibtex.\n  -smart\n        Use oneof selectively filters when importing bibtex.\n  -verbose\n        Print verbose messages.\n  -version\n        Print version.\n```\n\n### Example\n```console\n% cat ref.bib\n@article{someone2021a,\n    title     = {{A Journal Article}},\n}\n% bibfuse ref.bib\n2021/10/17 15:47:32 parsing ref.bib\n2021/10/17 15:47:32 +1 new entries\n2021/10/17 15:47:32 bib.db contains 1 entries\n2021/10/17 15:47:32 1 entries written to out.bib\n% cat out.bib\n@article{someone2021a,\n    title       = {{A Journal Article}},\n    author      = \"(TODO)\",\n    url         = \"(OPTIONAL)\",\n    doi         = \"(OPTIONAL)\",\n    isbn        = \"(OPTIONAL)\",\n    issn        = \"(OPTIONAL)\",\n    journal     = \"(TODO)\",\n    metanote    = \"(OPTIONAL)\",\n    number      = \"(OPTIONAL)\",\n    numpages    = \"(OPTIONAL)\",\n    pages       = \"(OPTIONAL)\",\n    publisher   = \"(OPTIONAL)\",\n    volume      = \"(OPTIONAL)\",\n    year        = \"(TODO)\",\n}\n```\n\n## Usage with Docker \u003ca name=\"docker\"/\u003e\n```console\n% cat ref.bib\n@article{someone2021a,\n    title     = {{A Journal Article}},\n}\n% docker run -v $(pwd):$(pwd) -w $(pwd) --rm iomz/bibfuse ref.bib\n2021/10/17 13:53:33 parsing ref.bib\n2021/10/17 13:53:33 +0 new entries\n2021/10/17 13:53:33 bib.db contains 1 entries\n2021/10/17 13:53:33 1 entries written to out.bib\n% sqlite3 bib.db \"SELECT * FROM entries;\"\n1|someone2021a|article|(TODO)|{A Journal Article}||(OPTIONAL)||(OPTIONAL)|(OPTIONAL)||(TODO)|(OPTIONAL)||(OPTIONAL)||(OPTIONAL)|(OPTIONAL)|(OPTIONAL)|(OPTIONAL)||||(OPTIONAL)||(OPTIONAL)|(TODO)\n```\n\n# bibfuse filters for BibTex format \u003ca name=\"filters\"/\u003e\nbibfuse reflects rather subjective opinion to filter and flag the required fields depending on the type, aiming for the compatibility with most of the research publication requirements.\n\n## `todos` and `optionals` filters \u003ca name=\"todo-optional\"/\u003e\n\nbibfuse filters fields for each entry depending on the type: `@article`, `@book`, `@incollection`, `@inproceedings`, `@mastersthesis`, `@misc`, `@phdthesis`, `@techreport`, and `@unpublished` as defined in `bibfuse.toml`.\n\nMandatory fields are filled with `(TODO)` while optional fileds are filled with `(OPTIONAL)`.\n\n## `oneof_` filters with `-smart` \u003ca name=\"oneof\"/\u003e\n\nIn addition, you can define additional filters whose name starting with `oneof_` to selectively _discard_ some fields in presence of a specific fields with the `-smart` option. For example, by default for the `@article` type the default `bibfuse.toml` has the following `oneof_` filter:\n\n```toml\noneof_doi_page = [\n    \"doi\",\n    \"pages\",\n    \"numpages\"\n]\n```\n\nThis checks each field in the order \"doi\", \"pages\", and \"numpages\" then after finding the first one of neither empty, \"(OPTIONAL)\", nor \"(TODO)\", bibfuse discards the remaining fields and does _NOT_ store them in the database. Note that if you want to retain those fields, you should not use this `-smart` option.\n\nThis feature enables rather concise bibliography in your manuscript while maintaining the accessibility to the cited documents through more efficient identities (e.g., DOI).\n\n## Citation Types \u003ca name=\"cite-type\"/\u003e\n\n### Journal articles \u003ca name=\"article\"/\u003e\n```latex\n@article{mizutani2021article\n    title     = {{Title of the Article}},\n    author    = \"(TODO)\",\n    journal   = \"(TODO)\",\n    year      = \"(TODO)\",\n    doi       = \"(OPTIONAL)\",\n    isbn      = \"(OPTIONAL)\", % removed if doi exists\n    issn      = \"(OPTIONAL)\", % removed if doi exists\n    metanote  = \"(OPTIONAL)\",\n    number    = \"(OPTIONAL)\", % removed if doi exists\n    numpages  = \"(OPTIONAL)\", % removed if doi exists\n    pages     = \"(OPTIONAL)\", % removed if doi exists\n    publisher = \"(OPTIONAL)\", % removed if doi exists\n    url       = \"(OPTIONAL)\", % removed if doi exists\n    volume    = \"(OPTIONAL)\", % removed if doi exists\n}\n```\n\n### Books \u003ca name=\"book\"/\u003e\n```latex\n@book{mizutani2021book,\n    title     = {{Title of the Book}},\n    author    = \"(TODO)\"\n    publisher = \"(TODO)\",     % removed if doi exists\n    year      = \"(TODO)\",\n    doi       = \"(OPTIONAL)\",\n    edition   = \"(OPTIONAL)\", % removed if doi exists\n    isbn      = \"(OPTIONAL)\", % removed if doi exists\n    issn      = \"(OPTIONAL)\", % removed if doi exists\n    metanote  = \"(OPTIONAL)\",\n    url       = \"(OPTIONAL)\", % removed if doi exists\n}\n```\n\n### Chapters or articles in a book \u003ca name=\"incollection\"/\u003e\n```latex\n@incollection{mizutani2012incollection,\n    title     = {{Title of the Book Chapter}},\n    author    = \"(TODO)\"\n    booktitle = \"(TODO)\",\n    publisher = \"(TODO)\",     % removed if doi exists\n    year      = \"(TODO)\",\n    doi       = \"(OPTIONAL)\",\n    isbn      = \"(OPTIONAL)\", % removed if doi exists\n    issn      = \"(OPTIONAL)\", % removed if doi exists\n    metanote  = \"(OPTIONAL)\",\n    numpages  = \"(OPTIONAL)\", % removed if doi exists\n    pages     = \"(OPTIONAL)\", % removed if doi exists\n    series    = \"(OPTIONAL)\",\n    url       = \"(OPTIONAL)\", % removed if doi exists\n}\n```\n\n### Conference papers, lecture notes, extended abstract, etc. \u003ca name=\"inproceedings\"/\u003e\n```latex\n@inproceedings{mizutani2012inproceedings,\n    title     = {{Title of the Conference Paper}},\n    author    = \"(TODO)\"\n    booktitle = \"(TODO)\",\n    year      = \"(TODO)\",\n    doi       = \"(OPTIONAL)\",\n    isbn      = \"(OPTIONAL)\", % removed if doi exists\n    issn      = \"(OPTIONAL)\", % removed if doi exists\n    metanote  = \"(OPTIONAL)\",\n    numpages  = \"(OPTIONAL)\", % removed if doi exists\n    pages     = \"(OPTIONAL)\", % removed if doi exists\n    publisher = \"(OPTIONAL)\", % removed if doi exists\n    series    = \"(OPTIONAL)\",\n    url       = \"(OPTIONAL)\", % removed if doi exists\n}\n```\n\n### Master's theses \u003ca name=\"mastersthesis\"/\u003e\n```latex\n@mastersthesis{mizutani2021mastersthesis,\n    title       = {{Title of the Master's Thesis}},\n    author      = \"(TODO)\",\n    url         = \"(OPTIONAL)\",\n    metanote    = \"(OPTIONAL)\",\n    school      = \"(TODO)\",\n    year        = \"(TODO)\",\n}\n\n```\n\n### Online resources, artifacts, etc. \u003ca name=\"misc\"/\u003e\n```latex\n@misc{mizutani2021misc,\n    title       = \"Title of the Resource\",\n    author      = \"(TODO)\"\n    note        = \"(TODO)\",\n    url         = \"(TODO)\",\n    year        = \"(TODO)\",\n    institution = \"(OPTIONAL)\",\n    metanote    = \"(OPTIONAL)\",\n}\n```\n\n### Ph.D. theses / dissertations \u003ca name=\"phdthesis\"/\u003e\n```latex\n@phdthesis{mizutani2021phdthesis,\n    title       = {{Title of the Ph.D. Thesis}},\n    author      = \"(TODO)\",\n    url         = \"(OPTIONAL)\",\n    metanote    = \"(OPTIONAL)\",\n    school      = \"(TODO)\",\n    year        = \"(TODO)\",\n}\n```\n\n### Standards, specifications, white papers, etc. \u003ca name=\"techreport\"/\u003e\n```latex\n@techreport{mizutani2021techreport,\n    title       = {{Title of the Technical Document}},\n    author      = \"(TODO)\",\n    institution = \"(TODO)\",\n    year        = \"(TODO)\",\n    metanote    = \"(OPTIONAL)\",\n    series      = \"(OPTIONAL)\",\n    url         = \"(OPTIONAL)\",\n    version     = \"(OPTIONAL)\",\n}\n```\n\n### Documents not formally published. \u003ca name=\"unpublished\"/\u003e\n```latex\n@unpublished{mizutani2021unpublished,\n    title       = {{Title of the Unpublished Work}},\n    author      = \"(TODO)\",\n    url         = \"(TODO)\",\n    metanote    = \"(OPTIONAL)\",\n    note        = \"(TODO)\",\n}\n```\n\n# Contribution \u003ca name=\"contribution\"/\u003e\nSee `CONTRIBUTING.md`.\n\n# License \u003ca name=\"license\"/\u003e\nSee `LICENSE`.\n\n# Author \u003ca name=\"author\"/\u003e\nIori Mizutani ([@iomz](https://github.com/iomz))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiomz%2Fbibfuse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiomz%2Fbibfuse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiomz%2Fbibfuse/lists"}