{"id":16930497,"url":"https://github.com/tmccombs/ssv","last_synced_at":"2025-07-03T07:33:28.454Z","repository":{"id":150523253,"uuid":"488093743","full_name":"tmccombs/ssv","owner":"tmccombs","description":"Separator Separated Values file format and libraries","archived":false,"fork":false,"pushed_at":"2022-05-03T07:38:16.000Z","size":11,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-13T20:39:06.859Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tmccombs.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":"2022-05-03T05:56:30.000Z","updated_at":"2025-04-03T18:14:18.000Z","dependencies_parsed_at":"2023-07-29T07:15:40.493Z","dependency_job_id":null,"html_url":"https://github.com/tmccombs/ssv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tmccombs/ssv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmccombs%2Fssv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmccombs%2Fssv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmccombs%2Fssv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmccombs%2Fssv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tmccombs","download_url":"https://codeload.github.com/tmccombs/ssv/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmccombs%2Fssv/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263283090,"owners_count":23442287,"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":[],"created_at":"2024-10-13T20:41:50.677Z","updated_at":"2025-07-03T07:33:28.425Z","avatar_url":"https://github.com/tmccombs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"The purpose of this project is to define a well-specified SSV format for tabular data, and\nprovider libraries and tools for working with this format.\n\n# What is SSV?\n\nSSV stands for \"Separator Separated Values\". It is a file format similar to CSV or TSV, but\ninstead of using commas (or tabs) and newlines to separate fields and records, it uses the ASCII\nUnit Separator and Record Separator characters.\n\n# Why SSV?\n\nThe problem with CSV and TSV is that the delimiters can, and often do, occur in field content, which\nnecessitates some form of escaping or quoting. While many applications support such escaping or\nquoting, there is not a well-established standard, and applications can treat the same file\ninconsistently. In addition, properly generating or parsing escapes and quotes can be difficult with\nstandard Unix commands, or in languages that don't have a CSV library with just support.\n\nIt turns out ASCII already has dedicated characters for separators, and those characters\nare very rare in most text. So, by using those characters, we can avoid the problem of text\nconflicting with the delimiters.\n\nUnfortunately, these characters are non-printing, so displaying the file on a terminal or in a\ntext editor isn't as human friendly as CSV or TSV. This is somewhat alleviated by making the\ndelimiter include a whitespace character as well, so the actual delimiters are `\\x1f\\t` for the\nfield delimiter and `\\x1e\\n` for the record delimiter. Which means when printed to terminal for\nexample, it will look similar to a TSV file.\n\n\n# Separator Separated Values\n\nText is encoded as UTF-8.\n\nRecords (rows) are separated by '\\\\x1e\\\\n' (Record Separator [RS] and newline [LF])\n\nFields are separated by '\\\\x1f\\\\t' (Unit Separator [US] and tab [HT])\n\nThe final record of an SSV file **SHOULD** end with a final record delimiter (`\\x1e\\n`). That is the file as\na whole should end with a record delimiter. This allows multiple files to be easily concatenated together.\n\nAn application (or library) that reads an SSV file **SHOULD** allow the final record to omit the record delimiter at the\nend and treat the text between the last record delimiter and the end of file as a valid record. However, if the file ends\nwith a record delimiter the application (or library) **MUST NOT** treat that as a final empty record.\n\n\n# \"Compact\" Separator Separated Values\n\nSimilar to above except the separators don't include newlines or tabs.\n\n## Future extensions\n\nThe following are currently out of scope for this project, but may possibly be explored as extensions\nat a later time:\n\n- Escaping the delimiters. (probably only necessary for binary data that would probably be better\n  to base64 encode anyway).\n- Multiple documents in a single file delimited by the File Separator and/or Group Separator\n- Inline indication if first row is header. For now, the application or user is responsible for determining this.\n- Non-text data types. For now, parsing fields as anything besides text is up to the application.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmccombs%2Fssv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftmccombs%2Fssv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmccombs%2Fssv/lists"}