***

title: SignalWire SDKs
subtitle: Install the SDK and build your first application.
description: Everything you need to install the SignalWire SDK, create your first voice AI agent, and connect it to the SignalWire platform.
slug: /
position: 0
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[installation]: /docs/server-sdks/guides/installation

[quick-start]: /docs/server-sdks/guides/quickstart

[development-environment]: /docs/server-sdks/guides/dev-environment

[exposing-agents]: /docs/server-sdks/guides/exposing-agents

## Supported Languages

The SignalWire Server SDK is available in multiple languages. Select the variant that matches your development environment.

<CardGroup cols={3}>
  <Card title="Python" icon="brands fa-python" href="/docs/server-sdks/reference/python" />

  <Card title="TypeScript" icon="brands fa-typescript" href="/docs/server-sdks/reference/typescript" />

  <Card title="Go" icon="brands fa-golang" href="https://github.com/signalwire/signalwire-go" />

  <Card title="Ruby" icon="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/docs/34f4f52aaa8000c8e6052b5b948b49c3a016be64fb8c2dfb4f852ec93b764a60/assets/icons/ruby.svg" href="https://github.com/signalwire/signalwire-ruby" />

  <Card title="Java" icon="brands fa-java" href="https://github.com/signalwire/signalwire-java" />

  <Card title="C#" icon="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/docs/4334376f87adfb8b19d69942728ce1cbb4ebefc157102197f138aa1ab6050fb9/assets/icons/csharp.svg" href="https://github.com/signalwire/signalwire-dotnet" />

  <Card title="PHP" icon="brands fa-php" href="https://github.com/signalwire/signalwire-php" />

  <Card title="Perl" icon="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/docs/c24043dd3829a1df68b7ff2366c937ee3fcbce107211b228af9ca6476798348e/assets/icons/perl.svg" href="https://github.com/signalwire/signalwire-perl" />

  <Card title="C++" icon="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/docs/6c567ceb71a54a82c2c9b2f0302d7a2f8dc4fe1f47ba61e283bd2772aa98af34/assets/icons/cpp.svg" href="https://github.com/signalwire/signalwire-cpp" />

  <Card title="Rust" icon="brands fa-rust" href="https://github.com/signalwire/signalwire-rust" />
</CardGroup>

## What You'll Learn

This chapter walks you through the complete setup process:

1. **Installation** - Install the SDK and verify it works
2. **Quick Start** - Build your first agent in under 5 minutes
3. **Development Environment** - Set up a professional development workflow
4. **Exposing Your Agent** - Make your agent accessible to SignalWire using ngrok

## Prerequisites

Before starting, ensure you have the following:

| Language   | Requirement | Package Manager |
| ---------- | ----------- | --------------- |
| Python     | 3.10+       | pip             |
| TypeScript | Node.js 18+ | npm             |

You'll also need:

* A **terminal/command line** interface
* A **text editor or IDE** (VS Code, etc.)
* (Optional) A **SignalWire account** for testing with real phone calls

## Time to Complete

| Section         | Time             |
| --------------- | ---------------- |
| Installation    | 5 min            |
| Quick Start     | 5 min            |
| Dev Environment | 10 min           |
| Exposing Agents | 10 min           |
| **Total**       | **\~30 minutes** |

## By the End of This Chapter

You will have:

* A working voice AI agent
* Accessible via public URL
* Ready to connect to SignalWire phone numbers

<Frame caption="Getting Started Overview">
  <img class="diagram" src="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/docs/1f47d3ed5d278bf121fce88e9764ea37a0aa0958c844dffe7df738b0266353bf/assets/images/sdks/diagrams/01_01_introduction_diagram1.webp" alt="Getting Started Overview." />
</Frame>

## What is the SignalWire SDK?

The SignalWire SDK lets you create **voice AI agents** - intelligent phone-based assistants that can:

* Answer incoming phone calls automatically
* Have natural conversations using AI
* Execute custom functions (check databases, call APIs, etc.)
* Transfer calls, play audio, and manage complex call flows
* Scale from development to production seamlessly

## How It Works

<Frame caption="High-Level Architecture">
  <img class="diagram" src="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/docs/c73bd2de15ea9a3bdde4b1f25eaa91b58c0cb4ad6a2205fde6d8d72df53161f0/assets/images/sdks/diagrams/01_01_introduction_diagram2.webp" alt="High-Level Architecture." />
</Frame>

**The flow:**

1. A caller dials your SignalWire phone number
2. SignalWire requests instructions from your agent (via HTTP)
3. Your agent returns **SWML** (SignalWire Markup Language) - a JSON document describing how to handle the call
4. SignalWire's AI talks to the caller based on your configuration
5. When the AI needs to perform actions, it calls your **SWAIG functions** (webhooks)
6. Your functions return results, and the AI continues the conversation

## Key Concepts

### Agent

An **Agent** is your voice AI application. It's a class that:

* Defines the AI's personality and behavior (via prompts)
* Provides functions the AI can call (SWAIG functions)
* Configures voice, language, and AI parameters
* Runs as a web server that responds to SignalWire requests

<Tabs>
  <Tab title="Python">
    ```python
    from signalwire import AgentBase

    class MyAgent(AgentBase):
        def __init__(self):
            super().__init__(name="my-agent")
            # Configure your agent here
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript
    import { AgentBase } from 'signalwire-agents';

    const agent = new AgentBase({ name: 'my-agent' });
    // Configure your agent here
    ```
  </Tab>
</Tabs>

### SWML (SignalWire Markup Language)

**SWML** is a JSON format that tells SignalWire how to handle calls. Your agent generates SWML automatically - you don't write it by hand.

```json
{
  "version": "1.0.0",
  "sections": {
    "main": [
      {"answer": {}},
      {"ai": {
        "prompt": {"text": "You are a helpful assistant..."},
        "SWAIG": {"functions": ["..."]}
      }}
    ]
  }
}
```

### SWAIG Functions

**SWAIG** (SignalWire AI Gateway) functions are tools your AI can use during a conversation. When a caller asks something that requires action, the AI calls your function.

<Tabs>
  <Tab title="Python">
    ```python
    @agent.tool(description="Look up a customer by phone number")
    def lookup_customer(args, raw_data=None):
        phone_number = args.get("phone_number", "")
        customer = database.find(phone_number)
        return FunctionResult(
            f"Customer: {customer.name}, Account: {customer.id}"
        )
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript
    agent.defineTool({
      name: 'lookup_customer',
      description: 'Look up a customer by phone number',
      parameters: {
        phone_number: { type: 'string', description: 'Phone number' }
      },
      handler: (args) => {
        const customer = database.find(args.phone_number);
        return new FunctionResult(
          `Customer: ${customer.name}, Account: ${customer.id}`
        );
      },
    });
    ```
  </Tab>
</Tabs>

## Next Steps

Now that you understand the basics, let's get your development environment set up:

1. [Installation][installation] - Install the SDK
2. [Quick Start][quick-start] - Build your first agent
3. [Development Environment][development-environment] - Professional setup
4. [Exposing Agents][exposing-agents] - Connect to SignalWire