{"id":13739685,"url":"https://github.com/pirtleshell/rust-gedcom","last_synced_at":"2025-10-23T22:33:14.669Z","repository":{"id":40661787,"uuid":"267749340","full_name":"pirtleshell/rust-gedcom","owner":"pirtleshell","description":"a gedcom parser written in rust :crab:","archived":false,"fork":false,"pushed_at":"2023-01-05T14:24:38.000Z","size":181,"stargazers_count":7,"open_issues_count":6,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-13T23:07:43.650Z","etag":null,"topics":["gedcom","gedcom-parser","genealogy","rust","rust-lang"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/gedcom","language":"Rust","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/pirtleshell.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-29T02:45:16.000Z","updated_at":"2025-03-18T11:59:23.000Z","dependencies_parsed_at":"2023-02-04T06:31:30.516Z","dependency_job_id":null,"html_url":"https://github.com/pirtleshell/rust-gedcom","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pirtleshell%2Frust-gedcom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pirtleshell%2Frust-gedcom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pirtleshell%2Frust-gedcom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pirtleshell%2Frust-gedcom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pirtleshell","download_url":"https://codeload.github.com/pirtleshell/rust-gedcom/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251352638,"owners_count":21575865,"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":["gedcom","gedcom-parser","genealogy","rust","rust-lang"],"created_at":"2024-08-03T04:00:36.537Z","updated_at":"2025-10-23T22:33:14.619Z","avatar_url":"https://github.com/pirtleshell.png","language":"Rust","funding_links":[],"categories":["Parsers"],"sub_categories":["Rust"],"readme":"# rust-gedcom\n\n\u003ca href=\"https://crates.io/crates/gedcom\"\u003e\n    \u003cimg style=\"display: inline!important\" src=\"https://img.shields.io/crates/v/gedcom.svg\"\u003e\u003c/img\u003e\n\u003c/a\u003e\n\u003ca href=\"https://docs.rs/gedcom\"\u003e\n    \u003cimg style=\"display: inline!important\" src=\"https://docs.rs/gedcom/badge.svg\"\u003e\u003c/img\u003e\n\u003c/a\u003e\n\n\u003e a gedcom parser written in rust 🦀\n\n## About this project\n\nGEDCOM is a file format for sharing genealogical information like family trees! It's being made obsolete by [GEDCOM-X](https://github.com/FamilySearch/gedcomx) but is still widely used in many genealogy programs.\n\nI wanted experience playing with parsers and representing tree structures in Rust, and noticed a parser for Rust did not exist. And thus, this project was born! A fun experiment to practice my Rust abilities.\n\nIt hopes to be ~~fully~~ mostly compliant with the [Gedcom 5.5.1 specification](https://edge.fscdn.org/assets/img/documents/ged551-5bac5e57fe88dd37df0e153d9c515335.pdf).\n\nI have found this [5.5.2 specification](https://jfcardinal.github.io/GEDCOM-5.5.2/gedcom-5.5.2.html) useful in its assessment of which tags are worth supporting or not.\n\n## Usage\n\nThis crate comes in two parts. The first is a binary called `parse_gedcom`, mostly used for my testing \u0026 development. It prints the `GedcomData` object and some stats about the gedcom file passed into it:\n```bash\nparse_gedcom ./tests/fixtures/sample.ged\n\n# outputs tree data here w/ stats\n# ----------------------\n# | Gedcom Data Stats: |\n# ----------------------\n#   submitters: 1\n#   individuals: 3\n#   families: 2\n#   repositories: 1\n#   sources: 1\n#   multimedia: 0\n# ----------------------\n```\n\nThe second is a library containing the parser.\n\n## JSON Serializing/Deserializing with `serde`\nThis crate has an optional feature called `json` that implements `Serialize` \u0026 `Deserialize` for the gedcom data structure. This allows you to easily integrate with the web.\n\nFor more info about serde, [check them out](https://serde.rs/)!\n\nThe feature is not enabled by default. There are zero dependencies if just using the gedcom parsing functionality.\n\nUse the json feature with any version \u003e=0.2.1 by adding the following to your Cargo.toml:\n```toml\ngedcom = { version = \"\u003cversion\u003e\", features = [\"json\"] }\n```\n\n## 🚧 Progress 🚧\n\nThere are still parts of the specification not yet implemented and the project is subject to change. The way I have been developing is to take a gedcom file, attempt to parse it and act on whatever errors or omissions occur. In it's current state, it is capable of parsing the [sample.ged](tests/fixtures/sample.ged) in its entirety.\n\nHere are some notes about parsed data \u0026 tags. Page references are to the [Gedcom 5.5.1 specification](https://edge.fscdn.org/assets/img/documents/ged551-5bac5e57fe88dd37df0e153d9c515335.pdf).\n\n### Top-level tags\n\n* `HEAD.SOUR` - p.42 - The source in the header is currently skipped.\n* `SUBMISSION_RECORD` - p.28 - No attempt at handling this is made.\n* `MULTIMEDIA_RECORD` - p.26 - Multimedia (`OBJE`) is not currently parsed.\n* `NOTE_RECORD` - p.27 - Notes (`NOTE`) are also unhandled. (except in header)\n\nTags for families (`FAM`), individuals (`IND`), repositories (`REPO`), sources (`SOUR`), and submitters (`SUBM`) are handled. Many of the most common sub-tags for these are handled though some may not yet be parsed. Mileage may vary.\n\n\n## Notes to self\n\n* Consider creating some Traits to handle change dates, notes, source citations, and other recurring fields.\n\n## License\n\n© 2021, [Robert Pirtle](https://robert.pirtle.xyz/). licensed under [MIT](license.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpirtleshell%2Frust-gedcom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpirtleshell%2Frust-gedcom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpirtleshell%2Frust-gedcom/lists"}