{"action":"created","comment":{"url":"https://api.github.com/repos/WebAssembly/design/pulls/comments/52283675","id":52283675,"diff_hunk":"@@ -1,122 +1,400 @@\n # Binary Encoding\n \n-This document describes the [portable](Portability.md) binary encoding of the\n-[Abstract Syntax Tree](AstSemantics.md) nodes.\n-\n-The binary encoding is designed to allow fast startup, which includes reducing\n-download size and allow for quick decoding. For more information, see the \n-[rationale document](Rationale.md#why-a-binary-encoding)\n-\n-Reducing download size, is achieved through three layers:\n-\n- * The **raw** binary encoding itself, natively decoded by the browser, and to\n-   be standardized in the [MVP](MVP.md).\n- * **Specific** compression to the binary encoding, that is unreasonable to\n-   expect a generic compression algorithm like gzip to achieve.\n-   * This is not meant to be standardized, at least not initially, as it can be\n-     done with a downloaded decompressor that runs as web content on the client,\n-     and in particular can be implemented in a [polyfill](Polyfill.md).\n- * **Generic** compression, such as gzip, already supported in browsers. Other\n-   compression algorithms being considered and which might be standardized\n-   include: LZMA, [LZHAM](https://github.com/richgel999/lzham_codec),\n-    [Brotli](https://datatracker.ietf.org/doc/draft-alakuijala-brotli/).\n-\n-## Variable-length integers\n- * [Polyfill prototype](https://github.com/WebAssembly/polyfill-prototype-1) shows significant size savings before (31%) and after (7%) compression.\n- * [LEB128](https://en.wikipedia.org/wiki/LEB128) except limited to uint32_t payloads.\n-\n-## Global structure\n-\n-* A module contains (in this order):\n-  - A header, containing:\n-    + The [magic number](https://en.wikipedia.org/wiki/Magic_number_%28programming%29)\n-    + Other data TBD\n-  - A table (sorted by offset) containing, for each section:\n-    + A string literal section type name\n-    + 64-bit offset within the module\n-  - A sequence of sections\n-* A section contains:\n-  - A header followed by\n-  - The section contents (specific to the section type)\n-* A `definitions` section contains (in this order):\n-  - The generic section header\n-  - A table (sorted by offset) containing, for each type which has operators:\n-    + A standardized string literal [type name](AstSemantics.md#expression-types).\n-      The index of a type name in this table is referred to as a type ID\n-    + 64-bit offset of its operator table within the section\n-  - A sequence of operator tables\n-  - An operator table contains:\n-    + A sequence of standardized string literal [operator names](AstSemantics.md),\n-      where order determines operator index\n-* A `code` section contains (in this order):\n-  - The generic section header\n-  - A table (sorted by offset) containing, for each function:\n-     + Signature\n-     + Function attributes, valid attributes TBD (could include hot/cold, optimization level, noreturn, read/write/pure, ...)\n-     + 64-bit offset within the section\n-  - A sequence of functions\n-  - A function contains:\n-    + A table containing, for each type ID that has [locals](AstSemantics.md#local-variables):\n-      * Type ID\n-      * Count of locals\n-    + The serialized AST\n-* A `data` section contains (in this order):\n-   - The generic section header\n-   - A sequence of byte ranges within the binary and corresponding addresses in the linear memory\n-\n-\n-All strings are encoded as null-terminated UTF8. Data segments represent\n-initialized data that is loaded directly from the binary into the linear memory\n-when the program starts (see [modules](Modules.md#linear-memory-section)).\n-\n-## Serialized AST\n-\n-* Use a preorder encoding of the AST\n-  * Efficient single-pass validation+compilation and polyfill\n-* The data of a node (if there is any), is written immediately after the operator and before child nodes\n-  * The operator statically determines what follows, so no generic metadata is necessary.\n+This document describes the [portable](Portability.md) binary encoding of the WebAssembly modules.\n+\n+The binary encoding is a dense representation of module information that enables \n+small files, fast decoding, and reduced memory usage.\n+See the [rationale document](Rationale.md#why-a-binary-encoding) for more detail.\n+\n+The encoding is split into three layers:\n+\n+* **Layer 0** is a simple pre-order encoding of the AST and related data structures.\n+  The encoding is dense and trivial to interact with, making it suitable for\n+  scenarios like JIT, instrumentation tools, and debugging.\n+* **Layer 1** provides structural compression on top of layer 0, exploiting\n+  specific knowledge about the nature of the syntax tree and its nodes.\n+  The structural compression introduces more efficient encoding of values, \n+  rearranges values within the module, and prunes structurally identical\n+  tree nodes.\n+* **Layer 2** applies generic compression techniques, already available\n+  in browsers and other tooling. Algorithms as simple as gzip can deliver\n+  good results, but more sophisticated algorithms like \n+  [LZHAM](https://github.com/richgel999/lzham_codec) and\n+  [Brotli](https://datatracker.ietf.org/doc/draft-alakuijala-brotli/) are able\n+  to deliver dramatically smaller files.\n+\n+Most importantly, the layering approach allows development and standardization to\n+occur incrementally. For example, Layer 1 and Layer 2 encoding techniques can be\n+experimented with by application-level decompressing to the layer below. As \n+compression techniques  stabilize, they can be standardized and moved into native \n+implementations.\n+\n+# Data types\n+\n+### uint8\n+A single-byte unsigned integer.\n+\n+### uint16\n+A two-byte little endian unsigned integer.\n+\n+### uint32\n+A four-byte little endian unsigned integer.\n+\n+### varuint32\n+A [LEB128](https://en.wikipedia.org/wiki/LEB128) variable-length integer, limited to uint32 values.\n+\n+# Definitions\n+\n+### Pre-order encoding\n+Refers to an approach for encoding syntax trees, where each node begins with an identifying binary\n+sequence, then followed recursively by any child nodes. \n+\n * Examples\n   * Given a simple AST node: `struct I32Add { AstNode *left, *right; }`\n-    * First write the operator of `I32Add` (1 byte)\n+    * First write the binary sequence for `I32Add` (uint8)\n     * Then recursively write the left and right nodes.\n-  * Given a call AST node: `struct Call { uint32_t callee; vector<AstNode*> args; }`\n-    * First write the operator of `Call` (1 byte)\n-    * Then write the (variable-length) integer `Call::callee` (1-5 bytes)\n-    * Then recursively write each arg node (arity is determined by looking up `callee` in table of signatures)\n-\n-## Backwards Compatibility\n-\n-As explained above, for size- and decode-efficiency, the binary format will serialize AST nodes,\n-their contents and children using dense integer indices and without any kind of embedded metadata \n-or tagging. This raises the question of how to reconcile the efficient encoding with the \n-backwards-compatibility goals.\n-\n-Specifically, we'd like to avoid the situation where a future version of WebAssembly has features \n-F1 and F2 and vendor V1 implements F1, assigning the next logical operator indices to F1's new\n-operators, and V2 implements F2, assigning the same next logical operator indices to F2's new operators \n-and now a single binary has ambiguous semantics if it tries to use either F1 or F2. This type of \n-non-linear feature addition is commonplace in JavaScript and Web APIs and is guarded against by \n-having unique names for unique features (and associated [conventions](https://hsivonen.fi/vendor-prefixes/)).\n-\n-The current proposal is to maintain both the efficiency of indices in the [serialized AST](BinaryEncoding.md#serialized-ast) and the established\n-conflict-avoidance practices surrounding string names:\n-  * The WebAssembly spec doesn't define any global index spaces\n-    * So, as a general rule, no magic numbers in the spec (other than the literal [magic number](https://en.wikipedia.org/wiki/Magic_number_%28programming%29)).\n-  * Instead, a module defines its *own* local index spaces of operators by providing tables *of names*. \n-    * So what the spec *would* define is a set of names and their associated semantics.\n-  * To avoid (over time) large index-space declaration sections that are largely the same\n-    between modules, finalized versions of standards would define named baseline index spaces\n-    that modules could optionally use as a starting point to further refine.\n-    * For example, to use all of [the MVP](MVP.md) plus\n-      [SIMD](PostMVP.md#fixed-width-simd) the declaration could be \"base\"\n-      followed by the list of SIMD operators used.\n-    * This feature would also be most useful for people handwriting the [text format](TextFormat.md).\n-    * However, such a version declaration does not establish a global \"version\" for the module\n-      or affect anything outside of the initialization of the index spaces; decoders would\n-      remain versionless and simply add cases for new *names* (as with current JavaScript parsers).\n-\n-## Proposals\n-\n-The native prototype built for [V8](https://github.com/WebAssembly/v8-native-prototype)\n-implements a binary format that embodies most, but not all of the ideas in this document.\n-It is described in detail in a [public design doc](https://docs.google.com/a/google.com/document/d/1761v1AfhFM5kE8NArF_PyXcl-iVh0Dx3InOrmcyIoiI/pub) and a [copy of the original](https://docs.google.com/document/d/1-G11CnMA0My20KI9D7dBR6ZCPOBCRD0oCH6SHCPFGx0/edit?usp=sharing).\n+\n+  * Given a call AST node: `struct Call { uint32_t callee_index; vector<AstNode*> args; }`\n+    * First write the binary sequence of `Call` (uint8)\n+    * Then write the (variable-length) integer `Call::callee_index` (varuint32)\n+    * Then recursively write each argument node, where arity is determined by looking up `callee_index` in a table of signatures\n+\n+### Strings\n+Strings referenced by the module (i.e. function names) are encoded as null-terminated [UTF8](http://unicode.org/faq/utf_bom.html#UTF8).\n+\n+# Module structure\n+\n+The following documents the current prototype format. This format is based on and supersedes the v8-native prototype format, originally in a [public design doc](https://docs.google.com/document/d/1-G11CnMA0My20KI9D7dBR6ZCPOBCRD0oCH6SHCPFGx0/edit?usp=sharing).\n+\n+## High-level structure\n+A module contains a sequence of sections, each identified by a *section identifier byte* whose encodings\n+are listed below.\n+\n+### Memory section\n+The memory section declares the size and characteristics of the memory associated with the module.\n+A module may contain at most one memory section.\n+\n+| Field | Type | Description |\n+| ----- |  ----- | ----- | \n+| id = `0x00` | `uint8` | section identifier for memory |\n+| min_mem_size | `uint8` | minimize memory size as a power of `2` |\n+| max_mem_size | `uint8` | maximum memory size as a power of `2` |\n+| exported | `uint8` | `1` if the memory is visible outside the module |\n+\n+### Signatures section\n+The signatures section declares all function signatures that will be used in the module.\n+A module may contain at most one signatures section.\n+\n+| Field | Type | Description |\n+| ----- |  ----- | ----- | \n+| id = `0x01` | `uint8` | section identifier for signatures |\n+| count | `varuint32` | count of signature entries to follow | \n+| entries | `signature_entry*` | repeated signature entries as described below |\n+\n+#### Signature entry\n+| Field | Type | Description |\n+| ----- |  ----- | ----- | \n+| param_count | `uint8` | the number of parameters to the function |\n+| return_type | `local_type?` | the return type of the function, with `0` indicating no return type |\n+| param_types | `local_type*` | the parameter types of the function, with<br>`1` indicating type `i32`<br>`2` indicating type `i64`<br>`3` indicating type `f32`<br>`4` indicating type `f64` |\n+\n+### Functions section\n+The Functions section declares the functions in the module and must be preceded by a [Signatures](#signatures-section) section. A module may contain at most one functions section.\n+\n+| Field | Type | Description |\n+| ----- |  ----- | ----- | \n+| id = `0x02` | `uint8` | section identifier for functions |\n+| count | `varuint32` | count of function entries to follow | \n+| entries | `function_entry*` | repeated function entries as described below |\n+\n+#### Function Entry\n+\n+Each function entry describes a function that can be optionally named, imported and/or exported. Non-imported functions\n+must contain a function body.\n+\n+| Field | Type |  Present?  | Description |\n+| ----- |  ----- |  ----- |  ----- | \n+| flags | `uint8` | always | flags indicating attributes of a function <br>bit `0` : a name is present<br>bit `1` : the function is an import<br>bit `2` : the function has local variables<br>bit `3` : the function is an export |\n+| signature | `uint16` | always | index into the Signature section |\n+| name | `uint32` | `flags[0] == 1` | name of the function as an offset within the module |\n+| i32 count | `uint16` | `flags[2] == 1` | number of i32 local variables |\n+| i64 count | `uint16` | `flags[2] == 1` | number of i64 local variables |\n+| f32 count | `uint16` | `flags[2] == 1` | number of f32 local variables |\n+| f64 count | `uint16` | `flags[2] == 1` | number of f64 local variables |\n+| body size | `uint16` | `flags[0] == 0` | size of function body to follow, in bytes |\n+| body | `bytes` | `flags[0] == 0` | function body |\n+","path":"BinaryEncoding.md","position":251,"original_position":243,"commit_id":"fd8db871fc5d2a89b0e6aa2041695f5e6f655d00","original_commit_id":"9c59a694bfaf116ba63312529dd5031310b2a7c3","user":{"login":"JSStats","id":11826073,"avatar_url":"https://avatars.githubusercontent.com/u/11826073?v=3","gravatar_id":"","url":"https://api.github.com/users/JSStats","html_url":"https://github.com/JSStats","followers_url":"https://api.github.com/users/JSStats/followers","following_url":"https://api.github.com/users/JSStats/following{/other_user}","gists_url":"https://api.github.com/users/JSStats/gists{/gist_id}","starred_url":"https://api.github.com/users/JSStats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JSStats/subscriptions","organizations_url":"https://api.github.com/users/JSStats/orgs","repos_url":"https://api.github.com/users/JSStats/repos","events_url":"https://api.github.com/users/JSStats/events{/privacy}","received_events_url":"https://api.github.com/users/JSStats/received_events","type":"User","site_admin":false},"body":"Is there a constraint that a name is required for an import or export? Is a name allowed is neither?\r\n\r\nThe body_size and body depend on bit 1 (not an import)?","created_at":"2016-02-09T09:27:41Z","updated_at":"2016-02-09T09:27:41Z","html_url":"https://github.com/WebAssembly/design/pull/537#discussion_r52283675","pull_request_url":"https://api.github.com/repos/WebAssembly/design/pulls/537","_links":{"self":{"href":"https://api.github.com/repos/WebAssembly/design/pulls/comments/52283675"},"html":{"href":"https://github.com/WebAssembly/design/pull/537#discussion_r52283675"},"pull_request":{"href":"https://api.github.com/repos/WebAssembly/design/pulls/537"}}},"pull_request":{"url":"https://api.github.com/repos/WebAssembly/design/pulls/537","id":58646987,"html_url":"https://github.com/WebAssembly/design/pull/537","diff_url":"https://github.com/WebAssembly/design/pull/537.diff","patch_url":"https://github.com/WebAssembly/design/pull/537.patch","issue_url":"https://api.github.com/repos/WebAssembly/design/issues/537","number":537,"state":"open","locked":false,"title":"Update BinaryFormat with details about encoding","user":{"login":"titzer","id":12184276,"avatar_url":"https://avatars.githubusercontent.com/u/12184276?v=3","gravatar_id":"","url":"https://api.github.com/users/titzer","html_url":"https://github.com/titzer","followers_url":"https://api.github.com/users/titzer/followers","following_url":"https://api.github.com/users/titzer/following{/other_user}","gists_url":"https://api.github.com/users/titzer/gists{/gist_id}","starred_url":"https://api.github.com/users/titzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/titzer/subscriptions","organizations_url":"https://api.github.com/users/titzer/orgs","repos_url":"https://api.github.com/users/titzer/repos","events_url":"https://api.github.com/users/titzer/events{/privacy}","received_events_url":"https://api.github.com/users/titzer/received_events","type":"User","site_admin":false},"body":"Unfortunately @kg is unable to continue with #520 which updates BinaryEncoding.md to be more in line with the V8 format embodied in the design doc. Unfortunately the branch from which she made the pull request is in her private repo, and I could not edit it. So I started with her changes and made this pull request to continue the discussion.","created_at":"2016-02-08T18:21:14Z","updated_at":"2016-02-09T09:27:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ecab3c3ee364b4bee7f50244a37162f0f56a762b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/WebAssembly/design/pulls/537/commits","review_comments_url":"https://api.github.com/repos/WebAssembly/design/pulls/537/comments","review_comment_url":"https://api.github.com/repos/WebAssembly/design/pulls/comments{/number}","comments_url":"https://api.github.com/repos/WebAssembly/design/issues/537/comments","statuses_url":"https://api.github.com/repos/WebAssembly/design/statuses/fd8db871fc5d2a89b0e6aa2041695f5e6f655d00","head":{"label":"WebAssembly:update_binary","ref":"update_binary","sha":"fd8db871fc5d2a89b0e6aa2041695f5e6f655d00","user":{"login":"WebAssembly","id":11578470,"avatar_url":"https://avatars.githubusercontent.com/u/11578470?v=3","gravatar_id":"","url":"https://api.github.com/users/WebAssembly","html_url":"https://github.com/WebAssembly","followers_url":"https://api.github.com/users/WebAssembly/followers","following_url":"https://api.github.com/users/WebAssembly/following{/other_user}","gists_url":"https://api.github.com/users/WebAssembly/gists{/gist_id}","starred_url":"https://api.github.com/users/WebAssembly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WebAssembly/subscriptions","organizations_url":"https://api.github.com/users/WebAssembly/orgs","repos_url":"https://api.github.com/users/WebAssembly/repos","events_url":"https://api.github.com/users/WebAssembly/events{/privacy}","received_events_url":"https://api.github.com/users/WebAssembly/received_events","type":"Organization","site_admin":false},"repo":{"id":34808241,"name":"design","full_name":"WebAssembly/design","owner":{"login":"WebAssembly","id":11578470,"avatar_url":"https://avatars.githubusercontent.com/u/11578470?v=3","gravatar_id":"","url":"https://api.github.com/users/WebAssembly","html_url":"https://github.com/WebAssembly","followers_url":"https://api.github.com/users/WebAssembly/followers","following_url":"https://api.github.com/users/WebAssembly/following{/other_user}","gists_url":"https://api.github.com/users/WebAssembly/gists{/gist_id}","starred_url":"https://api.github.com/users/WebAssembly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WebAssembly/subscriptions","organizations_url":"https://api.github.com/users/WebAssembly/orgs","repos_url":"https://api.github.com/users/WebAssembly/repos","events_url":"https://api.github.com/users/WebAssembly/events{/privacy}","received_events_url":"https://api.github.com/users/WebAssembly/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/WebAssembly/design","description":"WebAssembly Design Documents","fork":false,"url":"https://api.github.com/repos/WebAssembly/design","forks_url":"https://api.github.com/repos/WebAssembly/design/forks","keys_url":"https://api.github.com/repos/WebAssembly/design/keys{/key_id}","collaborators_url":"https://api.github.com/repos/WebAssembly/design/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/WebAssembly/design/teams","hooks_url":"https://api.github.com/repos/WebAssembly/design/hooks","issue_events_url":"https://api.github.com/repos/WebAssembly/design/issues/events{/number}","events_url":"https://api.github.com/repos/WebAssembly/design/events","assignees_url":"https://api.github.com/repos/WebAssembly/design/assignees{/user}","branches_url":"https://api.github.com/repos/WebAssembly/design/branches{/branch}","tags_url":"https://api.github.com/repos/WebAssembly/design/tags","blobs_url":"https://api.github.com/repos/WebAssembly/design/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/WebAssembly/design/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/WebAssembly/design/git/refs{/sha}","trees_url":"https://api.github.com/repos/WebAssembly/design/git/trees{/sha}","statuses_url":"https://api.github.com/repos/WebAssembly/design/statuses/{sha}","languages_url":"https://api.github.com/repos/WebAssembly/design/languages","stargazers_url":"https://api.github.com/repos/WebAssembly/design/stargazers","contributors_url":"https://api.github.com/repos/WebAssembly/design/contributors","subscribers_url":"https://api.github.com/repos/WebAssembly/design/subscribers","subscription_url":"https://api.github.com/repos/WebAssembly/design/subscription","commits_url":"https://api.github.com/repos/WebAssembly/design/commits{/sha}","git_commits_url":"https://api.github.com/repos/WebAssembly/design/git/commits{/sha}","comments_url":"https://api.github.com/repos/WebAssembly/design/comments{/number}","issue_comment_url":"https://api.github.com/repos/WebAssembly/design/issues/comments{/number}","contents_url":"https://api.github.com/repos/WebAssembly/design/contents/{+path}","compare_url":"https://api.github.com/repos/WebAssembly/design/compare/{base}...{head}","merges_url":"https://api.github.com/repos/WebAssembly/design/merges","archive_url":"https://api.github.com/repos/WebAssembly/design/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/WebAssembly/design/downloads","issues_url":"https://api.github.com/repos/WebAssembly/design/issues{/number}","pulls_url":"https://api.github.com/repos/WebAssembly/design/pulls{/number}","milestones_url":"https://api.github.com/repos/WebAssembly/design/milestones{/number}","notifications_url":"https://api.github.com/repos/WebAssembly/design/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/WebAssembly/design/labels{/name}","releases_url":"https://api.github.com/repos/WebAssembly/design/releases{/id}","deployments_url":"https://api.github.com/repos/WebAssembly/design/deployments","created_at":"2015-04-29T17:36:05Z","updated_at":"2016-02-08T12:42:53Z","pushed_at":"2016-02-09T09:26:33Z","git_url":"git://github.com/WebAssembly/design.git","ssh_url":"git@github.com:WebAssembly/design.git","clone_url":"https://github.com/WebAssembly/design.git","svn_url":"https://github.com/WebAssembly/design","homepage":"http://webassembly.github.io/","size":1909,"stargazers_count":5144,"watchers_count":5144,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":253,"mirror_url":null,"open_issues_count":75,"forks":253,"open_issues":75,"watchers":5144,"default_branch":"master"}},"base":{"label":"WebAssembly:master","ref":"master","sha":"76e83ba101ad4ae5857e19b55859745ef596f96b","user":{"login":"WebAssembly","id":11578470,"avatar_url":"https://avatars.githubusercontent.com/u/11578470?v=3","gravatar_id":"","url":"https://api.github.com/users/WebAssembly","html_url":"https://github.com/WebAssembly","followers_url":"https://api.github.com/users/WebAssembly/followers","following_url":"https://api.github.com/users/WebAssembly/following{/other_user}","gists_url":"https://api.github.com/users/WebAssembly/gists{/gist_id}","starred_url":"https://api.github.com/users/WebAssembly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WebAssembly/subscriptions","organizations_url":"https://api.github.com/users/WebAssembly/orgs","repos_url":"https://api.github.com/users/WebAssembly/repos","events_url":"https://api.github.com/users/WebAssembly/events{/privacy}","received_events_url":"https://api.github.com/users/WebAssembly/received_events","type":"Organization","site_admin":false},"repo":{"id":34808241,"name":"design","full_name":"WebAssembly/design","owner":{"login":"WebAssembly","id":11578470,"avatar_url":"https://avatars.githubusercontent.com/u/11578470?v=3","gravatar_id":"","url":"https://api.github.com/users/WebAssembly","html_url":"https://github.com/WebAssembly","followers_url":"https://api.github.com/users/WebAssembly/followers","following_url":"https://api.github.com/users/WebAssembly/following{/other_user}","gists_url":"https://api.github.com/users/WebAssembly/gists{/gist_id}","starred_url":"https://api.github.com/users/WebAssembly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WebAssembly/subscriptions","organizations_url":"https://api.github.com/users/WebAssembly/orgs","repos_url":"https://api.github.com/users/WebAssembly/repos","events_url":"https://api.github.com/users/WebAssembly/events{/privacy}","received_events_url":"https://api.github.com/users/WebAssembly/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/WebAssembly/design","description":"WebAssembly Design Documents","fork":false,"url":"https://api.github.com/repos/WebAssembly/design","forks_url":"https://api.github.com/repos/WebAssembly/design/forks","keys_url":"https://api.github.com/repos/WebAssembly/design/keys{/key_id}","collaborators_url":"https://api.github.com/repos/WebAssembly/design/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/WebAssembly/design/teams","hooks_url":"https://api.github.com/repos/WebAssembly/design/hooks","issue_events_url":"https://api.github.com/repos/WebAssembly/design/issues/events{/number}","events_url":"https://api.github.com/repos/WebAssembly/design/events","assignees_url":"https://api.github.com/repos/WebAssembly/design/assignees{/user}","branches_url":"https://api.github.com/repos/WebAssembly/design/branches{/branch}","tags_url":"https://api.github.com/repos/WebAssembly/design/tags","blobs_url":"https://api.github.com/repos/WebAssembly/design/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/WebAssembly/design/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/WebAssembly/design/git/refs{/sha}","trees_url":"https://api.github.com/repos/WebAssembly/design/git/trees{/sha}","statuses_url":"https://api.github.com/repos/WebAssembly/design/statuses/{sha}","languages_url":"https://api.github.com/repos/WebAssembly/design/languages","stargazers_url":"https://api.github.com/repos/WebAssembly/design/stargazers","contributors_url":"https://api.github.com/repos/WebAssembly/design/contributors","subscribers_url":"https://api.github.com/repos/WebAssembly/design/subscribers","subscription_url":"https://api.github.com/repos/WebAssembly/design/subscription","commits_url":"https://api.github.com/repos/WebAssembly/design/commits{/sha}","git_commits_url":"https://api.github.com/repos/WebAssembly/design/git/commits{/sha}","comments_url":"https://api.github.com/repos/WebAssembly/design/comments{/number}","issue_comment_url":"https://api.github.com/repos/WebAssembly/design/issues/comments{/number}","contents_url":"https://api.github.com/repos/WebAssembly/design/contents/{+path}","compare_url":"https://api.github.com/repos/WebAssembly/design/compare/{base}...{head}","merges_url":"https://api.github.com/repos/WebAssembly/design/merges","archive_url":"https://api.github.com/repos/WebAssembly/design/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/WebAssembly/design/downloads","issues_url":"https://api.github.com/repos/WebAssembly/design/issues{/number}","pulls_url":"https://api.github.com/repos/WebAssembly/design/pulls{/number}","milestones_url":"https://api.github.com/repos/WebAssembly/design/milestones{/number}","notifications_url":"https://api.github.com/repos/WebAssembly/design/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/WebAssembly/design/labels{/name}","releases_url":"https://api.github.com/repos/WebAssembly/design/releases{/id}","deployments_url":"https://api.github.com/repos/WebAssembly/design/deployments","created_at":"2015-04-29T17:36:05Z","updated_at":"2016-02-08T12:42:53Z","pushed_at":"2016-02-09T09:26:33Z","git_url":"git://github.com/WebAssembly/design.git","ssh_url":"git@github.com:WebAssembly/design.git","clone_url":"https://github.com/WebAssembly/design.git","svn_url":"https://github.com/WebAssembly/design","homepage":"http://webassembly.github.io/","size":1909,"stargazers_count":5144,"watchers_count":5144,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":253,"mirror_url":null,"open_issues_count":75,"forks":253,"open_issues":75,"watchers":5144,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/WebAssembly/design/pulls/537"},"html":{"href":"https://github.com/WebAssembly/design/pull/537"},"issue":{"href":"https://api.github.com/repos/WebAssembly/design/issues/537"},"comments":{"href":"https://api.github.com/repos/WebAssembly/design/issues/537/comments"},"review_comments":{"href":"https://api.github.com/repos/WebAssembly/design/pulls/537/comments"},"review_comment":{"href":"https://api.github.com/repos/WebAssembly/design/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/WebAssembly/design/pulls/537/commits"},"statuses":{"href":"https://api.github.com/repos/WebAssembly/design/statuses/fd8db871fc5d2a89b0e6aa2041695f5e6f655d00"}}}}