{"slug": "show-hn-convex-clients-in-100-programming-languages", "title": "Show HN: Convex clients in 100 programming languages", "summary": "Convex, a realtime database and compute platform, now has clients in 100 programming languages, including JavaScript, Python, Fortran, COBOL, LOLCODE, x86-64 assembly, and Verilog, created by coding agents. The project, led by Mike Cann at Convex, required each client to call queries, mutations, and actions over HTTP, handle values and errors, subscribe to live updates via WebSocket, and run in a clean Docker container. The complete results, including runnable examples and failed attempts, are available in a public repository.", "body_md": "Hi, I'm Mike. I work at [Convex](https://www.convex.dev/), and I had a slightly\nridiculous idea: what would happen if I pointed a large group of coding agents\nat Convex and asked them to make it work in 100 different programming\nlanguages?\n\nSo that is what I did.\n\nI had the agents attempt to make Convex, a realtime database and compute platform, work everywhere from JavaScript and Python to Fortran, COBOL, LOLCODE, x86-64 assembly and even Verilog. Some of those languages existed before the internet. One of them is meant for designing hardware. Somehow, they are all here talking to the same cloud backend.\n\nThis repository is the complete result: the clients, runnable examples, Docker builds, shared tests, failed attempts and all the evidence produced along the way. If you would rather hear the story first, the video above covers the journey and some of the stranger things that happened.\n\n[Convex](https://www.convex.dev/) is a backend platform with a realtime\ndatabase and server-side functions. An application can call queries,\nmutations and actions, then subscribe to a query and receive a new result when\nthe underlying data changes.\n\nFor a language to make the final roster, it had to demonstrate the same useful slice of that experience:\n\n- Call Convex queries, mutations and actions over HTTP.\n- Send and receive normal Convex values, errors and authentication tokens.\n- Subscribe to live query updates over a WebSocket.\n- Build and run from a clean Docker container rather than relying on whatever happened to be installed on my machine.\n\nThe goal was not to produce 100 folders that merely compiled. I wanted one set of rules that could be applied to every language, including the deeply weird ones, without quietly lowering the bar when things got difficult.\n\n**Fortran** first appeared in 1957. It now has a Convex client receiving live query updates from a cloud database.**COBOL** predates the Beatles, and its client is nearly ten thousand lines including tests because COBOL likes to make absolutely everything explicit.**LOLCODE** begins with`HAI 1.3`\n\nand`CAN HAS TRANSPORT?`\n\n. The agents got it over the line by patching the interpreter itself, which feels very on-brand.**Verilog** is normally used to describe circuits that become hardware. It was never meant for this, but it works anyway :P\n\nNot every language made it. Some needed proprietary tools, some could not open\na network connection, and a few fought the container limits until the bitter\nend. I kept those stories in [INFEASIBLE.md](/mikecann/the-convex-100-language-challenge/blob/main/INFEASIBLE.md) rather than quietly\ndeleting them.\n\n[Watch the video](https://youtu.be/l61cLu8e2tg)for the full story.[Browse all 100 languages](https://the-convex-100-language-challenge.mikecann.app/)and open any card to see its example and evidence.- Read\n[STATS.md](/mikecann/the-convex-100-language-challenge/blob/main/STATS.md)for the numbers,[LESSONS.md](/mikecann/the-convex-100-language-challenge/blob/main/LESSONS.md)for the things the agents and I learned, or[BUILD-FLEET.md](/mikecann/the-convex-100-language-challenge/blob/main/BUILD-FLEET.md)for the small army of rented servers behind the final push. - Pick a language directory if you just want to see what a Convex client looks like in your favourite language.\n\nIf you have Docker, you can run the same basic counter example used throughout the project:\n\n```\ngit clone https://github.com/mikecann/the-convex-100-language-challenge\ncd the-convex-100-language-challenge\n./run verify-example fortran\n```\n\nSwap `fortran`\n\nfor another language ID to try a different one.\n\nThese are educational experiments, not official Convex SDKs. They are not published packages and I would not quietly slip one into a production app. The interesting part is the source, the common challenge and what each language needed to make the same small client experience work.\n\nThe final roster contains 100 language implementations. Each one completed the\nshared HTTP and Live suites against both the pinned local backend and a hosted\ncompatibility deployment. Every language manifest on `main`\n\nrecords both\ncapabilities. See [STATS.md](/mikecann/the-convex-100-language-challenge/blob/main/STATS.md) for the measured completion summary.\n\nThe final trusted-main website index is still outstanding. The language runs\nwere completed on the remote build fleet and recorded in their merged pull\nrequests, but the repository's GitHub Actions evidence publisher was never\nexpanded beyond the Go pilot. Until that index is produced, `./run site`\n\nwill\nwithhold trusted website badges rather than treating manifest claims as signed\nCI evidence.\n\n| Status | Meaning |\n|---|---|\n| Yellow: HTTP | Queries, mutations, actions, JSON-safe values, bearer-token forwarding, and errors work over the documented HTTP API. |\n| Green: Live | The client additionally supports live query subscriptions over WebSockets. |\n| Red: Failed | A clean Docker build, execution, or claimed capability test fails. |\n\nLive includes HTTP. Implementation provenance is a separate label:\n\n| Provenance | Meaning |\n|---|---|\n| Native | The target language owns the Convex-specific state machine. Normal HTTP, TLS, JSON, and WebSocket libraries are allowed. |\n| Binding | The language exposes an idiomatic API over a shared Convex core through FFI, JVM, CLR, WASM, or similar. |\n| Generated | An HTTP client produced from an API description such as OpenAPI. |\n| Transpiled | The implementation is written in the named source language and compiled to a different host language. |\n| Bridge | The code shells out to another Convex client, runtime, CLI, or sidecar. Bridges are shown but do not count as native clients. |\n\n- One source language, one audited entry in the roster.\n- Every build and test runs in Docker. Language toolchains are never installed on the host.\n- HTTP is the minimum useful target. Realtime and resilience are separate earned capabilities.\n- Every runnable example is a commented guided tour of the verified client API, and that same source is shown in its README and on the website.\n- Checked-in layouts favour readable educational source. Docker may rearrange files into temporary toolchain-specific paths during a build.\n- Package publishing, registry metadata, and release automation are outside the project's scope.\n- A native implementation may use ordinary transport libraries, but Convex-specific behavior must be written in the target language.\n- Shared-core and transpiled clients are labelled rather than hidden.\n- Results are attached to a source commit, container digest, runtime version, protocol revision, and conformance-suite version.\n- Experimental clients stay in this monorepo. Passing a test does not make a package officially supported by Convex.\n\n```\n<language-id>/             one top-level directory per roster language\n  manifest.yaml            declared intent, toolchain, and provenance\n  Dockerfile               pinned build and runtime image\n  client/                  client, build metadata, unit tests, and conformance entrypoint\n  examples/basics/         the shared counter-room example and its own tests\n  README.md                usage, evidence, and limitations\n  logo.png                 optional language logo displayed by the README\n_shared/                   trusted backend, harness, schemas, site, and results\nrun                         Docker-only orchestration entrypoint\nroster/                    sourced language selection and feasibility audit\n```\n\nThe repository root is intentionally visual: the accepted roster appears as 100\npeer language directories. Popularity rank lives in metadata, so a ranking\nchange never renames a directory. Shared infrastructure is kept under\n`_shared/`\n\nand is protected separately from language implementation changes.\n\nBuild status and verified platforms are recorded as evidence. They are not capability badges. A successful build alone does not mean a client can talk to Convex.\n\nThe root script is the supported entrypoint. It invokes Docker for every build, test, package operation, and generated artifact.\n\n```\n./run doctor\n./run validate\n./run verify-example go\n./run verify go\n./run verify-hosted go\n./run verify-all go\n./run site-preview\n./run site-serve\n```\n\n`verify-example`\n\ncompiles and runs the canonical basic example inside Docker,\nthen requires its complete stdout to match the universal ordered happy-path\ntranscript in `_shared/examples/basics.expected.txt`\n\n. The last two commands\ngenerate a clearly labelled local evidence preview and serve it at\n`http://127.0.0.1:4173`\n\n. `./run site`\n\nis\nstricter: it ignores local results and renders only the trusted-main result\nindex.\n\nSee the [roster methodology](/mikecann/the-convex-100-language-challenge/blob/main/roster/methodology.md), [exact proposed roster](/mikecann/the-convex-100-language-challenge/blob/main/roster/languages.yaml), [conformance contract](/mikecann/the-convex-100-language-challenge/blob/main/docs/conformance.md), and [implementation architecture](/mikecann/the-convex-100-language-challenge/blob/main/docs/architecture.md).", "url": "https://wpnews.pro/news/show-hn-convex-clients-in-100-programming-languages", "canonical_source": "https://github.com/mikecann/the-convex-100-language-challenge", "published_at": "2026-08-18 06:34:25+00:00", "updated_at": "2026-08-18 07:11:21.916059+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "developer-tools", "ai-products"], "entities": ["Convex", "Mike Cann", "Fortran", "COBOL", "LOLCODE", "Verilog", "Docker"], "alternates": {"html": "https://wpnews.pro/news/show-hn-convex-clients-in-100-programming-languages", "markdown": "https://wpnews.pro/news/show-hn-convex-clients-in-100-programming-languages.md", "text": "https://wpnews.pro/news/show-hn-convex-clients-in-100-programming-languages.txt", "jsonld": "https://wpnews.pro/news/show-hn-convex-clients-in-100-programming-languages.jsonld"}}