{"id":29420133,"url":"https://github.com/esoterra/wasmcon2023","last_synced_at":"2026-05-07T13:40:38.628Z","repository":{"id":191672581,"uuid":"684762872","full_name":"esoterra/wasmcon2023","owner":"esoterra","description":"Any language can be componentized and many have been!","archived":false,"fork":false,"pushed_at":"2023-09-15T16:18:41.000Z","size":41497,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-02T06:47:28.243Z","etag":null,"topics":["component-model","rust","wasm"],"latest_commit_sha":null,"homepage":"https://esoterra.dev/talks/2023-wasmcon/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esoterra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-08-29T20:00:14.000Z","updated_at":"2024-08-21T01:16:11.000Z","dependencies_parsed_at":"2023-08-31T03:42:02.486Z","dependency_job_id":null,"html_url":"https://github.com/esoterra/wasmcon2023","commit_stats":null,"previous_names":["kylebrown9/wasmcon2023","esoterra/wasmcon2023"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/esoterra/wasmcon2023","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esoterra%2Fwasmcon2023","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esoterra%2Fwasmcon2023/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esoterra%2Fwasmcon2023/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esoterra%2Fwasmcon2023/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esoterra","download_url":"https://codeload.github.com/esoterra/wasmcon2023/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esoterra%2Fwasmcon2023/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264922925,"owners_count":23683707,"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":["component-model","rust","wasm"],"created_at":"2025-07-12T01:15:42.142Z","updated_at":"2026-05-07T13:40:33.597Z","avatar_url":"https://github.com/esoterra.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wasm Components for Every Language (Demo)\n\nThis is the demo source code for the talk I gave titled \"Wasm Components for Every Language\" at WasmCon 2023.\n\n\u003e **Note:** the talks title isn't meant to imply that we already have fully built toolchains for every language rather that Wasm Components as a technology aren't limited to any one language and that we have techniques that can be applied to any language to componentize it.\n\nYou can find the talks abstract, slides, and recording on [Sched](https://wasmcon2023.sched.com/event/1PCLo/wasm-components-for-every-language-kyle-brown-singlestore).\n\nI am not intending to keep this up to date with newer versions of the component model or guest language tooling, but if you run into any issues running the demo under the intended versions it was originally run with please feel free to file an issue.\n\n## WITs\n\nThe WIT file defines one interface `%interface` and two worlds `greeter` and `proxy-greeter`.\n\n* `%interface` is just a simple interface with a `greet` function that returns a string\n* `greeter` is just a world that exports `%interface`\n* `proxy-greeter` both imports and exports the `%interface` interface\n\n## Components\n\nComponents for the demo are implemented in the WebAssembly Text Format (WAT), C, Rust, JavaScript, and Python.\nAll of the Components implement `proxy-greeter` except WAT which implements `greeter`.\n\nSome languages were a WIP (e.g. Go) at the time of the talk and others were planned but never implemented. Some of these may be added in the future to extend the demo.\n\nEach language folder has a README with instructions for building its source into a component. The resulting components are also included pre-built in the components folder for convenience.\n\n## Composition\n\nThe demo shown in the talk uses the [Wasm Builder app tool](https://wasmbuilder.app/) which runs in the browser and can be used to compose arbitrary components together graphically. In the talk, I use a window where I have already uploaded each of the components included in the components folder.\n\nThe base WAT `greeter` can be composed with any number of `proxy-greeters` to create a final `greeter` whose message reads \"Hello from WAT!\" with \"and [language]!\" clauses matching the order you composed the `proxy-greeters`.\n\n## Runner\n\nThe crate in the `runner` folder is used to run the resulting `greeter` printing out its message.\n\nThis is done by passing the path to the component with the `--component` or `-c` flag.\n\n\u003e **Note:** Build the runner using the `--release` flag if you want it to go faster!\n\nIt also has an alternate mode triggered by passing `--input` or `-i` and a string that will require the component to be a `proxy-greeter` and when the it calls its import it will pass the input value in. This was used to test each component during development but not shown in the demo.\n\n## Tools Used\n\n* [wit-bindgen](https://github.com/bytecodealliance/wit-bindgen/)\n* [wasm-tools](https://github.com/bytecodealliance/wasm-tools/)\n* [WASI-Virt](https://github.com/bytecodealliance/WASI-Virt/)\n* [WASI SDK](https://github.com/webassembly/wasi-sdk)\n* [Cargo Component](https://github.com/bytecodealliance/cargo-component)\n* [Componentize-Js](https://github.com/bytecodealliance/componentize-js/)\n* [JCO](https://github.com/bytecodealliance/jco/)\n* [Componentize-Py](https://github.com/bytecodealliance/componentize-py/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesoterra%2Fwasmcon2023","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesoterra%2Fwasmcon2023","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesoterra%2Fwasmcon2023/lists"}