Quick Start Tutorial
Build your first DeepChain workflow in under 5 minutes
Build Your First Workflow (5 Minutes)
Let's build a real workflow that fetches GitHub user data and logs it. You'll learn the fundamentals and see DeepChain in action.
Prerequisites
- DeepChain installed and running (Installation Guide)
- Web browser (Chrome, Firefox, Safari, or Edge)
Tip: This tutorial takes about 5 minutes if you follow along step-by-step.
Step 1: Open DeepChain
Go to http://localhost:3000 in your browser. You should see the dashboard with a "Create Workflow" button.
Step 2: Create a New Workflow
- Click "Create Workflow"
- Enter name:
GitHub User Lookup - Click "Create"
You're now in the Workflow Editor. It looks like this:
┌─────────────────────────────────────────────────────────────┐
│ Toolbar: Save | Run | Debug | Execution History │
├──────────────────────────────────────────────────────────────┤
│ Node Palette │ │ Properties │
│ (Left) │ Canvas (Center) │ Panel │
│ │ │ (Right) │
│ - Start │ ┌──────────┐ │ │
│ - HTTP Req │ │ Start │ │ │
│ - Transform │ └──────────┘ │ │
│ - Log │ │ │
│ - ... │ │ │
└──────────────────────────────────────────────────────────────┘
Step 3: Add an HTTP Request Node
The Start node is already on the canvas (every workflow has one).
Now let's add an HTTP Request node:
- In the left sidebar, find "HTTP Request" under the "Integration" section
- Drag it onto the canvas
- Connect Start node's output port (the dot on the right) to the HTTP Request node's input port (the dot on the left)
You should see a line connecting them.
Step 4: Configure the HTTP Request
Click on the HTTP Request node. The Properties panel on the right updates to show its settings.
Fill in these fields:
URL: https://api.github.com/users/octocat
Method: GET
Headers:
Accept: application/json
You can leave everything else as default. This node will fetch public data about a GitHub user.
Expected Output:
{
"login": "octocat",
"name": "The Octocat",
"followers": 3938,
"repos": 27
}
Step 5: Add a Transform Node
Let's extract the fields we care about:
- Drag a "Transform" node from the palette
- Connect HTTP Request's output to Transform's input
Click on the Transform node and enter this configuration:
{
"username": "{{ http_request_1.response.body.login }}",
"name": "{{ http_request_1.response.body.name }}",
"followers": "{{ http_request_1.response.body.followers }}"
}
Notice the {{ }} syntax—this references data from the previous node. When the workflow runs, it will extract these three fields from the GitHub API response.
What this does:
- Takes the HTTP response
- Extracts just the fields we want
- Creates a clean object:
{ username, name, followers }
Step 6: Add a Log Node
Finally, let's output the result:
- Drag a "Log" node from the palette
- Connect Transform's output to Log's input
Click on the Log node and enter:
Message: {{ transform_1.output.username }} has {{ transform_1.output.followers }} followers
Level: info
When you run the workflow, this will print: octocat has 3938 followers
Your Complete Workflow
It should look like this:
┌─────────┐ ┌──────────────┐ ┌───────────┐ ┌─────┐
│ Start │ ─────▶│ HTTP Request │ ─────▶│ Transform │ ─────▶│ Log │
└─────────┘ └──────────────┘ └───────────┘ └─────┘
(trigger) (fetch data) (reshape data) (output result)
Step 7: Save the Workflow
Click "Save" in the toolbar.
You should see a confirmation message. If you get validation errors (red indicators on nodes), check that all required fields are filled in.
Step 8: Run Your Workflow
Click "Run" in the toolbar.
Watch the nodes light up as they execute:
- Start node runs first (always)
- HTTP Request fetches from GitHub
- Transform reshapes the data
- Log prints the result
Within a few seconds, all nodes should turn green (success).
View Your Results
After execution completes:
Click on any node to see what it output. Click on the Transform node and you'll see something like:
{ "username": "octocat", "name": "The Octocat", "followers": 3938 }Check the Execution History by clicking the "Execution History" tab in the toolbar. You'll see a log of every run.
Click on a run to see detailed logs and timing information for each node.
What You Just Built
You created a data pipeline workflow that:
- Fetches data from an external API
- Transforms and cleans the data
- Logs the result
This is the foundation for real-world automations. In production, instead of logging, you might:
- Send a Slack message
- Write to a database
- Trigger another workflow
- Send an email
Understanding Expressions
You used expressions like {{ http_request_1.response.body.login }}. Here's how they work:
| Expression | What It Does |
|---|---|
{{ http_request_1.response.body }} |
Gets the entire response body |
{{ http_request_1.response.body.login }} |
Gets just the login field |
{{ transform_1.output }} |
Gets the Transform node's output |
{{ transform_1.output.username }} |
Gets the username field from Transform |
Think of expressions as: reference previous node outputs by name and dig into their fields.
Note: Node IDs are auto-generated based on the node type and order (e.g.,
http_request_1,transform_1). Check the Properties panel to see a node's ID.
Next Steps
You've mastered the basics. Here's what to explore:
Learn Core Concepts
Core Concepts Guide → — Deep dive into workflows, nodes, and execution.
Explore More Nodes
Node Reference → — 50+ nodes for HTTP, databases, AI, approvals, and more.
Connect External Services
Connectors Guide → — Integrate with Slack, Salesforce, Shopify, AWS, and 10+ others.
Build Advanced Workflows
- Approval Workflows — Add human approval steps
- AI Integration — Use OpenAI, Claude, or Gemini
- Error Handling — Handle failures gracefully
Deploy to Production
Deployment Guide → — Deploy to AWS, GCP, Azure, or self-hosted.
Quick Reference: Common Expressions
// HTTP response data
{{ http_request_1.response.body }}
// Nested fields
{{ http_request_1.response.body.user.email }}
// Combine text and data
Hello {{ transform_1.output.name }}!
// Array access
{{ loop_1.current.id }}
// Current loop index
{{ loop_1.index }}
// String functions
{{ upper(username) }}
{{ lower(email) }}
{{ trim(name) }}
// Math functions
{{ sum(prices) }}
{{ round(amount, 2) }}
// Conditional logic
{{ if(count > 5, "yes", "no") }}
Troubleshooting
"Expression not working"
- ✓ Check the node ID is correct (hover over the node—it shows the ID)
- ✓ Verify the node actually ran (it should have a green checkmark)
- ✓ Click the Properties panel and look for an expression preview
"Workflow won't save"
- ✓ Check for red validation indicators on nodes
- ✓ Hover over red indicators to see what's missing
- ✓ Make sure all required fields are filled
"Node execution failed"
- ✓ Click the failed node to see the error message
- ✓ Check the Execution History for detailed logs
- ✓ Verify the URL or configuration is correct
What's Next?
You're ready to build real workflows. Check out Core Concepts to understand everything at a deeper level, then explore the Node Reference to see all the possibilities.