Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .changeset/drop-setup-command-input.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
---
17 changes: 8 additions & 9 deletions .github/workflows/benchmark-community-world.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ on:
required: false
type: string
default: 'none'
setup-command:
description: 'Setup command to run after installing the world package'
required: false
type: string
default: ''
full-suite:
description: 'Run full benchmark suite including long-running tests'
required: false
Expand Down Expand Up @@ -116,14 +111,18 @@ jobs:
WORLD_PACKAGE: ${{ inputs.world-package }}
run: pnpm --filter "$APP_NAME" add "$WORLD_PACKAGE"

- name: Run setup command
if: ${{ inputs.setup-command != '' }}
# Per-world setup. Hardcoded (not taken from the matrix) so a malicious
# fork PR cannot smuggle arbitrary shell through matrix.world.setup-command.
- name: Per-world setup
env:
APP_NAME: ${{ inputs.app-name }}
SETUP_COMMAND: ${{ inputs.setup-command }}
WORLD_ID: ${{ inputs.world-id }}
run: |
cd "workbench/$APP_NAME"
eval "$SETUP_COMMAND"
case "$WORLD_ID" in
turso) pnpm exec workflow-turso-setup ;;
*) echo "No setup required for $WORLD_ID" ;;
esac

- name: Resolve symlinks
env:
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,6 @@ jobs:
world-package: ${{ matrix.world.package }}
service-type: ${{ matrix.world.service-type }}
env-vars: ${{ matrix.world.env-vars }}
setup-command: ${{ matrix.world.setup-command }}
# Run full suite only when manually triggered with full_suite=true
full-suite: ${{ (github.event_name == 'workflow_dispatch' && inputs.full_suite) || contains(github.event.pull_request.labels.*.name, 'stress-test') }}
secrets: inherit
Expand Down
17 changes: 8 additions & 9 deletions .github/workflows/e2e-community-world.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,6 @@ on:
required: false
type: string
default: 'none'
setup-command:
description: 'Setup command to run after installing the world package'
required: false
type: string
default: ''

jobs:
e2e:
Expand Down Expand Up @@ -118,14 +113,18 @@ jobs:
WORLD_PACKAGE: ${{ inputs.world-package }}
run: pnpm --filter "$APP_NAME" add "$WORLD_PACKAGE"

- name: Run setup command
if: ${{ inputs.setup-command != '' }}
# Per-world setup. Hardcoded (not taken from the matrix) so a malicious
# fork PR cannot smuggle arbitrary shell through matrix.world.setup-command.
- name: Per-world setup
env:
APP_NAME: ${{ inputs.app-name }}
SETUP_COMMAND: ${{ inputs.setup-command }}
WORLD_ID: ${{ inputs.world-id }}
run: |
cd "workbench/$APP_NAME"
eval "$SETUP_COMMAND"
case "$WORLD_ID" in
turso) pnpm exec workflow-turso-setup ;;
*) echo "No setup required for $WORLD_ID" ;;
esac

- name: Resolve symlinks
env:
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,6 @@ jobs:
world-package: ${{ matrix.world.package }}
service-type: ${{ matrix.world.service-type }}
env-vars: ${{ matrix.world.env-vars }}
setup-command: ${{ matrix.world.setup-command }}
secrets: inherit

# Final job: Aggregate all E2E results and update PR comment
Expand Down
8 changes: 7 additions & 1 deletion docs/components/worlds/WorldsFilteredGrid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ interface WorldsFilteredGridProps {
}

const managedIds = new Set(['vercel']);
const embeddedIds = new Set(['local', 'redis', 'turso']);
const embeddedIds = new Set([
'local',
'redis',
'turso',
'fantasticfour-redis',
'fantasticfour-redis-bullmq',
]);

const sections = [
{
Expand Down
1 change: 0 additions & 1 deletion scripts/create-community-worlds-matrix.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ const matrix = {
package: world.package,
'service-type': serviceType,
'env-vars': JSON.stringify(world.env || {}),
'setup-command': world.setup || '',
};
}),
};
Expand Down
137 changes: 137 additions & 0 deletions worlds-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,143 @@
"services": [],
"requiresCredentials": true,
"credentialsNote": "Requires JAZZ_API_KEY, JAZZ_WORKER_ACCOUNT, and JAZZ_WORKER_SECRET from Jazz Cloud"
},
{
"id": "fantasticfour-redis",
"type": "community",
"package": "@fantasticfour/world-redis",
"name": "Redis",
"description": "Pure Redis-based world using Redis Lists for lightweight and simple workflow execution. Minimal dependencies, fast setup, ideal for development and small-scale production.",
"repository": "https://github.com/vinnymac/worlds",
"docs": "https://github.com/vinnymac/worlds/tree/main/packages/world-redis",
"env": {
"WORKFLOW_TARGET_WORLD": "@fantasticfour/world-redis",
"WORKFLOW_REDIS_URI": "redis://localhost:6379"
},
"services": [
{
"name": "redis",
"image": "redis:7-alpine",
"ports": ["6379:6379"],
"healthCheck": {
"cmd": "redis-cli ping",
"interval": "10s",
"timeout": "5s",
"retries": 5
}
}
],
"setup": "pnpm exec fantasticfour-redis-setup"
},
{
"id": "fantasticfour-redis-bullmq",
"type": "community",
"package": "@fantasticfour/world-redis-bullmq",
"name": "Redis + BullMQ",
"description": "Production-grade Redis world using BullMQ for robust job queue management. Advanced features like rate limiting, priority queues, and delayed jobs.",
"repository": "https://github.com/vinnymac/worlds",
"docs": "https://github.com/vinnymac/worlds/tree/main/packages/world-redis-bullmq",
"env": {
"WORKFLOW_TARGET_WORLD": "@fantasticfour/world-redis-bullmq",
"WORKFLOW_REDIS_URI": "redis://localhost:6379"
},
"services": [
{
"name": "redis",
"image": "redis:7-alpine",
"ports": ["6379:6379"],
"healthCheck": {
"cmd": "redis-cli ping",
"interval": "10s",
"timeout": "5s",
"retries": 5
}
}
],
"setup": "pnpm exec fantasticfour-redis-bullmq-setup"
},
{
"id": "fantasticfour-cloudflare",
"type": "community",
"package": "@fantasticfour/world-cloudflare",
"name": "Cloudflare",
"description": "Cloudflare Durable Objects world with edge-native SQLite storage and global <10ms latency. Deploy workflows to 300+ cities worldwide with automatic state replication.",
"repository": "https://github.com/vinnymac/worlds",
"docs": "https://github.com/vinnymac/worlds/tree/main/packages/world-cloudflare",
"env": {
"WORKFLOW_TARGET_WORLD": "@fantasticfour/world-cloudflare"
},
"services": [],
"requiresDeployment": true
},
{
"id": "fantasticfour-mysql",
"type": "community",
"package": "@fantasticfour/world-mysql",
"name": "MySQL",
"description": "Pure MySQL world for durable storage, queueing, and streaming. No external dependencies — works with PlanetScale, RDS, Aiven, or any MySQL provider.",
"repository": "https://github.com/vinnymac/worlds",
"docs": "https://github.com/vinnymac/worlds/tree/main/packages/world-mysql",
"env": {
"WORKFLOW_TARGET_WORLD": "@fantasticfour/world-mysql",
"DATABASE_URL": "mysql://root:root@localhost:3306/mysql_test"
},
"services": [],
"requiresCredentials": true,
"credentialsNote": "Requires MySQL server (CI does not yet support mysql service containers)",
"setup": "pnpm exec world-mysql-setup"
},
{
"id": "fantasticfour-azure",
"type": "community",
"package": "@fantasticfour/world-azure",
"name": "Azure",
"description": "Azure Cosmos DB + Service Bus world with Change Feed streaming. Native Azure integration for enterprise deployments.",
"repository": "https://github.com/vinnymac/worlds",
"docs": "https://github.com/vinnymac/worlds/tree/main/packages/world-azure",
"env": {
"WORKFLOW_TARGET_WORLD": "@fantasticfour/world-azure",
"COSMOS_ENDPOINT": "",
"COSMOS_KEY": "",
"SERVICE_BUS_CONNECTION_STRING": ""
},
"services": [],
"requiresCredentials": true,
"credentialsNote": "Requires Azure Cosmos DB endpoint/key and Service Bus connection string"
},
{
"id": "fantasticfour-nats-jetstream",
"type": "community",
"package": "@fantasticfour/world-nats-jetstream",
"name": "NATS JetStream",
"description": "NATS JetStream world with built-in clustering support. Self-hosted, high-performance messaging for workflow execution.",
"repository": "https://github.com/vinnymac/worlds",
"docs": "https://github.com/vinnymac/worlds/tree/main/packages/world-nats-jetstream",
"env": {
"WORKFLOW_TARGET_WORLD": "@fantasticfour/world-nats-jetstream",
"WORKFLOW_NATS_URL": "nats://localhost:4222"
},
"services": [],
"requiresCredentials": true,
"credentialsNote": "Requires NATS server with JetStream enabled (CI does not yet support nats service containers)"
},
{
"id": "fantasticfour-upstash",
"type": "community",
"package": "@fantasticfour/world-upstash",
"name": "Upstash",
"description": "Serverless-native world using Upstash Redis for storage and QStash for HTTP-based queue management. Edge-ready with zero infrastructure to manage.",
"repository": "https://github.com/vinnymac/worlds",
"docs": "https://github.com/vinnymac/worlds/tree/main/packages/world-upstash",
"env": {
"WORKFLOW_TARGET_WORLD": "@fantasticfour/world-upstash",
"UPSTASH_REDIS_REST_URL": "",
"UPSTASH_REDIS_REST_TOKEN": "",
"UPSTASH_QSTASH_TOKEN": ""
},
"services": [],
"requiresCredentials": true,
"credentialsNote": "Requires Upstash Redis and QStash credentials from Upstash console (https://console.upstash.com)"
}
]
}
Loading