---
title: Introduction
description: workers-go is a Go module that runs an HTTP server written in Go on Cloudflare Workers, Neon Functions, Deno, and in the browser.
sidebar:
  label: Introduction
  order: 0
---

`workers-go` is a Go module for running an `http.Handler` written in Go on [Cloudflare Workers](https://workers.cloudflare.com/), on [Neon Functions](https://neon.com/docs/compute/functions), on [Deno / Deno Deploy](https://deno.com/deploy), and, with the browser template, directly in the browser. Your Go code is compiled to WebAssembly, and this package bridges the JavaScript runtime APIs to idiomatic Go types.

:::warning
This project is experimental. APIs may change between releases.
:::

**[Quickstart](/quickstart)**

Create and deploy your first worker in minutes.

**[Cloudflare](/cloudflare)**

Serve http.Handler and use KV, R2, D1, Queues, Cron, and more.

**[Browser](/browser)**

Serve HTTP from a Go Wasm binary running in the browser.

**[Neon Functions](/neon)**

Serve http.Handler on Neon's serverless functions platform.

**[Deno / Deno Deploy](/deno)**

Serve http.Handler via Deno.serve on Deno and Deno Deploy.

## Platforms

This documentation is organized per platform. Each platform section explains how to use every supported feature.

- **Cloudflare** — run on Cloudflare Workers or Pages Functions, with bindings for KV, R2, D1, Durable Objects, Queues, Cron Triggers, the Cache API, Service Bindings, TCP Sockets, Workers RPC / named entrypoints, and Workflows.
- **Browser** — run the same `http.Handler` inside a browser tab using the `browser-go` template.
- **Neon Functions** — run the same `http.Handler` on Neon's serverless functions platform using the `functions-tinygo` template.
- **Deno / Deno Deploy** — run the same `http.Handler` via `Deno.serve` on Deno and Deno Deploy using the `worker-go` template.

## Feature support

| Feature | Status |
| --- | --- |
| Serve `http.Handler` | Stable |
| Environment variables and bindings | Stable |
| KV | Stable (method options are not fully implemented) |
| R2 | Stable (method options are not fully implemented) |
| Cache API | Stable |
| Durable Objects | Experimental — hosting a Go type as a Durable Object class (with SQL storage) and calling stubs |
| D1 | Experimental (alpha) |
| Queues (producer and consumer) | Stable |
| Cron Triggers | Stable |
| FetchEvent (`waitUntil`, `passThroughOnException`) | Stable |
| Outbound fetch and Service Bindings | Stable |
| TCP Sockets | Stable |
| WebSocket (`exp/cloudflare/websocket`) | Experimental |
| Email Workers (`exp/cloudflare/email`) | Experimental |
| Tail Workers (`exp/cloudflare/tail`) | Experimental |
| Workflows (`exp/cloudflare/workflows`) | Experimental — calling into a Workflow and hosting one (`WorkflowEntrypoint`) |
| RPC / named entrypoints (`exp/cloudflare/rpc`) | Experimental — calling a `WorkerEntrypoint`/Durable Object over RPC and hosting one |
| Workers AI, Vectorize, Images, Analytics Engine, Hyperdrive, Secrets Store, Dispatch, Rate Limiting, Versions, `request.cf` (`exp/cloudflare`) | Experimental |
| Hono middleware (`exp/hono`) | Experimental |

## Installation

```bash
go get github.com/syumai/workers-go
```

:::note
This module was published as `github.com/syumai/workers` up to v0.34.0 and renamed to `github.com/syumai/workers-go` in v0.35.0 ([#173](https://github.com/syumai/workers-go/issues/173)). The old path still works as a deprecated forwarding module that re-exports this module's API and follows its releases for a transition period.
:::

### Migrating from `github.com/syumai/workers`

To switch, rewrite the import paths and tidy:

```bash
# Linux
find . \( -name '*.go' -o -name go.mod \) -exec sed -i 's|github.com/syumai/workers\([/" ]\)|github.com/syumai/workers-go\1|g' {} +
# macOS
find . \( -name '*.go' -o -name go.mod \) -exec sed -i '' 's|github.com/syumai/workers\([/" ]\)|github.com/syumai/workers-go\1|g' {} +
go mod tidy
```
