Foreign Function Interface (FFI)
Via Pyodide ↗, Python Workers provide a Foreign Function Interface (FFI) ↗ to JavaScript. This allows you to:
- Use bindings to resources on Cloudflare, including Workers AI, Vectorize, R2, KV, D1, Queues, Durable Objects, Service Bindings and more.
- Use JavaScript globals, like
Request
,Response
, andfetch()
. - Use the full feature set of Cloudflare Workers — if an API is accessible in JavaScript, you can also access it in a Python Worker, writing exclusively Python code.
The details of Pyodide’s Foreign Function Interface are documented here ↗, and Workers written in Python are able to take full advantage of this.
Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform. When you declare a binding on your Worker, you grant it a specific capability, such as being able to read and write files to an R2 bucket.
For example, to access a KV namespace from a Python Worker, you would declare the following in your Worker’s wrangler.toml
:
…and then call .get()
on the binding object that is exposed on env
:
Under the hood, env
is actually a JavaScript object. When you call .FOO
, you are accessing this property via a JsProxy
↗ — special proxy object that makes a JavaScript object behave like a Python object.
When writing Workers in Python, you can access JavaScript globals by importing them from the js
module. For example, note how Response
is imported from js
in the example below:
Refer to the Python examples to learn how to call into JavaScript functions from Python, including console.log
and logging, providing options to Response
, and parsing JSON.