GitHubCode
The GitHubCode component allows you to include files from Cloudflare repositories.
The remote content can be filtered by lines or a region enclosed in tags.
import { GitHubCode } from "~/components";import {  WorkflowEntrypoint,  WorkflowStep,  WorkflowEvent,} from "cloudflare:workers";
// User-defined params passed to your workflowexport class MyWorkflow extends WorkflowEntrypoint {  async run(event, step) {    // Can access bindings on `this.env`    // Can access params on `event.payload`
    const files = await step.do("my first step", async () => {      // Fetch a list of files from $SOME_SERVICE      return {        inputParams: event,        files: [          "doc_7392_rev3.pdf",          "report_x29_final.pdf",          "memo_2024_05_12.pdf",          "file_089_update.pdf",          "proj_alpha_v2.pdf",          "data_analysis_q2.pdf",          "notes_meeting_52.pdf",          "summary_fy24_draft.pdf",        ],      };    });
    const apiResponse = await step.do("some other step", async () => {      let resp = await fetch("https://api.cloudflare.com/client/v4/ips");      return await resp.json();    });
    await step.sleep("wait on something", "1 minute");
    await step.do(      "make a call to write that could maybe, just might, fail",      // Define a retry strategy      {        retries: {          limit: 5,          delay: "5 second",          backoff: "exponential",        },        timeout: "15 minutes",      },      async () => {        // Do stuff here, with access to the state from our previous steps        if (Math.random() > 0.5) {          throw new Error("API call to $STORAGE_SYSTEM failed");        }      },    );  }}
export default {  async fetch(req, env) {    let url = new URL(req.url);
    if (url.pathname.startsWith("/favicon")) {      return Response.json({}, { status: 404 });    }
    // Get the status of an existing instance, if provided    let id = url.searchParams.get("instanceId");    if (id) {      let instance = await env.MY_WORKFLOW.get(id);      return Response.json({        status: await instance.status(),      });    }
    // Spawn a new instance and return the ID and status    let instance = await env.MY_WORKFLOW.create();    return Response.json({      id: instance.id,      details: await instance.status(),    });  },};import { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';
type Env = {  // Add your bindings here, e.g. Workers KV, D1, Workers AI, etc.  MY_WORKFLOW: Workflow;};
// User-defined params passed to your workflowtype Params = {  email: string;  metadata: Record<string, string>;};
export class MyWorkflow extends WorkflowEntrypoint<Env, Params> {  async run(event: WorkflowEvent<Params>, step: WorkflowStep) {    // Can access bindings on `this.env`    // Can access params on `event.payload`
    const files = await step.do('my first step', async () => {      // Fetch a list of files from $SOME_SERVICE      return {        inputParams: event,        files: [          'doc_7392_rev3.pdf',          'report_x29_final.pdf',          'memo_2024_05_12.pdf',          'file_089_update.pdf',          'proj_alpha_v2.pdf',          'data_analysis_q2.pdf',          'notes_meeting_52.pdf',          'summary_fy24_draft.pdf',        ],      };    });
    const apiResponse = await step.do('some other step', async () => {      let resp = await fetch('https://api.cloudflare.com/client/v4/ips');      return await resp.json<any>();    });
    await step.sleep('wait on something', '1 minute');
    await step.do(      'make a call to write that could maybe, just might, fail',      // Define a retry strategy      {        retries: {          limit: 5,          delay: '5 second',          backoff: 'exponential',        },        timeout: '15 minutes',      },      async () => {        // Do stuff here, with access to the state from our previous steps        if (Math.random() > 0.5) {          throw new Error('API call to $STORAGE_SYSTEM failed');        }      },    );  }}
export default {  async fetch(req: Request, env: Env): Promise<Response> {    let url = new URL(req.url);
    if (url.pathname.startsWith('/favicon')) {      return Response.json({}, { status: 404 });    }
    // Get the status of an existing instance, if provided    let id = url.searchParams.get('instanceId');    if (id) {      let instance = await env.MY_WORKFLOW.get(id);      return Response.json({        status: await instance.status(),      });    }
    // Spawn a new instance and return the ID and status    let instance = await env.MY_WORKFLOW.create();    return Response.json({      id: instance.id,      details: await instance.status(),    });  },};<GitHubCode    repo="cloudflare/workflows-starter"    file="src/index.ts"    commit="a844e629ec80968118d4b116d4b26f5dcb107137"    lang="ts"    code={{      collapse: "2-3"    }}/>import { GitHubCode } from "~/components";
{/*import { foo } from "bar";
const baz = foo();
console.log(baz);*/}<GitHubCode    repo="..."    file="..."    commit="..."    lang="..."    lines="1-3"/>{/*import { foo } from "bar";
const baz = foo();*/}import { GitHubCode } from "~/components";
{/*<docs-tag name="no-logging">import { foo } from "bar";
const baz = foo();</docs-tag name="no-logging">
console.log(baz);*/}<GitHubCode    repo="..."    file="..."    commit="..."    lang="..."    tag="no-logging"/>{/*import { foo } from "bar";
const baz = foo();*/}required
type: string
The owner and repository to pull from, for example cloudflare/workers-rs.
required
type: string
The file path to pull from, for example templates/hello-world/src/lib.rs.
required
type: string
The long (40-characters) Git commit hash to pull from, for example ab3951b5c95329a600a7baa9f9bb1a7a95f1aeaa.
required
type: string
The language to use for the code block, for example rs.
If the lang is ts, the TypeScriptExample component will be used to provide a JavaScript tab as well.
type: string
A range of lines to filter the content using, for example 1-3.
type: string
A region to filter the content with, for example no-logging.
This should be represented as starting <docs-tag name="no-logging"> and closing </docs-tag name="no-logging"> comments in the source file.
type: object
Props to pass to the Expressive Code component ↗.
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Products
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark