{"id":13817031,"url":"https://github.com/JairusSW/fass","last_synced_at":"2025-05-15T18:32:47.574Z","repository":{"id":155839094,"uuid":"624202786","full_name":"JairusSW/fass","owner":"JairusSW","description":"A blindingly fast schema-driven serialization format","archived":false,"fork":false,"pushed_at":"2024-05-30T01:33:25.000Z","size":14540,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-08T20:47:55.282Z","etag":null,"topics":["fast","performance","serialization","serialization-format"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/JairusSW.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}},"created_at":"2023-04-06T00:54:59.000Z","updated_at":"2024-12-29T02:02:59.000Z","dependencies_parsed_at":"2024-01-18T03:48:26.331Z","dependency_job_id":null,"html_url":"https://github.com/JairusSW/fass","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/JairusSW%2Ffass","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JairusSW%2Ffass/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JairusSW%2Ffass/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JairusSW%2Ffass/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JairusSW","download_url":"https://codeload.github.com/JairusSW/fass/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254397972,"owners_count":22064591,"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":["fast","performance","serialization","serialization-format"],"created_at":"2024-08-04T06:00:31.848Z","updated_at":"2025-05-15T18:32:47.191Z","avatar_url":"https://github.com/JairusSW.png","language":"TypeScript","funding_links":[],"categories":["Packages"],"sub_categories":[],"readme":"# FASS\n\nFASS is a schema-driven serialization format designed for minimal overhead, high performance, and ease of use. It aims to be as fast as possible while maintaining as little overhead as possible.\n\n## Purpose\n\nFASS is a lightweight serialization format meant to efficiently store complex data structures into a comprehensive binary form. Designed for minimal overhead, FASS compiles down to a few memory loads and stores without any need for parsing in order to achieve its blazing fast speed. Because of its ordered structure sequence, it eliminates the need for key storage and computation, bringing a considerable size difference.\n\n## Features\n\n- Schema Driven: FASS uses its own schema format and compiler to generate and optimize complex structures in any supported language.\n- User Defined Types: FASS allows the user to define up to 200 custom data types.\n- Read Without Parsing: FASS eliminates the need for a parser allowing the user to access any section of data without the need to parse first.\n\n## Differences compared to other serialization formats\n\n- The FASS `struct` type is inspired by [Apache Avro](https://avro.apache.org/)'s binary format and eliminates the need for keys.\n- Similar to [FlatBuffers](https://github.com/google/flatbuffers), FASS implements per-key serialization and deserialization, but experiences less overhead due to its optimizing code generator.\n- It is much more performant than [JSON](https://www.json.org/json-en.html) because it takes advantage of the strongly typed schema driven nature to produce much more compact stripped down binary buffers, at the cost of being less dynamic (FASS is not a direct replacement or competitor for JSON).\n- P.S. Need to compare stuff when FASS has a MVP.\n\n## Codegen\n\nTake a look at the current codegen in https://github.com/JairusSW/fass/tree/master/examples\n\nAssemblyScript is supported, and TypeScript development is on pause for now.\n\n## Types\n\n**Primitive Types**\n\n- char\n- u8\n- i8\n- u16\n- i16\n- u32\n- i32\n- u64\n- i64\n- f32\n- f64\n\n**Structure Types**\n\n- struct\n- enum\n\n## Schema Format\n\nFASS Schemas are designed to be readable and minimal.\n\nA basic example of 3D Vector representation.\n\n_Vec3.fass_\n\n```\nstruct Vec3 {\n    x: f32\n    y: f32\n    z: f32\n}\n```\n\nExample of a complex data structure.\n\n_Player.fass_\n\n```\ninclude \"./Vec3.fass\"\n\nstruct Player {\n    team: Team\n    name: char[]\n    id: i32\n    pos: Vec3\n    data: u8[5]\n}\n\nenum Team {\n    red\n    blue\n}\n```\n\n## Schema Features\n\n**Strings**\n\nStrings are declared as a array of `char`\n\n`char[]`\n\n**Arrays**\n\nThere are two flavors of arrays--fixed and variable length arrays.\n\nA variable length array is a array who's length may vary. These are usually less performant than fixed arrays.\n\n`type[]`\n\nA fixed array does not change in size and is much more performant.\n\n`type[LENGTH_OF_ARRAY]`\n\nThe same may be applied for strings (`char[]`)\n\n`char[LENGTH_OF_STRING]`\n\nMany more features will be implemented later :)\n\n## Usage (AssemblyScript)\n\nInstall from GitHub (While in development)\n\n`npm i JairusSW/fass -g`\n\nWrite your schemas and build the files.\nWe are using a Vector 3 schema for this example.\n\n```\nstruct Vec3 {\n    x: u8\n    y: u8\n    z: u8\n}```\n\n`fass build INPUT_FOLDER --assemblyscript -o OUTPUT_FOLDER`\n\nTake a look at the generated files, and use the provided classes.\n\nNow, in AssemblyScript, import it\n\n```js\nimport { Vec3 } from \"PATH-TO-VEC3.TS\"\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJairusSW%2Ffass","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJairusSW%2Ffass","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJairusSW%2Ffass/lists"}