diff --git a/docs/develop/dotnet/child-workflows.mdx b/docs/develop/dotnet/child-workflows.mdx index feb6469f91..3589c62243 100644 --- a/docs/develop/dotnet/child-workflows.mdx +++ b/docs/develop/dotnet/child-workflows.mdx @@ -29,10 +29,19 @@ tags: - Child Workflows --- -This page shows how to do the following: - -- [Start a Child Workflow Execution](#child-workflows) -- [Set a Parent Close Policy](#parent-close-policy) +
+

Topics covered in this section

+
+ +
Start a Child Workflow Execution
+
+
+ +
Set a Parent Close Policy
+
+
+
+
## Start a Child Workflow Execution {#child-workflows} diff --git a/docs/develop/dotnet/converters-and-encryption.mdx b/docs/develop/dotnet/converters-and-encryption.mdx index 6412e6dca8..c63479ad32 100644 --- a/docs/develop/dotnet/converters-and-encryption.mdx +++ b/docs/develop/dotnet/converters-and-encryption.mdx @@ -20,6 +20,24 @@ tags: import { CaptionedImage } from '@site/src/components'; +
+

Topics covered in this section

+
+ +
Custom Payload Codec
+
+
+ +
Payload conversion
+
+
+ +
Custom Payload Converter
+
+
+
+
+ Temporal's security model is designed around client-side encryption of Payloads. A client may encrypt Payloads before sending them to the server, and decrypt them after receiving them from the server. This provides a high degree of confidentiality because the Temporal Server itself has absolutely no knowledge of the actual data. diff --git a/docs/develop/dotnet/core-application.mdx b/docs/develop/dotnet/core-application.mdx index 71e4fccb10..284b6653eb 100644 --- a/docs/develop/dotnet/core-application.mdx +++ b/docs/develop/dotnet/core-application.mdx @@ -2,33 +2,54 @@ id: core-application title: Core application - .NET SDK sidebar_label: Core application -description: Learn how to develop a basic Workflow and Activity Definition using the Temporal .NET SDK, run a Worker Process, and set up Dynamic Workflows and Activities. toc_max_heading_level: 4 keywords: - - activity - - activity definition - - activity execution - - dotnet - dotnet sdk - - worker + - temporal sdk + - core application - workflow - - workflow execution - - workflow parameters - - workflow return values + - activity + - worker +description: The Foundations section of the Temporal Developer's guide introduces essential concepts for building and running a Temporal Application using the .NET SDK. tags: - Activities + - Temporal Client + - Task Queues + - Workers + - Workflows - .Net SDK - Temporal SDKs --- -This page shows how to do the following: - -- [Develop a basic Workflow Definition](#develop-workflow) -- [Develop a basic Activity Definition](#develop-activity) -- [Start an Activity from a Workflow](#activity-execution) -- [Run a Worker Process](#run-worker-process) -- [Set a Dynamic Workflow](#set-a-dynamic-workflow) -- [Set a Dynamic Activity](#set-a-dynamic-activity) +
+

Topics covered in this section

+
+ +
Develop a basic Workflow Definition
+
+
+ +
Develop a basic Activity Definition
+
+
+ +
Start an Activity from a Workflow
+
+
+ +
Run a Worker Process
+
+
+ +
Set a Dynamic Workflow
+
+
+ +
Set a Dynamic Activity
+
+
+
+
## Develop a Workflow {#develop-workflow} diff --git a/docs/develop/dotnet/debugging.mdx b/docs/develop/dotnet/debugging.mdx index 50f9f9c5c9..d7d9eff620 100644 --- a/docs/develop/dotnet/debugging.mdx +++ b/docs/develop/dotnet/debugging.mdx @@ -17,17 +17,26 @@ tags: ## Debugging {#debug} -This page shows how to do the following: - -- [Debug in a development environment](#debug-in-a-development-environment) -- [Debug in a development production](#debug-in-a-development-production) +
+

Topics covered in this section

+
+ +
Debug in a development environment
+
+
+ +
Debug in a production environment
+
+
+
+
### Debug in a development environment {#debug-in-a-development-environment} **How to debug in a development environment using the Temporal .NET SDK** -In developing Workflows, you can use the normal development tools of logging and a debugger to see what’s happening in your Workflow. -In addition to the normal development tools of logging and a debugger, you can also see what’s happening in your Workflow by using the [Web UI](/web-ui) or [Temporal CLI](/cli). +In developing Workflows, you can use the normal development tools of logging and a debugger to see what's happening in your Workflow. +In addition to the normal development tools of logging and a debugger, you can also see what's happening in your Workflow by using the [Web UI](/web-ui) or [Temporal CLI](/cli). The Web UI provides insight into your Workflows, making it easier to identify issues and monitor the state of your Workflows in real time. ### Debug in a development production {#debug-in-a-development-production} diff --git a/docs/develop/dotnet/failure-detection.mdx b/docs/develop/dotnet/failure-detection.mdx index cc393bace7..cf3853d6ad 100644 --- a/docs/develop/dotnet/failure-detection.mdx +++ b/docs/develop/dotnet/failure-detection.mdx @@ -19,14 +19,35 @@ tags: - Errors --- -This page shows how to do the following: - -- [Workflow timeouts](#workflow-timeouts) -- [Workflow retries](#workflow-retries) -- [Activity timeouts](#activity-timeouts) -- [Activity Retry Policy](#activity-retries) -- [Heartbeat an Activity](#activity-heartbeats) -- [Heartbeat Timeout](#heartbeat-timeout) +
+

Topics covered in this section

+
+ +
Workflow timeouts
+
+
+ +
Workflow retries
+
+
+ +
Activity timeouts
+
+
+ +
Activity Retry Policy
+
+
+ +
Heartbeat an Activity
+
+
+ +
Heartbeat Timeout
+
+
+
+
## Workflow timeouts {#workflow-timeouts} diff --git a/docs/develop/dotnet/index.mdx b/docs/develop/dotnet/index.mdx index 8731245af7..2cff74ca01 100644 --- a/docs/develop/dotnet/index.mdx +++ b/docs/develop/dotnet/index.mdx @@ -12,164 +12,261 @@ tags: - Temporal SDKs --- -import * as Components from '@site/src/components'; - ![.NET SDK Banner](/img/assets/banner-dotnet-temporal.png) -:::info .NET SPECIFIC RESOURCES -Build Temporal Applications with the .NET SDK. - -**Temporal .NET Technical Resources:** - -- [.NET API Documentation](https://dotnet.temporal.io/api/) -- [.NET SDK Code Samples](https://github.com/temporalio/samples-dotnet) -- [.NET SDK GitHub](https://github.com/temporalio/sdk-dotnet) -- [Temporal 101 in .NET Free Course](https://learn.temporal.io/courses/temporal_101/dotnet/) - -**Get Connected with the Temporal .NET Community:** - -- [Temporal .NET Community Slack](https://temporalio.slack.com/archives/C012SHMPDDZ) -- [.NET SDK Forum](https://community.temporal.io/tag/dotnet-sdk) - ::: - -## [Core Application](/develop/dotnet/core-application) - -Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application. - -- [Develop a basic Workflow Definition](/develop/dotnet/core-application#develop-workflow): Workflows are the fundamental unit of a Temporal Application, and it all starts with the development of a Workflow Definition. -- [Develop a basic Activity Definition](/develop/dotnet/core-application#develop-activity): One of the primary things that Workflows do is orchestrate the execution of Activities. -- [Start an Activity from a Workflow](/develop/dotnet/core-application#activity-execution): Calls to spawn Activity Executions are written within a Workflow Definition. -- [Run a Worker Process](/develop/dotnet/core-application#run-worker-process): The Worker Process is where Workflow Functions and Activity Functions are executed. -- [Set a Dynamic Workflow](/develop/dotnet/core-application#set-a-dynamic-workflow): Set a Workflow that can be invoked dynamically at runtime. -- [Set a Dynamic Activity](/develop/dotnet/core-application#set-a-dynamic-activity): Set an Activity that can be invoked dynamically at runtime. - -## [Temporal Client](/develop/dotnet/temporal-client) - -Connect to a Temporal Service and start a Workflow Execution. - -- [Create a Temporal Client](/develop/dotnet/temporal-client#create-a-client): Learn to instantiate and configure a client to interact with the Temporal Service. -- [Connect to Temporal Cloud](/develop/dotnet/temporal-client#connect-to-temporal-cloud): Securely connect to the Temporal Cloud for a fully managed service. -- [Start a Workflow](/develop/dotnet/temporal-client#start-workflow): Initiate Workflows seamlessly via the .NET SDK. -- [Get Workflow results](/develop/dotnet/temporal-client#get-workflow-results): Retrieve and process the results of your Workflows efficiently. - -## [Testing](/develop/dotnet/testing-suite) - -Set up the testing suite and test Workflows and Activities. - -- [Test frameworks](/develop/dotnet/testing-suite#test-frameworks): Testing provides a framework to facilitate Workflow and integration testing. -- [Testing Workflows](/develop/dotnet/testing-suite#testing-workflows): Ensure the functionality and reliability of your Workflows. -- [Testing Activities](/develop/dotnet/testing-suite#test-activities): Validate the execution and outcomes of your Activities. -- [Replay test](/develop/dotnet/testing-suite#replay-test): Replay recreates the exact state of a Workflow Execution. - -## [Failure detection](/develop/dotnet/failure-detection) - -Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries. - -- [Workflow timeouts](/develop/dotnet/failure-detection#workflow-timeouts): Each Workflow timeout controls the maximum duration of a different aspect of a Workflow Execution. -- [Workflow retries](/develop/dotnet/failure-detection#workflow-retries): A Workflow Retry Policy can be used to retry a Workflow Execution in the event of a failure. -- [Activity timeouts](/develop/dotnet/failure-detection#activity-timeouts): Each Activity timeout controls the maximum duration of a different aspect of an Activity Execution. -- [Set an Activity Retry Policy](/develop/dotnet/failure-detection#activity-retries): Define retry logic for Activities to handle failures. -- [Heartbeat an Activity](/develop/dotnet/failure-detection#activity-heartbeats): An Activity Heartbeat is a ping from the Worker that is executing the Activity to the Temporal Service. -- [Heartbeat Timeout](/develop/dotnet/failure-detection#heartbeat-timeout): A Heartbeat Timeout works in conjunction with Activity Heartbeats. - -## [Workflow message passing](/develop/go/message-passing) - -Send messages to and read the state of Workflow Executions. - -### Signals - -- [Define Signal](/develop/dotnet/message-passing#signals): A Signal is a message sent to a running Workflow Execution. -- [Send a Signal from a Temporal Client](/develop/dotnet/message-passing#send-signal-from-client): Send a Signal to a Workflow from a Temporal Client. -- [Send a Signal from a Workflow](/develop/dotnet/message-passing#send-signal-from-workflow): Send a Signal to another Workflow from within a Workflow, this would also be called an External Signal. -- [Signal-With-Start](/develop/dotnet/message-passing#signal-with-start): Start a Workflow and send it a Signal in a single operation used from the Client. -- [Dynamic Handler](/develop/dotnet/message-passing#dynamic-handler): Dynamic Handlers provide flexibility to handle cases where the names of Workflows, Activities, Signals, or Queries aren't known at run time. -- [Set a Dynamic Signal](/develop/dotnet/message-passing#set-a-dynamic-signal): A Dynamic Signal in Temporal is a Signal that is invoked dynamically at runtime if no other Signal with the same input is registered. - -### Queries - -- [Define a Query](/develop/dotnet/message-passing#queries): A Query is a synchronous operation that is used to get the state of a Workflow Execution. -- [Send Queries](/develop/dotnet/message-passing#send-query): Queries are sent from the Temporal Client. -- [Set a Dynamic Query](/develop/dotnet/message-passing#set-a-dynamic-signal): A Dynamic Query in Temporal is a Query that is invoked dynamically at runtime if no other Query with the same name is registered. - -### Updates - -- [Define an Update](/develop/dotnet/message-passing#updates): An Update is an operation that can mutate the state of a Workflow Execution and return a response. -- [Send an Update](/develop/dotnet/message-passing#send-update-from-client): An Update is sent from the Temporal Client. - -## [Interrupt a Workflow](/develop/dotnet/cancellation) - -Interrupt a Workflow Execution with a Cancel or Terminate action. - -- [Cancel a Workflow](/develop/dotnet/cancellation#cancellation): Interrupt a Workflow Execution and its Activities through Workflow cancellation. -- [Terminate a Workflow](/develop/dotnet/cancellation#termination): Interrupt a Workflow Execution and its Activities through Workflow termination. - -## [Asynchronous Activity completion](/develop/dotnet/asynchronous-activity) - -Complete Activities asynchronously. - -- [Asynchronous Activity](/develop/dotnet/asynchronous-activity): Asynchronous Activity completion enables the Activity Function to return without the Activity Execution completing. - -## [Versioning](/develop/dotnet/versioning) - -Change Workflow Definitions without causing non-deterministic behavior in running Workflows. - -- [Use the .NET SDK Patching API](/develop/dotnet/versioning#dotnet-sdk-patching-api): Patching Workflows using the .NET SDK. - -## [Observability](/develop/dotnet/observability) - -Configure and use the Temporal Observability APIs. - -- [Emit Metrics](/develop/dotnet/observability#metrics): Each Temporal SDK is capable of emitting an optional set of metrics from either the Client or the Worker process. -- [Set up Tracing](/develop/dotnet/observability#tracing): Explains how the Go SDK supports tracing and custom context propagation. -- [Log from a Workflow](/develop/dotnet/observability#logging): Send logs and errors to a logging service, so that when things go wrong, you can see what happened. -- [Use Visibility APIs](/develop/dotnet/observability#visibility): The term Visibility, within the Temporal Platform, refers to the subsystems and APIs that enable an operator to view Workflow Executions that currently exist within a Terminal Service. - -## [Debugging](/develop/dotnet/debugging) - -Explore various ways to debug your application. - -- [Debug in a development environment](/develop/dotnet/debugging#debug-in-a-development-environment): In addition to the normal development tools of logging and a debugger, you can also see what’s happening in your Workflow by using the Web UI and the Temporal CLI. -- [Debug in a development production](/develop/dotnet/debugging#debug-in-a-development-production): Debug production Workflows using the Web UI, the Temporal CLI, Replays, Tracing, or Logging. - -## [Schedules](/develop/dotnet/schedules) - -Run Workflows on a schedule and delay the start of a Workflow. - -- [Schedule a Workflow](/develop/dotnet/schedules#schedule-a-workflow) - - [Create a Scheduled Workflow](/develop/dotnet/schedules#create-a-workflow): Create a new schedule for a scheduled Workflow. - - [Backfill a Scheduled Workflow](/develop/dotnet/schedules#backfill-a-scheduled-workflow): Backfills a past time range of actions for a scheduled Workflow. - - [Delete a Scheduled Workflow](/develop/dotnet/schedules#delete-a-scheduled-workflow): Deletes a schedule for a scheduled Workflow. - - [Describe a Scheduled Workflow](/develop/dotnet/schedules#describe-a-scheduled-workflow): Get schedule configuration and current state for a scheduled Workflow. - - [List a Scheduled Workflow](/develop/dotnet/schedules#list-a-scheduled-workflow): List a schedule for a scheduled Workflow. - - [Pause a Scheduled Workflow](/develop/dotnet/schedules#pause-a-scheduled-workflow): Pause a schedule for a scheduled Workflow. - - [Trigger a Scheduled Workflow](/develop/dotnet/schedules#trigger-a-scheduled-workflow): Triggers an immediate action for a scheduled Workflow. - - [Update a Scheduled Workflow](/develop/dotnet/schedules#update-a-scheduled-workflow): Updates a schedule with a new definition for a scheduled Workflow. -- [Use Start Delay](/develop/dotnet/schedules#start-delay): Start delay functionality if you need to delay the execution of the Workflow without the need for regular launches. - -## [Data encryption](/develop/dotnet/converters-and-encryption) - -Use compression, encryption, and other data handling by implementing custom converters and codecs. - -- [Use a custom Payload Codec](/develop/dotnet/converters-and-encryption#custom-payload-codec): Create a custom PayloadCodec implementation and define your encryption/compression and decryption/decompression logic. -- [Use a custom Payload Converter](/develop/dotnet/converters-and-encryption#custom-payload-converter): A custom data converter can be set via the `DataConverter` option when creating a client. - -## [Durable Timers](/develop/go/timers) - -Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years. - -- [Sleep](/develop/dotnet/durable-timers): A Timer lets a Workflow sleep for a fixed time period. - -## [Child Workflows](/develop/dotnet/child-workflows) - -Explore how to spawn a Child Workflow Execution and handle Child Workflow Events. - -- [Start a Child Workflow Execution](/develop/dotnet/child-workflows): A Child Workflow Execution is a Workflow Execution that is scheduled from within another Workflow using a Child Workflow API. -- [Set a Parent Close Policy](/develop/dotnet/child-workflows#parent-close-policy): A Parent Close Policy determines what happens to a Child Workflow Execution if its Parent changes to a Closed status. - -## [Continue-As-New](/develop/dotnet/continue-as-new) - -Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID. - -- [Continue-As-New](/develop/dotnet/continue-as-new): Continue-As-New enables a Workflow Execution to close successfully and create a new Workflow Execution in a single atomic operation if the number of Events in the Event History is becoming too large. +
+

.NET SDK resources

+
+
+

Technical Resources

+ +
+
+

Community

+ +
+ +
+
+ +
+
+

Core Application

+

Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application.

+
+ +
+

Temporal Client

+

Connect to a Temporal Service and start a Workflow Execution.

+
+ +
+

Testing

+

Set up the testing suite and test Workflows and Activities.

+
+ +
+

Failure Detection

+

Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries.

+
+ +
+

Workflow Message Passing

+

Send messages to and read the state of Workflow Executions.

+
+ +
+

Interrupt a Workflow

+

Interrupt a Workflow Execution with a Cancel or Terminate action.

+
+ +
+

Asynchronous Activity Completion

+

Complete Activities asynchronously.

+
+ +
+

Versioning

+

Change Workflow Definitions without causing non-deterministic behavior in current long-running Workflows.

+
+ +
+

Observability

+

Configure and use the Temporal Observability APIs.

+
+ +
+

Debugging

+

Explore various ways to debug your application.

+
+ +
+

Schedules

+

Run Workflows on a schedule and delay the start of a Workflow.

+
+ +
+

Data Encryption

+

Use compression, encryption, and other data handling by implementing custom converters and codecs.

+
+ +
+

Durable Timers

+

Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years.

+
+ +
+

Child Workflows

+

Explore how to spawn a Child Workflow Execution and handle Child Workflow Events.

+
+ +
+

Continue-As-New

+

Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID.

+
+
+ + diff --git a/docs/develop/dotnet/message-passing.mdx b/docs/develop/dotnet/message-passing.mdx index 921e762c36..0ea5f74ba1 100644 --- a/docs/develop/dotnet/message-passing.mdx +++ b/docs/develop/dotnet/message-passing.mdx @@ -1,17 +1,16 @@ --- id: message-passing -title: Workflow message passing - .NET SDK -sidebar_label: Messages -description: Develop with Queries, Signals, and Updates with the Temporal .NET SDK. -toc_max_heading_level: 3 +title: Message passing - .NET SDK +sidebar_label: Message passing +slug: /develop/dotnet/message-passing +toc_max_heading_level: 2 keywords: - - temporal dotnet signals - - send signal from client - - send signal from workflow - - signal with start - - workflow queries - - sending queries - - workflow updates + - messages + - queries + - signals + - updates + - workflow messages + - message handlers - dynamic workflows - dynamic activities - dynamic signals @@ -27,6 +26,32 @@ Temporal Clients use messages to read Workflow state and control execution. See [Workflow message passing](/encyclopedia/workflow-message-passing) for a general overview of this topic. This page introduces these features for the Temporal .NET SDK. +
+

Topics covered in this section

+
+ +
Write message handlers
+
+
+ +
Send messages
+
+
+ +
Message handler patterns
+
+
+ +
Message handler troubleshooting
+
+
+ +
Dynamic Handler
+
+
+
+
+ ## Write message handlers {#writing-message-handlers} :::info @@ -232,7 +257,7 @@ Call a Query method with [`WorkflowHandle.QueryAsync`](https://dotnet.temporal.i var supportedLanguages = await workflowHandle.QueryAsync(wf => wf.GetLanguages(new(false))); ``` -- Sending a Query doesn’t add events to a Workflow's Event History. +- Sending a Query doesn't add events to a Workflow's Event History. - You can send Queries to closed Workflow Executions within a Namespace's Workflow retention period. This includes Workflows that have completed, failed, or timed out. @@ -243,7 +268,7 @@ var supportedLanguages = await workflowHandle.QueryAsync(wf => wf.GetLanguages(n ### Send a Signal {#send-signal} You can send a Signal to a Workflow Execution from a Temporal Client or from another Workflow Execution. -However, you can only send Signals to Workflow Executions that haven’t closed. +However, you can only send Signals to Workflow Executions that haven't closed. #### Send a Signal from a Client {#send-signal-from-client} diff --git a/docs/develop/dotnet/observability.mdx b/docs/develop/dotnet/observability.mdx index 8cd7682b2f..e76f3c904c 100644 --- a/docs/develop/dotnet/observability.mdx +++ b/docs/develop/dotnet/observability.mdx @@ -2,35 +2,46 @@ id: observability title: Observability - .NET SDK sidebar_label: Observability -description: Explore Temporal SDK observability features for Metrics, Tracing, Logging, and Visibility. Learn to track Workflow Executions, set up Prometheus endpoints, customize metrics, configure tracing, and more. +description: Learn how to emit metrics, set up tracing, log from a Workflow, and use Visibility APIs using the Temporal .NET SDK to monitor and observe your applications. toc_max_heading_level: 4 keywords: - - client - - code sample - - developer guide - - guide context - - how to - - logging - - dotnet - - dotnet sdk - - sdk - - search attribute - - workflow - observability + - metrics + - tracing + - logging + - visibility + - opentelemetry + - prometheus + - grafana + - search attributes tags: - .Net SDK - Temporal SDKs - - Observability - - Search Attributes - - Workflows --- -This page covers features related to viewing the state of the application, including: - -- [Metrics](#metrics) -- [Tracing](#tracing) -- [Logging](#logging) -- [Visibility](#visibility) +The observability section of the Temporal Developer's guide covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application)—that is, ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. + +
+

Topics covered in this section

+
+ +
Emit metrics
+
+
+ +
Setup Tracing
+
+
+ +
Log from a Workflow
+
+
+ +
Use Visibility APIs
+
+
+
+
The observability feature guide covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application). This includes the ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. diff --git a/docs/develop/dotnet/schedules.mdx b/docs/develop/dotnet/schedules.mdx index e7cc2d8e70..1c62779cf2 100644 --- a/docs/develop/dotnet/schedules.mdx +++ b/docs/develop/dotnet/schedules.mdx @@ -2,7 +2,8 @@ id: schedules title: Schedules - .NET SDK sidebar_label: Schedules -description: Learn how to manage and optimize Scheduled Workflows using the Temporal .NET SDK; Schedule, Create, Backfill, Update, Delete, Describe, List, Pause, Trigger, and use Start Delay options. +slug: /develop/dotnet/schedules +toc_max_heading_level: 2 keywords: - sdk - dotnet @@ -14,18 +15,19 @@ tags: - Schedules --- -This page shows how to do the following: - -- [Schedule a Workflow](#schedule-a-workflow) -- [Create a Scheduled Workflow](#create-a-workflow) -- [Backfill a Scheduled Workflow](#backfill-a-scheduled-workflow) -- [Delete a Scheduled Workflow](#delete-a-scheduled-workflow) -- [Describe a Scheduled Workflow](#describe-a-scheduled-workflow) -- [List a Scheduled Workflow](#list-a-scheduled-workflow) -- [Pause a Scheduled Workflow](#pause-a-scheduled-workflow) -- [Trigger a Scheduled Workflow](#trigger-a-scheduled-workflow) -- [Update a Scheduled Workflow](#update-a-scheduled-workflow) -- [Use Start Delay](#start-delay) +
+

Topics covered in this section

+
+ +
Schedule a Workflow
+
+
+ +
Use Start Delay
+
+
+
+
## Schedule a Workflow {#schedule-a-workflow} @@ -66,7 +68,7 @@ var handle = await client.CreateScheduleAsync( :::tip Schedule Auto-Deletion -Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won’t fire again. +Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won't fire again. The Temporal Service doesn't guarantee when this removal will happen. ::: diff --git a/docs/develop/dotnet/set-up-your-local-dotnet.mdx b/docs/develop/dotnet/set-up-your-local-dotnet.mdx new file mode 100644 index 0000000000..6c1498082d --- /dev/null +++ b/docs/develop/dotnet/set-up-your-local-dotnet.mdx @@ -0,0 +1,529 @@ +--- +id: set-up-your-local-dotnet +title: Set up your local with the .NET SDK +sidebar_label: Quickstart - Setup +description: Configure your local development environment to get started developing with Temporal +tags: + - developer guide + - dotnet + - setup + - getting started +--- + +import { SetupSteps, SetupStep, CodeSnippet } from '@site/src/components/elements/SetupSteps'; +import { InfoBox } from '@site/src/components/elements/InfoBox'; +import { CallToAction } from '@site/src/components/elements/CallToAction'; + +
+

Quickstart

+ Ziggy mascot +
+ +Configure your local development environment to get started developing with Temporal. + + + +

The .NET SDK requires .NET 6.0 or later.

+

Install .NET by following the official .NET instructions.

+ +}> +## Install .NET + +The .NET SDK requires .NET 6.0 or later. +Install .NET by following the [official .NET instructions](https://dotnet.microsoft.com/download/dotnet/6.0). +
+ + + +dotnet new console -n temporalidotnet + + +cd temporalidotnet + + +dotnet add package Temporalio + + +}> + +## Install the Temporal .NET SDK + +Create a new .NET project and install the Temporal SDK package. + +Switch to the new directory for your project. + +Then, install the [Temporal .NET SDK](https://www.nuget.org/packages/Temporalio). + +Next, you'll configure a local Temporal service for development. + + + + +

macOS

+

Using Homebrew:

+ +brew install temporal + +

Or using curl:

+ +curl -sSf https://temporal.download/cli.sh | sh + +

Linux

+ +curl -sSf https://temporal.download/cli.sh | sh + +

Windows

+ +curl.exe -sSf https://temporal.download/cli.ps1 | pwsh + + +}> + +## Install Temporal CLI + +The fastest way to get a development version of the Temporal Service running on your local machine is to use [Temporal CLI](https://docs.temporal.io/cli). + +Temporal CLI is a tool for interacting with the Temporal Service from the command-line interface. It includes a self-contained distribution of the Temporal Service and [Web UI](https://docs.temporal.io/web-ui) that you can use for local development. + +Choose your operating system to install Temporal CLI: +
+ + + +temporal server start-dev + + +
+

Change the Web UI port

+

+ The Temporal Web UI may be on a different port in some examples or tutorials. + To change the port for the Web UI, use the --ui-port option when starting the server: +

+ + temporal server start-dev --ui-port 8080 + +

+ The Temporal Web UI will now be available at http://localhost:8080. +

+
+ + + + +}> + +## Start the development server + +Once you've installed Temporal CLI and added it to your PATH, open a new Terminal window and run the following command. + +This command starts a local Temporal Service. It starts the Web UI, creates the default Namespace, and uses an in-memory database. + +The Temporal Service will be available on localhost:7233. +The Temporal Web UI will be available at http://localhost:8233. + +Leave the local Temporal Service running as you work through tutorials and other projects. You can stop the Temporal Service at any time by pressing CTRL+C. + +Once you have everything installed, you're ready to build apps with Temporal on your local machine. +
+
+ +## Run Hello World: Test Your Installation + +Now let's verify your setup is working by creating and running a complete Temporal application with both a Workflow and Activity. + +This test will confirm that: + +- Your .NET SDK installation is working +- The Temporal .NET SDK is properly installed +- Your local Temporal Service is running +- You can successfully create and execute Workflows and Activities +- The communication between components is functioning correctly + + + +

Create an Activity file (MyActivities.cs):

+ +{`namespace MyNamespace; + +using Temporalio.Activities; + +public class MyActivities +{ +// Activities can be async and/or static too! We just demonstrate instance +// methods since many will use them that way. +[Activity] +public string SayHello(string name) => $"Hello, {name}!"; +}`} + + +}> + +### Create the Activity + +Activities contain your business logic. Create a file called `MyActivities.cs`: +
+ + + +

Create a Workflow file (SayHelloWorkflow.cs):

+ +{`namespace MyNamespace; + +using Temporalio.Workflows; + +[Workflow] +public class SayHelloWorkflow +{ +[WorkflowRun] +public async Task RunAsync(string name) +{ +// This workflow just runs a simple activity to completion. +// StartActivityAsync could be used to just start and there are many +// other things that you can do inside a workflow. +return await Workflow.ExecuteActivityAsync( +// This is a lambda expression where the instance is typed. If this +// were static, you wouldn't need a parameter. +(MyActivities act) => act.SayHello(name), +new() { StartToCloseTimeout = TimeSpan.FromMinutes(5) }); +} +}`} + + +}> + +### Create the Workflow + +Workflows orchestrate Activities and contain the application logic. Create a file called `SayHelloWorkflow.cs`: +
+ + + +

Create a Worker file (Program.cs):

+ +{`using MyNamespace; +using Temporalio.Client; +using Temporalio.Worker; + +// Create a client to localhost on "default" namespace +var client = await TemporalClient.ConnectAsync(new("localhost:7233")); + +// Cancellation token to shutdown worker on ctrl+c +using var tokenSource = new CancellationTokenSource(); +Console.CancelKeyPress += (_, eventArgs) => +{ +tokenSource.Cancel(); +eventArgs.Cancel = true; +}; + +// Create an activity instance since we have instance activities. If we had +// all static activities, we could just reference those directly. +var activities = new MyActivities(); + +// Create worker with the activity and workflow registered +using var worker = new TemporalWorker( +client, +new TemporalWorkerOptions("my-task-queue"). +AddActivity(activities.SayHello). +AddWorkflow()); + +// Run worker until cancelled +Console.WriteLine("Running worker"); +try +{ +await worker.ExecuteAsync(tokenSource.Token); +} +catch (OperationCanceledException) +{ +Console.WriteLine("Worker cancelled"); +}`} + + +

Run the Worker:

+ + dotnet run + + + +}> + +### Create and Run the Worker + +The Worker hosts your Workflows and Activities. Replace the contents of `Program.cs` with: + +Keep this terminal running - you should see "Running worker" displayed. +
+ + + +
+

Choose Your Execution Method

+

With the worker running, you can start a workflow in two ways:

+
+ +
+
Option 1: Using Temporal CLI (Recommended for testing)
+

Open a new terminal and run:

+ + temporal workflow start --type SayHelloWorkflow --task-queue my-task-queue --input '"Temporal"' + +
+ +
+
Option 2: Create a Client Program
+

Create a separate file called `Client.cs` for a more programmatic approach:

+ + +{`using MyNamespace; +using Temporalio.Client; + +// Create a client to localhost on "default" namespace +var client = await TemporalClient.ConnectAsync(new("localhost:7233")); + +// Run workflow +var result = await client.ExecuteWorkflowAsync( +(SayHelloWorkflow wf) => wf.RunAsync("Temporal"), +new(id: "my-workflow-id", taskQueue: "my-task-queue")); + +Console.WriteLine("Workflow result: {0}", result);`} + + +

Then run: dotnet run Client.cs

+
+ +
+

+ + + + + Verify Success +

+

If everything is working correctly, you should see:

+
    +
  • Worker processing the workflow and activity
  • +
  • Output: Workflow result: Hello, Temporal!
  • +
  • Workflow execution details in the Temporal Web UI
  • +
+
+ + + + +}> + +### Execute the Workflow + +Now that your worker is running, it's time to start a workflow execution. +
+
+ + +

Next: Run your first Temporal Application

+

Learn how to create a basic Workflow and run it with the Temporal .NET SDK

+
diff --git a/docs/develop/dotnet/temporal-client.mdx b/docs/develop/dotnet/temporal-client.mdx index bb022b6810..bb566b23b4 100644 --- a/docs/develop/dotnet/temporal-client.mdx +++ b/docs/develop/dotnet/temporal-client.mdx @@ -15,12 +15,27 @@ tags: - Certificates --- -This page shows how to do the following: - -- [Create a Temporal Client](#create-a-client) -- [Connect to Temporal Cloud](#connect-to-temporal-cloud) -- [Start a Workflow](#start-workflow) -- [Get Workflow results](#get-workflow-results) +
+

Topics covered in this section

+
+ +
Create a Temporal Client
+
+
+ +
Connect to Temporal Cloud
+
+
+ +
Start a Workflow
+
+
+ +
Get Workflow results
+
+
+
+
## Create a Temporal Client {#create-a-client} diff --git a/docs/develop/dotnet/testing-suite.mdx b/docs/develop/dotnet/testing-suite.mdx index 861220ee2d..098dec1138 100644 --- a/docs/develop/dotnet/testing-suite.mdx +++ b/docs/develop/dotnet/testing-suite.mdx @@ -1,26 +1,27 @@ --- id: testing-suite -title: Testing - .NET SDK -sidebar_label: Testing -description: The .NET test-suite guide covers Workflow and integration testing for Temporal. It includes end-to-end, integration, and unit testing, emphasizing the use of the test server to optimize test execution. +title: Testing suite - .NET SDK +sidebar_label: Testing suite +slug: /develop/dotnet/testing-suite +description: Learn how to test Workflows and Activities using the Temporal .NET SDK. Includes unit testing, integration testing, time skipping, and Workflow replay testing. toc_max_heading_level: 4 keywords: - - developer guide - - guide context - - how to - - dotnet - - sdk - testing - - time-skipping + - unit testing + - integration testing + - workflow testing + - activity testing + - test framework + - xunit tags: - .Net SDK - Temporal SDKs - Testing --- -The .NET test-suite feature guide describes the frameworks that facilitate Workflow and integration testing. +The Testing section of the Temporal Developer's guide describes the frameworks that facilitate Workflow and Activity testing. -In the context of Temporal, you can create these types of automated tests: +In the context of Temporal, you can create these types of tests: - **End-to-end:** Running a Temporal Server and Worker with all its Workflows and Activities; starting and interacting with Workflows from a Client. - **Integration:** Anything between end-to-end and unit testing. @@ -33,6 +34,28 @@ We generally recommend writing the majority of your tests as integration tests. Because the test server supports skipping time, use the test server for both end-to-end and integration tests with Workers. +
+

Topics covered in this section

+
+ +
Test frameworks
+
+
+ +
Testing Workflows
+
+
+ +
Testing Activities
+
+
+ +
Replay test
+
+
+
+
+ ## Test frameworks {#test-frameworks} **Compatible testing frameworks** diff --git a/docs/develop/dotnet/versioning.mdx b/docs/develop/dotnet/versioning.mdx index 8b02cb5e54..5fb96982a9 100644 --- a/docs/develop/dotnet/versioning.mdx +++ b/docs/develop/dotnet/versioning.mdx @@ -27,12 +27,19 @@ tags: - Patching --- -This page shows how to do the following: - -- [Use the .NET SDK Patching API](#dotnet-sdk-patching-api) -- [Patching in new code](#using-patched-for-workflow-history-markers) -- [Understanding deprecated Patches in the .NET SDK](#deprecated-patches) -- [Safe Deployment of PostPatchActivity](#deploy-postpatchactivity) +
+

Topics covered in this section

+
+ +
Introduction to Versioning
+
+
+ +
Use the .NET SDK Patching API
+
+
+
+
## Introduction to Versioning diff --git a/docs/develop/go/cancellation.mdx b/docs/develop/go/cancellation.mdx index 0be5f5f8a6..99ac706203 100644 --- a/docs/develop/go/cancellation.mdx +++ b/docs/develop/go/cancellation.mdx @@ -14,12 +14,27 @@ tags: - Temporal SDKs --- -This pages shows the following: - -- How to handle a Cancellation request within a Workflow. -- How to set an Activity Heartbeat Timeout. -- How to listen for and handle a Cancellation request within an Activity. -- How to send a Cancellation request from a Temporal Client. +
+

Topics covered in this section

+
+ +
How to handle a Cancellation request within a Workflow
+
+
+ +
How to set an Activity Heartbeat Timeout
+
+
+ +
How to listen for and handle a Cancellation request within an Activity
+
+
+ +
How to send a Cancellation request from a Temporal Client
+
+
+
+
## Handle Cancellation in Workflow {#handle-cancellation-in-workflow} diff --git a/docs/develop/go/child-workflows.mdx b/docs/develop/go/child-workflows.mdx index f6c4952d26..85cd344fff 100644 --- a/docs/develop/go/child-workflows.mdx +++ b/docs/develop/go/child-workflows.mdx @@ -13,10 +13,23 @@ tags: description: Learn how to use the Go SDK to start a Child Workflow Execution and set a Parent Close Policy, including details on Workflow Options and future management. --- -This page shows how to do the following: - -- [Start a Child Workflow Execution](#child-workflows) -- [Set a Parent Close Policy](#parent-close-policy) +
+

Topics covered in this section

+
+ +
Start a Child Workflow Execution
+
+
+ +
Set a Parent Close Policy
+
+
+ +
Async Child Workflows
+
+
+
+
## Start a Child Workflow Execution {#child-workflows} diff --git a/docs/develop/go/continue-as-new.mdx b/docs/develop/go/continue-as-new.mdx index 06b37aa3b8..03df6dc356 100644 --- a/docs/develop/go/continue-as-new.mdx +++ b/docs/develop/go/continue-as-new.mdx @@ -17,12 +17,27 @@ tags: - Temporal SDKs --- -This page answers the following questions for Go developers: - -- [What is Continue-As-New?](#what) -- [How to Continue-As-New?](#how) -- [When is it right to Continue-as-New?](#when) -- [How to test Continue-as-New?](#how-to-test) +
+

Topics covered in this section

+
+ +
What is Continue-As-New?
+
+
+ +
How to Continue-As-New?
+
+
+ +
When is it right to Continue-as-New?
+
+
+ +
How to test Continue-as-New?
+
+
+
+
## What is Continue-As-New? {#what} diff --git a/docs/develop/go/converters-and-encryption.mdx b/docs/develop/go/converters-and-encryption.mdx index 6393330925..000503b4d6 100644 --- a/docs/develop/go/converters-and-encryption.mdx +++ b/docs/develop/go/converters-and-encryption.mdx @@ -20,6 +20,24 @@ tags: import { CaptionedImage } from '@site/src/components'; +
+

Topics covered in this section

+
+ +
Custom Payload Codec
+
+
+ +
Custom Payload conversion
+
+
+ +
Custom Payload Converter
+
+
+
+
+ Temporal's security model is designed around client-side encryption of Payloads. A client may encrypt Payloads before sending them to the server, and decrypt them after receiving them from the server. This provides a high degree of confidentiality because the Temporal Server itself has absolutely no knowledge of the actual data. diff --git a/docs/develop/go/core-application.mdx b/docs/develop/go/core-application.mdx index 2c42b70b1d..07d9ac4a75 100644 --- a/docs/develop/go/core-application.mdx +++ b/docs/develop/go/core-application.mdx @@ -48,14 +48,35 @@ description: The Foundations section of the Temporal Developer's guide introduce The Foundations section of the Temporal Developer's guide covers the minimum set of concepts and implementation details needed to build and run a [Temporal Application](/temporal#temporal-application)—that is, all the relevant steps to start a [Workflow Execution](#develop-workflows) that executes an [Activity](#activity-definition). -In this section you can find the following: - -- [Run a development Temporal Service](#run-a-development-server) -- [Develop a Workflow](#develop-workflows) -- [Develop an Activity](#activity-definition) -- [Start an Activity Execution](#activity-execution) -- [Run a dev Worker](#develop-worker) -- [Run a Temporal Cloud Worker](#run-a-temporal-cloud-worker) +
+

Topics covered in this section

+
+ +
Run a development Temporal Service
+
+
+ +
Develop a Workflow
+
+
+ +
Develop an Activity
+
+
+ +
Start an Activity Execution
+
+
+ +
Run a dev Worker
+
+
+ +
Run a Temporal Cloud Worker
+
+
+
+
## How to install the Temporal CLI and run a development server {#run-a-development-server} diff --git a/docs/develop/go/debugging.mdx b/docs/develop/go/debugging.mdx index 1d620ace79..61671174bf 100644 --- a/docs/develop/go/debugging.mdx +++ b/docs/develop/go/debugging.mdx @@ -23,6 +23,24 @@ tags: - Temporal SDKs --- +
+

Topics covered in this section

+
+ +
Debug in a development environment
+
+
+ +
Debug in a production environment
+
+
+ +
Test Workflow Definitions in Go
+
+
+
+
+ You can use a debugger tool provided by your favorite IDE to debug your Workflow Definitions prior to testing or executing them. The Temporal Go SDK includes deadlock detection which fails a Workflow Task in case the code blocks over a second without relinquishing execution control. diff --git a/docs/develop/go/failure-detection.mdx b/docs/develop/go/failure-detection.mdx index 621710d753..d2c7fe2263 100644 --- a/docs/develop/go/failure-detection.mdx +++ b/docs/develop/go/failure-detection.mdx @@ -15,12 +15,27 @@ tags: description: Configure Workflow timeouts, set Retry Policies, and manage Activity timeouts and Heartbeats using Temporal's Go SDK for optimized execution control. --- -This page shows how to do the following: - -- [Set Workflow timeouts](#workflow-timeouts) -- [Set a Workflow Retry Policy](#workflow-retries) -- [Set Activity timeouts](#activity-timeouts) -- [Set a custom Activity Retry Policy](#activity-retries) +
+

Topics covered in this section

+
+ +
Set Workflow timeouts
+
+
+ +
Set a Workflow Retry Policy
+
+
+ +
Set Activity timeouts
+
+
+ +
Set a custom Activity Retry Policy
+
+
+
+
## Workflow timeouts {#workflow-timeouts} diff --git a/docs/develop/go/index.mdx b/docs/develop/go/index.mdx index 15fbfa295b..e90c02b55a 100644 --- a/docs/develop/go/index.mdx +++ b/docs/develop/go/index.mdx @@ -15,171 +15,271 @@ import * as Components from '@site/src/components'; ![Go SDK Banner](/img/assets/banner-go-temporal.png) -:::info GO SPECIFIC RESOURCES -Build Temporal Applications with the Go SDK. - -**Temporal Go Technical Resources:** - -- [Go API Documentation](https://pkg.go.dev/go.temporal.io/sdk) -- [Go SDK Code Samples](https://github.com/temporalio/samples-go) -- [Go SDK GitHub](https://github.com/temporalio/sdk-go) -- [Temporal 101 in Go Free Course](https://learn.temporal.io/courses/temporal_101/go/) - -**Get Connected with the Temporal Go Community:** - -- [Temporal Go Community Slack](https://temporalio.slack.com/archives/CTDTU3J4T) -- [Go SDK Forum](https://community.temporal.io/tag/go-sdk) - ::: - -## [Core Application](/develop/go/core-application) - -Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application. - -- [How to develop a basic Workflow](/develop/go/core-application#develop-workflows) -- [How to develop an Activity Definition in Go](/develop/go/core-application#activity-definition) -- [How to start an Activity Execution](/develop/go/core-application#activity-execution) -- [How to develop a Worker in Go](/develop/go/core-application#develop-worker) -- [How to run a Temporal Cloud Worker](/develop/go/core-application#run-a-temporal-cloud-worker) - -## [Temporal Client](/develop/go/temporal-clients) - -Connect to a Temporal Service and start a Workflow Execution. - -- [Connect to development Temporal Service](/develop/go/temporal-clients#connect-to-development-service) -- [Connect to Temporal Cloud](/develop/go/temporal-clients#connect-to-temporal-cloud) -- [Start Workflow Execution](/develop/go/temporal-clients#start-workflow-execution) -- [How to start a Workflow Execution](/develop/go/temporal-clients#start-workflow-execution) - -## [Multithreading](/develop/go/go-sdk-multithreading) - -Safely use multithreading with the Go SDK. - -## [Testing](/develop/go/testing-suite) - -Set up the testing suite and test Workflows and Activities. - -- [Test frameworks](/develop/go/testing-suite#test-frameworks) -- [Test setup](/develop/go/testing-suite#test-setup) -- [Testing Activities](/develop/go/testing-suite#test-activities) -- [Mock and override Activities](/develop/go/testing-suite#mock-and-override-activities) -- [Testing Workflows](/develop/go/testing-suite#test-workflows) -- [How to Replay a Workflow Execution](/develop/go/testing-suite#replay) - -## [Failure detection feature guide](/develop/go/failure-detection) - -Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries. - -- [Workflow timeouts](/develop/go/failure-detection#workflow-timeouts) -- [How to set Activity timeouts](/develop/go/failure-detection#activity-timeouts) -- [How to Heartbeat an Activity](/develop/go/failure-detection#activity-heartbeats) - -## [Workflow message passing](/develop/go/message-passing) - -Send messages to and read the state of Workflow Executions. - -- [How to develop with Signals](/develop/go/message-passing#signals) -- [How to develop with Queries](/develop/go/message-passing#queries) -- [How to develop with Updates](/develop/go/message-passing#updates) - -## [Interrupt a Workflow feature guide](/develop/go/cancellation) - -Interrupt a Workflow Execution with a Cancel or Terminate action. - -- [Handle a Workflow Cancellation Request](/develop/go/cancellation#handle-cancellation-in-workflow): Interrupt a Workflow Execution and its Activities through Workflow cancellation. -- [Request Cancellation](/develop/go/cancellation#request-cancellation) - -## [Asynchronous Activity completion](/develop/go/asynchronous-activity-completion) - -Complete Activities asynchronously. - -- [How to asynchronously complete an Activity](/develop/go/asynchronous-activity-completion) - -## [Versioning](/develop/go/versioning) - -Change Workflow Definitions without causing non-deterministic behavior in running Workflows. - -- [Temporal Go SDK Patching APIs](/develop/go/versioning#patching) -- [Sanity checking](/develop/go/versioning#sanity-checking) -- [How to use Worker Versioning in Go](/develop/go/versioning#worker-versioning) - -## [Observability](/develop/go/observability) - -Configure and use the Temporal Observability APIs. - -- [How to emit metrics](/develop/go/observability#metrics) -- [Tracing and Context Propagation](/develop/go/observability#tracing-and-context-propogation) -- [How to log from a Workflow](/develop/go/observability#logging) -- [How to use Visibility APIs](/develop/go/observability#visibility) - -## [Debugging](/develop/go/debugging) - -Explore various ways to debug your application. - -- [How to debug in a development environment](/develop/go/debugging#debug-in-a-development-environment) -- [How to debug in a production environment](/develop/go/debugging#debug-in-a-production-environment) -- [How to test Workflow Definitions in Go](/develop/go/debugging#testing-and-debugging) - -## [Schedules](/develop/go/schedules) - -Run Workflows on a schedule and delay the start of a Workflow. - -- [How to Schedule a Workflow](/develop/go/schedules#schedule-a-workflow) -- [How to use Temporal Cron Jobs](/develop/go/schedules#temporal-cron-jobs) - -## [Data encryption](/develop/go/converters-and-encryption) - -Use compression, encryption, and other data handling by implementing custom converters and codecs. - -- [How to use a custom Payload Codec in Go](/develop/go/converters-and-encryption#custom-payload-codec) -- [How to use custom payload conversion](/develop/go/converters-and-encryption#custom-payload-conversion) -- [How to use a custom Payload Converter in Go](/develop/go/converters-and-encryption#custom-payload-converter) - -## Temporal Nexus - -The [Temporal Nexus](/develop/go/nexus) feature guide shows how to use Temporal Nexus to connect durable executions within and across Namespaces using a Nexus Endpoint, a Nexus Service contract, and Nexus Operations. - -- [Create a Nexus Endpoint to route requests from caller to handler](/develop/go/nexus#create-nexus-endpoint) -- [Define the Nexus Service contract](/develop/go/nexus#define-nexus-service-contract) -- [Develop a Nexus Service and Operation handlers](/develop/go/nexus#develop-nexus-service-operation-handlers) -- [Develop a caller Workflow that uses a Nexus Service](/develop/go/nexus#develop-caller-workflow-nexus-service) -- [Make Nexus calls across Namespaces with a dev Server](/develop/go/nexus#nexus-calls-across-namespaces-dev-server) -- [Make Nexus calls across Namespaces in Temporal Cloud](/develop/go/nexus#nexus-calls-across-namespaces-temporal-cloud) - -## [Durable Timers](/develop/go/timers) - -Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years. - -- [Set a Timer](/develop/go/timers) - -## [Child Workflows](/develop/go/child-workflows) - -Explore how to spawn a Child Workflow Execution and handle Child Workflow Events. - -- [How to start a Child Workflow Execution](/develop/go/child-workflows#child-workflows) - -## [Continue-As-New](/develop/go/continue-as-new) - -Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID. - -- [How to Continue-As-New](/develop/go/continue-as-new) - -## [Worker Sessions](/develop/go/sessions) - -Use Worker Session APIs. - -- [Enable Sessions for a Worker](/develop/go/sessions#enable-sessions) -- [Change the maximum concurrent Sessions of a Worker](/develop/go/sessions#max-concurrent-sessions) -- [Create a Worker Session](/develop/go/sessions#create-a-session) - -## [Side Effects](/develop/go/side-effects) - -Use Side Effects in Workflows. - -- [Side Effects](/develop/go/side-effects) - -## [Manage Namespaces](/develop/go/namespaces) - -Create and manage Namespaces. - -- [Register Namespaces](/develop/go/namespaces#register-namespace) -- [Manage Namespaces](/develop/go/namespaces#manage-namespaces) +
+

Go SDK resources

+
+
+

Technical Resources

+ +
+
+

Community

+ +
+
+
+ +
+
+

Core Application

+

Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application.

+
+ +
+

Temporal Client

+

Connect to a Temporal Service and start a Workflow Execution.

+
+ +
+

Testing

+

Set up the testing suite and test Workflows and Activities.

+
+ +
+

Failure Detection

+

Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries.

+
+ +
+

Message Passing

+

Send messages to and read the state of Workflow Executions.

+
+ +
+

Workflow Interruption

+

Interrupt a Workflow Execution with a Cancel or Terminate action.

+
+ +
+

Versioning

+

Change Workflow Definitions without causing non-deterministic behavior in current long-running Workflows.

+
+ +
+

Observability

+

Configure and use the Temporal Observability APIs.

+
+ +
+

Debugging

+

Explore various ways to debug your application.

+
+ +
+

Schedules

+

Run Workflows on a schedule and delay the start of a Workflow.

+
+ +
+

Data Encryption

+

Use compression, encryption, and other data handling by implementing custom converters and codecs.

+
+ +
+

Temporal Nexus

+

Use Temporal Nexus to connect durable executions within and across Namespaces.

+
+ +
+

Durable Timers

+

Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years.

+
+ +
+

Child Workflows

+

Explore how to spawn a Child Workflow Execution and handle Child Workflow Events.

+
+ +
+

Continue-As-New

+

Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID.

+
+ +
+

Worker Sessions

+

Use Worker Session APIs.

+
+ +
+

Side Effects

+

Use Side Effects in Workflows.

+
+ +
+

Manage Namespaces

+

Create and manage Namespaces.

+
+
+ + diff --git a/docs/develop/go/message-passing.mdx b/docs/develop/go/message-passing.mdx index aa9fb98f7a..5df410f805 100644 --- a/docs/develop/go/message-passing.mdx +++ b/docs/develop/go/message-passing.mdx @@ -26,6 +26,28 @@ tags: - Temporal SDKs --- +
+

Topics covered in this section

+
+ +
Handle Messages
+
+
+ +
Send Messages
+
+
+ +
Message Handler Patterns
+
+
+ +
Troubleshooting
+
+
+
+
+ A Workflow can act like a stateful web service that receives messages: Queries, Signals, and Updates. The Workflow implementation defines these endpoints via handler methods that can react to incoming Queries and Updates, and via Signal channels. Temporal Clients use messages to read Workflow state and control its execution. @@ -248,7 +270,7 @@ log.Println("Supported languages:", supportedLang) // ... ``` -- Sending a Query doesn’t add events to a Workflow's Event History. +- Sending a Query doesn't add events to a Workflow's Event History. - You can send Queries to closed Workflow Executions within a Namespace's Workflow retention period. This includes Workflows that have completed, failed, or timed out. @@ -259,7 +281,7 @@ log.Println("Supported languages:", supportedLang) ### Send a Signal {#send-signal} You can send a Signal to a Workflow Execution from a Temporal Client or from another Workflow Execution. -However, you can only send Signals to Workflow Executions that haven’t closed. +However, you can only send Signals to Workflow Executions that haven't closed. #### Send a Signal from a Client {#send-signal-from-client} diff --git a/docs/develop/go/namespaces.mdx b/docs/develop/go/namespaces.mdx index 2a0520dc84..2ec2d8c899 100644 --- a/docs/develop/go/namespaces.mdx +++ b/docs/develop/go/namespaces.mdx @@ -12,10 +12,19 @@ tags: description: Register and manage Namespaces in Temporal using CLI or SDK APIs. Isolate Workflow Executions, match development lifecycles, and secure Namespace workflows. --- -This page shows how to do the following: - -- [Register Namespaces](#register-namespace) -- [Manage Namespaces](#manage-namespaces) +
+

Topics covered in this section

+
+ +
Register Namespaces
+
+
+ +
Manage Namespaces
+
+
+
+
You can create, update, deprecate, or delete your [Namespaces](/namespaces) using either the Temporal CLI or SDK APIs. diff --git a/docs/develop/go/observability.mdx b/docs/develop/go/observability.mdx index f186ef4533..02e735c574 100644 --- a/docs/develop/go/observability.mdx +++ b/docs/develop/go/observability.mdx @@ -28,14 +28,30 @@ tags: description: Monitor your Temporal Application state using Metrics, Tracing, Logging, and Visibility features. Emit metrics, configure tracing, use context propagation, customize logging, and use Search Attributes with the Temporal Go SDK for enhanced Workflow Execution insights. --- -This page covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application)—that is, ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. - -This section covers features related to viewing the state of the application, including: - -- [Metrics](#metrics) -- [Tracing](#tracing-and-context-propogation) -- [Logging](#logging) -- [Visibility](#visibility) +This page covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application). +That is, ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. + +
+

Topics covered in this section

+
+ +
Metrics
+
+
+ +
Tracing
+
+
+ +
Logging
+
+
+ +
Visibility
+
+
+
+
## How to emit metrics {#metrics} @@ -159,7 +175,7 @@ To propagate context over Nexus Operation calls, the context is serialized into This is essentially a wrapper around `map[string]string` with helper methods to `Set` and `Get` values. The header normalizes all keys to lowercase. -Because Nexus uses this custom format, and because Nexus calls may involve external systems, the `ContextPropagator` interface doesn’t apply to Nexus headers. +Because Nexus uses this custom format, and because Nexus calls may involve external systems, the `ContextPropagator` interface doesn't apply to Nexus headers. Context must be explicitly propagated through interceptors, as shown in the [Nexus Context Propagation sample](https://github.com/temporalio/samples-go/tree/main/nexus-context-propagation). ### Useful Resources diff --git a/docs/develop/go/schedules.mdx b/docs/develop/go/schedules.mdx index 28b56a85a0..1cd9c3fd8d 100644 --- a/docs/develop/go/schedules.mdx +++ b/docs/develop/go/schedules.mdx @@ -13,19 +13,23 @@ tags: description: Learn how to schedule Workflows, start them with delays or as Temporal Cron Jobs using the Go SDK. Master scheduling, backfilling, pausing, deleting, and updating Workflows. --- -This page shows how to do the following: - -- [Scheduled Workflows](#schedule-a-workflow) - - [Create a Schedule](#create-schedule) - - [Backfill a Schedule](#backfill-schedule) - - [Delete a Schedule](#delete-schedule) - - [Describe a Schedule](#describe-schedule) - - [List Schedules](#list-schedules) - - [Pause a Schedule](#pause-schedule) - - [Trigger a Schedule](#trigger-schedule) - - [Update a Schedule](#update-schedule) -- [Start delay](#start-delay) -- [Temporal Cron Jobs](#temporal-cron-jobs) +
+

Topics covered in this section

+
+ +
Scheduled Workflows
+
+
+ +
Start delay
+
+
+ +
Temporal Cron Jobs
+
+
+
+
## Scheduled Workflows {#schedule-a-workflow} @@ -72,7 +76,7 @@ func main() { :::tip Schedule Auto-Deletion -Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won’t fire again. +Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won't fire again. The Temporal Service doesn't guarantee when this removal will happen. ::: diff --git a/docs/develop/go/selectors.mdx b/docs/develop/go/selectors.mdx index 02630c51d0..189bd5a003 100644 --- a/docs/develop/go/selectors.mdx +++ b/docs/develop/go/selectors.mdx @@ -10,14 +10,34 @@ tags: - Workflows - Go SDK - Temporal SDKs -description: Learn how to use Temporal’s Go SDK Selectors with Futures, Timers, and Channels. Ensure deterministic Workflow execution and handle multiple parallel tasks efficiently. +description: Learn how to use Temporal's Go SDK Selectors with Futures, Timers, and Channels. Ensure deterministic Workflow execution and handle multiple parallel tasks efficiently. --- -This page shows how to do the following: - -- [Use Selectors with Futures](#use-selectors-with-futures) -- [Use Selectors with Timers](#use-selectors-with-timers) -- [Use Selectors with Channels](#use-selectors-with-channels) +
+

Topics covered in this section

+
+ +
Full API example
+
+
+ +
Use Selectors with Futures
+
+
+ +
Use Selectors with Timers
+
+
+ +
Use Selectors with Channels
+
+
+ +
Query Selector state
+
+
+
+
In Go, the `select` statement lets a goroutine wait on multiple communication operations. A `select` **blocks until one of its cases can run**, then it executes that case. diff --git a/docs/develop/go/sessions.mdx b/docs/develop/go/sessions.mdx index e4e217a53f..8309ab9dc0 100644 --- a/docs/develop/go/sessions.mdx +++ b/docs/develop/go/sessions.mdx @@ -12,12 +12,6 @@ tags: description: Learn how to enable Worker Sessions, change concurrent Sessions, and create Session Workers using the Go SDK for precise Task Routing, ensuring efficient Activity Tasks execution. --- -This page shows how to do the following: - -- [Enable Worker Sessions](#enable-sessions) -- [Change the maximum concurrent Sessions of a Worker](#max-concurrent-sessions) -- [Create a Worker Session](#create-a-session) - :::tip Support, stability, and dependency info - This feature is currently available only in the Go SDK. @@ -26,6 +20,28 @@ This page shows how to do the following: A Worker Session is a feature that provides a straightforward API for [Task Routing](/task-routing) to ensure that Activity Tasks are executed with the same Worker without requiring you to manually specify Task Queue names. +
+

Topics covered in this section

+
+ +
Enable Worker Sessions
+
+
+ +
Change the maximum concurrent Sessions of a Worker
+
+
+ +
Create a Worker Session
+
+
+ +
Additional Session usage information
+
+
+
+
+ ## Enable Worker Sessions {#enable-sessions} **How to enable Worker Sessions using the Go SDK.** diff --git a/docs/develop/go/set-up-your-local-go.mdx b/docs/develop/go/set-up-your-local-go.mdx new file mode 100644 index 0000000000..8e54ffbb71 --- /dev/null +++ b/docs/develop/go/set-up-your-local-go.mdx @@ -0,0 +1,116 @@ +--- +id: set-up-your-local-go +sidebar_label: Setup +title: Setup +--- + +import { SetupSteps, SetupStep, CodeSnippet } from '@site/src/components/elements/SetupSteps'; +import { CallToAction } from '@site/src/components/elements/CallToAction'; + +# Setup + +Configure your local development environment to get started developing with Temporal. + + + + + go version + + + go version go1.18.1 darwin/amd64 + + +}> +## Install Go + +Make sure you have Go installed. These tutorials were produced using Go 1.18. Check your version of Go with the following command: + +This will return your installed Go version. + + + + +mkdir goproject + + +cd goproject + + +go mod init + + +go get go.temporal.io/sdk + + +}> + +## Install the Temporal Go SDK + +If you are creating a new project using the Temporal Go SDK, you can start by creating a new directory. + +Next, switch to the new directory. + +Then, initialize a Go project in that directory. + +Finally, install the Temporal SDK with `go get`. + + + + +brew install temporal + + +}> + +## Install Temporal CLI + +The fastest way to get a development version of the Temporal Service running on your local machine is to use [Temporal CLI](https://docs.temporal.io/cli). + +Install Temporal CLI on your local machine using the following instructions for your platform. + + + + +temporal server start-dev + + +
+

Change the Web UI port

+

The Temporal Web UI may be on a different port in some examples or tutorials. To change the port for the Web UI, use the --ui-port option when starting the server:

+ +temporal server start-dev --ui-port 8080 + +

The Temporal Web UI will now be available at http://localhost:8080.

+
+ + +temporal server start-dev --db-filename your_temporal.db + + +}> + +## Start the development server + +Once you've installed Temporal CLI and added it to your PATH, open a new Terminal window and run the following command. + +This command starts a local Temporal Service. It starts the Web UI, creates the default Namespaces, and uses an in-memory database. + +The Temporal Service will be available on localhost:7233. +The Temporal Web UI will be available at http://localhost:8233. + +Leave the local Temporal Service running as you work through tutorials and other projects. You can stop the Temporal Service at any time by pressing CTRL+C. + +The temporal server start-dev command uses an in-memory database, so stopping the server will erase all your Workflows and all your Task Queues. If you want to retain those between runs, start the server and specify a database filename using the --db-filename option, like this: +
+
+ + +

Next: Run your first Temporal Application

+

Learn how to create a basic Workflow and run it with the Temporal Go SDK

+
diff --git a/docs/develop/go/temporal-client.mdx b/docs/develop/go/temporal-client.mdx index d54bdfbc80..ca082de585 100644 --- a/docs/develop/go/temporal-client.mdx +++ b/docs/develop/go/temporal-client.mdx @@ -2,7 +2,7 @@ id: temporal-clients title: Temporal Client - Go SDK sidebar_label: Temporal Client -description: Learn how to connect to Temporal Service or Cloud, start Workflow Executions, manage Workflow options, and retrieve Workflow results using the Go SDK. Follow detailed steps and code examples to effectively utilize Temporal’s capabilities. +description: Learn how to connect to Temporal Service or Cloud, start Workflow Executions, manage Workflow options, and retrieve Workflow results using the Go SDK. Follow detailed steps and code examples to effectively utilize Temporal's capabilities. toc_max_heading_level: 4 keywords: - temporal go sdk @@ -30,12 +30,27 @@ tags: - Certificates --- -The pages shows how to do the following: - -- [Connect to a local development Temporal Service](#connect-to-development-service) -- [Connect to Temporal Cloud](#connect-to-temporal-cloud) -- [Start a Workflow Execution](#start-workflow-execution) -- [How to start a Workflow Execution](/develop/go/temporal-clients#start-workflow-execution) +
+

Topics covered in this section

+
+ +
Connect to a local development Temporal Service
+
+
+ +
Connect to Temporal Cloud
+
+
+ +
Start a Workflow Execution
+
+
+ +
How to start a Workflow Execution
+
+
+
+
## Connect to development Temporal Service {#connect-to-development-service} diff --git a/docs/develop/go/temporal-nexus.mdx b/docs/develop/go/temporal-nexus.mdx index 9e40556548..83807426cb 100644 --- a/docs/develop/go/temporal-nexus.mdx +++ b/docs/develop/go/temporal-nexus.mdx @@ -24,16 +24,43 @@ Temporal Go SDK support for Nexus is now [Generally Available](/evaluate/develop Use [Temporal Nexus](/evaluate/nexus) to connect Temporal Applications within and across Namespaces using a Nexus Endpoint, a Nexus Service contract, and Nexus Operations. -This page shows how to do the following: - -- [Run a development Temporal Service with Nexus enabled](#run-the-temporal-nexus-development-server) -- [Create caller and handler Namespaces](#create-caller-handler-namespaces) -- [Create a Nexus Endpoint to route requests from caller to handler](#create-nexus-endpoint) -- [Define the Nexus Service contract](#define-nexus-service-contract) -- [Develop a Nexus Service and Operation handlers](#develop-nexus-service-operation-handlers) -- [Develop a caller Workflow that uses a Nexus Service](#develop-caller-workflow-nexus-service) -- [Make Nexus calls across Namespaces with a development Server](#nexus-calls-across-namespaces-dev-server) -- [Make Nexus calls across Namespaces in Temporal Cloud](#nexus-calls-across-namespaces-temporal-cloud) +
+

Topics covered in this section

+
+ +
Run a development Temporal Service with Nexus enabled
+
+
+ +
Create caller and handler Namespaces
+
+
+ +
Create a Nexus Endpoint to route requests from caller to handler
+
+
+ +
Define the Nexus Service contract
+
+
+ +
Develop a Nexus Service and Operation handlers
+
+
+ +
Develop a caller Workflow that uses a Nexus Service
+
+
+ +
Make Nexus calls across Namespaces with a development Server
+
+
+ +
Make Nexus calls across Namespaces in Temporal Cloud
+
+
+
+
## Run a development server with Nexus enabled {#run-the-temporal-nexus-development-server} diff --git a/docs/develop/go/test-suites.mdx b/docs/develop/go/test-suites.mdx index 6ff810884d..c9562f19a6 100644 --- a/docs/develop/go/test-suites.mdx +++ b/docs/develop/go/test-suites.mdx @@ -22,6 +22,36 @@ tags: description: The Testing section of the Temporal Application development guide details frameworks for Workflow and integration testing. Learn to create end-to-end, integration, unit tests, and more for Workflows and Activities. Each test runs in an isolated environment, ensuring accurate and reliable testing. Discover how to mock and override Activities, test --- +
+

Topics covered in this section

+
+ +
Test setup
+
+
+ +
Testing Activities
+
+
+ +
Mock and override Activities
+
+
+ +
Mock and override Nexus operations
+
+
+ +
Testing Workflows
+
+
+ +
How to Replay a Workflow Execution
+
+
+
+
+ The Testing section of the Temporal Application development guide describes the frameworks that facilitate Workflow and integration testing. In the context of Temporal, you can create these types of automated tests: diff --git a/docs/develop/go/versioning.mdx b/docs/develop/go/versioning.mdx index 76d3e4c56f..835c9e92f8 100644 --- a/docs/develop/go/versioning.mdx +++ b/docs/develop/go/versioning.mdx @@ -19,10 +19,25 @@ tags: --- The Temporal Platform requires that Workflow code is [deterministic](/workflow-definition#deterministic-constraints). -Because of that requirement, the Temporal Go SDK offers two dedicated versioning features. - -- [Workflow Patching APIs](#patching) -- [Worker Versioning](#worker-versioning) +Because of that requirement, the Temporal Go SDK offers two dedicated versioning features: Workflow Patching APIs and Worker Versioning. + +
+

Topics covered in this section

+
+ +
Workflow Patching APIs
+
+
+ +
Worker Versioning
+
+
+ +
Sanity checking
+
+
+
+
## Temporal Go SDK Patching APIs {#patching} diff --git a/docs/develop/index.mdx b/docs/develop/index.mdx index 8947eee62e..2818f4aab9 100644 --- a/docs/develop/index.mdx +++ b/docs/develop/index.mdx @@ -5,16 +5,202 @@ description: Discover comprehensive Temporal SDK feature guides and API referenc sidebar_label: Development --- -import { SdkLogos } from '@site/src/components'; +import { SdkLogos } from '@site/src/components/elements/SdkLogos'; -The Temporal SDK developer guides provide a comprehensive overview of the structures, primitives, and features used in [Temporal Application](/temporal#temporal-application) development. +## 100% Open Source - +Temporal SDKs provide the foundation for building reliable distributed applications. Each SDK is designed to help you implement durable Workflows, Activities, and Workers with native language support and comprehensive tooling. -- Go SDK [developer guide](/develop/go) and [API reference](http://t.mp/go-api) -- Java SDK [developer guide](/develop/java) and [API reference](http://t.mp/java-api) -- PHP SDK [developer guide](/develop/php) and [API reference](https://php.temporal.io/namespaces/temporal.html) -- Python SDK [developer guide](/develop/python) and [API reference](https://python.temporal.io) -- TypeScript SDK [developer guide](/develop/typescript) and [API reference](https://typescript.temporal.io) -- .NET SDK [developer guide](/develop/dotnet) and [API reference](https://dotnet.temporal.io/) -- Ruby SDK [README](https://github.com/temporalio/sdk-ruby) and [API reference](https://ruby.temporal.io/) +
+
+
+
+
+

Go SDK

+ Go SDK +
+ +
+
+
+

Java SDK

+ Java SDK +
+ +
+
+
+

TypeScript SDK

+ TypeScript SDK +
+ +
+
+
+

Python SDK

+ Python SDK +
+ +
+
+
+

PHP SDK

+ PHP SDK +
+ +
+
+
+

.NET SDK

+ .NET SDK +
+ +
+
+
+

Ruby SDK

+ Ruby SDK +
+ +
+
+
+
+ + diff --git a/docs/develop/java/child-workflows.mdx b/docs/develop/java/child-workflows.mdx index a2eebdb94e..02d1f50a1e 100644 --- a/docs/develop/java/child-workflows.mdx +++ b/docs/develop/java/child-workflows.mdx @@ -13,10 +13,19 @@ tags: description: Learn how to start a Child Workflow Execution and set a Parent Close Policy using the Java SDK. Manage Child Workflow Events and ensure successful execution. --- -This page shows how to do the following: - -- [Start a Child Workflow Execution](#start-child-workflow) -- [Set a Parent Close Policy](#parent-close-policy) +
+

Topics covered in this section

+
+ +
Start a Child Workflow Execution
+
+
+ +
Set a Parent Close Policy
+
+
+
+
## Start a Child Workflow Execution {#start-child-workflow} diff --git a/docs/develop/java/core-application.mdx b/docs/develop/java/core-application.mdx index c982417b2b..85dfbe4201 100644 --- a/docs/develop/java/core-application.mdx +++ b/docs/develop/java/core-application.mdx @@ -2,18 +2,15 @@ id: core-application title: Core application - Java SDK sidebar_label: Core application -description: Learn how to create a Workflow Definition, develop a basic Activity, initiate Activity Execution, and run a Development Worker using the Temporal Java SDK. Master essential concepts such as Workflow interface annotations, Activity definitions, custom Activity Types, and asynchronous Activity invocations to build robust and scalable Temporal applications. toc_max_heading_level: 4 keywords: - - Java - - api reference - - cli - - cli-feature - - code samples - - java - - options - - workers + - java sdk + - temporal sdk + - core application - workflow + - activity + - worker +description: The Foundations section of the Temporal Developer's guide introduces essential concepts for building and running a Temporal Application using the Java SDK. tags: - Activities - Temporal Client @@ -24,12 +21,27 @@ tags: - Temporal SDKs --- -This page shows how to do the following: - -- [Develop a Workflow Definition](#develop-workflows) -- [Develop a basic Activity](#develop-activities) -- [Start an Activity Execution](#activity-execution) -- [Run a Development Worker](#run-a-dev-worker) +
+

Topics covered in this section

+
+ +
Develop a Workflow Definition
+
+
+ +
Develop a basic Activity
+
+
+ +
Start an Activity Execution
+
+
+ +
Run a Development Worker
+
+
+
+
## Develop a Workflow Definition {#develop-workflows} diff --git a/docs/develop/java/debugging.mdx b/docs/develop/java/debugging.mdx index 19164777a6..7c5559c3fc 100644 --- a/docs/develop/java/debugging.mdx +++ b/docs/develop/java/debugging.mdx @@ -22,6 +22,20 @@ tags: - Temporal SDKs --- +
+

Topics covered in this section

+
+ +
Debug in a development environment
+
+
+ +
Debug in a production environment
+
+
+
+
+ In addition to writing unit and integration tests, debugging your Workflows is also a very valuable testing tool. You can debug your Workflow code using a debugger provided by your favorite Java IDE. diff --git a/docs/develop/java/failure-detection.mdx b/docs/develop/java/failure-detection.mdx index e067f761bb..ba2d4fc766 100644 --- a/docs/develop/java/failure-detection.mdx +++ b/docs/develop/java/failure-detection.mdx @@ -15,14 +15,35 @@ tags: description: Learn how to set Workflow and Activity timeouts, Retry Policies, and Heartbeat in Java using the Temporal Client and Worker for Workflow optimization and execution controls. --- -This page shows how to do the following: - -- [Set Workflow timeouts](#workflow-timeouts) -- [Set a Workflow Retry Policy](#workflow-retries) -- [Set Activity timeouts](#activity-timeouts) -- [Set a custom Activity Retry Policy](#activity-retries) -- [Heartbeat an Activity](#activity-heartbeats) -- [Set a Heartbeat Timeout](#heartbeat-timeout) +
+

Topics covered in this section

+
+ +
Set Workflow timeouts
+
+
+ +
Set a Workflow Retry Policy
+
+
+ +
Set Activity timeouts
+
+
+ +
Set a custom Activity Retry Policy
+
+
+ +
Heartbeat an Activity
+
+
+ +
Set a Heartbeat Timeout
+
+
+
+
## Workflow timeouts {#workflow-timeouts} diff --git a/docs/develop/java/index.mdx b/docs/develop/java/index.mdx index 21f85f88f1..d8b0bee315 100644 --- a/docs/develop/java/index.mdx +++ b/docs/develop/java/index.mdx @@ -15,148 +15,243 @@ import * as Components from '@site/src/components'; ![Java SDK Banner](/img/assets/banner-java-temporal.png) -:::info JAVA SPECIFIC RESOURCES -Build Temporal Applications with the Java SDK. - -**Temporal Java Technical Resources:** - -- [Java API Documentation](https://javadoc.io/doc/io.temporal/temporal-sdk) -- [Java SDK Code Samples](https://github.com/temporalio/samples-java) -- [Java SDK GitHub](https://github.com/temporalio/sdk-java) -- [Temporal 101 in Java Free Course](https://learn.temporal.io/courses/temporal_101/java/) - -**Get Connected with the Temporal Java Community:** - -- [Temporal Java Community Slack](https://temporalio.slack.com/archives/CTT84KXK9) -- [Java SDK Forum](https://community.temporal.io/tag/java-sdk) - ::: - -## [Core application](/develop/java/core-application) - -Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application. - -- [How to develop a Workflow Definition in Java](/develop/java/core-application#develop-workflows) -- [How to develop a basic Activity](/develop/java/core-application#develop-activities) -- [How to start an Activity Execution](/develop/java/core-application#activity-execution) -- [How to develop a Worker Program in Java](/develop/java/core-application#run-a-dev-worker) - -## [Temporal Client](/develop/java/temporal-clients) - -Connect to a Temporal Service and start a Workflow Execution. - -- [Connect to a development Temporal Service](/develop/java/temporal-clients#connect-to-development-service) -- [Connect to a custom Namespace](/develop/java/temporal-clients#connect-to-custom-namespace) -- [Connect to Temporal Cloud](/develop/java/temporal-clients#connect-to-temporal-cloud) -- [Start a Workflow Execution](/develop/java/temporal-clients#start-workflow-execution) - -## [Testing](/develop/java/testing-suite) - -Set up the testing suite and test Workflows and Activities. - -- [Test frameworks](/develop/java/testing-suite#test-frameworks) -- [Test Activities](/develop/java/testing-suite#test-activities) -- [Testing Workflows](/develop/java/testing-suite#test-workflows) -- [How to Replay a Workflow Execution](/develop/java/testing-suite#replay) - -## [Failure detection](/develop/java/failure-detection) - -Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries. - -- [Workflow timeouts](/develop/java/failure-detection#workflow-timeouts) -- [How to set Activity timeouts](/develop/java/failure-detection#activity-timeouts) -- [How to Heartbeat an Activity](/develop/java/failure-detection#activity-heartbeats) - -## [Workflow message passing](/develop/java/message-passing) - -Send messages to and read the state of Workflow Executions. - -- [How to develop with Signals](/develop/java/message-passing#signals) -- [How to develop with Queries](/develop/java/message-passing#queries) -- [What is a Dynamic Handler?](/develop/java/message-passing#dynamic-handler) -- [How to develop with Updates](/develop/java/message-passing#updates) - -## [Asynchronous Activity completion](/develop/java/asynchronous-activity-completion) - -Complete Activities asynchronously. - -- [How to asynchronously complete an Activity](/develop/java/asynchronous-activity-completion) - -## [Versioning](/develop/java/versioning) - -Change Workflow Definitions without causing non-deterministic behavior in running Workflows. - -- [How to patch Workflows in Java](/develop/java/versioning#patching) -- [How to use Worker Versioning in Java](/develop/java/versioning#worker-versioning) - -## [Observability](/develop/java/observability) - -Configure and use the Temporal Observability APIs. - -- [How to emit metrics](/develop/java/observability#metrics) -- [How to setup Tracing](/develop/java/observability#tracing) -- [How to log from a Workflow](/develop/java/observability#logging) -- [How to use Visibility APIs](/develop/java/observability#visibility) - -## [Debugging](/develop/java/debugging) - -Explore various ways to debug your application. - -- [How to debug in a development environment](/develop/java/debugging#debug-in-a-development-environment) -- [How to debug in a production environment](/develop/java/debugging#debug-in-a-production-environment) - -## [Schedules](/develop/java/schedules) - -Run Workflows on a schedule and delay the start of a Workflow. - -- [How to Schedule a Workflow](/develop/java/schedules#schedule-a-workflow) -- [How to set a Cron Schedule in Java](/develop/java/schedules#cron-schedule) - -## [Data encryption](/develop/java/converters-and-encryption) - -Use compression, encryption, and other data handling by implementing custom converters and codecs. - -- [How to use a custom Payload Codec in Java](/develop/java/converters-and-encryption#custom-payload-codec) -- [How to use custom Payload conversion](/develop/java/converters-and-encryption#custom-payload-conversion) - -## Temporal Nexus - -The [Temporal Nexus](/develop/java/nexus) feature guide shows how to use Temporal Nexus to connect Durable Executions within and across Namespaces using a Nexus Endpoint, a Nexus Service contract, and Nexus Operations. - -- [Create a Nexus Endpoint to route requests from caller to handler](/develop/java/nexus#create-nexus-endpoint) -- [Define the Nexus Service contract](/develop/java/nexus#define-nexus-service-contract) -- [Develop a Nexus Service and Operation handlers](/develop/java/nexus#develop-nexus-service-operation-handlers) -- [Develop a caller Workflow that uses a Nexus Service](/develop/java/nexus#develop-caller-workflow-nexus-service) -- [Make Nexus calls across Namespaces with a development Server](/develop/java/nexus#nexus-calls-across-namespaces-dev-server) -- [Make Nexus calls across Namespaces in Temporal Cloud](/develop/java/nexus#nexus-calls-across-namespaces-temporal-cloud) - -## [Child Workflows](/develop/java/child-workflows) - -Explore how to spawn a Child Workflow Execution and handle Child Workflow Events. - -- [Start a Child Workflow Execution](/develop/java/child-workflows#start-child-workflow) -- [Set a Parent Close Policy](/develop/java/child-workflows#parent-close-policy) - -## [Continue-As-New](/develop/java/continue-as-new) - -Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID. - -- [Continue a Workflow as New](/develop/java/continue-as-new) - -## [Durable Timers](/develop/java/timers) - -Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years. - -- [What is a Timer?](/develop/java/timers#timers) - -## [Side Effects](/develop/java/side-effects) - -Use Side Effects in Workflows. - -- [Side Effects](/develop/java/side-effects#side-effects) - -## [Manage Namespaces](/develop/java/namespaces) - -Create and manage Namespaces. - -- [Create a Namespace](/develop/java/namespaces#register-namespace) -- [Manage Namespaces](/develop/java/namespaces#manage-namespaces) +
+

Java SDK resources

+
+
+

Technical Resources

+ +
+
+

Community

+ +
+
+
+ +
+
+

Core Application

+

Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application.

+
+ +
+

Temporal Client

+

Connect to a Temporal Service and start a Workflow Execution.

+
+ +
+

Testing

+

Set up the testing suite and test Workflows and Activities.

+
+ +
+

Failure Detection

+

Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries.

+
+ +
+

Workflow Message Passing

+

Send messages to and read the state of Workflow Executions.

+
+ +
+

Asynchronous Activity Completion

+

Complete Activities asynchronously.

+
+ +
+

Versioning

+

Change Workflow Definitions without causing non-deterministic behavior in current long-running Workflows.

+
+ +
+

Observability

+

Configure and use the Temporal Observability APIs.

+
+ +
+

Debugging

+

Explore various ways to debug your application.

+
+ +
+

Schedules

+

Run Workflows on a schedule and delay the start of a Workflow.

+
+ +
+

Data Encryption

+

Use compression, encryption, and other data handling by implementing custom converters and codecs.

+
+ +
+

Temporal Nexus

+

Use Temporal Nexus to connect Durable Executions within and across Namespaces using a Nexus Endpoint, a Nexus Service contract, and Nexus Operations.

+
+ +
+

Child Workflows

+

Explore how to spawn a Child Workflow Execution and handle Child Workflow Events.

+
+ +
+

Continue-As-New

+

Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID.

+
+ +
+

Durable Timers

+

Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years.

+
+ +
+

Side Effects

+

Use Side Effects in Workflows.

+
+ +
+

Manage Namespaces

+

Create and manage Namespaces.

+
+
+ + diff --git a/docs/develop/java/message-passing.mdx b/docs/develop/java/message-passing.mdx index fba4c6c56e..9c953011e5 100644 --- a/docs/develop/java/message-passing.mdx +++ b/docs/develop/java/message-passing.mdx @@ -32,6 +32,32 @@ Temporal Clients use messages to read Workflow state and control execution. See [Workflow message passing](/encyclopedia/workflow-message-passing) for a general overview of this topic. This page introduces these features for the Temporal Java SDK. +
+

Topics covered in this section

+
+ +
Write message handlers
+
+
+ +
Send messages
+
+
+ +
Message handler patterns
+
+
+ +
Message handler troubleshooting
+
+
+ +
Dynamic components
+
+
+
+
+ ## Write message handlers {#writing-message-handlers} Follow these guidelines when writing your message handlers: @@ -254,7 +280,7 @@ List languages = workflow.getLanguages(new GetLanguagesInput(false)); System.out.println("Supported languages: " + languages); ``` -- Sending a Query doesn’t add events to a Workflow's Event History. +- Sending a Query doesn't add events to a Workflow's Event History. - You can send Queries to closed Workflow Executions within a Namespace's Workflow retention period. This includes Workflows that have completed, failed, or timed out. @@ -265,7 +291,7 @@ System.out.println("Supported languages: " + languages); ### Send a Signal {#send-signal} You can send a Signal to a Workflow Execution from a Temporal Client or from another Workflow Execution. -However, you can only send Signals to Workflow Executions that haven’t closed. +However, you can only send Signals to Workflow Executions that haven't closed. #### Send a Signal from a Client {#send-signal-from-client} @@ -454,22 +480,6 @@ Language previousLanguage = For more examples, see the [Java sample for early-return pattern](https://github.com/temporalio/samples-java/tree/main/core/src/main/java/io/temporal/samples/earlyreturn). -:::info NON-TYPE SAFE API CALLS - -In real-world development, sometimes you may be unable to import Workflow Definition method signatures. -When you don't have access to the Workflow Definition or it isn't written in Java, you can use these non-type safe APIs to obtain an untyped WorkflowStub: - -- [`WorkflowClient.newUntypedWorkflowStub`](https://javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/client/WorkflowClient.html#newUntypedWorkflowStub(java.lang.String,io.temporal.client.WorkflowOptions)) -- [`Workflow.newUntypedExternalWorkflowStub`](https://javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/workflow/Workflow.html#newUntypedExternalWorkflowStub(java.lang.String)). - -Pass method names instead of method objects to: - -- [`WorkflowStub.query`](https://javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/client/WorkflowStub.html#query(java.lang.String,java.lang.Class,java.lang.Object...)) -- [`WorkflowStub.signal`](https://javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/client/WorkflowStub.html#signal(java.lang.String,java.lang.Object...)) -- [`WorkflowStub.update`](https://javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/client/WorkflowStub.html#update(java.lang.String,java.lang.Class,java.lang.Object...)) -- [`WorkflowStub.startUpdateWithStart`](https://javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/client/WorkflowStub.html#startUpdateWithStart(io.temporal.client.UpdateOptions,java.lang.Object%5B%5D,java.lang.Object%5B%5D)) -- [`WorkflowStub.executeUpdateWithStart`](https://javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/client/WorkflowStub.html#executeUpdateWithStart(io.temporal.client.UpdateOptions,java.lang.Object%5B%5D,java.lang.Object%5B%5D)) - ::: ## Message handler patterns {#message-handler-patterns} diff --git a/docs/develop/java/namespaces.mdx b/docs/develop/java/namespaces.mdx index 2c9afba71f..4bf3125176 100644 --- a/docs/develop/java/namespaces.mdx +++ b/docs/develop/java/namespaces.mdx @@ -12,10 +12,19 @@ tags: description: Learn how to register, update, deprecate, and delete Namespaces using Temporal CLI or SDK APIs. Manage Workflow Executions with isolated Namespaces to match your needs. --- -This page shows how to do the following: - -- [Register a Namespace](#register-namespace) -- [Manage Namespaces](#manage-namespaces) +
+

Topics covered in this section

+
+ +
Register a Namespace
+
+
+ +
Manage Namespaces
+
+
+
+
You can create, update, deprecate or delete your [Namespaces](/namespaces) using either the Temporal CLI or SDK APIs. diff --git a/docs/develop/java/observability.mdx b/docs/develop/java/observability.mdx index 90d8cf9978..cb48adf633 100644 --- a/docs/develop/java/observability.mdx +++ b/docs/develop/java/observability.mdx @@ -31,12 +31,27 @@ tags: The observability section of the Temporal Developer's guide covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application)—that is, ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. -This section covers features related to viewing the state of the application, including: - -- [Emit metrics](#metrics) -- [Set up tracing](#tracing) -- [Log from a Workflow](#logging) -- [Visibility APIs](#visibility) +
+

Topics covered in this section

+
+ +
Emit metrics
+
+
+ +
Set up tracing
+
+
+ +
Log from a Workflow
+
+
+ +
Visibility APIs
+
+
+
+
## Emit metrics {#metrics} diff --git a/docs/develop/java/schedules.mdx b/docs/develop/java/schedules.mdx index 63aa13fccc..d5dc2b9fb9 100644 --- a/docs/develop/java/schedules.mdx +++ b/docs/develop/java/schedules.mdx @@ -14,19 +14,23 @@ tags: description: Learn to Schedule, Backfill, Delete, Describe, List, Pause, Trigger, Update, and set Cron and Start Delays for Workflow Executions in Java using Temporal's ScheduleClient. --- -This page shows how to do the following: - -- [How to Schedule a Workflow](#schedule-a-workflow) - - [How to create a Schedule in Java](#create-schedule) - - [How to backfill a Schedule in Java](#backfill-schedule) - - [How to delete a Schedule in Java](#delete-schedule) - - [How to describe a Schedule in Java](#describe-schedule) - - [How to list a Schedule in Java](#list-schedule) - - [How to pause a Schedule in Java](#pause-schedule) - - [How to trigger a Schedule in Java](#trigger-schedule) - - [How to update a Schedule in Java](#update-schedule) -- [How to set a Cron Schedule in Java](#cron-schedule) -- [Start Delay](#start-delay) +
+

Topics covered in this section

+
+ +
Schedule a Workflow
+
+
+ +
Set a Cron Schedule in Java
+
+
+ +
Start Delay
+
+
+
+
## How to Schedule a Workflow {#schedule-a-workflow} @@ -63,7 +67,7 @@ ScheduleHandle handle = :::tip Schedule Auto-Deletion -Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won’t fire again. +Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won't fire again. The Temporal Service doesn't guarantee when this removal will happen. ::: diff --git a/docs/develop/java/set-up-your-local-java.mdx b/docs/develop/java/set-up-your-local-java.mdx new file mode 100644 index 0000000000..bb2a764534 --- /dev/null +++ b/docs/develop/java/set-up-your-local-java.mdx @@ -0,0 +1,114 @@ +--- +id: set-up-your-local-java +sidebar_label: Setup +title: Setup +--- + +import { SetupSteps, SetupStep, CodeSnippet } from '@site/src/components/elements/SetupSteps'; +import { CallToAction } from '@site/src/components/elements/CallToAction'; + +# Setup + +Configure your local development environment to get started developing with Temporal. + + + + + java -version + + +}> +## Install the Java JDK + +Make sure you have the Java JDK installed. You can either download a copy directly from Oracle or select an OpenJDK distribution from your preferred vendor. + +Check the version of your current JDK installation by executing java -version at a command prompt. We developed and tested these Java tutorials with Java 21, but they should work with version 8 or higher. + + + + +{` + + + + io.temporal + temporal-sdk + 1.23.1 + + + io.temporal + temporal-testing + 1.23.1 + +`} + + +}> +## Add Temporal Java SDK Dependencies + +Our Java tutorials use Apache Maven to manage dependencies and build applications. You can also use Gradle or other build automation tools. + +Follow these steps to configure Maven or Gradle for Temporal. To install Apache Maven, download a copy and follow the instructions at Apache.org. + +Add the following dependencies to your Maven POM file to compile, build, test, and run a Temporal Application in Java. + + + + +brew install temporal + + +}> + +## Install Temporal CLI + +The fastest way to get a development version of the Temporal Service running on your local machine is to use [Temporal CLI](https://docs.temporal.io/cli). + +Install Temporal CLI on your local machine using the following instructions for your platform. + + + + +temporal server start-dev + + +
+

Change the Web UI port

+

The Temporal Web UI may be on a different port in some examples or tutorials. To change the port for the Web UI, use the --ui-port option when starting the server:

+ +temporal server start-dev --ui-port 8080 + +

The Temporal Web UI will now be available at http://localhost:8080.

+
+ + +temporal server start-dev --db-filename your_temporal.db + + +}> + +## Start the development server + +Once you've installed Temporal CLI and added it to your PATH, open a new Terminal window and run the following command. + +This command starts a local Temporal Service. It starts the Web UI, creates the default Namespaces, and uses an in-memory database. + +The Temporal Service will be available on localhost:7233. +The Temporal Web UI will be available at http://localhost:8233. + +Leave the local Temporal Service running as you work through tutorials and other projects. You can stop the Temporal Service at any time by pressing CTRL+C. + +The temporal server start-dev command uses an in-memory database, so stopping the server will erase all your Workflows and all your Task Queues. If you want to retain those between runs, start the server and specify a database filename using the --db-filename option, like this: +
+
+ + +

Next: Run your first Temporal Application

+

Learn how to create a basic Workflow and run it with the Temporal Java SDK

+
diff --git a/docs/develop/java/temporal-client.mdx b/docs/develop/java/temporal-client.mdx index 885285131d..b876ea9265 100644 --- a/docs/develop/java/temporal-client.mdx +++ b/docs/develop/java/temporal-client.mdx @@ -33,12 +33,27 @@ tags: This guide introduces Temporal Clients. It explains the role and use of Clients and shows you how to configure your Java Client code to connect to the Temporal Service. -This section includes the following topics: - -- [How to initialize a Temporal Client for the Temporal CLI development service](#connect-to-development-service) -- [How to initialize a Temporal Client to connect to a custom Namespace](#connect-to-custom-namespace) -- [How to initialize a Temporal Client to connect to Temporal Cloud](#connect-to-temporal-cloud) -- [How to start a Workflow Execution](#start-workflow-execution) +
+

Topics covered in this section

+
+ +
Initialize a Temporal Client for the Temporal CLI development service
+
+
+ +
Initialize a Temporal Client to connect to a custom Namespace
+
+
+ +
Initialize a Temporal Client to connect to Temporal Cloud
+
+
+ +
Start a Workflow Execution
+
+
+
+
## Connect to a development Temporal Service {#connect-to-development-service} diff --git a/docs/develop/java/temporal-nexus.mdx b/docs/develop/java/temporal-nexus.mdx index 7aea1f29ad..4bca1e9338 100644 --- a/docs/develop/java/temporal-nexus.mdx +++ b/docs/develop/java/temporal-nexus.mdx @@ -23,16 +23,43 @@ Temporal Java SDK support for Nexus is now [Generally Available](/evaluate/devel Use [Temporal Nexus](/evaluate/nexus) to connect Temporal Applications within and across Namespaces using a Nexus Endpoint, a Nexus Service contract, and Nexus Operations. -This page shows how to do the following: - -- [Run a development Temporal Service with Nexus enabled](#run-the-temporal-nexus-development-server) -- [Create caller and handler Namespaces](#create-caller-handler-namespaces) -- [Create a Nexus Endpoint to route requests from caller to handler](#create-nexus-endpoint) -- [Define the Nexus Service contract](#define-nexus-service-contract) -- [Develop a Nexus Service and Operation handlers](#develop-nexus-service-operation-handlers) -- [Develop a caller Workflow that uses a Nexus Service](#develop-caller-workflow-nexus-service) -- [Make Nexus calls across Namespaces with a development Server](#nexus-calls-across-namespaces-dev-server) -- [Make Nexus calls across Namespaces in Temporal Cloud](#nexus-calls-across-namespaces-temporal-cloud) +
+

Topics covered in this section

+
+ +
Run a development Temporal Service with Nexus enabled
+
+
+ +
Create caller and handler Namespaces
+
+
+ +
Create a Nexus Endpoint to route requests from caller to handler
+
+
+ +
Define the Nexus Service contract
+
+
+ +
Develop a Nexus Service and Operation handlers
+
+
+ +
Develop a caller Workflow that uses a Nexus Service
+
+
+ +
Make Nexus calls across Namespaces with a development Server
+
+
+ +
Make Nexus calls across Namespaces in Temporal Cloud
+
+
+
+
## Run a development server with Nexus enabled {#run-the-temporal-nexus-development-server} diff --git a/docs/develop/java/testing-suite.mdx b/docs/develop/java/testing-suite.mdx index 8fe483ddbc..f8a3d30df5 100644 --- a/docs/develop/java/testing-suite.mdx +++ b/docs/develop/java/testing-suite.mdx @@ -22,6 +22,28 @@ tags: - Temporal SDKs --- +
+

Topics covered in this section

+
+ +
Test frameworks
+
+
+ +
Test Activities
+
+
+ +
Testing Workflows
+
+
+ +
Replay a Workflow Execution
+
+
+
+
+ The Testing section of the Temporal Application development guide describes the frameworks that facilitate Workflow and integration testing. In the context of Temporal, you can create these types of automated tests: diff --git a/docs/develop/java/versioning.mdx b/docs/develop/java/versioning.mdx index a0ec14387d..4ffaae4eac 100644 --- a/docs/develop/java/versioning.mdx +++ b/docs/develop/java/versioning.mdx @@ -22,8 +22,19 @@ tags: The Temporal Platform requires that Workflow code is [deterministic](/workflow-definition#deterministic-constraints). Because of that requirement, the Temporal Java SDK offers two dedicated versioning features: -- [Workflow Patching APIs](#patching) -- [Worker Versioning](#worker-versioning) +
+

Topics covered in this section

+
+ +
Workflow Patching APIs
+
+
+ +
Worker Versioning
+
+
+
+
## How to patch Workflows in Java {#patching} diff --git a/docs/develop/php/core-application.mdx b/docs/develop/php/core-application.mdx index 351b107985..155a13aeb7 100644 --- a/docs/develop/php/core-application.mdx +++ b/docs/develop/php/core-application.mdx @@ -3,9 +3,15 @@ id: core-application title: Core application - PHP SDK sidebar_label: Core application slug: /develop/php/core-application -toc_max_heading_level: 2 +toc_max_heading_level: 4 keywords: - - core-application + - php sdk + - temporal sdk + - core application + - workflow + - activity + - worker +description: The Foundations section of the Temporal Developer's guide introduces essential concepts for building and running a Temporal Application using the PHP SDK. tags: - Activities - Temporal Client @@ -14,9 +20,46 @@ tags: - Workflows - PHP SDK - Temporal SDKs -description: Learn how to develop a basic Workflow and Activity in a Temporal Application using Temporal PHP SDK. Define parameters, customize Workflow and Activity types, and set required timeouts efficiently. --- +
+

Topics covered in this section

+
+ +
Develop a basic Workflow
+
+
+ +
Define Workflow parameters
+
+
+ +
Define Workflow return parameters
+
+
+ +
Customize your Workflow Type
+
+
+ +
Develop Workflow logic
+
+
+ +
Develop a basic Activity
+
+
+ +
Develop Activity Parameters
+
+
+ +
Define Activity return values
+
+
+
+
+ ## How to develop a basic Workflow {#develop-workflows} Workflows are the fundamental unit of a Temporal Application, and it all starts with the development of a [Workflow Definition](/workflow-definition). diff --git a/docs/develop/php/failure-detection.mdx b/docs/develop/php/failure-detection.mdx index 5a0a27040b..95b24b0da1 100644 --- a/docs/develop/php/failure-detection.mdx +++ b/docs/develop/php/failure-detection.mdx @@ -16,6 +16,28 @@ tags: description: Learn about setting Workflow and Activity Timeouts, Retry Policies, and using Heartbeats in Temporal for optimal Workflow Execution management. Enhance your Workflow reliability. --- +
+

Topics covered in this section

+
+ +
Workflow timeouts
+
+
+ +
Set Activity timeouts
+
+
+ +
Activity next Retry delay
+
+
+ +
Heartbeat an Activity
+
+
+
+
+ ## Workflow timeouts {#workflow-timeouts} Each Workflow timeout controls the maximum duration of a different aspect of a Workflow Execution. diff --git a/docs/develop/php/index.mdx b/docs/develop/php/index.mdx index 0f00df285f..019e657298 100644 --- a/docs/develop/php/index.mdx +++ b/docs/develop/php/index.mdx @@ -15,126 +15,255 @@ import * as Components from '@site/src/components'; ![PHP SDK Banner](/img/assets/banner-php-temporal.png) -:::info PHP SPECIFIC RESOURCES -Build Temporal Applications with the PHP SDK. - -**Temporal PHP Technical Resources:** - -- [PHP API Documentation](https://php.temporal.io) -- [PHP SDK Code Samples](https://github.com/temporalio/samples-php) -- [PHP SDK GitHub](https://github.com/temporalio/sdk-php) - -**Get Connected with the Temporal PHP Community:** - -- [Temporal PHP Community Slack](https://temporalio.slack.com/archives/C01LK9FAMM0) -- [PHP SDK Forum](https://community.temporal.io/tag/php-sdk) - ::: - -## [Core Application](/develop/php/core-application) - -Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application. - -- [How to develop a basic Workflow](/develop/php/core-application#develop-workflows) -- [How to develop a basic Activity](/develop/php/core-application#develop-activities) -- [How to start an Activity Execution](/develop/php/core-application#activity-execution) -- [How to run Worker Processes](/develop/php/core-application#run-a-dev-worker) - -## [Temporal Client](/develop/php/temporal-clients) - -Connect to a Temporal Service and start a Workflow Execution. - -- [How to connect a Temporal Client to a Temporal Service](/develop/php/temporal-clients#connect-to-a-dev-cluster) -- [How to connect a Temporal Client to a Temporal Cloud](/develop/php/temporal-clients#connect-to-temporal-cloud) -- [How to start a Workflow Execution](/develop/php/temporal-clients#start-workflow-execution) -- [Advanced connection options](/develop/php/temporal-clients#advanced-connection-options) - -## [Testing](/develop/php/testing-suite) - -Set up the testing suite to test Workflows and Activities. - -- [Testing Activities](/develop/php/testing-suite#test-activities) -- [Testing Workflows](/develop/php/testing-suite#test-workflows) -- [How to Replay a Workflow Execution](/develop/php/testing-suite#replay) - -## [Failure detection](/develop/php/failure-detection) - -Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries. - -- [Workflow timeouts](/develop/php/failure-detection#workflow-timeouts) -- [How to set Activity timeouts](/develop/php/failure-detection#activity-timeouts) -- [How to Heartbeat an Activity](/develop/php/failure-detection#activity-heartbeats) - -## [Workflow message passing](/develop/php/message-passing) - -Send messages to read the state of Workflow Executions. - -- [How to develop with Signals](/develop/php/message-passing#signals) -- [How to develop with Queries](/develop/php/message-passing#queries) -- [How to develop with Updates](/develop/php/message-passing#updates) -- [Message handler patterns](/develop/php/message-passing#message-handler-patterns) -- [Message handler troubleshooting](/develop/php/message-passing#message-handler-troubleshooting) -- [How to develop with Dynamic Handlers](/develop/php/message-passing#dynamic-handler) - -## [Interrupt a Workflow feature guide](/develop/php/cancellation) - -Interrupt a Workflow Execution with a Cancel or Terminate action. - -- [Cancel an Activity from a Workflow](/develop/php/cancellation#cancel-an-activity) - -## [Versioning](/develop/php/versioning) - -The PHP SDK [Versioning developer guide](/develop/php/versioning) shows how to Change Workflow Definitions without causing non-deterministic behavior in running Workflows. - -- [Introduction to Versioning](/develop/php/versioning#introduction-to-versioning) -- [How to use the PHP SDK Patching API](/develop/php/versioning#php-sdk-patching-api): Patching Workflows using the PHP SDK. -- [Sanity checking](/develop/php/versioning#sanity-checking) - -## [Asynchronous Activity Completion](/develop/php/asynchronous-activity-completion) - -Complete Activities asynchronously. - -- [How to asynchronously complete an Activity](/develop/php/asynchronous-activity-completion#asynchronous-activity-completion) - -## [Observability](/develop/php/observability) - -Configure and use the Temporal Observability APIs. - -- [How to log from a Workflow](/develop/php/observability#logging) -- [How to use Visibility APIs](/develop/php/observability#visibility) - -## [Debugging](/develop/php/debugging) - -Explore various ways to debug your application. - -- [Debugging](/develop/php/debugging#debug) - -## [Schedules](/develop/php/schedules) - -Run Workflows on a schedule and delay the start of a Workflow. - -- [How to use Start Delay](/develop/php/schedules#start-delay) -- [How to use Temporal Cron Jobs](/develop/php/schedules#temporal-cron-jobs) - -## [Durable Timers](/develop/php/timers) - -Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years. - -- [What is a Timer?](/develop/php/timers#timers) - -## [Child Workflows](/develop/php/child-workflows) - -Explore how to spawn a Child Workflow Execution and handle Child Workflow Events. - -- [How to start a Child Workflow Execution](/develop/php/child-workflows#child-workflows) - -## [Continue-As-New](/develop/php/continue-as-new) - -Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID. - -- [How to Continue-As-New](/develop/php/continue-as-new#continue-as-new) - -## [Side Effects](/develop/php/side-effects) - -Use Side Effects in Workflows. - -- [How to use Side Effects in PHP](/develop/php/side-effects#side-effects) +
+

PHP SDK Resources

+
+
+

Technical Resources

+ +
+
+

Community

+ +
+
+
+ +
+
+

Core Application

+

Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application.

+
+ +
+

Temporal Client

+

Connect to a Temporal Service and start a Workflow Execution.

+
+ +
+

Testing

+

Set up the testing suite to test Workflows and Activities.

+
+ +
+

Failure Detection

+

Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries.

+
+ +
+

Workflow Message Passing

+

Send messages to read the state of Workflow Executions.

+
+ +
+

Interrupt a Workflow

+

Interrupt a Workflow Execution with a Cancel or Terminate action.

+
+ +
+

Versioning

+

Change Workflow Definitions without causing non-deterministic behavior in current long-running Workflows.

+
+ +
+

Asynchronous Activity Completion

+

Complete Activities asynchronously.

+
+ +
+

Observability

+

Configure and use the Temporal Observability APIs.

+
+ +
+

Debugging

+

Explore various ways to debug your application.

+
+ +
+

Schedules

+

Run Workflows on a schedule and delay the start of a Workflow.

+
+ +
+

Durable Timers

+

Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years.

+
+ +
+

Child Workflows

+

Explore how to spawn a Child Workflow Execution and handle Child Workflow Events.

+
+ +
+

Continue-As-New

+

Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID.

+
+ +
+

Side Effects

+

Use Side Effects in Workflows.

+
+
+ + diff --git a/docs/develop/php/message-passing.mdx b/docs/develop/php/message-passing.mdx index b54cae358f..3e1154a199 100644 --- a/docs/develop/php/message-passing.mdx +++ b/docs/develop/php/message-passing.mdx @@ -22,6 +22,36 @@ tags: description: Learn how to develop with Signals, Queries, and Updates in Temporal Workflows. Define, handle, and send Signals or Queries, and validate updates from a Temporal Client. --- +
+

Topics covered in this section

+
+ +
Develop with Signals
+
+
+ +
Develop with Queries
+
+
+ +
Develop with Updates
+
+
+ +
Message handler patterns
+
+
+ +
Message handler troubleshooting
+
+
+ +
Dynamic components
+
+
+
+
+ ## How to develop with Signals {#signals} A [Signal](/sending-messages#sending-signals) is a message sent to a running Workflow Execution. diff --git a/docs/develop/php/observability.mdx b/docs/develop/php/observability.mdx index ea2dee589c..0a4e852a7c 100644 --- a/docs/develop/php/observability.mdx +++ b/docs/develop/php/observability.mdx @@ -3,7 +3,7 @@ id: observability title: Observability - PHP SDK sidebar_label: Observability slug: /develop/php/observability -description: Explore the Temporal Developer’s guide on observability to learn about Visibility APIs and Search Attributes, helping you manage Workflow Executions efficiently. +description: Explore the Temporal Developer's guide on observability to learn about Visibility APIs and Search Attributes, helping you manage Workflow Executions efficiently. toc_max_heading_level: 4 keywords: - guide-context @@ -23,10 +23,19 @@ tags: The observability section of the Temporal Developer's guide covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application)—that is, ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. -This section covers features related to viewing the state of the application, including: - -- [Log from a Workflow](#logging) -- [Visibility](#visibility) +
+

Topics covered in this section

+
+ +
Log from a Workflow
+
+
+ +
Visibility
+
+
+
+
## Log from a Workflow {#logging} diff --git a/docs/develop/php/schedules.mdx b/docs/develop/php/schedules.mdx index 5c2ae33f9f..b0e1ac0469 100644 --- a/docs/develop/php/schedules.mdx +++ b/docs/develop/php/schedules.mdx @@ -14,10 +14,19 @@ tags: description: Learn how to use Workflow Start Delay and Temporal Cron Jobs in PHP. Delay Workflow execution or set up recurring tasks with a Cron Schedule using Temporal Client. --- -This page shows how to do the following: - -- [How to use Start Delay](#start-delay) -- [How to use Temporal Cron Jobs](#temporal-cron-jobs) +
+

Topics covered in this section

+
+ +
Use Start Delay
+
+
+ +
Use Temporal Cron Jobs
+
+
+
+
## How to use Start Delay {#start-delay} @@ -86,7 +95,7 @@ For more information, see the [PHP samples](https://github.com/temporalio/sample :::tip Schedule Auto-Deletion -Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won’t fire again. +Once a Schedule has completed creating all its Workflow Executions, the Temporal Service deletes it since it won't fire again. The Temporal Service doesn't guarantee when this removal will happen. ::: diff --git a/docs/develop/php/set-up-your-local-php.mdx b/docs/develop/php/set-up-your-local-php.mdx new file mode 100644 index 0000000000..61cd18d450 --- /dev/null +++ b/docs/develop/php/set-up-your-local-php.mdx @@ -0,0 +1,97 @@ +--- +id: set-up-your-local-php +sidebar_label: Setup +title: Setup +--- + +import { SetupSteps, SetupStep, CodeSnippet } from '@site/src/components/elements/SetupSteps'; +import { CallToAction } from '@site/src/components/elements/CallToAction'; + +# Setup + +Configure your local development environment to get started developing with Temporal. + + + + + composer require temporal/sdk + + +}> +## Install the Temporal PHP SDK + +Install the PHP SDK using Composer: + + + + +

See the RoadRunner README file for installation instructions.

+ +}> + +## Download RoadRunner + +See the RoadRunner README file for installation instructions. + +Next, you'll configure a local Temporal Service for development. +
+ + + +brew install temporal + + +}> + +## Install Temporal CLI + +The fastest way to get a development version of the Temporal Service running on your local machine is to use [Temporal CLI](https://docs.temporal.io/cli). + +Install Temporal CLI on your local machine using the following instructions for your platform. + + + + +temporal server start-dev + + +
+

Change the Web UI port

+

The Temporal Web UI may be on a different port in some examples or tutorials. To change the port for the Web UI, use the --ui-port option when starting the server:

+ +temporal server start-dev --ui-port 8080 + +

The Temporal Web UI will now be available at http://localhost:8080.

+
+ + +temporal server start-dev --db-filename your_temporal.db + + +}> + +## Start the development server + +Once you've installed Temporal CLI and added it to your PATH, open a new Terminal window and run the following command. + +This command starts a local Temporal Service. It starts the Web UI, creates the default Namespaces, and uses an in-memory database. + +The Temporal Service will be available on localhost:7233. +The Temporal Web UI will be available at http://localhost:8233. + +Leave the local Temporal Service running as you work through tutorials and other projects. You can stop the Temporal Service at any time by pressing CTRL+C. + +The temporal server start-dev command uses an in-memory database, so stopping the server will erase all your Workflows and all your Task Queues. If you want to retain those between runs, start the server and specify a database filename using the --db-filename option, like this: +
+
+ + +

Next: Run your first Temporal Application

+

Learn how to create a basic Workflow and run it with the Temporal PHP SDK

+
diff --git a/docs/develop/php/temporal-clients.mdx b/docs/develop/php/temporal-clients.mdx index 28166915e3..b58250c887 100644 --- a/docs/develop/php/temporal-clients.mdx +++ b/docs/develop/php/temporal-clients.mdx @@ -17,12 +17,27 @@ description: Learn to connect a Temporal Client to a Temporal Service and start This guide introduces Temporal Clients. It explains the role and use of Clients and shows you how to configure your PHP Client code to connect to the Temporal Service. -The pages shows how to do the following: - -- [Connect to a local development Temporal Service](#connect-to-a-dev-cluster) -- [Connect to Temporal Cloud](#connect-to-temporal-cloud) -- [Start a Workflow Execution](#start-workflow-execution) -- [Advanced connection options](#advanced-connection-options) +
+

Topics covered in this section

+
+ +
Connect to a local development Temporal Service
+
+
+ +
Connect to Temporal Cloud
+
+
+ +
Start a Workflow Execution
+
+
+ +
Advanced connection options
+
+
+
+
## How to connect a Temporal Client to a Temporal Service {#connect-to-a-dev-cluster} diff --git a/docs/develop/php/testing-suite.mdx b/docs/develop/php/testing-suite.mdx index 3815ca378f..03d965b355 100644 --- a/docs/develop/php/testing-suite.mdx +++ b/docs/develop/php/testing-suite.mdx @@ -13,6 +13,24 @@ tags: - Temporal SDKs --- +
+

Topics covered in this section

+
+ +
Testing Activities
+
+
+ +
Testing Workflows
+
+
+ +
Replay a Workflow Execution
+
+
+
+
+ The Testing section of the Temporal Application development guide describes the frameworks that facilitate Workflow and integration testing. In the context of Temporal, you can create these types of automated tests: diff --git a/docs/develop/php/versioning.mdx b/docs/develop/php/versioning.mdx index 3e1bdfb49b..b1a53ae7e0 100644 --- a/docs/develop/php/versioning.mdx +++ b/docs/develop/php/versioning.mdx @@ -32,6 +32,24 @@ Temporal uses event sourcing to reconstruct Workflow state by replaying saved Hi This means that any incompatible update to the Workflow definition code could cause a non-deterministic issue if not handled correctly. +
+

Topics covered in this section

+
+ +
Introduction to Versioning
+
+
+ +
Use the PHP SDK Patching API
+
+
+ +
Sanity checking
+
+
+
+
+ ## Introduction to Versioning {#introduction-to-versioning} To design for potentially long running Workflows at scale, versioning with Temporal works differently than you might expect. diff --git a/docs/develop/python/child-workflows.mdx b/docs/develop/python/child-workflows.mdx index 259e8bbb9a..0ea8224c60 100644 --- a/docs/develop/python/child-workflows.mdx +++ b/docs/develop/python/child-workflows.mdx @@ -19,10 +19,19 @@ tags: - Temporal SDKs --- -This page shows how to do the following: - -- [Start a Child Workflow Execution](#child-workflows) -- [Set a Parent Close Policy](#parent-close-policy) +
+

Topics covered in this section

+
+ +
Start a Child Workflow Execution
+
+
+ +
Set a Parent Close Policy
+
+
+
+
## Start a Child Workflow Execution {#child-workflows} diff --git a/docs/develop/python/converters-and-encryption.mdx b/docs/develop/python/converters-and-encryption.mdx index 00b7489da9..3767065976 100644 --- a/docs/develop/python/converters-and-encryption.mdx +++ b/docs/develop/python/converters-and-encryption.mdx @@ -23,6 +23,32 @@ tags: import { CaptionedImage } from '@site/src/components'; +
+

Topics covered in this section

+
+ +
Custom Payload Codec
+
+
+ +
Payload conversion
+
+
+ +
Custom Payload Converter
+
+
+ +
Pydantic Support
+
+
+ +
Custom Type Data Conversion
+
+
+
+
+ Temporal's security model is designed around client-side encryption of Payloads. A client may encrypt Payloads before sending them to the server, and decrypt them after receiving them from the server. This provides a high degree of confidentiality because the Temporal Server itself has absolutely no knowledge of the actual data. diff --git a/docs/develop/python/core-application.mdx b/docs/develop/python/core-application.mdx index 95f15148ba..ba295952f8 100644 --- a/docs/develop/python/core-application.mdx +++ b/docs/develop/python/core-application.mdx @@ -2,21 +2,15 @@ id: core-application title: Core application - Python SDK sidebar_label: Core application -description: Learn to develop and customize Workflows and Activities using the Temporal Python SDK, manage parameters, set timeouts, execute Activities, and run a Worker Process efficiently. -toc_max_heading_level: 2 +toc_max_heading_level: 4 keywords: - - temporal python core - - develop temporal workflow - - temporal python activities - - workflow logic requirements - - customizing workflow type - - activity parameters - - activity return values - - activity execution in workflow - - activity timeouts - - getting activity results - - temporal python worker - - registering workflow types + - python sdk + - temporal sdk + - core application + - workflow + - activity + - worker +description: The Foundations section of the Temporal Developer's guide introduces essential concepts for building and running a Temporal Application using the Python SDK. tags: - Activities - Temporal Client @@ -27,22 +21,67 @@ tags: - Temporal SDKs --- -This page shows how to do the following: - -- [Develop a basic Workflow](#develop-workflows) -- [Define Workflow parameters](#workflow-parameters) -- [Define Workflow return parameters](#workflow-return-values) -- [Customize your Workflow Type](#workflow-type) -- [Develop Workflow logic](#workflow-logic-requirements) -- [Develop a basic Activity](#develop-activities) -- [Develop Activity Parameters](#activity-parameters) -- [Define Activity return values](#activity-return-values) -- [Customize your Activity Type](#activity-type) -- [Start an Activity Execution](#activity-execution) -- [Set the required Activity Timeouts](#required-timeout) -- [Get the results of an Activity Execution](#get-activity-results) -- [Run a Worker Process](#run-a-dev-worker) -- [Register types](#register-types) +
+

Topics covered in this section

+
+ +
Develop a basic Workflow
+
+
+ +
Define Workflow parameters
+
+
+ +
Define Workflow return parameters
+
+
+ +
Customize your Workflow Type
+
+
+ +
Develop Workflow logic
+
+
+ +
Develop a basic Activity
+
+
+ +
Develop Activity Parameters
+
+
+ +
Define Activity return values
+
+
+ +
Customize your Activity Type
+
+
+ +
Start an Activity Execution
+
+
+ +
Set the required Activity Timeouts
+
+
+ +
Get the results of an Activity Execution
+
+
+ +
Run a Worker Process
+
+
+ +
Register types
+
+
+
+
## Develop a basic Workflow {#develop-workflows} diff --git a/docs/develop/python/debugging.mdx b/docs/develop/python/debugging.mdx index bd4dff4c6e..18f5ecff83 100644 --- a/docs/develop/python/debugging.mdx +++ b/docs/develop/python/debugging.mdx @@ -19,10 +19,19 @@ tags: - Temporal SDKs --- -This page shows how to do the following: - -- [Debug in a development environment](#debug-in-a-development-environment) -- [Debug in a production environment](#debug-in-a-production-environment) +
+

Topics covered in this section

+
+ +
Debug in a development environment
+
+
+ +
Debug in a production environment
+
+
+
+
### Debug in a development environment {#debug-in-a-development-environment} diff --git a/docs/develop/python/failure-detection.mdx b/docs/develop/python/failure-detection.mdx index 65f9083fe7..4febdc4a4b 100644 --- a/docs/develop/python/failure-detection.mdx +++ b/docs/develop/python/failure-detection.mdx @@ -22,13 +22,27 @@ tags: description: Learn how to set Workflow and Activity timeouts, retries, retry policies, and heartbeats using the Temporal Python SDK to optimize execution and ensure reliability. --- -This page shows how to do the following: - -- [Set Workflow Timeouts](#workflow-timeouts) -- [Set Workflow Retries](#workflow-retries) -- [Set Activity Timeouts](#activity-timeouts) -- [Set an Activity Retry Policy](#activity-retries) -- [Heartbeat an Activity](#activity-heartbeats) +
+

Topics covered in this section

+
+ +
Set Workflow Timeouts
+
+
+ +
Set Activity Timeouts
+
+
+ +
Set Activity Retry Policy
+
+
+ +
Heartbeat an Activity
+
+
+
+
## Workflow timeouts {#workflow-timeouts} diff --git a/docs/develop/python/index.mdx b/docs/develop/python/index.mdx index 333f9b5677..876d74eecb 100644 --- a/docs/develop/python/index.mdx +++ b/docs/develop/python/index.mdx @@ -15,140 +15,266 @@ import * as Components from '@site/src/components'; ![Python SDK Banner](/img/assets/banner-python-temporal.png) -:::info PYTHON SPECIFIC RESOURCES -Build Temporal Applications with the Python SDK. - -**Temporal Python Technical Resources:** - -- [Python API Documentation](https://python.temporal.io) -- [Python SDK Code Samples](https://github.com/temporalio/samples-python) -- [Python SDK Github](https://github.com/temporalio/sdk-python) -- [Temporal 101 in Python Free Course](https://learn.temporal.io/courses/temporal_101/python/) - -**Get Connected with the Temporal Python Community:** - -- [Temporal Python Community Slack](https://app.slack.com/client/TNWA8QCGZ) -- [Python SDK Forum](https://community.temporal.io/tag/python-sdk) - ::: - -## [Core Application](/develop/python/core-application) - -Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application. - -- [Develop a Basic Workflow](/develop/python/core-application#develop-workflows) -- [Develop a Basic Activity](/develop/python/core-application#develop-activities) -- [Start an Activity Execution](/develop/python/core-application#activity-execution) -- [Run Worker Processes](/develop/python/core-application#run-a-dev-worker) - -## [Temporal Client](/develop/python/temporal-clients) - -Connect to a Temporal Service and start a Workflow Execution. - -- [Connect to Development Temporal Service](/develop/python/temporal-clients#connect-to-development-service) -- [Connect a Temporal Client to a Temporal Service](/develop/python/temporal-clients#connect-to-a-dev-cluster) -- [Connect to Temporal Cloud](/develop/python/temporal-clients#connect-to-temporal-cloud) -- [Start a Workflow Execution](/develop/python/temporal-clients#start-workflow-execution) - -## [Python SDK Sandbox](/develop/python/python-sdk-sandbox) - -Use third-party Python modules without non-deterministic behavior. - -## [Python SDK sync vs. async implementations](/develop/python/python-sdk-sync-vs-async) - -Implement synchronous or asynchronous Activities. - -## [Testing](/develop/python/testing-suite) - -Set up the testing suite and test Workflows and Activities. - -- [Test Frameworks](/develop/python/testing-suite#test-frameworks) -- [Testing Activities](/develop/python/testing-suite#test-activities) -- [Testing Workflows](/develop/python/testing-suite#test-workflows) -- [How to Replay a Workflow Execution](/develop/python/testing-suite#replay) - -## [Failure detection](/develop/python/failure-detection) - -Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries. - -- [Workflow Timeouts](/develop/python/failure-detection#workflow-timeouts) -- [Set Activity Timeouts](/develop/python/failure-detection#activity-timeouts) -- [Heartbeat an Activity](/develop/python/failure-detection#activity-heartbeats) - -## [Workflow message passing](/develop/python/message-passing) - -Send messages to and read the state of Workflow Executions. - -- [Develop with Signals](/develop/python/message-passing#signals) -- [Develop with Queries](/develop/python/message-passing#queries) -- [Develop with Updates](/develop/python/message-passing#updates) -- [What is a Dynamic Handler](/develop/python/message-passing#dynamic-handler) - -## [Interrupt a Workflow feature guide](/develop/python/cancellation) - -Interrupt a Workflow Execution with a Cancel or Terminate action. - -- [Cancel a Workflow](/develop/python/cancellation#cancellation) -- [Terminate a Workflow](/develop/python/cancellation#termination) -- [Cancel an Activity from a Workflow](/develop/python/cancellation#cancel-activity) - -## [Asynchronous Activity completion](/develop/python/asynchronous-activity-completion) - -Complete Activities asynchronously. - -- [Asynchronously Complete an Activity](/develop/python/asynchronous-activity-completion) - -## [Versioning](/develop/python/versioning) - -Change Workflow Definitions without causing non-deterministic behavior in running Workflows. - -- [Introduction to Versioning](/develop/python/versioning#introduction-to-versioning) -- [How to Use the Patching API](/develop/python/versioning#python-sdk-patching-api) -- [How to Use Worker Versioning](/develop/python/versioning#worker-versioning) - -## [Observability](/develop/python/observability) - -Configure and use the Temporal Observability APIs. - -- [Emit Metrics](/develop/python/observability#metrics) -- [Set up tracing](/develop/python/observability#tracing) -- [Log from a Workflow](/develop/python/observability#logging) -- [Use Visibility APIs](/develop/python/observability#visibility) - -## [Debugging](/develop/python/debugging) - -Explore various ways to debug your application. - -- [Debugging](/develop/python/debugging) - -## [Schedules](/develop/python/schedules) - -Run Workflows on a schedule and delay the start of a Workflow. - -- [Schedule a Workflow](/develop/python/schedules#schedule-a-workflow) -- [Temporal Cron Jobs](/develop/python/schedules#temporal-cron-jobs) -- [Start Delay](/develop/python/schedules#start-delay) - -## [Data encryption](/develop/python/converters-and-encryption) - -Use compression, encryption, and other data handling by implementing custom converters and codecs. - -- [Custom Payload Codec](/develop/python/converters-and-encryption#custom-payload-codec) -- [Payload Conversion](/develop/python/converters-and-encryption#payload-conversion) - -## [Durable Timers](/develop/python/timers) - -Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years. - -- [Sleep](/develop/python/timers) - -## [Child Workflows](/develop/python/child-workflows) - -Explore how to spawn a Child Workflow Execution and handle Child Workflow Events. - -- [Start a Child Workflow Execution](/develop/python/child-workflows) - -## [Continue-As-New](/develop/python/continue-as-new) - -Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID. - -- [Continue-As-New](/develop/python/continue-as-new) +
+

Python SDK resources

+
+
+

Technical Resources

+ +
+
+

Community

+ +
+
+
+ +
+
+

Core Application

+

Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application.

+
+ +
+

Temporal Client

+

Connect to a Temporal Service and start a Workflow Execution.

+
+ +
+

Python SDK Sandbox

+

Use third-party Python modules without non-deterministic behavior.

+
+ +
+

Python SDK sync vs. async implementations

+

Implement synchronous or asynchronous Activities.

+
+ +
+

Testing

+

Set up the testing suite and test Workflows and Activities.

+
+ +
+

Failure Detection

+

Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries.

+
+ +
+

Workflow Message Passing

+

Send messages to and read the state of Workflow Executions.

+
+ +
+

Interrupt a Workflow

+

Interrupt a Workflow Execution with a Cancel or Terminate action.

+
+ +
+

Asynchronous Activity Completion

+

Complete Activities asynchronously.

+
+ +
+

Versioning

+

Change Workflow Definitions without causing non-deterministic behavior in current long-running Workflows.

+
+ +
+

Observability

+

Configure and use the Temporal Observability APIs.

+
+ +
+

Debugging

+

Explore various ways to debug your application.

+
+ +
+

Schedules

+

Run Workflows on a schedule and delay the start of a Workflow.

+
+ +
+

Data Encryption

+

Use compression, encryption, and other data handling by implementing custom converters and codecs.

+
+ +
+

Durable Timers

+

Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years.

+
+ +
+

Child Workflows

+

Explore how to spawn a Child Workflow Execution and handle Child Workflow Events.

+
+ +
+

Continue-As-New

+

Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID.

+
+
+ + diff --git a/docs/develop/python/message-passing.mdx b/docs/develop/python/message-passing.mdx index fa8cbcd7e6..f8d4f96cbf 100644 --- a/docs/develop/python/message-passing.mdx +++ b/docs/develop/python/message-passing.mdx @@ -32,6 +32,32 @@ Temporal Clients use messages to read Workflow state and control its execution. See [Workflow message passing](/encyclopedia/workflow-message-passing) for a general overview of this topic. This page introduces these features for the Temporal Python SDK. +
+

Topics covered in this section

+
+ +
Write message handlers
+
+
+ +
Send messages
+
+
+ +
Message handler patterns
+
+
+ +
Message handler troubleshooting
+
+
+ +
Dynamic components
+
+
+
+
+ ## Write message handlers {#writing-message-handlers} :::info diff --git a/docs/develop/python/observability.mdx b/docs/develop/python/observability.mdx index 5ec68a4803..353cb115ae 100644 --- a/docs/develop/python/observability.mdx +++ b/docs/develop/python/observability.mdx @@ -27,12 +27,27 @@ tags: The observability section of the Temporal Developer's guide covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application)—that is, ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. -This section covers features related to viewing the state of the application, including: - -- [Emit metrics](#metrics) -- [Set up tracing](#tracing) -- [Log from a Workflow](#logging) -- [Visibility APIs](#visibility) +
+

Topics covered in this section

+
+ +
Emit metrics
+
+
+ +
Set up tracing
+
+
+ +
Log from a Workflow
+
+
+ +
Visibility APIs
+
+
+
+
## Emit metrics {#metrics} diff --git a/docs/develop/python/schedules.mdx b/docs/develop/python/schedules.mdx index 8c3fef7070..7861d10c39 100644 --- a/docs/develop/python/schedules.mdx +++ b/docs/develop/python/schedules.mdx @@ -24,19 +24,23 @@ tags: - Temporal SDKs --- -This page shows how to do the following: - -- [Schedule a Workflow](#schedule-a-workflow) - - [Create a Scheduled Workflow](#create) - - [Backfill a Scheduled Workflow](#backfill) - - [Delete a Scheduled Workflow](#delete) - - [Describe a Scheduled Workflow](#describe) - - [List a Scheduled Workflow](#list) - - [Pause a Scheduled Workflow](#pause) - - [Trigger a Scheduled Workflow](#trigger) - - [Update a Scheduled Workflow](#update) -- [Temporal Cron Jobs](#temporal-cron-jobs) -- [Start Delay](#start-delay) +
+

Topics covered in this section

+
+ +
Schedule a Workflow
+
+
+ +
Use Temporal Cron Jobs
+
+
+ +
Use Start Delay
+
+
+
+
## Schedule a Workflow {#schedule-a-workflow} diff --git a/docs/develop/python/set-up-your-local-python.mdx b/docs/develop/python/set-up-your-local-python.mdx new file mode 100644 index 0000000000..c027a14937 --- /dev/null +++ b/docs/develop/python/set-up-your-local-python.mdx @@ -0,0 +1,120 @@ +--- +id: set-up-your-local-python +sidebar_label: Setup +title: Setup +--- + +import { SetupSteps, SetupStep, CodeSnippet } from '@site/src/components/elements/SetupSteps'; +import { CallToAction } from '@site/src/components/elements/CallToAction'; + +# Setup + +Configure your local development environment to get started developing with Temporal. + + + + + python3 -V + + + python 3.10.9 + + +}> +## Install Python + +Make sure you have Python installed. These tutorials use Python 3.10. Check your version of Python with the following command: + +You'll see the version printed to the screen. + + + + +mkdir temporal-project + + +cd temporal-project + + +python3 -m venv env + + +source env/bin/activate + + +python -m pip install temporalio + + +Successfully installed temporalio-x.y + + +}> + +## Install the Temporal Python SDK + +You should install the Temporal Python SDK in your project using a virtual environment. Create a directory for your Temporal project, switch to the new directory, create a Python virtual environment, activate it, and then install the Temporal SDK. + +You'll see an output similar to the following: + +Next, you'll configure a local Temporal Service for development. + + + + +brew install temporal + + +}> + +## Install Temporal CLI + +The fastest way to get a development version of the Temporal Service running on your local machine is to use [Temporal CLI](https://docs.temporal.io/cli). + +Install Temporal CLI on your local machine using the following instructions for your platform. + + + + +temporal server start-dev + + +
+

Change the Web UI port

+

The Temporal Web UI may be on a different port in some examples or tutorials. To change the port for the Web UI, use the --ui-port option when starting the server:

+ +temporal server start-dev --ui-port 8080 + +

The Temporal Web UI will now be available at http://localhost:8080.

+
+ + +temporal server start-dev --db-filename your_temporal.db + + +}> + +## Start the development server + +Once you've installed Temporal CLI and added it to your PATH, open a new Terminal window and run the following command. + +This command starts a local Temporal Service. It starts the Web UI, creates the default Namespaces, and uses an in-memory database. + +The Temporal Service will be available on localhost:7233. +The Temporal Web UI will be available at http://localhost:8233. + +Leave the local Temporal Service running as you work through tutorials and other projects. You can stop the Temporal Service at any time by pressing CTRL+C. + +The temporal server start-dev command uses an in-memory database, so stopping the server will erase all your Workflows and all your Task Queues. If you want to retain those between runs, start the server and specify a database filename using the --db-filename option, like this: +
+
+ + +

Next: Run your first Temporal Application

+

Learn how to create a basic Workflow and run it with the Temporal Python SDK

+
diff --git a/docs/develop/python/temporal-clients.mdx b/docs/develop/python/temporal-clients.mdx index 9bd3cfdfe0..28e11851f7 100644 --- a/docs/develop/python/temporal-clients.mdx +++ b/docs/develop/python/temporal-clients.mdx @@ -29,11 +29,23 @@ tags: This guide introduces Temporal Clients. It explains the role and use of Clients and shows you how to configure your Python Client code to connect to the Temporal Service. -The pages shows how to do the following: - -- [Connect to a local development Temporal Service](#connect-to-development-service) -- [Connect to Temporal Cloud](#connect-to-temporal-cloud) -- [Start a Workflow Execution](#start-workflow-execution) +
+

Topics covered in this section

+
+ +
Connect to local development Temporal Service
+
+
+ +
Connect to Temporal Cloud
+
+
+ +
Start a Workflow Execution
+
+
+
+
## Connect to development Temporal Service {#connect-to-development-service} diff --git a/docs/develop/python/testing-suite.mdx b/docs/develop/python/testing-suite.mdx index e059b2a61f..b2aeecd14a 100644 --- a/docs/develop/python/testing-suite.mdx +++ b/docs/develop/python/testing-suite.mdx @@ -15,6 +15,28 @@ tags: - Temporal SDKs --- +
+

Topics covered in this section

+
+ +
Test frameworks
+
+
+ +
Testing Activities
+
+
+ +
Testing Workflows
+
+
+ +
Replay a Workflow Execution
+
+
+
+
+ The Testing section of the Temporal Application development guide describes the frameworks that facilitate Workflow and integration testing. In the context of Temporal, you can create these types of automated tests: diff --git a/docs/develop/python/versioning.mdx b/docs/develop/python/versioning.mdx index c16bcf57bc..437d336a00 100644 --- a/docs/develop/python/versioning.mdx +++ b/docs/develop/python/versioning.mdx @@ -35,6 +35,24 @@ to reconstruct the Workflow state by replaying the saved history event data on t definition code. This means that any incompatible update to the Workflow Definition code could cause a non-deterministic issue if not handled correctly. +
+

Topics covered in this section

+
+ +
Introduction to Versioning
+
+
+ +
Use Python SDK Patching API
+
+
+ +
Use Worker Versioning
+
+
+
+
+ ## Introduction to Versioning Because we design for potentially long running Workflows at scale, versioning with Temporal works differently. We explain more in this optional 30 minute introduction: [https://www.youtube.com/watch?v=kkP899WxgzY](https://www.youtube.com/watch?v=kkP899WxgzY) diff --git a/docs/develop/typescript/child-workflows.mdx b/docs/develop/typescript/child-workflows.mdx index 59d5a6b54a..c37554df3d 100644 --- a/docs/develop/typescript/child-workflows.mdx +++ b/docs/develop/typescript/child-workflows.mdx @@ -14,6 +14,20 @@ tags: description: Learn how to start and manage Child Workflow Executions using Temporal's Child Workflow API, including setting Parent Close Policy, handling Events, and advanced Child Workflow options. --- +
+

Topics covered in this section

+
+ +
Start a Child Workflow Execution
+
+
+ +
Set a Parent Close Policy
+
+
+
+
+ ## How to start a Child Workflow Execution {#child-workflows} A [Child Workflow Execution](/child-workflows) is a Workflow Execution that is scheduled from within another Workflow using a Child Workflow API. diff --git a/docs/develop/typescript/converters-and-encryption.mdx b/docs/develop/typescript/converters-and-encryption.mdx index f32835eb0f..654b369886 100644 --- a/docs/develop/typescript/converters-and-encryption.mdx +++ b/docs/develop/typescript/converters-and-encryption.mdx @@ -16,6 +16,32 @@ tags: description: Learn how to create a custom Payload Converter in TypeScript with Temporal SDKs to handle non-JSON-serializable values, configure your Data Converter, and utilize protobufs and encryption seamlessly in your Workflows and Activities. --- +
+

Topics covered in this section

+
+ +
Payload Converter and Payload Codec Summary
+
+
+ +
Payload Codec
+
+
+ +
Use custom payload conversion
+
+
+ +
Composite Data Converters
+
+
+ +
Custom Payload Converter
+
+
+
+
+ ## Payload Converter and Payload Codec Summary This section summarizes the difference between a Payload Converter and Payload Codec. diff --git a/docs/develop/typescript/core-application.mdx b/docs/develop/typescript/core-application.mdx index 3b2d797377..1efed56988 100644 --- a/docs/develop/typescript/core-application.mdx +++ b/docs/develop/typescript/core-application.mdx @@ -21,18 +21,51 @@ import * as Components from '@site/src/components'; The Foundations section of the Temporal Developer's guide covers the minimum set of concepts and implementation details needed to build and run a [Temporal Application](/temporal#temporal-application)—that is, all the relevant steps to start a [Workflow Execution](#develop-workflows) that executes an [Activity](#develop-activities). -In this section you can find the following: - -- [Run a development Temporal Service](#run-a-development-server) -- [Connect to a development Temporal Service](#connect-to-a-dev-cluster) -- [Connect to Temporal Cloud](#connect-to-temporal-cloud) -- [Develop a Workflow](#develop-workflows) -- [Develop an Activity](#develop-activities) -- [Start an Activity Execution](#activity-execution) -- [Run a dev Worker](#run-a-dev-worker) -- [Run a Worker on Docker](#run-a-worker-on-docker) -- [Run a Temporal Cloud Worker](#run-a-dev-worker) -- [Start a Workflow Execution](#start-workflow-execution) +
+

Topics covered in this section

+
+ +
Run a development Temporal Service
+
+
+ +
Connect to a development Temporal Service
+
+
+ +
Connect to Temporal Cloud
+
+
+ +
Develop a Workflow
+
+
+ +
Develop an Activity
+
+
+ +
Start an Activity Execution
+
+
+ +
Run a dev Worker
+
+
+ +
Run a Worker on Docker
+
+
+ +
Run a Temporal Cloud Worker
+
+
+ +
Start a Workflow Execution
+
+
+
+
## How to install the Temporal CLI and run a development server {#run-a-development-server} diff --git a/docs/develop/typescript/debugging.mdx b/docs/develop/typescript/debugging.mdx index 18516c288f..ed4277e48e 100644 --- a/docs/develop/typescript/debugging.mdx +++ b/docs/develop/typescript/debugging.mdx @@ -17,6 +17,24 @@ import { CaptionedImage } from '@site/src/components'; The Debugging section of the Temporal TypeScript SDK developer's guide covers tools for debugging and how to troubleshoot common issues. +
+

Topics covered in this section

+
+ +
Debug in a development environment
+
+
+ +
Debug in a production environment
+
+
+ +
Troubleshoot common issues
+
+
+
+
+ ## How to debug in a development environment {#debug-in-a-development-environment} In addition to the normal development tools of logging and a debugger, you can also see what's happening in your Workflow by using the [Web UI](/web-ui) or [Temporal CLI](/cli). @@ -268,50 +286,3 @@ If you are trying to connect in production and getting this: ```bash [TransportError: transport error] ``` - -It is a sign that something is wrong with your Cert/Key pair. -Log it out and make sure it is an exact match with what is expected (often, the issue can be whitespace when injecting from your production secrets management environment). - -### Resetting Workflows to deal with logical bugs - -You can "rewind time" using the Temporal CLI, resetting Workflow History to some previous point in time. You can read the Temporal CLI docs on: - -- [Restarting and resetting Workflows by ID](/cli) -- [Resetting all Workflows by binary checksum identifier](/cli) - -If you need to reset programmatically, the TS SDK does not have any high level APIs for this, but you can make raw gRPC calls to [resetWorkflowExecution](https://typescript.temporal.io/api/classes/proto.temporal.api.workflowservice.v1.WorkflowService-1/#resetworkflowexecution). - -Resetting should only be used to deal with serious logical bugs in your code: it's not for handling transient failures, like a downstream service being unreachable. It should not be used in the course of normal application flows. - -### gRPC call timeouts (context deadline exceeded) - -The opaque `context deadline exceeded` error comes from `gRPC`: - -``` -Error: 4 DEADLINE_EXCEEDED: context deadline exceeded - at Object.callErrorFromStatus (/Users/swyx/Work/Temporal/samples-typescript/nextjs-oneclick/node_modules/@grpc/grpc-js/build/src/call.js:31:26) - at Object.onReceiveStatus (/Users/swyx/Work/Temporal/samples-typescript/nextjs-oneclick/node_modules/@grpc/grpc-js/build/src/client.js:179:52) - at Object.onReceiveStatus (/Users/swyx/Work/Temporal/samples-typescript/nextjs-oneclick/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:336:141) - at Object.onReceiveStatus (/Users/swyx/Work/Temporal/samples-typescript/nextjs-oneclick/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:299:181) - at /Users/swyx/Work/Temporal/samples-typescript/nextjs-oneclick/node_modules/@grpc/grpc-js/build/src/call-stream.js:145:78 - at processTicksAndRejections (node:internal/process/task_queues:78:11) { - code: 4, - details: 'context deadline exceeded', - metadata: Metadata { - internalRepr: Map(1) { 'content-type' => [Array] }, - options: {} - }, - page: '/api/getBuyState' -} -``` - -Several conditions can cause this error, including network hiccups, timeouts that are too short, and an overloaded server. -Querying a Workflow Execution whose query handler causes an error can result in the query call timing out. - -Some troubleshooting actions you can take: - -- Verify the connection from your Worker to the Temporal Server is working and doesn't have unusually high latency. -- If you are running Temporal Server yourself, check your [server metrics](/self-hosted-guide/production-checklist#scaling-and-metrics) to ensure it's not overloaded. -- If what's timing out is a query, check the logs of your Workers to see if they are having issues handling the query. - -If none of the preceding actions help you discover why timeouts are occurring, please try to produce a minimal repro and we'll be glad to help. diff --git a/docs/develop/typescript/failure-detection.mdx b/docs/develop/typescript/failure-detection.mdx index 1670335fd3..734710ff65 100644 --- a/docs/develop/typescript/failure-detection.mdx +++ b/docs/develop/typescript/failure-detection.mdx @@ -16,15 +16,39 @@ tags: - Temporal SDKs --- -This page shows how to do the following: - -- [Workflow Timeouts](#workflow-timeouts) -- [Workflow retries](#workflow-retries) -- [Activity Timeouts](#activity-timeouts) -- [Activity Retry Policy](#activity-retries) -- [Activity next Retry delay](#activity-next-retry-delay) -- [Heartbeat an Activity](#activity-heartbeats) -- [Activity Heartbeat Timeout](#activity-heartbeat-timeout) +
+

Topics covered in this section

+
+ +
Workflow Timeouts
+
+
+ +
Workflow retries
+
+
+ +
Activity Timeouts
+
+
+ +
Activity Retry Policy
+
+
+ +
Activity next Retry delay
+
+
+ +
Heartbeat an Activity
+
+
+ +
Activity Heartbeat Timeout
+
+
+
+
## Workflow Timeouts {#workflow-timeouts} diff --git a/docs/develop/typescript/index.mdx b/docs/develop/typescript/index.mdx index ecc34cba31..71135d5495 100644 --- a/docs/develop/typescript/index.mdx +++ b/docs/develop/typescript/index.mdx @@ -15,134 +15,261 @@ import * as Components from '@site/src/components'; ![TypeScript SDK Banner](/img/assets/banner-typescript-temporal.png) -:::info TYPESCRIPT SPECIFIC RESOURCES -Build Temporal Applications with the TypeScript SDK. - -**Temporal TypeScript Technical Resources:** - -- [TypeScript API Documentation](https://typescript.temporal.io) -- [TypeScript SDK Code Samples](https://github.com/temporalio/samples-typescript) -- [TypeScript SDK GitHub](https://github.com/temporalio/sdk-typescript) -- [Temporal 101 in TypeScript Free Course](https://learn.temporal.io/courses/temporal_101/typescript/) - -**Get Connected with the Temporal TypeScript Community:** - -- [Temporal TypeScript Community Slack](https://temporalio.slack.com/archives/C01DKSMU94L) -- [TypeScript SDK Forum](https://community.temporal.io/tag/typescript-sdk) - ::: - -## [Core application](/develop/typescript/core-application) - -Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application. - -- [Develop a Basic Workflow](/develop/typescript/core-application#develop-workflows) -- [Develop a Basic Activity](/develop/typescript/core-application#develop-activities) -- [Start an Activity Execution](/develop/typescript/core-application#activity-execution) -- [Run Worker Processes](/develop/typescript/core-application#run-a-dev-worker) - -## [Temporal Client](/develop/typescript/temporal-clients) - -Connect to a Temporal Service and start a Workflow Execution. - -- [Connect to Development Temporal Service](/develop/typescript/temporal-clients#connect-to-development-service) -- [Connect to Temporal Cloud](/develop/typescript/temporal-clients#connect-to-temporal-cloud) -- [Start a Workflow Execution](/develop/typescript/temporal-clients#start-workflow-execution) - -## [Testing](/develop/typescript/testing-suite) - -Set up the testing suite and test Workflows and Activities. - -- [Test Frameworks](/develop/typescript/testing-suite#test-frameworks) -- [Testing Activities](/develop/typescript/testing-suite#test-activities) -- [Testing Workflows](/develop/typescript/testing-suite#test-workflows) -- [How to Replay a Workflow Execution](/develop/typescript/testing-suite#replay) - -## [Failure detection](/develop/typescript/failure-detection) - -Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries. - -- [Workflow Timeouts](/develop/typescript/failure-detection#workflow-timeouts) -- [Set Activity Timeouts](/develop/typescript/failure-detection#activity-timeouts) -- [Heartbeat an Activity](/develop/typescript/failure-detection#activity-heartbeats) - -## [Workflow message passing](/develop/typescript/message-passing) - -Send messages to and read the state of Workflow Executions. - -- [Develop with Signals](/develop/typescript/message-passing#signals) -- [Develop with Queries](/develop/typescript/message-passing#queries) -- [What is a Dynamic Handler](/develop/typescript/message-passing#dynamic-handler) - -## [Interrupt a Workflow feature guide](/develop/typescript/cancellation) - -Interrupt a Workflow Execution with a Cancel or Terminate action. - -- [Cancellation scopes in Typescript](/develop/typescript/cancellation#cancellation-scopes) - -## [Asynchronous Activity Completion](/develop/typescript/asynchronous-activity-completion) - -Complete Activities asynchronously. - -- [Asynchronously Complete an Activity](/develop/typescript/asynchronous-activity-completion) - -## [Versioning](/develop/typescript/versioning) - -Change Workflow Definitions without causing non-deterministic behavior in running Workflows. - -- [Introduction to Versioning](/develop/typescript/versioning) -- [How to Use the Patching API](/develop/typescript/versioning#typescript-sdk-patching-api) -- [How to Use Worker Versioning](/develop/typescript/versioning#worker-versioning) - -## [Observability](/develop/typescript/observability) - -Configure and use the Temporal Observability APIs. - -- [Emit Metrics](/develop/typescript/observability#metrics) -- [Setup Tracing](/develop/typescript/observability#tracing) -- [Log from a Workflow](/develop/typescript/observability#logging) -- [Use Visibility APIs](/develop/typescript/observability#visibility) - -## [Debugging](/develop/typescript/debugging) - -Explore various ways to debug your application. - -- [Debugging](/develop/typescript/debugging) - -## [Schedules](/develop/typescript/schedules) - -Run Workflows on a schedule and delay the start of a Workflow. - -- [Schedule a Workflow](/develop/typescript/schedules#schedule-a-workflow) -- [Temporal Cron Jobs](/develop/typescript/schedules#temporal-cron-jobs) -- [How to use Start Delay](/develop/typescript/schedules#start-delay) - -## [Data encryption](/develop/typescript/converters-and-encryption) - -Use compression, encryption, and other data handling by implementing custom converters and codecs. - -- [Custom Payload Codec](/develop/typescript/converters-and-encryption#custom-payload-conversion) - -## [Durable Timers](/develop/typescript/timers) - -Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years. - -- [What is a Timer](/develop/typescript/timers) - -## [Child Workflows](/develop/typescript/child-workflows) - -Explore how to spawn a Child Workflow Execution and handle Child Workflow Events. - -- [Start a Child Workflow Execution](/develop/typescript/child-workflows) - -## [Continue-As-New](/develop/typescript/continue-as-new) - -Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID. - -- [Continue-As-New](/develop/typescript/continue-as-new) - -## [Interceptors](/develop/typescript/interceptors) - -Manage inbound and outbound SDK calls, enhance tracing, and add authorization to your Workflows and Activities. - -- [How to implement interceptors](/develop/typescript/interceptors#interceptors) -- [Register an interceptor](/develop/typescript/interceptors#register-interceptor) +
+

TypeScript SDK resources

+
+
+

Technical Resources

+ +
+
+

Community

+ +
+
+
+ +
+
+

Core Application

+

Use the essential components of a Temporal Application (Workflows, Activities, and Workers) to build and run a Temporal application.

+
+ +
+

Temporal Client

+

Connect to a Temporal Service and start a Workflow Execution.

+
+ +
+

Testing

+

Set up the testing suite and test Workflows and Activities.

+
+ +
+

Failure Detection

+

Explore how your application can detect failures using timeouts and automatically attempt to mitigate them with retries.

+
+ +
+

Workflow Message Passing

+

Send messages to and read the state of Workflow Executions.

+
+ +
+

Interrupt a Workflow

+

Interrupt a Workflow Execution with a Cancel or Terminate action.

+
+ +
+

Asynchronous Activity Completion

+

Complete Activities asynchronously.

+
+ +
+

Versioning

+

Change Workflow Definitions without causing non-deterministic behavior in current long-running Workflows.

+
+ +
+

Observability

+

Configure and use the Temporal Observability APIs.

+
+ +
+

Debugging

+

Explore various ways to debug your application.

+
+ +
+

Schedules

+

Run Workflows on a schedule and delay the start of a Workflow.

+
+ +
+

Data Encryption

+

Use compression, encryption, and other data handling by implementing custom converters and codecs.

+
+ +
+

Durable Timers

+

Use Timers to make a Workflow Execution pause or "sleep" for seconds, minutes, days, months, or years.

+
+ +
+

Child Workflows

+

Explore how to spawn a Child Workflow Execution and handle Child Workflow Events.

+
+ +
+

Continue-As-New

+

Continue the Workflow Execution with a new Workflow Execution using the same Workflow ID.

+
+ +
+

Interceptors

+

Manage inbound and outbound SDK calls, enhance tracing, and add authorization to your Workflows and Activities.

+
+
+ + diff --git a/docs/develop/typescript/message-passing.mdx b/docs/develop/typescript/message-passing.mdx index 48e6cfe7bd..505f4fc5ac 100644 --- a/docs/develop/typescript/message-passing.mdx +++ b/docs/develop/typescript/message-passing.mdx @@ -32,6 +32,32 @@ Temporal Clients use messages to read Workflow state and control its execution. See [Workflow message passing](/encyclopedia/workflow-message-passing) for a general overview of this topic. This page introduces these features for the Temporal Typescript SDK. +
+

Topics covered in this section

+
+ +
Write message handlers
+
+
+ +
Send messages
+
+
+ +
Message handler patterns
+
+
+ +
Message handler troubleshooting
+
+
+ +
Dynamic components
+
+
+
+
+ ## Write message handlers {#writing-message-handlers} :::info @@ -233,7 +259,7 @@ const supportedLanguages = await handle.query(getLanguages, { }); ``` -- Sending a Query doesn’t add events to a Workflow's Event History. +- Sending a Query doesn't add events to a Workflow's Event History. - You can send Queries to closed Workflow Executions within a Namespace's Workflow retention period. This includes Workflows that have completed, failed, or timed out. @@ -244,7 +270,7 @@ const supportedLanguages = await handle.query(getLanguages, { ### Send a Signal {#send-signal} You can send a Signal to a Workflow Execution from a Temporal Client or from another Workflow Execution. -However, you can only send Signals to Workflow Executions that haven’t closed. +However, you can only send Signals to Workflow Executions that haven't closed. #### Send a Signal from a Client {#send-signal-from-client} diff --git a/docs/develop/typescript/observability.mdx b/docs/develop/typescript/observability.mdx index fda603a56f..15e8b8dcb1 100644 --- a/docs/develop/typescript/observability.mdx +++ b/docs/develop/typescript/observability.mdx @@ -19,12 +19,27 @@ tags: The observability section of the TypeScript developer guide covers the many ways to view the current state of your [Temporal Application](/temporal#temporal-application)—that is, ways to view which [Workflow Executions](/workflow-execution) are tracked by the [Temporal Platform](/temporal#temporal-platform) and the state of any specified Workflow Execution, either currently or at points of an execution. -This section covers features related to viewing the state of the application, including: - -- [Emit metrics](#metrics) -- [Set up tracing](#tracing) -- [Log from a Workflow](#logging) -- [Visibility APIs](#visibility) +
+

Topics covered in this section

+
+ +
Emit metrics
+
+
+ +
Set up tracing
+
+
+ +
Log from a Workflow
+
+
+ +
Visibility APIs
+
+
+
+
## Emit metrics {#metrics} diff --git a/docs/develop/typescript/schedules.mdx b/docs/develop/typescript/schedules.mdx index 3af9e2425b..e69f0ce295 100644 --- a/docs/develop/typescript/schedules.mdx +++ b/docs/develop/typescript/schedules.mdx @@ -14,19 +14,23 @@ tags: description: Schedule automated tasks effortlessly with Temporal. Learn how to create, backfill, delete, describe, list, pause, trigger, and update Scheduled Workflows. Control your Workflow execution with Temporal Cron Jobs and ensure timely, automated business processes. Automate repetitive tasks and reduce manual intervention now! --- -The pages shows how to do the following: - -- [Schedule a Workflow](#schedule-a-workflow) - - [Create a Scheduled Workflow](#create) - - [Backfill a Scheduled Workflow](#backfill) - - [Delete a Scheduled Workflow](#delete) - - [Describe a Scheduled Workflow](#describe) - - [List a Scheduled Workflow](#list) - - [Pause a Scheduled Workflow](#pause) - - [Trigger a Scheduled Workflow](#trigger) - - [Update a Scheduled Workflow](#update) -- [Temporal Cron Jobs](#temporal-cron-jobs) -- [Start Delay](#start-delay) +
+

Topics covered in this section

+
+ +
Schedule a Workflow
+
+
+ +
Use Temporal Cron Jobs
+
+
+ +
Use Start Delay
+
+
+
+
## How to Schedule a Workflow {#schedule-a-workflow} diff --git a/docs/develop/typescript/set-up-your-local-typescript.mdx b/docs/develop/typescript/set-up-your-local-typescript.mdx new file mode 100644 index 0000000000..e43307c250 --- /dev/null +++ b/docs/develop/typescript/set-up-your-local-typescript.mdx @@ -0,0 +1,102 @@ +--- +id: set-up-your-local-typescript +sidebar_label: Setup +title: Setup +--- + +import { SetupSteps, SetupStep, CodeSnippet } from '@site/src/components/elements/SetupSteps'; +import { CallToAction } from '@site/src/components/elements/CallToAction'; + +# Setup + +Configure your local development environment to get started developing with Temporal. + + + +

The TypeScript SDK requires Node.js 16 or later.

+

Install Node.js via your package manager by following the official Node.js instructions.

+ +}> +## Install Node.js + +The TypeScript SDK requires Node.js 16 or later. Install Node.js via your package manager by following the official Node.js instructions. +
+ + + +npx @temporalio/create@latest ./my-app + + +npm install @temporalio/client @temporalio/worker @temporalio/workflow + + +}> + +## Install the Temporal TypeScript SDK + +You can create a new project with the Temporal SDK: + +You can also add the Temporal TypeScript SDK to an existing project with the following command. + +Next, you'll configure a local Temporal Service for development. + + + + +brew install temporal + + +}> + +## Install Temporal CLI + +The fastest way to get a development version of the Temporal Service running on your local machine is to use [Temporal CLI](https://docs.temporal.io/cli). + +Install Temporal CLI on your local machine using the following instructions for your platform. + + + + +temporal server start-dev + + +
+

Change the Web UI port

+

The Temporal Web UI may be on a different port in some examples or tutorials. To change the port for the Web UI, use the --ui-port option when starting the server:

+ +temporal server start-dev --ui-port 8080 + +

The Temporal Web UI will now be available at http://localhost:8080.

+
+ + +temporal server start-dev --db-filename your_temporal.db + + +}> + +## Start the development server + +Once you've installed Temporal CLI and added it to your PATH, open a new Terminal window and run the following command. + +This command starts a local Temporal Service. It starts the Web UI, creates the default Namespaces, and uses an in-memory database. + +The Temporal Service will be available on localhost:7233. +The Temporal Web UI will be available at http://localhost:8233. + +Leave the local Temporal Service running as you work through tutorials and other projects. You can stop the Temporal Service at any time by pressing CTRL+C. + +The temporal server start-dev command uses an in-memory database, so stopping the server will erase all your Workflows and all your Task Queues. If you want to retain those between runs, start the server and specify a database filename using the --db-filename option, like this: +
+
+ + +

Next: Run your first Temporal Application

+

Learn how to create a basic Workflow and run it with the Temporal TypeScript SDK

+
diff --git a/docs/develop/typescript/temporal-clients.mdx b/docs/develop/typescript/temporal-clients.mdx index ff0d1f8d38..a1f96e3651 100644 --- a/docs/develop/typescript/temporal-clients.mdx +++ b/docs/develop/typescript/temporal-clients.mdx @@ -29,11 +29,23 @@ tags: The Temporal Client, provided by the Temporal SDK, allows you to communicate with the Temporal Service. It acts as the bridge for communication between your applications and the Temporal Service. -The following page shows how to: - -- [Connect to a local development Temporal Service](#connect-to-development-service) -- [Connect to Temporal Cloud](#connect-to-temporal-cloud) -- [Start a Workflow Execution](#start-workflow-execution) +
+

Topics covered in this section

+
+ +
Connect to a local development Temporal Service
+
+
+ +
Connect to Temporal Cloud
+
+
+ +
Start a Workflow Execution
+
+
+
+
## Connect to development Temporal Service {#connect-to-development-service} @@ -336,7 +348,7 @@ return 'Completed ' + wf.workflowInfo().workflowId + ', Total Charged: ' `totalCharged` is just a function declared in your code. For a full example, see [subscription-workflow-project-template-typescript/src/workflows.ts](https://github.com/temporalio/subscription-workflow-project-template-typescript/blob/main/src/workflows.ts). -A Workflow function may return a result. If it doesn’t (in which case the return type is `Promise`), the result will be `undefined`. +A Workflow function may return a result. If it doesn't (in which case the return type is `Promise`), the result will be `undefined`. If you started a Workflow with `client.workflow.start()`, you can choose to wait for the result anytime with `handle.result()`. diff --git a/docs/develop/typescript/testing-suite.mdx b/docs/develop/typescript/testing-suite.mdx index 81059f0008..621aaa67e5 100644 --- a/docs/develop/typescript/testing-suite.mdx +++ b/docs/develop/typescript/testing-suite.mdx @@ -14,6 +14,28 @@ tags: The Testing section of the Temporal Application development guide describes the frameworks that facilitate Workflow and integration testing. +
+

Topics covered in this section

+ +
+ In the context of Temporal, you can create these types of automated tests: - **End-to-end:** Running a Temporal Server and Worker with all its Workflows and Activities; starting and interacting with Workflows from a Client. diff --git a/docs/develop/typescript/versioning.mdx b/docs/develop/typescript/versioning.mdx index faf9f7af49..9a1de485cd 100644 --- a/docs/develop/typescript/versioning.mdx +++ b/docs/develop/typescript/versioning.mdx @@ -21,10 +21,25 @@ tags: import { CaptionedImage } from '@site/src/components'; The Temporal Platform requires that Workflow code is [deterministic](/workflow-definition#deterministic-constraints). -Because of that requirement, the Temporal TypeScript SDK offers two dedicated versioning features. - -- [Workflow Patching APIs](#patching) -- [Worker Versioning](#worker-versioning) +Because of that requirement, the Temporal TypeScript SDK offers two dedicated versioning features: Workflow Patching APIs and Worker Versioning. + +
+

Topics covered in this section

+ +
### Alternatives diff --git a/docs/encyclopedia/index.mdx b/docs/encyclopedia/index.mdx index 3c9b5df817..1e90ea996e 100644 --- a/docs/encyclopedia/index.mdx +++ b/docs/encyclopedia/index.mdx @@ -9,22 +9,82 @@ keywords: [Temporal](/evaluate/why-temporal) provides developers a suite of effective tools for building reliable applications at scale. -The following Encyclopedia pages describe the concepts, components, and features of Temporal in detail: +
+ The following Encyclopedia pages describe the concepts, components, and features of Temporal in detail: +
-- [Temporal](/temporal) -- [Temporal SDKs](/encyclopedia/temporal-sdks) -- [Workflows](/workflows) -- [Activities](/activities) -- [Detecting application failures](/encyclopedia/detecting-application-failures) -- [Workers](/workers) -- [Event History](/encyclopedia/event-history/) -- [Workflow Message Passing](/encyclopedia/workflow-message-passing/) -- [Child Workflows](/child-workflows) -- [Visibility](/visibility) -- [Temporal Service](/temporal-service) -- [Namespaces](/namespaces) -- [Temporal Nexus](/nexus) -- [Data conversion](/dataconversion) +
+
+

Temporal

+

Core concepts and overview of the Temporal platform for building reliable distributed applications.

+ Learn more → +
+
+

Temporal SDKs

+

Software development kits that provide APIs and tools for building Temporal applications.

+ Learn more → +
+
+

Workflows

+

Durable functions that coordinate Activities and maintain state across failures and restarts.

+ Learn more → +
+
+

Activities

+

Functions that interact with external systems and can be retried independently of Workflows.

+ Learn more → +
+
+

Detecting application failures

+

Mechanisms for identifying and handling failures in distributed Temporal applications.

+ Learn more → +
+
+

Workers

+

Processes that execute Workflow and Activity code, polling for tasks from the Temporal Service.

+ Learn more → +
+
+

Event History

+

Complete record of all events that occurred during a Workflow Execution's lifetime.

+ Learn more → +
+
+

Workflow Message Passing

+

Communication patterns including Signals, Queries, and Updates for Workflow interactions.

+ Learn more → +
+
+

Child Workflows

+

Workflows that are started by other Workflows, enabling composition and modularity.

+ Learn more → +
+
+

Visibility

+

Tools and APIs for observing and querying the state of Workflow Executions.

+ Learn more → +
+
+

Temporal Service

+

The backend service that manages Workflow state, task distribution, and durability.

+ Learn more → +
+
+

Namespaces

+

Logical isolation boundaries for organizing Workflows, Activities, and other resources.

+ Learn more → +
+
+

Temporal Nexus

+

Service framework for building and operating resilient service APIs with Temporal.

+ Learn more → +
+
+

Data conversion

+

Mechanisms for serializing, deserializing, and transforming data in Temporal applications.

+ Learn more → +
+
For a complete list of Temporal terms, see the [Glossary](/glossary). diff --git a/docs/evaluate/development-production-features/index.mdx b/docs/evaluate/development-production-features/index.mdx index 4fe83b65b0..33ab71846e 100644 --- a/docs/evaluate/development-production-features/index.mdx +++ b/docs/evaluate/development-production-features/index.mdx @@ -25,23 +25,87 @@ keywords: - queries --- -Through a Temporal SDK, Temporal provides a wide range of features that enable developers to build applications that serve a wide range of use cases. +import { CallToAction } from '@site/src/components/elements/CallToAction'; -- **[Core application primitives](/evaluate/development-production-features/core-application)**: Develop and run your application with Workflows, Activities, and Workers. -- **[Testing suite](/evaluate/development-production-features/testing-suite)**: Each Temporal SDK comes with a testing suite that enables developers to test their applications as they would any other. -- **[Scheduled Workflows](/evaluate/development-production-features/schedules)**: Start a business process at a specific time or on a given time interval. -- **[Interrupt a Workflow](/evaluate/development-production-features/interrupt-workflow)**: Cancel or terminate a business process (Workflow) that is already in progress and compensate for any steps already taken. -- **Runtime safeguards**: Prevent avoidable errors and issues from executing during runtime. -- **[Failure detection and mitigation](/evaluate/development-production-features/failure-detection)**: Detect failures with timeouts and configure automatic retries to mitigate them. -- **[Temporal Nexus](/evaluate/nexus)**: Connect Temporal Applications across (and within) isolated Namespaces for improved modularity, security, debugging, and fault isolation. Nexus supports cross-team, cross-domain, and multi-region use cases. -- **[Workflow message passing](/evaluate/development-production-features/workflow-message-passing)**: Build responsive applications that react to events at runtime and enable data retrieval from ongoing Workflows. -- **Versioning**: Support multiple versions of your business logic for long-running business processes. -- **[Observability](/evaluate/development-production-features/observability)**: List business process, view their state, and set up dashboards with metrics. -- **[Debugging](/evaluate/development-production-features/debugging)**: Surface errors and step through code to find issues. -- **[Data encryption](/evaluate/development-production-features/data-encryption)**: Transform data and protect the privacy of the users of your application. -- **[Throughput composability](/evaluate/development-production-features/throughput-composability)**: Breakup business processes by data streams, team ownership, or other organization factors. -- **[Cloud Automation](/evaluate/development-production-features/cloud-automation)**: Simplify cloud management and boost security with Temporal's Cloud Automation. -- **[Low Latency](/evaluate/development-production-features/low-latency)**: Making your applications faster, more performant, and more efficient. -- **[Multi-tenancy](/evaluate/development-production-features/multi-tenancy)**: Enhances efficiency and cost-effectiveness. +# Features -For detailed information on Temporal feature release stages and criteria, see this [Product Release Stages Guide](/evaluate/development-production-features/release-stages). +
+ The Temporal SDK provides a comprehensive suite of features designed to make building reliable, scalable applications easier than ever. Explore the full feature set below. +
+ +
+
+

Core application

+

Workflows, Activities, and Workers form the foundation of every Temporal application.

+ Learn more → +
+
+

Failure detection

+

Automatic detection and handling of failures, with timeouts and retry policies.

+ Learn more → +
+
+

Composability

+

Partition and compose business logic with Child Workflows for scalable throughput.

+ Learn more → +
+
+

Temporal Nexus

+

Connect applications and teams across namespaces for modular, secure architectures.

+ Learn more → +
+
+

Workflow message passing

+

Signals, Queries, and Updates enable dynamic, real-time interaction with running Workflows.

+ Learn more → +
+
+

Debugging

+

Powerful debugging tools, including replay debugging and state inspection.

+ Learn more → +
+
+

Interrupt a Workflow

+

Cancel or terminate a Workflow in progress and compensate for completed steps.

+ Learn more → +
+
+

Testing suite

+

Comprehensive testing tools for unit, integration, and end-to-end testing.

+ Learn more → +
+
+

Observability

+

Metrics, tracing, logging, and visibility into your application state.

+ Learn more → +
+
+

Data encryption

+

End-to-end encryption for your workflow data, ensuring sensitive information remains secure.

+ Learn more → +
+
+

Schedules

+

Schedule Workflows to run at specific times or intervals, with cron and custom logic support.

+ Learn more → +
+
+

Cloud automation

+

Automate cloud infrastructure management, including provisioning, scaling, and maintenance tasks.

+ Learn more → +
+
+

Low latency

+

Optimized for low-latency operations, ensuring your workflows run as quickly as possible.

+ Learn more → +
+
+

Multi-tenancy

+

Support for multiple tenants in a single Temporal cluster, with isolation and resource management.

+ Learn more → +
+
+ + + For detailed information about feature release stages and criteria, see our Product Release Stages Guide. + diff --git a/docs/evaluate/index.mdx b/docs/evaluate/index.mdx index e8a3d32665..950621ab8a 100644 --- a/docs/evaluate/index.mdx +++ b/docs/evaluate/index.mdx @@ -1,26 +1,113 @@ --- id: index -title: Evaluate Temporal -sidebar_label: Evaluate -description: Temporal enhances distributed application development with clear code structure, fault-tolerance, and execution guarantees, trusted by thousands for mission-critical workloads. -collapsed: false -toc_max_heading_level: 4 -keywords: - - evaluate temporal - - temporal - - what is temporal - - introduction to temporal -tags: - - Temporal +title: Introducing Temporal +sidebar_label: Introduction +description: Temporal is a developer-first, open source platform that ensures the successful execution of services and applications. --- -Temporal is designed to make developing distributed applications a delightful experience. -Developers benefit from a clear approach to structure their code and visibility into the state of their application. -Applications benefit from fault-tolerance and execution guarantees. -Thousands of companies of all sizes are leveraging Temporal's capabilities for both mission critical and standard workloads. +# Introducing Temporal -- [Why Temporal](/evaluate/why-temporal) -- [Development and production features](/evaluate/development-production-features) -- [Use cases](/evaluate/use-cases-design-patterns) -- [Temporal Cloud](/cloud) -- [Security](/security) +Temporal is a developer-first, open source platform that ensures the successful execution of services and applications. + +## Who is Temporal for? + +- Backend engineers +- Platform engineers +- SRE/DevOps, infrastructure engineers +- Architects + +## What problems does Temporal solve? + +
+ +
+

Compensating transactions (saga pattern)

+

Handle failures across distributed services with compensating transactions

+
+
+ + +
+

Human-in-the-loop

+

Integrate human decision making into automated processes

+
+
+ + +
+

Long-running workflows

+

Build reliable processes that run for days or months

+
+
+ + +
+

Microservice orchestration

+

Coordinate multiple services and handle failures gracefully

+
+
+ + +
+

Reliable scheduling

+

Schedule and manage recurring tasks with guaranteed execution

+
+
+ + +
+

Distributed transactions

+

Maintain data consistency across multiple services

+
+
+
+ +## How does Temporal work? + +Temporal provides durable execution for your applications through its unique architecture. Write your business logic as Workflows and Activities, deploy them to Workers, and let Temporal handle the rest. + +## What programming languages are supported? + +Temporal allows you to develop with durable execution in different languages and multiple languages can be used to build single services, enabling polyglot development. + +
+ Go SDK + Java SDK + TypeScript SDK + Python SDK + PHP SDK + .NET SDK + Ruby SDK +
+ +## Self-Hosted or Fully-Managed Service + +Temporal is fully open source. You can self-host the Temporal Service or use Temporal Cloud, our fully-managed SaaS offering. + +
+ Self-Hosted or Fully-Managed Service +
+ +
+ +
+ Next: + Understanding Temporal +
+
+
+
+ + diff --git a/docs/evaluate/temporal-cloud/index.mdx b/docs/evaluate/temporal-cloud/index.mdx index fb194d3d70..d2c5abef40 100644 --- a/docs/evaluate/temporal-cloud/index.mdx +++ b/docs/evaluate/temporal-cloud/index.mdx @@ -12,18 +12,42 @@ tags: - Temporal Cloud --- -In this introduction to Temporal Cloud you'll find the following information: - -- [Overview of Temporal Cloud](/cloud/overview) -- [Security](/cloud/security) -- [Service availability](/cloud/service-availability) -- [Defaults, limits, and configurable settings](/cloud/limits) -- [SLA](/cloud/sla) -- [Pricing](/cloud/pricing) -- [Support](/cloud/support) - [Temporal Cloud](https://temporal.io/cloud) serves as a software as a service (SaaS) infrastructure platform, specifically designed to manage the durability of your Temporal Applications. +
+

Topics covered in this section

+ +
+ Temporal Cloud offers developers a hassle-free way to leverage the power of Temporal without the operational overhead. Here's what you get: - Scalability: Start small and grow seamlessly. Handles anything from modest workloads to 100B+ actions/month. diff --git a/docs/getting-started.mdx b/docs/getting-started.mdx deleted file mode 100644 index 9135ce1f7a..0000000000 --- a/docs/getting-started.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: getting-started -title: Getting started with Temporal -description: Explore Temporal SDKs for .Net, Go, Java, TypeScript, PHP, and Python to build robust Temporal applications. Start with the Temporal SDK of your choice today! -sidebar_label: Get started ---- - -Temporal offers a range of SDKs to help you build Temporal applications. -The SDKs are available for .Net, Go, Java, TypeScript, PHP, and Python. - -## Temporal Go SDK - -Get started with the [Temporal Go SDK](https://learn.temporal.io/getting_started/go). - -[](https://learn.temporal.io/getting_started/go) - -## Temporal Java SDK - -Get started with the [Temporal Java SDK](https://learn.temporal.io/getting_started/java). - -[](https://learn.temporal.io/getting_started/java) - -## Temporal PHP SDK - -Get started with the [Temporal PHP SDK](https://learn.temporal.io/getting_started/php). - -[](https://learn.temporal.io/getting_started/php) - -## Temporal Python SDK - -Get started with the [Temporal Python SDK](https://learn.temporal.io/getting_started/python). - -[](https://learn.temporal.io/getting_started/python) - -## Temporal TypeScript SDK - -Get started with the [Temporal TypeScript SDK](https://learn.temporal.io/getting_started/typescript). - -[](https://learn.temporal.io/getting_started/typescript) diff --git a/docs/index.mdx b/docs/index.mdx index 26a8cce630..7bc64a2a5c 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -1,14 +1,30 @@ --- id: index -title: Temporal Platform Documentation -sidebar_label: Documentation Home +title: Temporal Documentation +sidebar_label: Home description: Explore Temporal's comprehensive documentation to build, scale, and manage reliable, fault-tolerant workflows with Workflow-as-Code solutions. --- - - Temporal Platform Documentation - + + +import TemporalDocsLanding from '@site/src/components/experimental/TemporalDocsLanding'; + + diff --git a/docs/references/index.mdx b/docs/references/index.mdx index f1c44279fe..c49a6ea966 100644 --- a/docs/references/index.mdx +++ b/docs/references/index.mdx @@ -7,16 +7,86 @@ tags: - Reference --- -- [SDK metrics reference](/references/sdk-metrics) -- [Commands reference](/references/commands) -- [Events reference](/references/events) -- [Web UI environmental variables reference](/references/web-ui-environment-variables) -- [Temporal Service configuration reference](/references/configuration) -- [Temporal Web UI configuration reference](/references/web-ui-configuration) -- [Go SDK API reference](https://pkg.go.dev/go.temporal.io/sdk) -- [Java SDK API reference](https://www.javadoc.io/doc/io.temporal/temporal-sdk/latest/index.html) -- [Python SDK API reference](https://python.temporal.io/) -- [TypeScript SDK API reference](https://typescript.temporal.io) -- [.NET SDK API reference](https://dotnet.temporal.io/api/) -- [PHP SDK API reference](https://php.temporal.io/namespaces/temporal.html) -- [Glossary](/glossary) +
+ Comprehensive reference documentation for the Temporal Platform, including configuration guides, API references, and technical specifications. +
+ +## Platform References + +
+
+

SDK Metrics

+

Complete reference for metrics emitted by Temporal SDKs for monitoring and observability.

+ View reference → +
+
+

Commands

+

Reference guide for Temporal CLI commands and their usage patterns.

+ View reference → +
+
+

Events

+

Comprehensive list of all Workflow and Activity events in the Temporal Platform.

+ View reference → +
+
+

Temporal Service Configuration

+

Configuration options and settings for self-hosted Temporal Service deployments.

+ View reference → +
+
+

Web UI Configuration

+

Configuration reference for customizing the Temporal Web UI interface.

+ View reference → +
+
+

Web UI Environment Variables

+

Environment variables for configuring Temporal Web UI deployment settings.

+ View reference → +
+
+ +## SDK API References + +
+
+

Go SDK API

+

Complete API documentation for the Temporal Go SDK with types, methods, and examples.

+ View API docs → +
+
+

Java SDK API

+

Comprehensive Javadoc reference for the Temporal Java SDK classes and interfaces.

+ View API docs → +
+
+

Python SDK API

+

Python SDK API reference with detailed documentation for all modules and functions.

+ View API docs → +
+
+

TypeScript SDK API

+

TypeScript SDK API documentation with type definitions and usage examples.

+ View API docs → +
+
+

.NET SDK API

+

Complete .NET SDK API reference with C# classes, methods, and code samples.

+ View API docs → +
+
+

PHP SDK API

+

PHP SDK API documentation with detailed class references and usage patterns.

+ View API docs → +
+
+ +## Additional Resources + +
+
+

Glossary

+

Comprehensive glossary of Temporal terms, concepts, and technical definitions.

+ View glossary → +
+
diff --git a/docs/security.mdx b/docs/security.mdx index 6afd52b099..360355ccda 100644 --- a/docs/security.mdx +++ b/docs/security.mdx @@ -11,20 +11,127 @@ tags: - Security --- -:::info Temporal Technologies' general company security +Find security information for your Temporal deployment, whether you're using Temporal Cloud or self-hosting. -For information about the general security habits of Temporal Technologies, see our [trust page](https://trust.temporal.io). + -For information about the security features of our SaaS offering, Temporal Cloud, see our [Cloud security page](/cloud/security). + diff --git a/docusaurus.config.js b/docusaurus.config.js index d8af10299f..a58e38bbd8 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -27,7 +27,7 @@ module.exports = async function createConfigAsync() { clientModules: ["./src/client/remote-amplitude-analytics.js"], themeConfig: { colorMode: { - defaultMode: "light", + respectPrefersColorScheme: true, disableSwitch: false, // switchConfig: { // darkIcon: "🌙", diff --git a/sidebars.js b/sidebars.js index dfe34951d4..8636d4559c 100644 --- a/sidebars.js +++ b/sidebars.js @@ -3,14 +3,13 @@ module.exports = { "index", { type: "category", - label: "Evaluate", + label: "Introduction", collapsed: false, link: { type: "doc", id: "evaluate/index", }, items: [ - "evaluate/why-temporal", "evaluate/understanding-temporal", { type: "category", @@ -20,36 +19,21 @@ module.exports = { type: "doc", id: "evaluate/development-production-features/index", }, + items: [], + }, + { + type: "category", + label: "Product release stages", + collapsed: true, + link: { + type: "doc", + id: "evaluate/development-production-features/release-stages", + }, items: [ - "evaluate/development-production-features/core-application", - "evaluate/development-production-features/failure-detection", - "evaluate/development-production-features/throughput-composability", - "evaluate/development-production-features/nexus", - "evaluate/development-production-features/workflow-message-passing", - "evaluate/development-production-features/debugging", - "evaluate/development-production-features/interrupt-workflow", - "evaluate/development-production-features/testing-suite", - "evaluate/development-production-features/observability", - "evaluate/development-production-features/data-encryption", - "evaluate/development-production-features/schedules", - "evaluate/development-production-features/cloud-automation", - "evaluate/development-production-features/low-latency", - "evaluate/development-production-features/multi-tenancy", { - type: "category", - label: "Product release stages", - collapsed: true, - link: { - type: "doc", - id: "evaluate/development-production-features/release-stages", - }, - items: [ - { - type: "link", - label: "Change-log", - href: "https://temporal.io/change-log", - }, - ], + type: "link", + label: "Change-log", + href: "https://temporal.io/change-log", }, ], }, @@ -85,7 +69,6 @@ module.exports = { ], }, "security", - "evaluate/use-cases-design-patterns", ], }, { @@ -111,6 +94,7 @@ module.exports = { id: "develop/go/index", }, items: [ + "develop/go/set-up-your-local-go", "develop/go/core-application", "develop/go/temporal-clients", "develop/go/go-sdk-multithreading", @@ -143,6 +127,7 @@ module.exports = { id: "develop/java/index", }, items: [ + "develop/java/set-up-your-local-java", "develop/java/core-application", "develop/java/temporal-clients", "develop/java/namespaces", @@ -171,6 +156,7 @@ module.exports = { id: "develop/php/index", }, items: [ + "develop/php/set-up-your-local-php", "develop/php/core-application", "develop/php/temporal-clients", "develop/php/testing-suite", @@ -196,6 +182,7 @@ module.exports = { id: "develop/python/index", }, items: [ + "develop/python/set-up-your-local-python", "develop/python/core-application", "develop/python/temporal-clients", "develop/python/python-sdk-sandbox", @@ -224,6 +211,7 @@ module.exports = { id: "develop/typescript/index", }, items: [ + "develop/typescript/set-up-your-local-typescript", "develop/typescript/core-application", "develop/typescript/temporal-clients", "develop/typescript/namespaces", @@ -252,6 +240,7 @@ module.exports = { id: "develop/dotnet/index", }, items: [ + "develop/dotnet/set-up-your-local-dotnet", "develop/dotnet/core-application", "develop/dotnet/temporal-client", "develop/dotnet/testing-suite", diff --git a/src/components/elements/CallToAction.js b/src/components/elements/CallToAction.js new file mode 100644 index 0000000000..7be158145a --- /dev/null +++ b/src/components/elements/CallToAction.js @@ -0,0 +1,13 @@ +import React from 'react'; +import styles from './call-to-action.module.css'; + + export const CallToAction = ({ href, children }) => { + return ( + +
+ {children} +
+
+
+ ); + }; \ No newline at end of file diff --git a/src/components/elements/InfoBox.js b/src/components/elements/InfoBox.js new file mode 100644 index 0000000000..d53c30a91d --- /dev/null +++ b/src/components/elements/InfoBox.js @@ -0,0 +1,14 @@ +import React from 'react'; +import styles from './info-box.module.css'; + +export const InfoBox = ({ title, children }) => { + return ( +
+
+
+

{title}

+ {children} +
+
+ ); +}; \ No newline at end of file diff --git a/src/components/elements/Intro.js b/src/components/elements/Intro.js index ab55492435..bdd5cd995b 100644 --- a/src/components/elements/Intro.js +++ b/src/components/elements/Intro.js @@ -224,8 +224,8 @@ const slides = [ { title: "Temporal Service", description: "Provides reliable and scalable workflow orchestration.", - content1: `A Temporal Service ensures that Workflows are resilient by saving each step the Workflow code takes. It also schedules retries whenever there are errors in your application’s code.`, - content2: `You can run it wherever you’d like and scale from a single laptop to thousands of machines, adding resources when and where you need them. And although you've just set up a lightweight Temporal Service for development, switching your code to point at a production Temporal Service only requires changing your connection parameters.`, + content1: `A Temporal Service ensures that Workflows are resilient by saving each step the Workflow code takes. It also schedules retries whenever there are errors in your application's code.`, + content2: `You can run it wherever you'd like and scale from a single laptop to thousands of machines, adding resources when and where you need them. And although you've just set up a lightweight Temporal Service for development, switching your code to point at a production Temporal Service only requires changing your connection parameters.`, giphy: "eePSFNBFv2W9owZ4Sh", }, { @@ -245,8 +245,8 @@ const slides = [ { title: "Determinism", description: "Writing deterministic Workflows guarantees durability in the case of failure.", - content1: `Temporal's guarantee that your Workflow code can’t fail to continue running requires that the code in your Workflow must be deterministic. Simply put, this means that each execution of a Workflow, given the same input, must follow the same path through the code and produce the same output.`, - content2: `This means that you can’t generate a random number or interact with the outside world, as these actions are inherently non-deterministic. Generating a random number twice will likely produce different results, and if you access files, databases, or network services, you might get a failure or different results at different times.`, + content1: `Temporal's guarantee that your Workflow code can't fail to continue running requires that the code in your Workflow must be deterministic. Simply put, this means that each execution of a Workflow, given the same input, must follow the same path through the code and produce the same output.`, + content2: `This means that you can't generate a random number or interact with the outside world, as these actions are inherently non-deterministic. Generating a random number twice will likely produce different results, and if you access files, databases, or network services, you might get a failure or different results at different times.`, giphy: "5FSanfKqd3rS8", }, { @@ -262,7 +262,7 @@ const slides = [ "Workers run Workflow and Activity code reliably and consistently. You can increase the scalability and availability of your application by running additional Workers. ", content1: `One thing that people new to Temporal find surprising is that the Temporal Service does not execute your code.`, content2: `You deploy your code to containers or machines that are separate from the Temporal Service. Using the Worker API provided by the Temporal SDK, you will run one or more Worker processes that will execute your Workflow and Activity code based on tasks managed by the Temporal Service.`, - content3: `The Temporal Service gives the Workers tasks like “Start running Workflow A,” and the Workers run the corresponding Workflow function or method.`, + content3: `The Temporal Service gives the Workers tasks like "Start running Workflow A," and the Workers run the corresponding Workflow function or method.`, giphy: "DhstvI3zZ598Nb1rFf", }, { diff --git a/src/components/elements/SdkLogos.js b/src/components/elements/SdkLogos.js index 40223fb493..30738d0d89 100644 --- a/src/components/elements/SdkLogos.js +++ b/src/components/elements/SdkLogos.js @@ -3,43 +3,43 @@ import React from "react"; const supportedTech = [ { link: "/develop/go", - image: "/img/sdks/svgs/golang.svg", + image: "/img/sdks/svgs/sdk-box-logos/go.svg", alt: "Go lang logo", class: "w-10 h-8", }, { link: "/develop/java", - image: "/img/sdks/svgs/java.svg", + image: "/img/sdks/svgs/sdk-box-logos/java.svg", alt: "Java logo", class: "w-7 h-7", }, { link: "/develop/python", - image: "/img/sdks/svgs/python.svg", + image: "/img/sdks/svgs/sdk-box-logos/python.svg", alt: "Python logo", class: "w-7 h-7", }, { link: "/develop/typescript", - image: "/img/sdks/svgs/typescript.svg", + image: "/img/sdks/svgs/sdk-box-logos/typescript.svg", alt: "TypeScript logo", class: "w-7 h-7", }, { link: "/develop/php", - image: "/img/sdks/svgs/php.svg", + image: "/img/sdks/svgs/sdk-box-logos/php.svg", alt: "php logo", class: "w-10", }, { link: "/develop/dotnet", - image: "/img/sdks/svgs/dotnet.svg", + image: "/img/sdks/svgs/sdk-box-logos/dotnet.svg", alt: ".Net logo", class: "w-10", }, { link: "https://github.com/temporalio/sdk-ruby", - image: "/img/sdks/svgs/ruby.svg", + image: "/img/sdks/svgs/sdk-box-logos/ruby.png", alt: "Ruby logo", class: "w-10", }, diff --git a/src/components/elements/SetupSteps.js b/src/components/elements/SetupSteps.js new file mode 100644 index 0000000000..18efed6e60 --- /dev/null +++ b/src/components/elements/SetupSteps.js @@ -0,0 +1,32 @@ +import React from 'react'; + import styles from './setup-steps.module.css'; + import CodeBlock from '@theme/CodeBlock'; + + export const SetupStep = ({ children, code }) => { + return ( +
+
+ {children} +
+
+ {code} +
+
+ ); + }; + + export const CodeSnippet = ({ language, children }) => { + return ( + + {children} + + ); + }; + + export const SetupSteps = ({ children }) => { + return ( +
+ {children} +
+ ); + }; \ No newline at end of file diff --git a/src/components/elements/TopicCard.js b/src/components/elements/TopicCard.js new file mode 100644 index 0000000000..5e309cea74 --- /dev/null +++ b/src/components/elements/TopicCard.js @@ -0,0 +1,84 @@ +import React from 'react'; +import Link from '@docusaurus/Link'; +import styles from './TopicCard.module.css'; + +/** + * Reusable TopicCard component for consistent card styling across the site + * @param {Object} props + * @param {string} props.title - Card title + * @param {string} props.description - Card description + * @param {string} props.href - Link URL + * @param {string} props.variant - Card style variant: 'pattern', 'topic', 'feature', 'security' + * @param {React.ReactNode} props.icon - Optional icon element + * @param {boolean} props.showArrow - Whether to show arrow on hover + * @param {string} props.className - Additional CSS classes + */ +export function TopicCard({ + title, + description, + href, + variant = 'pattern', + icon, + showArrow = true, + className = '', + ...props +}) { + const cardClasses = [ + styles.topicCard, + styles[`topicCard${variant.charAt(0).toUpperCase() + variant.slice(1)}`], + className + ].filter(Boolean).join(' '); + + const CardContent = () => ( + <> +
+ {icon &&
{icon}
} +

{title}

+

{description}

+
+ {showArrow &&
} + + ); + + if (href) { + return ( + + + + ); + } + + return ( +
+ +
+ ); +} + +/** + * Container component for TopicCard grids + * @param {Object} props + * @param {React.ReactNode} props.children - TopicCard components + * @param {number} props.columns - Number of columns (2, 3, or 4) + * @param {string} props.className - Additional CSS classes + */ +export function TopicCardGrid({ + children, + columns = 2, + className = '', + ...props +}) { + const gridClasses = [ + styles.topicCardGrid, + styles[`topicCardGrid${columns}col`], + className + ].filter(Boolean).join(' '); + + return ( +
+ {children} +
+ ); +} + +export default TopicCard; \ No newline at end of file diff --git a/src/components/elements/TopicCard.module.css b/src/components/elements/TopicCard.module.css new file mode 100644 index 0000000000..9e01c41a38 --- /dev/null +++ b/src/components/elements/TopicCard.module.css @@ -0,0 +1,212 @@ +/* Base TopicCard styles */ +.topicCard { + display: block; + padding: 2rem; + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 0; + color: var(--ifm-color); + text-decoration: none; + transition: all 0.2s ease; + position: relative; +} + +.topicCard:hover { + text-decoration: none; + color: var(--ifm-color); + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +[data-theme='dark'] .topicCard { + background-color: #1C2128; + border-color: #30363D; +} + +[data-theme='dark'] .topicCard:hover { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); +} + +/* Card content layout */ +.topicCardContent { + flex: 1; +} + +.topicCardIcon { + margin-bottom: 1rem; + display: flex; + align-items: center; +} + +.topicCardTitle { + font-size: 1.25rem; + font-weight: 500; + margin: 0 0 0.75rem 0; + color: var(--ifm-color); +} + +.topicCardDescription { + font-size: 0.875rem; + margin: 0; + color: var(--ifm-color-emphasis-700); + line-height: 1.5; +} + +.topicCardArrow { + position: absolute; + top: 2rem; + right: 2rem; + color: var(--ifm-color-emphasis-600); + font-size: 1.2rem; + transition: transform 0.3s ease; +} + +.topicCard:hover .topicCardArrow { + transform: translateX(4px); +} + +/* Pattern variant (like your Introduction page) */ +.topicCardPattern { + /* Uses base styles */ +} + +/* Topic variant (like Temporal Cloud intro with gradient border) */ +.topicCardTopic { + display: flex; + align-items: center; + padding: 1rem 1.5rem; + background-image: linear-gradient(var(--ifm-card-background-color), var(--ifm-card-background-color)), + linear-gradient(135deg, #444CE7 0%, #B664FF 100%); + background-origin: border-box; + background-clip: padding-box, border-box; + border: 2px solid transparent; + border-radius: 8px; +} + +[data-theme='dark'] .topicCardTopic { + background-image: linear-gradient(#161723, #161723), + linear-gradient(135deg, #444CE7 0%, #B664FF 100%); +} + +.topicCardTopic:hover { + box-shadow: 0 8px 24px rgba(68, 76, 231, 0.2); +} + +.topicCardTopic .topicCardTitle { + font-size: 1rem; + font-weight: 500; + margin: 0; +} + +.topicCardTopic .topicCardDescription { + display: none; /* Topics usually don't show descriptions */ +} + +.topicCardTopic .topicCardArrow { + position: static; + margin-left: auto; +} + +/* Feature variant (like SDK feature cards) */ +.topicCardFeature { + background: var(--ifm-color-emphasis-0); + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 8px; + padding: 1.5rem; + transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.topicCardFeature:hover { + border-color: var(--ifm-color-primary); + box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08); +} + +[data-theme='dark'] .topicCardFeature { + border-color: var(--ifm-color-emphasis-200); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); +} + +[data-theme='dark'] .topicCardFeature:hover { + box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2); +} + +.topicCardFeature .topicCardArrow { + display: none; /* Feature cards usually don't show arrows */ +} + +/* Security variant (custom styled with gradients) */ +.topicCardSecurity { + background: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%); + border: 1px solid #e1e8ed; + border-radius: 12px; + padding: 2rem; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); + position: relative; + overflow: hidden; +} + +.topicCardSecurity::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + background: linear-gradient(90deg, #444ce7 0%, #b664ff 100%); +} + +.topicCardSecurity:hover { + transform: translateY(-4px); + box-shadow: 0 8px 24px rgba(68, 76, 231, 0.12); + border-color: #444ce7; +} + +.topicCardSecurity .topicCardTitle { + font-size: 1.375rem; + font-weight: 600; + line-height: 1.3; +} + +.topicCardSecurity .topicCardArrow { + display: none; /* Security cards usually have custom buttons */ +} + +/* Grid layouts */ +.topicCardGrid { + display: grid; + gap: 1.5rem; + margin: 2rem 0; +} + +.topicCardGrid2col { + grid-template-columns: repeat(2, 1fr); +} + +.topicCardGrid3col { + grid-template-columns: repeat(3, 1fr); +} + +.topicCardGrid4col { + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); +} + +/* Responsive */ +@media (max-width: 768px) { + .topicCardGrid2col, + .topicCardGrid3col { + grid-template-columns: 1fr; + } + + .topicCard { + padding: 1.5rem; + } + + .topicCardTopic { + padding: 0.875rem 1.25rem; + } + + .topicCardTitle { + font-size: 1.1rem; + } +} \ No newline at end of file diff --git a/src/components/elements/call-to-action.module.css b/src/components/elements/call-to-action.module.css new file mode 100644 index 0000000000..8dd44691ca --- /dev/null +++ b/src/components/elements/call-to-action.module.css @@ -0,0 +1,42 @@ +.cta { + display: flex; + align-items: center; + justify-content: space-between; + background: linear-gradient(to right, #2e2e60, #1e1e40); + border: 1px solid #3b3b7c; + border-radius: 8px; + padding: 1.5rem; + margin: 2rem 0; + color: #e6e6fa; + text-decoration: none; + transition: all 0.3s ease; +} + +.cta:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); + text-decoration: none; + color: #e6e6fa; +} + +.content { + flex: 1; +} + +.content h3 { + margin: 0; + font-size: 1.2rem; + color: #e6e6fa; +} + +.content p { + margin: 0.5rem 0 0 0; + color: #b4b4d4; + font-size: 0.95rem; +} + +.arrow { + font-size: 1.5rem; + margin-left: 1rem; + color: #8585ff; +} \ No newline at end of file diff --git a/src/components/elements/features.module.css b/src/components/elements/features.module.css new file mode 100644 index 0000000000..a0c287a510 --- /dev/null +++ b/src/components/elements/features.module.css @@ -0,0 +1,91 @@ +.features-intro { + font-size: 1.2rem; + line-height: 1.6; + color: var(--ifm-color-emphasis-700); + margin-bottom: 2rem; + max-width: 800px; +} + +.feature-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; + margin-bottom: 3rem; +} + +.feature-card { + background: var(--ifm-card-background-color); + border-radius: 8px; + padding: 1.5rem; + transition: all 0.3s ease; + border: 1px solid var(--ifm-color-emphasis-200); + display: flex; + flex-direction: column; +} + +.feature-card:hover { + transform: translateY(-5px); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); + border-color: var(--ifm-color-primary); +} + +.feature-icon { + font-size: 2rem; + margin-bottom: 1rem; +} + +.feature-card h3 { + font-size: 1.25rem; + margin-bottom: 0.75rem; + color: var(--ifm-color-emphasis-900); +} + +.feature-card p { + color: var(--ifm-color-emphasis-600); + margin-bottom: 1rem; +} + +.feature-link { + color: var(--ifm-color-primary); + text-decoration: none; + font-weight: 500; + display: inline-flex; + align-items: center; + transition: color 0.2s ease; +} + +.feature-link:hover { + color: var(--ifm-color-primary-darker); + text-decoration: none; +} + +.release-stages-note { + margin: 2rem 0; + padding: 1rem; + background: var(--ifm-color-emphasis-100); + border-radius: 8px; + font-size: 0.9rem; + color: var(--ifm-color-emphasis-700); +} + +/* Dark mode adjustments */ +[data-theme='dark'] .feature-card { + background: var(--ifm-background-color); + border-color: var(--ifm-color-emphasis-300); +} + +[data-theme='dark'] .feature-card:hover { + border-color: var(--ifm-color-primary); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .feature-grid { + grid-template-columns: 1fr; + } + + .features-intro { + font-size: 1.1rem; + } +} \ No newline at end of file diff --git a/src/components/elements/info-box.module.css b/src/components/elements/info-box.module.css new file mode 100644 index 0000000000..ae04fa4a3d --- /dev/null +++ b/src/components/elements/info-box.module.css @@ -0,0 +1,36 @@ +.infoBox { + background: rgba(45, 45, 85, 0.95); + border: 1px solid #3b3b7c; + border-radius: 8px; + padding: 1.5rem; + margin: 1.5rem 0; + display: flex; + gap: 1rem; + color: #e6e6fa; +} + +.infoIcon { + font-size: 1.2rem; + color: #8585ff; + line-height: 1; +} + +.content h3 { + margin: 0 0 0.5rem 0; + font-size: 1.1rem; + color: #e6e6fa; +} + +.content p { + margin: 0.5rem 0; + color: #b4b4d4; + line-height: 1.5; +} + +.content code { + background: rgba(70, 70, 120, 0.5); + padding: 0.2em 0.4em; + border-radius: 4px; + font-family: var(--ifm-font-family-monospace); + font-size: 0.9em; +} \ No newline at end of file diff --git a/src/components/elements/setup-steps.module.css b/src/components/elements/setup-steps.module.css new file mode 100644 index 0000000000..19d580dec4 --- /dev/null +++ b/src/components/elements/setup-steps.module.css @@ -0,0 +1,55 @@ +.setupSteps { + display: flex; + flex-direction: column; + gap: 2rem; + margin: 2rem 0; +} + +.setupStep { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2rem; + align-items: start; +} + +.content { + padding-right: 1rem; +} + +.content h2 { + margin-top: 0; + color: var(--ifm-color-emphasis-800); +} + +.content p { + color: var(--ifm-color-emphasis-700); + font-size: 0.95rem; + line-height: 1.5; +} + +.code { + background: var(--ifm-color-emphasis-100); + border-radius: 8px; + padding: 1rem; + font-family: var(--ifm-font-family-monospace); + font-size: 0.9rem; + line-height: 1.4; + overflow-x: auto; +} + +.code pre { + margin: 0; + padding: 0; + background: transparent; +} + +@media (max-width: 768px) { + .setupStep { + grid-template-columns: 1fr; + gap: 1rem; + } + + .content { + padding-right: 0; + } +} \ No newline at end of file diff --git a/src/components/experimental/TemporalDocsLanding.js b/src/components/experimental/TemporalDocsLanding.js new file mode 100644 index 0000000000..a7ad2aba6c --- /dev/null +++ b/src/components/experimental/TemporalDocsLanding.js @@ -0,0 +1,302 @@ +import React, { useEffect } from "react"; +import { useColorMode } from "@docusaurus/theme-common"; +import "/src/css/landing.css"; + +const Icon = ({ children }) => ( + + {children} + +); + +const TemporalDocsLanding = () => { + const { setColorMode } = useColorMode(); + + // Set dark mode as default + useEffect(() => { + setColorMode('dark'); + }, []); + + const sections = [ + { + title: "Getting started", + icon: ( + + + + ), + items: [ + { title: "Understanding Temporal", link: "/concepts/what-is-temporal" }, + { title: "Why Temporal", link: "/concepts/why-temporal" }, + { title: "Setup your Local Dev Env", link: "https://learn.temporal.io/getting_started/" }, + { title: "Run your First Temporal App", link: "https://learn.temporal.io/getting_started/" }, + { title: "Build a Temporal App from Scratch", link: "https://learn.temporal.io/getting_started/" }, + { title: "Take a free course", link: "https://learn.temporal.io/courses/" } + ] + }, + { + title: "Develop", + icon: ( + + + + ), + items: [ + { title: "Go SDK Developer Guide", link: "/develop/go" }, + { title: "Java SDK Developer Guide", link: "/develop/java" }, + { title: "PHP SDK Developer Guide", link: "/develop/php" }, + { title: "Python SDK Developer Guide", link: "/develop/python" }, + { title: "TypeScript SDK Developer Guide", link: "/develop/typescript" }, + { title: ".NET SDK Developer Guide", link: "/develop/dotnet" }, + { title: "Ruby SDK README", link: "https://github.com/temporalio/sdk-ruby#readme" } + ] + }, + { + title: "Deploy", + icon: ( + + + + ), + items: [ + { title: "Self-Host", link: "https://docs.temporal.io/develop/" }, + { title: "Worker Performance", link: "https://docs.temporal.io/develop/worker-performance" }, + { title: "Production Checklist", link: "https://docs.temporal.io/self-hosted-guide/production-checklist" }, + { title: "Migrate to Temporal Cloud", link: "https://docs.temporal.io/production-deployments/migration" } + ] + }, + { + title: "Temporal Cloud", + icon: ( + + + + ), + items: [ + { title: "Account setup", link: "/cloud/account-setup" }, + { title: "User management", link: "/cloud/users" }, + { title: "Billing and cost", link: "/cloud/billing-and-cost" }, + { title: "Namespace management", link: "/cloud/namespaces" }, + { title: "Pricing", link: "/cloud/pricing" }, + { title: "API keys", link: "/cloud/api-keys" }, + { title: "Audit Logging", link: "/cloud/audit-logging" }, + { title: "Cloud Ops API", link: "/ops" }, + { title: "Temporal Nexus", link: "/cloud/nexus" }, + { title: "Export", link: "/cloud/export" } + ] + } + ]; + + const getUnstuckSection = { + title: "Get unstuck", + icon: ( + + + + + + ), + items: [ + { title: "Resource Library", link: "https://temporal.io/resources" }, + { title: "Ask in Stack", link: "https://t.mp/slack" }, + { title: "Post in Community Forum", link: "https://community.temporal.io" } + ] + }; + + const observabilitySection = { + title: "Monitor", + icon: ( + + + + + ), + items: [ + { title: "Platform Metrics", link: "/references/cluster-metrics" }, + { title: "SDK Metrics", link: "/references/sdk-metrics" }, + { title: "Cloud Metrics", link: "/cloud/metrics" }, + { title: "Setup with Datadog", link: "/cloud/metrics/datadog" }, + { title: "Setup with Prometheus", link: "/cloud/metrics/prometheus-grafana" }, + { title: "Worker Health", link: "/production-deployment/cloud/worker-health" }, + { title: "Service Health", link: "/production-deployment/cloud/service-health" } + ] + }; + + const securitySection = { + title: "Secure", + icon: ( + + + + + + + ), + items: [ + { title: "Trust", link: "https://trust.temporal.io/" }, + { title: "Cloud Security", link: "/cloud/security" }, + { title: "Self-hosted Security", link: "/self-hosted-guide/security" } + ] + }; + + const tutorialsSection = { + title: "Tutorials", + icon: ( + + + + + + ), + items: [ + { title: "Getting Started", link: "https://learn.temporal.io/getting_started/" }, + { title: "Infrastructure Tutorials", link: "https://learn.temporal.io/tutorials/infrastructure/" }, + { title: "One-Click Order App in TypeScript and Next.js", link: "https://learn.temporal.io/tutorials/typescript/build-one-click-order-app-nextjs/" }, + { title: "Trip Booking App in Python", link: "https://learn.temporal.io/tutorials/python/trip-booking-app/" } + ] + }; + + const coursesSection = { + title: "Courses", + icon: ( + + + + ), + items: [ + { title: "Temporal 101: Introducing the Temporal Platform", link: "https://learn.temporal.io/courses/temporal_101/" }, + { title: "Temporal 102: Exploring Durable Execution", link: "https://learn.temporal.io/courses/temporal_102/" }, + { title: "Crafting an Error Handling Strategy", link: "https://learn.temporal.io/courses/errstrat/" }, + { title: "Introduction to Temporal Cloud", link: "https://learn.temporal.io/courses/intro_to_temporal_cloud/" } + ] + }; + + const examplesSection = { + title: "Examples", + icon: ( + + + + ), + items: [ + { title: "Code Exchange", link: "https://temporal.io/code-exchange" }, + { title: "Project Based Tutorials", link: "https://learn.temporal.io/tutorials/" }, + { title: "Example Applications", link: "https://learn.temporal.io/examples/" } + ] + }; + + return ( +
+
+
+ {sections.map((section, index) => ( +
+
+ {section.icon} +

{section.title}

+
+
+ {section.items.map((item, itemIndex) => ( + + {item.title} + + ))} +
+ {section.title === "Temporal Cloud" && ( + + Create an Account + + )} +
+ ))} +
+ +
+
+
+
+ {observabilitySection.icon} +

{observabilitySection.title}

+
+
+ {observabilitySection.items.map((item, index) => ( + + {item.title} + + ))} +
+
+
+
+ {securitySection.icon} +

{securitySection.title}

+
+
+ {securitySection.items.map((item, index) => ( + + {item.title} + + ))} +
+
+
+
+ {getUnstuckSection.icon} +

{getUnstuckSection.title}

+
+
+ {getUnstuckSection.items.map((item, index) => ( + + {item.title} + + ))} +
+
+
+
+ +
+

More ways to learn

+
+ {[tutorialsSection, coursesSection, examplesSection].map((section, index) => ( +
+
+ {section.icon} +

{section.title}

+
+
+ {section.items.map((item, itemIndex) => ( + + {item.title} + + ))} +
+
+ ))} +
+
+
+
+ ); +}; + +export default TemporalDocsLanding; diff --git a/src/components/index.js b/src/components/index.js index b54c92958b..b13ac7fa14 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -3,6 +3,7 @@ export { default as RetrySimulator } from "./elements/RetrySimulator"; export { Intro } from "./elements/Intro"; export { SdkLogos } from "./elements/SdkLogos"; export { default as PhotoCarousel } from './elements/PhotoCarousel'; +export { TopicCard, TopicCardGrid } from './elements/TopicCard'; // Formatting components export { default as DocsTable, NewDocsCell } from "./formatting/DocsTable"; diff --git a/src/css/custom.css b/src/css/custom.css index 5dcb2591d8..c504f55e2f 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -29,17 +29,18 @@ } html[data-theme="dark"] { - --ifm-color-primary: #bfdbfe; - --ifm-background-color: #141414; - --ifm-footer-background-color: #000000; - --ifm-navbar-background-color: #000000; + --ifm-color-primary: #4fddbf; + --ifm-color-primary-darker: #60A5FA; + --ifm-background-color: #161723; + --ifm-footer-background-color: #161723; + --ifm-navbar-background-color: #161723; --ifm-color: #f9fafb; --ifm-preview-text: #f9fafb; - --ifm-link-color: #f9fafb; - --ifm-link-hover-color: var(--ifm-color-primary); - --alert--competency-background: #00474a; - --alert--copycode-background: #29005e; - --alert--info-background: #353536; + --ifm-link-color: #4fddbf; + --ifm-link-hover-color: var(--ifm-color-primary-darker); + --alert--competency-background: #161723; + --alert--copycode-background: #161723; + --alert--info-background: #161723; --feedback-primary-color: #fff; /* title on button AND submit button color*/ --feedback-light-color: #fff; /* text entry field color */ --feedback-dark-color: #ccc; /* overall backsplash color */ @@ -56,37 +57,26 @@ html[data-theme="dark"] { --collapse-button-bg-color-dark: transparent; --ifm-badge-background-color: #b2e7ea; --ifm-badge-background-color: hsl(210deg, 15%, 20%); */ - --ifm-card-background-color: #1a1a1a; + --ifm-card-background-color: #161723; /* --card-color: var(--ifm-color-primary-dark); */ - --docusaurus-highlighted-code-line-bg: rgb(57, 104, 77); + --docusaurus-highlighted-code-line-bg: #161723; --tag-background-color: var(--tag-background-color-dark); --tag-text-color: var(--tag-text-color-dark); } html[data-theme="light"] { --ifm-color-primary: #1d4ed8; - --ifm-background-color: #f9fafb; + --ifm-background-color: #ffffff; + --ifm-background-surface-color: #ffffff; --ifm-footer-background-color: #ffffff; --ifm-navbar-background-color: #ffffff; - /* --ifm-color: var(--ifm-color-primary-dark); */ - --ifm-link-color: #111827; - --ifm-link-hover-color: var(--ifm-color-primary); + --ifm-color: #111827; + --ifm-link-color: #1d4ed8; + --ifm-link-hover-color: #1e40af; --ifm-preview-text: #141414; --alert--competency-background: #a8fcff; --alert--copycode-background: #e0cdfa; --alert--info-background: #ebeded; - /* --ifm-menu-color-active: var(--ifm-color-primary); - --ifm-navbar-link-hover-color: var(--ifm-color-primary); - --ifm-toc-link-color: var(--ifm-color-primary-dark); - --ifm-blockquote-color: #000000; - --ifm-color-emphasis-300: #505050; */ - /* --ifm-code-background: var(--ifm-color-primary-lightest); */ - /* --ifm-color-input-background: #ffffff; - /* --ifm-color: var(--ifm-color-primary-dark); - --ifm-background-color: rgb(249, 250, 251); - --ifm-footer-background-color: #ffffff; - --ifm-card-background-color: #ffffff; - --ifm-badge-background-color: rgba(239, 246, 255); */ --card-color: #ffffff; --docusaurus-highlighted-code-line-bg: rgb(57, 104, 77); --tag-background-color: var(--tag-background-color-light); @@ -99,8 +89,17 @@ html[data-theme="light"] { a, a:hover { - text-decoration: underline; - text-underline-offset: 2px; + text-decoration: none; +} + +/* Global link styling to match Learn More links */ +a { + color: var(--ifm-link-color); + transition: color 0.2s ease; +} + +a:hover { + color: var(--ifm-link-hover-color); } .alert { @@ -566,9 +565,12 @@ h1 { display: flex; } +/* .list-logo img { filter: grayscale(1); } +*/ + .w-third { width: 1/3; @@ -646,7 +648,7 @@ h1 { font-size: 0.75rem; color: #6d28d9; background-color: #ede9fe; - border-radius: 0.125rem; + border-radius: 0; padding: 0 0.5rem; width: fit-content; } @@ -657,7 +659,7 @@ h1 { font-size: 0.75rem; color: #1d4ed8; background-color: #dbeafe; - border-radius: 0.125rem; + border-radius: 0; padding: 0 0.5rem; width: fit-content; } @@ -692,7 +694,7 @@ h1 { color: #2563eb; background-color: #eff6ff; border-width: 1px; - border-radius: 0.5rem; + border-radius: 0; border-color: #2563eb; border-style: solid; padding: 1.2rem 1.25rem 0.25rem 1.25rem; @@ -740,7 +742,7 @@ h1 { .main-card { position: relative; width: 100%; - border-radius: 20px; + border-radius: 0; border: 2px solid var(--ifm-link-color); background-color: var(--ifm-background-color); padding: 32px; @@ -805,26 +807,24 @@ h1 { } .cloud-button { - font-feature-settings: "clig" off, "liga" off; - font-family: Noto Sans Mono; - font-style: normal; - font-size: 16px; - font-weight: 500; - line-height: 24px; display: flex; - padding: 16px 24px; + padding: 6px 12px; justify-content: center; align-items: center; gap: 10px; - border-radius: 8px; - background: linear-gradient(255deg, #444ce7 0%, #b664ff 100%); + border-radius: 4px; + background: linear-gradient(255.4deg, #444CE7 0%, #B664FF 100%); cursor: pointer; border: 0px; - color: var(--White, #fff); + color: #FFFFFF; + text-decoration: none; + transition: opacity 0.2s ease; + margin-top: 24px; + font-size: 13px; } -.cloud-button { - text-decoration: none; +.cloud-button:hover { + opacity: 0.9; } .highlight { @@ -1193,3 +1193,741 @@ code { z-index: 10; } +/* Grid layout for problem sections */ +.grid { + display: grid; + gap: 1rem; +} + +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +@media (max-width: 768px) { + .grid-cols-2 { + grid-template-columns: 1fr; + } +} + +/* SDK logos section */ +.sdk-logos { + display: flex; + flex-wrap: wrap; + gap: 2rem; + margin: 2rem 0; + align-items: center; + justify-content: center; +} + +.sdk-logos img { + height: 32px; + width: auto; + opacity: 0.8; + transition: opacity 0.2s ease; +} + +.sdk-logos img:hover { + opacity: 1; +} + +/* Next steps navigation */ +.next-steps { + margin: 2rem 0; + padding: 1rem; + border-top: 1px solid var(--ifm-color-emphasis-300); +} + +.next-link { + display: inline-flex; + align-items: center; + color: var(--ifm-link-color); + text-decoration: none; + font-weight: 500; +} + +.next-link:hover { + color: var(--ifm-link-hover-color); +} + +/* Feedback section */ +.feedback-buttons { + display: flex; + gap: 1rem; + margin: 1rem 0; +} + +.feedback-button { + padding: 0.5rem 1rem; + border: 1px solid var(--ifm-color-emphasis-300); + border-radius: 0.5rem; + background: transparent; + cursor: pointer; + transition: all 0.2s; +} + +.feedback-button:hover { + background: var(--ifm-color-emphasis-100); +} + +/* Introduction page styles */ +.theme-doc-markdown h1 { + font-size: 2.5rem; + font-weight: 300; + margin-bottom: 1rem; + letter-spacing: -0.5px; +} + +.theme-doc-markdown h2 { + font-size: 1.5rem; + font-weight: 500; + margin-top: 2.5rem; + margin-bottom: 1rem; +} + +.theme-doc-markdown p { + font-size: 1rem; + line-height: 1.6; + color: var(--ifm-color-emphasis-800); +} + +/* Pattern links */ +.pattern-links { + display: flex; + flex-direction: column; + gap: 0.5rem; + margin: 1.5rem 0; +} + +.pattern-link { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem 1.25rem; + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 0; + color: var(--ifm-color); + text-decoration: none; + font-weight: 400; + transition: all 0.2s ease; +} + +html[data-theme='dark'] .pattern-link { + background-color: #1C2128; + border-color: #30363D; +} + +.pattern-link:hover { + background-color: var(--ifm-color-emphasis-100); + text-decoration: none; + transform: translateY(-1px); +} + +html[data-theme='dark'] .pattern-link:hover { + background-color: #22272E; +} + +.pattern-link .arrow { + color: var(--ifm-color-emphasis-600); + font-family: monospace; +} + +.pattern-link:hover .arrow { + transform: translateX(4px); + transition: transform 0.2s ease; +} + +/* Next section */ +.next-section { + margin-top: 2rem; + padding-top: 1rem; + border-top: 1px solid var(--ifm-color-emphasis-200); +} + +.next-section a { + color: var(--ifm-color); + text-decoration: none; + font-weight: 400; +} + +.next-section a:hover { + color: var(--ifm-link-hover-color); +} + +/* SDK Grid */ +.sdk-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1rem; + margin: 2rem 0; +} + +@media (max-width: 768px) { + .sdk-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +.sdk-card { + display: flex; + align-items: center; + justify-content: center; + padding: 1.5rem; + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 0; + transition: all 0.2s ease; +} + +html[data-theme='dark'] .sdk-card { + background-color: #1C2128; + border-color: #30363D; +} + +.sdk-card:hover { + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.sdk-card img { + height: 32px; + width: auto; + opacity: 0.8; + transition: opacity 0.2s ease; +} + +.sdk-card:hover img { + opacity: 1; +} + +/* Pattern Grid */ +.pattern-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.5rem; + margin: 2rem 0; +} + +@media (max-width: 768px) { + .pattern-grid { + grid-template-columns: 1fr; + } +} + +.pattern-card { + display: block; + padding: 2rem; + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 0; + color: var(--ifm-color); + text-decoration: none; + transition: all 0.2s ease; +} + +html[data-theme='dark'] .pattern-card { + background-color: #1C2128; + border-color: #30363D; +} + +.pattern-card:hover { + text-decoration: none; + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.pattern-content h3 { + font-size: 1.25rem; + font-weight: 500; + margin: 0 0 0.75rem 0; + color: var(--ifm-color); +} + +.pattern-content p { + font-size: 0.875rem; + margin: 0; + color: var(--ifm-color-emphasis-700); + line-height: 1.5; +} + +/* CTA Section */ +.cta-container { + margin: 3rem 0 2rem; +} + +.cta-link { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1.5rem 2rem; + background-color: var(--ifm-background-surface-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 8px; + color: var(--ifm-color); + text-decoration: none; + transition: all 0.3s ease; +} + +html[data-theme='dark'] .cta-link { + background-color: #1C2128; + border-color: #30363D; +} + +.cta-link:hover { + text-decoration: none; + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); + border-color: var(--ifm-color-primary); +} + +.cta-content { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 1.25rem; +} + +.cta-prefix { + color: var(--ifm-color-emphasis-600); + font-weight: 400; +} + +.cta-title { + color: var(--ifm-color); + font-weight: 500; +} + +.cta-arrow { + font-size: 1.25rem; + font-family: monospace; + color: var(--ifm-color-primary); + margin-left: 2rem; + transition: transform 0.3s ease; +} + +.cta-link:hover .cta-arrow { + transform: translateX(8px); +} + +.features-intro { + font-size: 1.2rem; + line-height: 1.6; + color: var(--ifm-color-emphasis-700); + margin-bottom: 2rem; + max-width: 800px; +} + +.feature-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 1.5rem; + margin-bottom: 3rem; +} + +.feature-card { + display: flex; + flex-direction: column; + justify-content: space-between; + background: var(--ifm-card-background-color); + padding: 1.5rem; + transition: all 0.3s ease; + border: 1px solid var(--ifm-color-emphasis-200); + height: 100%; +} + +.feature-card:hover { + transform: translateY(-5px); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1); + border-color: var(--ifm-color-primary); +} + +.feature-icon { + font-size: 2rem; + margin-bottom: 1rem; +} + +.feature-card h3 { + font-size: 1.25rem; + margin-bottom: 0.75rem; + color: var(--ifm-color-emphasis-900); +} + +.feature-card p { + color: var(--ifm-color-emphasis-600); + margin-bottom: 0.5rem; + flex-grow: 1; +} + +.feature-link { + color: var(--ifm-color-primary); + text-decoration: none; + font-weight: 500; + display: inline-flex; + align-items: center; + transition: color 0.2s ease; +} + +.feature-link:hover { + color: var(--ifm-color-primary-darker); + text-decoration: none; +} + +.release-stages-note { + margin: 2rem 0; + padding: 1rem; + background: var(--ifm-color-emphasis-100); + font-size: 0.9rem; + color: var(--ifm-color-emphasis-700); +} + +@media (max-width: 768px) { + .feature-grid { + grid-template-columns: 1fr; + } + .features-intro { + font-size: 1.1rem; + } +} + +.getting-started-grid { + display: flex; + flex-direction: column; + gap: 2rem; + max-width: 600px; + margin: 2rem auto 0 auto; +} +.getting-started-card { + background: #fff; + border: 1.5px solid #243349; + padding: 2rem 2rem 1.5rem 2rem; + box-shadow: 0 2px 8px rgba(0,0,0,0.04); + margin: 0 auto; + width: 100%; +} +html[data-theme='dark'] .getting-started-card { + background: #161723; + border: 1.5px solid #243349; +} +.activity-badge { + display: inline-block; + font-size: 0.85rem; + font-weight: 600; + border-radius: 8px; + padding: 0.2rem 0.75rem; + margin-bottom: 1rem; + color: #fff; +} +.badge-5min { background: #FF6BFF; } +.badge-10min { background: #818cf8; } +.badge-20min { background: #f472b6; } +.getting-started-card h2 { + font-size: 2.25rem; + font-weight: 300; + margin-bottom: 0.5rem; +} +.getting-started-card p { + color: var(--ifm-color-emphasis-700); + margin-bottom: 1.5rem; +} +.getting-started-btn { + display: inline-flex; + align-items: center; + justify-content: center; + text-align: center; + border-radius: 8px; + border-width: 2px; + border-style: solid; + border-image: linear-gradient(255.4deg, #444CE7 0%, #B664FF 100%); + border-image-slice: 1; + padding: 0.5rem 1.25rem; + font-size: 1rem; + font-weight: 500; + background: none; + color: var(--ifm-color-primary); + text-decoration: none; + transition: background 0.2s, color 0.2s; + line-height: 1; + box-sizing: border-box; + vertical-align: middle; +} +.getting-started-btn:hover { + background: var(--ifm-color-primary); + color: #fff; +} +.arrow { + font-size: 1.1em; + margin-left: 0.5em; +} +@media (max-width: 700px) { + .getting-started-grid { + padding: 0 1rem; + } + .getting-started-card { + padding: 1.25rem 1rem 1rem 1rem; + } +} + +.setup-local-gradient { + border: 2px solid transparent; + background-image: linear-gradient(#fff, #fff), linear-gradient(90deg, #444CE7 0%, #B664FF 100%); + background-origin: border-box; + background-clip: padding-box, border-box; +} +html[data-theme='dark'] .setup-local-gradient { + background-image: linear-gradient(#161723, #161723), linear-gradient(90deg, #444CE7 0%, #B664FF 100%); +} +.setup-local-gradient { + border-width: 2px; +} +.getting-started-btn { + font-size: 0.85rem; + padding: 0.5rem 1rem; + border-radius: 6px; + line-height: 1; +} + +.primary-btn { + width: 215px; + height: 53px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 8px; + border-width: 2px; + border-style: solid; + border-image: linear-gradient(255.4deg, #444CE7 0%, #B664FF 100%); + border-image-slice: 1; + padding: 14px 24px; + gap: 10px; + font-size: 1.5rem; + font-weight: 500; + background: none; + color: var(--ifm-color-primary); + text-decoration: none; + transition: background 0.2s, color 0.2s; + line-height: normal; +} +.primary-btn .arrow { + font-size: 1.5rem; + margin-left: 16px; + display: inline-block; + vertical-align: middle; +} +.primary-btn:hover { + background: var(--ifm-color-primary); + color: #fff; +} + +/* New Getting Started Page Styles - Modern Design */ +.getting-started-grid-new { + display: flex; + flex-direction: column; + gap: 1.5rem; + max-width: 680px; + margin: 3rem auto 0 auto; + padding: 0 1rem; +} + +.getting-started-card-new { + background: var(--ifm-card-background-color); + border: 1px solid var(--ifm-color-emphasis-200); + border-radius: 12px; + padding: 2rem; + transition: all 0.3s ease; + position: relative; +} + +html[data-theme='dark'] .getting-started-card-new { + background: #1a1b23; + border: 1px solid #2d2e3f; +} + +.getting-started-card-new.featured { + border: 2px solid transparent; + background-image: linear-gradient(#1a1b23, #1a1b23), linear-gradient(135deg, #444CE7 0%, #B664FF 100%); + background-origin: border-box; + background-clip: padding-box, border-box; +} + +html[data-theme='light'] .getting-started-card-new.featured { + background-image: linear-gradient(#fff, #fff), linear-gradient(135deg, #444CE7 0%, #B664FF 100%); +} + +.getting-started-card-new:hover { + transform: translateY(-2px); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); +} + +html[data-theme='dark'] .getting-started-card-new:hover { + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); +} + +.activity-badge-new { + display: inline-block; + font-size: 0.75rem; + font-weight: 600; + border-radius: 16px; + padding: 0.25rem 0.75rem; + margin-bottom: 1.25rem; + color: #fff; + text-transform: lowercase; +} + +.activity-badge-new.badge-5min { + background: linear-gradient(135deg, #FF6BFF 0%, #FF8E8E 100%); +} + +.activity-badge-new.badge-10min { + background: linear-gradient(135deg, #818cf8 0%, #a78bfa 100%); +} + +.activity-badge-new.badge-20min { + background: linear-gradient(135deg, #f472b6 0%, #fb7185 100%); +} + +.getting-started-card-new h2 { + font-size: 1.5rem; + font-weight: 600; + margin-bottom: 1rem; + color: var(--ifm-heading-color); + line-height: 1.3; +} + +.getting-started-card-new p { + color: var(--ifm-color-emphasis-700); + margin-bottom: 1.5rem; + line-height: 1.5; + font-size: 0.95rem; +} + +html[data-theme='dark'] .getting-started-card-new p { + color: #a1a1aa; +} + +.getting-started-btn-new { + display: inline-flex; + align-items: center; + gap: 0.5rem; + background: linear-gradient(135deg, #444CE7 0%, #B664FF 100%); + color: white; + padding: 0.75rem 1.25rem; + border-radius: 8px; + text-decoration: none; + font-weight: 600; + font-size: 0.875rem; + transition: all 0.3s ease; + border: none; +} + +.getting-started-btn-new:hover { + transform: translateY(-1px); + box-shadow: 0 8px 24px rgba(68, 76, 231, 0.4); + text-decoration: none; + color: white; +} + +.getting-started-btn-new svg { + transition: transform 0.3s ease; +} + +.getting-started-btn-new:hover svg { + transform: translateX(2px); +} + +@media (max-width: 768px) { + .getting-started-grid-new { + padding: 0 1rem; + margin-top: 2rem; + } + + .getting-started-card-new { + padding: 1.5rem; + } + + .getting-started-card-new h2 { + font-size: 1.25rem; + } +} + +/* Topics Covered Section */ +.topics-covered-section { + margin: 2rem 0; +} + +.topics-covered-title { + font-size: 1.5rem; + font-weight: 600; + margin-bottom: 2rem; + color: var(--ifm-heading-color); +} + +.topics-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1rem; + margin-bottom: 2rem; +} + +.topic-card { + display: flex; + align-items: center; + padding: 1rem 1.5rem; + background: var(--ifm-card-background-color); + border: 2px solid transparent; + border-radius: 8px; + background-image: linear-gradient(var(--ifm-card-background-color), var(--ifm-card-background-color)), + linear-gradient(135deg, #444CE7 0%, #B664FF 100%); + background-origin: border-box; + background-clip: padding-box, border-box; + text-decoration: none; + color: var(--ifm-color); + transition: all 0.3s ease; + cursor: pointer; +} + +html[data-theme='dark'] .topic-card { + background-image: linear-gradient(#161723, #161723), + linear-gradient(135deg, #444CE7 0%, #B664FF 100%); +} + +.topic-card:hover { + transform: translateY(-2px); + box-shadow: 0 8px 24px rgba(68, 76, 231, 0.2); + text-decoration: none; + color: var(--ifm-color); +} + +.topic-title { + flex: 1; + font-weight: 500; + font-size: 1rem; +} + +.topic-arrow { + margin-left: auto; + color: var(--ifm-color-emphasis-600); + font-size: 1.2rem; + transition: transform 0.3s ease; +} + +.topic-card:hover .topic-arrow { + transform: translateX(4px); +} + +@media (max-width: 768px) { + .topics-grid { + grid-template-columns: 1fr; + } + + .topic-card { + padding: 0.875rem 1.25rem; + } + + .topic-title { + font-size: 0.9rem; + } +} + +.badge-5min { background: #FF6BFF; } +.badge-10min { background: #FF6BFF; } +.badge-20min { background: #FF6BFF; } diff --git a/src/css/landing.css b/src/css/landing.css new file mode 100644 index 0000000000..cbdada05e3 --- /dev/null +++ b/src/css/landing.css @@ -0,0 +1,406 @@ +/* Dark Mode (Default) */ +:root { + --background-color: #161723; /* Exact background from Figma */ + --text-color: #FFFFFF; /* Pure white for headings */ + --card-background: #161723; /* Card background */ + --card-hover: #161723; /* Card hover state */ + --link-color: #CACBF9; /* Indigo/100 from Figma */ + --link-hover-color: #FFFFFF; /* Link hover - pure white */ + --border-color: #30363D; /* Border color */ + --section-gap: 1.5rem; + --card-padding: 1.25rem; + --heading-color: #FFFFFF; /* Pure white for headings */ + --subtext-color: #8B949E; + --icon-background: #161723; /* Icon background color */ + --icon-color: #3FB950; /* Icon color */ +} + +/* Light Mode */ +[data-theme="light"] { + --background-color: #FFFFFF; + --text-color: #111827; + --card-background: #FFFFFF; + --card-hover: #F9FAFB; + --link-color: #374151; + --link-hover-color: #111827; + --border-color: #E5E7EB; + --heading-color: #111827; + --subtext-color: #6B7280; + --icon-color: #3FB950; /* Keep the same green in light mode */ +} + +/* Global Styles */ +body { + background-color: var(--background-color); + margin: 0; + padding: 0; + font-family: "Aeonik", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} + +/* Docs Landing Page Styles */ +.docs-landing { + background: var(--background-color); + color: var(--text-color); + min-height: 100vh; + padding: 0; + font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} + +.docs-landing-header { + background: var(--background-color); + color: var(--text-color); + padding: 0; + font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} + +.docs-landing-header .container { + max-width: 100%; + width: 1280px; + margin: 0 auto; + padding: 3rem 1.5rem 0; +} + +.docs-landing-header h1 { + font-size: 3rem; + font-weight: 300; + margin-bottom: 3rem; + letter-spacing: -0.5px; + color: var(--heading-color); +} + +.docs-landing-header .description-section { + margin-bottom: 3rem; +} + +.docs-landing-header .description-section h4 { + font-size: 1rem; + font-weight: 600; + color: var(--heading-color); + margin-bottom: 1rem; + letter-spacing: 0.5px; +} + +.docs-landing-header .description-section p { + font-size: 1.125rem; + line-height: 1.6; + color: var(--subtext-color); + margin-bottom: 0; +} + +.docs-landing-header .fixed-size-logo { + width: 300px; + height: auto; + display: block; + margin: 0 0 2rem 0; +} + +/* Responsive styles for header */ +@media (max-width: 768px) { + .docs-landing-header .container { + padding: 2rem 1rem 0; + } + + .docs-landing-header h1 { + font-size: 2rem; + margin-bottom: 2rem; + } + + .docs-landing-header .description-section { + margin-bottom: 2rem; + } + + .docs-landing-header .description-section h4 { + font-size: 0.9rem; + } + + .docs-landing-header .description-section p { + font-size: 1rem; + } + + .docs-landing-header .fixed-size-logo { + width: 250px; + } +} + +.docs-landing .container { + max-width: 100%; + width: 1280px; + margin: 0 auto; + padding: 3rem 1.5rem 0; +} + +/* Banner Image */ +.docs-landing img[alt="SDK Logo Banner"] { + width: 1280px; + max-width: 100%; + height: auto; + margin-bottom: 2rem; +} + +/* SDK Logos */ +.sdk-logos { + display: flex; + justify-content: center; + gap: 2rem; + margin: 2rem 0; + flex-wrap: wrap; +} + +.sdk-logos img { + height: 32px; + width: auto; +} + +/* Main Grid Layout */ +.main-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: var(--section-gap); + margin-bottom: 2.5rem; +} + +/* Secondary Grid Layout */ +.secondary-grid { + margin: 2.5rem 0; +} + +.section-row { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: var(--section-gap); + margin-bottom: var(--section-gap); +} + +/* Learning Section */ +.learning-section { + margin-top: 4rem; + padding-top: 2.5rem; +} + +.learning-section h1 { + text-align: left; + margin-bottom: 5rem; + color: var(--heading-color); + font-family: "Aeonik", sans-serif; + font-size: 3.75rem; + font-weight: 300; + letter-spacing: -0.025em; + line-height: 1.1; +} + +.learning-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; +} + +/* Card Styles */ +.section-card { + background: var(--card-background); + border: 1px solid var(--border-color); + border-radius: 0; + padding: 1.5rem; + height: 100%; + transition: all 0.2s ease; + display: flex; + flex-direction: column; +} + +.section-card:hover { + background: var(--card-hover); + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +.section-header { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 0.75rem; + padding-bottom: 0.75rem; +} + +.section-icon-wrapper { + display: flex; + align-items: center; + justify-content: center; + width: 2.5rem; + height: 2.5rem; +} + +.section-icon { + stroke: var(--icon-color); + stroke-width: 2; + width: 1.5rem; + height: 1.5rem; +} + +.section-header h2 { + color: var(--heading-color); + font-family: "Aeonik", sans-serif; + font-size: 1.5rem; + font-weight: 300; + line-height: 1.1; + letter-spacing: 0; + margin: 0; +} + +/* Section Links */ +.section-links { + display: flex; + flex-direction: column; + gap: 1rem; + align-items: flex-start; +} + +.section-link { + color: var(--link-color); + font-family: "Aeonik", sans-serif; + font-size: 1rem; + font-weight: 300; + line-height: 1.1; + letter-spacing: 0; + text-decoration: none; + position: relative; + transition: all 0.3s ease; + width: fit-content; + display: inline-flex; +} + +.section-link:hover { + color: var(--link-hover-color); + text-decoration: underline; +} + +.section-link::after { + content: ''; + position: absolute; + width: 100%; + height: 1px; + bottom: -2px; + left: 0; + background-color: var(--link-hover-color); + transform: scaleX(0); + transform-origin: left; + transition: transform 0.3s ease; +} + +.section-link:hover::after { + transform: scaleX(1); +} + +/* Typography */ +.docs-landing h1 { + font-size: 2rem; + font-weight: 600; + color: var(--heading-color); + margin-bottom: 0.5rem; +} + +.docs-landing h2 { + font-size: 1.25rem; + font-weight: 600; + color: var(--heading-color); + margin: 0; +} + +.docs-landing p { + color: var(--subtext-color); + font-size: 0.875rem; + line-height: 1.5; + margin: 0; +} + +/* What is Temporal Section */ +.docs-landing h2[id="what-is-temporal"] { + font-size: 1.25rem; + margin-bottom: 0.5rem; + color: var(--heading-color); +} + +.docs-landing h2[id="what-is-temporal"] + p { + color: var(--subtext-color); + margin-bottom: 2.5rem; +} + +/* Get Started Button */ +.get-started-button { + display: inline-flex; + align-items: center; + margin-top: 1rem; + padding: 0.5rem 1rem; + background: linear-gradient(to right, #3FB950, #238636); + color: white; + text-decoration: none; + border-radius: 0.375rem; + font-size: 0.875rem; + font-weight: 500; + transition: opacity 0.2s; +} + +.get-started-button:hover { + opacity: 0.9; +} + +/* Responsive Design */ +@media (max-width: 1280px) { + .main-grid { + grid-template-columns: 1fr 1fr; + } +} + +@media (max-width: 1024px) { + .section-row { + grid-template-columns: repeat(2, 1fr); + } + + .section-row:last-child { + grid-template-columns: 1fr 1fr; + } + + .learning-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 768px) { + .main-grid { + grid-template-columns: 1fr; + } + + .section-row, + .section-row:last-child, + .learning-grid { + grid-template-columns: 1fr; + } + + .docs-landing .container { + padding: 0 1rem; + } +} + +/* Dark Mode Adjustments */ +[data-theme="dark"] .section-card { + background: var(--card-background); + border-color: var(--border-color); +} + +[data-theme="dark"] .section-header { + border-bottom-color: var(--border-color); +} + +[data-theme="dark"] .learning-section { + border-top-color: var(--border-color); +} + +.resource-img { + border-radius: 0; +} + +.cloud-button { + border-radius: 0; +} + +.highlight { + border-radius: 0; +} \ No newline at end of file diff --git a/src/theme/Navbar/index.js b/src/theme/Navbar/index.js new file mode 100644 index 0000000000..382ba4a96e --- /dev/null +++ b/src/theme/Navbar/index.js @@ -0,0 +1,6 @@ +import React from 'react'; +import Navbar from '@theme-original/Navbar'; + +export default function NavbarWrapper(props) { + return ; +} \ No newline at end of file diff --git a/static/homepage/Temporal_Symbol_dark.png b/static/homepage/Temporal_Symbol_dark.png new file mode 100644 index 0000000000..9ced11b399 Binary files /dev/null and b/static/homepage/Temporal_Symbol_dark.png differ diff --git a/static/homepage/Temporal_Symbol_light.png b/static/homepage/Temporal_Symbol_light.png new file mode 100644 index 0000000000..272412246d Binary files /dev/null and b/static/homepage/Temporal_Symbol_light.png differ diff --git a/static/homepage/background-101-courses.png b/static/homepage/background-101-courses.png new file mode 100644 index 0000000000..be56475bdd Binary files /dev/null and b/static/homepage/background-101-courses.png differ diff --git a/static/homepage/background-102-courses.png b/static/homepage/background-102-courses.png new file mode 100644 index 0000000000..1ac8843ade Binary files /dev/null and b/static/homepage/background-102-courses.png differ diff --git a/static/homepage/code-exchange.png b/static/homepage/code-exchange.png new file mode 100644 index 0000000000..599c970bdd Binary files /dev/null and b/static/homepage/code-exchange.png differ diff --git a/static/homepage/documentation-banner-dark.png b/static/homepage/documentation-banner-dark.png new file mode 100644 index 0000000000..df40771900 Binary files /dev/null and b/static/homepage/documentation-banner-dark.png differ diff --git a/static/homepage/documentation-banner.png b/static/homepage/documentation-banner.png new file mode 100644 index 0000000000..1e39f5fbd2 Binary files /dev/null and b/static/homepage/documentation-banner.png differ diff --git a/static/homepage/sdk-logos-with-ruby.png b/static/homepage/sdk-logos-with-ruby.png new file mode 100644 index 0000000000..23aaf40cc7 Binary files /dev/null and b/static/homepage/sdk-logos-with-ruby.png differ diff --git a/static/homepage/search-banner.png b/static/homepage/search-banner.png new file mode 100644 index 0000000000..afe4b1e21d Binary files /dev/null and b/static/homepage/search-banner.png differ diff --git a/static/img/assets/banner-dotnet-temporal.png b/static/img/assets/banner-dotnet-temporal.png index e712f4086c..8a4f49a733 100644 Binary files a/static/img/assets/banner-dotnet-temporal.png and b/static/img/assets/banner-dotnet-temporal.png differ diff --git a/static/img/assets/banner-go-temporal.png b/static/img/assets/banner-go-temporal.png index a76e09bd5d..d2c0287b69 100644 Binary files a/static/img/assets/banner-go-temporal.png and b/static/img/assets/banner-go-temporal.png differ diff --git a/static/img/assets/banner-java-temporal.png b/static/img/assets/banner-java-temporal.png index c91cb77b80..88e9e5d44c 100644 Binary files a/static/img/assets/banner-java-temporal.png and b/static/img/assets/banner-java-temporal.png differ diff --git a/static/img/assets/banner-php-temporal.png b/static/img/assets/banner-php-temporal.png index 0eb91bccdb..3094c45933 100644 Binary files a/static/img/assets/banner-php-temporal.png and b/static/img/assets/banner-php-temporal.png differ diff --git a/static/img/assets/banner-python-temporal.png b/static/img/assets/banner-python-temporal.png index b99a15a211..124433251a 100644 Binary files a/static/img/assets/banner-python-temporal.png and b/static/img/assets/banner-python-temporal.png differ diff --git a/static/img/assets/banner-typescript-temporal.png b/static/img/assets/banner-typescript-temporal.png index 31e596403f..11886cf560 100644 Binary files a/static/img/assets/banner-typescript-temporal.png and b/static/img/assets/banner-typescript-temporal.png differ diff --git a/static/img/assets/self_hosted_cloud.svg b/static/img/assets/self_hosted_cloud.svg new file mode 100644 index 0000000000..032f68273f --- /dev/null +++ b/static/img/assets/self_hosted_cloud.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/assets/ziggy.png b/static/img/assets/ziggy.png new file mode 100644 index 0000000000..6061c2cdf6 Binary files /dev/null and b/static/img/assets/ziggy.png differ diff --git a/static/img/sdks/svgs/ruby.svg b/static/img/sdks/svgs/ruby.svg index 46b970b943..d66228f93f 100644 --- a/static/img/sdks/svgs/ruby.svg +++ b/static/img/sdks/svgs/ruby.svg @@ -1,15 +1,6 @@ - - - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/static/img/sdks/svgs/sdk-box-logos/dotnet.svg b/static/img/sdks/svgs/sdk-box-logos/dotnet.svg new file mode 100644 index 0000000000..5116220593 --- /dev/null +++ b/static/img/sdks/svgs/sdk-box-logos/dotnet.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/sdks/svgs/sdk-box-logos/go.svg b/static/img/sdks/svgs/sdk-box-logos/go.svg new file mode 100644 index 0000000000..fdefe31b6d --- /dev/null +++ b/static/img/sdks/svgs/sdk-box-logos/go.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/sdks/svgs/sdk-box-logos/java.svg b/static/img/sdks/svgs/sdk-box-logos/java.svg new file mode 100644 index 0000000000..62d4525175 --- /dev/null +++ b/static/img/sdks/svgs/sdk-box-logos/java.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/img/sdks/svgs/sdk-box-logos/php.svg b/static/img/sdks/svgs/sdk-box-logos/php.svg new file mode 100644 index 0000000000..4a2c2e7d91 --- /dev/null +++ b/static/img/sdks/svgs/sdk-box-logos/php.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/img/sdks/svgs/sdk-box-logos/python.svg b/static/img/sdks/svgs/sdk-box-logos/python.svg new file mode 100644 index 0000000000..2d59a0af4c --- /dev/null +++ b/static/img/sdks/svgs/sdk-box-logos/python.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/img/sdks/svgs/sdk-box-logos/ruby.png b/static/img/sdks/svgs/sdk-box-logos/ruby.png new file mode 100644 index 0000000000..af1dc434d2 Binary files /dev/null and b/static/img/sdks/svgs/sdk-box-logos/ruby.png differ diff --git a/static/img/sdks/svgs/sdk-box-logos/ruby.svg b/static/img/sdks/svgs/sdk-box-logos/ruby.svg new file mode 100644 index 0000000000..b6b8d205db --- /dev/null +++ b/static/img/sdks/svgs/sdk-box-logos/ruby.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/img/sdks/svgs/sdk-box-logos/typescript.svg b/static/img/sdks/svgs/sdk-box-logos/typescript.svg new file mode 100644 index 0000000000..31c98dd6f5 --- /dev/null +++ b/static/img/sdks/svgs/sdk-box-logos/typescript.svg @@ -0,0 +1,4 @@ + + + +