Skip to main content

The open-source toolkit for interactive Kick.com streams — bots, game integrations, overlays & clip automation.

Project description

🔥 KickForge

The open-source toolkit for interactive Kick.com streams.

Build bots, connect games, automate clips, and create real-time overlays — all with Python.

PyPI License: MIT Python 3.11+


What is KickForge?

KickForge is a modular Python toolkit that lets you build interactive experiences on Kick.com. It handles the boring parts (OAuth, webhooks, API calls) so you can focus on the fun parts (making your stream chaotic, engaging, and profitable).

Packages

Package What it does
kickforge-core OAuth 2.1, webhook server, event bus, REST API client
kickforge-bot Chat commands, loyalty/XP, moderation, polls, plugins
kickforge-gsi Game integrations — CS2, Minecraft, GTA via RCON/API
kickforge-clip Auto-detect hype moments, cut clips, export to Shorts
kickforge-overlay Real-time OBS widgets via WebSocket

Quick Start

pip install kickforge

Then scaffold a project and run:

kickforge init my-bot
cd my-bot
# Edit config.yaml with your Kick Dev credentials
python bot.py

30-Second Bot

from kickforge_core import KickApp

app = KickApp(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)

@app.on("chat.message.sent")
async def on_chat(event):
    if event.message == "!ping":
        await app.say("pong! 🏓")

@app.on("kicks.gifted")
async def on_gift(event):
    await app.say(f"🔥 {event.gifter_username} sent {event.kicks_amount} kicks!")

app.run(port=8420)

Interactive Gaming (CS2 Example)

from kickforge_core import KickApp

app = KickApp(client_id="...", client_secret="...")

@app.on("kicks.gifted")
async def on_gift(event):
    if event.kicks_amount >= 50:
        # Send RCON command to your CS2 server
        execute_rcon("sv_gravity 200")  # Low gravity!
        await app.say(f"🪐 {event.gifter_username} activated LOW GRAVITY!")

app.run()

See examples/cs2_interactive.py for a full interactive CS2 setup with tier-based actions.

Architecture

Kick.com ──webhook──▶ KickForge Core ──events──▶ Your Code
                           │                        │
                      Event Bus              Game Adapters
                      REST API               OBS Overlays
                      Auth Manager           Clip Pipeline

Everything flows through the Event Bus. You register handlers with @app.on("event_type") and KickForge routes events to your code. No polling, no WebSocket management, no token refresh headaches.

Supported Kick Events

Event Trigger
chat.message.sent Someone sends a chat message
channel.followed New follower
channel.subscription.new New subscriber
channel.subscription.renewal Sub renewal
channel.subscription.gifts Gift subs
kicks.gifted Kicks (coins) gifted
livestream.status.updated Stream goes live/offline
moderation.banned User banned

Bot Setup

To let your bot send chat messages (not just listen), you need a user access token with chat:write scope. KickForge has a built-in OAuth flow that handles this in under a minute.

1. Register the callback URL in your Kick Dev App

Go to kick.com/settings/developer and add this to your app's Redirect URIs:

http://localhost:8421/auth/callback

2. Run the auth flow

kickforge auth

This will:

  • Start a tiny local server on port 8421
  • Open your browser to Kick's authorize page (with PKCE)
  • After you click Approve, save the token to ~/.kickforge/tokens.json

You'll see:

Token saved to /Users/you/.kickforge/tokens.json
Your bot can now send chat messages.

3. Run your bot

python examples/minimal_bot.py

Now the bot both listens (via Pusher WebSocket) AND writes to chat. Tokens auto-refresh in the background, so you only need to run kickforge auth once.

Troubleshooting: If chat sending still returns 401, make sure:

  • Your Kick Dev App has chat:write scope enabled
  • You clicked Approve in the browser (not Deny)
  • The callback URL in the Kick dashboard exactly matches http://localhost:8421/auth/callback

Run kickforge auth again to re-authorize at any time.


First Real Test

End-to-end in 5 minutes: wire up KickForge to the real Kick API and see a live event arrive.

1. Install and configure

pip install kickforge
cp .env.example .env

Edit .env with your Kick Developer credentials (get them at kick.com/settings/developer):

KICK_CLIENT_ID=your_client_id_here
KICK_CLIENT_SECRET=your_client_secret_here
KICK_BROADCASTER_ID=your_broadcaster_user_id_here

Your KICK_BROADCASTER_ID is the numeric user ID of the channel you want to receive events for. You can find it in your Kick Developer dashboard or by calling GET /public/v1/channels?slug=your_channel_name.

2. Start ngrok first

ngrok http 8420

Copy the HTTPS forwarding URL (e.g. https://a1b2c3.ngrok-free.app).

3. Set the webhook URL in Kick

Go to your Kick Developer App settings. Paste your ngrok URL with /webhook appended as the Webhook URL:

https://a1b2c3.ngrok-free.app/webhook

This is configured in the Kick dashboard, not in your .env file. Kick needs to know where to send events, and this is how you tell it.

4. Subscribe to events

python examples/subscribe_events.py

This tells the Kick API which events you want to receive. You should see output like:

Subscribing to 5 events for broadcaster 123456...
Done. Your webhook server will now receive these events.

5. Start the bot

python examples/minimal_bot.py

You should see the KickForge banner and "Waiting for Kick events...".

6. Send a test message

Open your Kick channel in a browser and type !ping in chat. Back in your bot terminal you should see:

Received webhook: type=chat.message.sent subscription=...
Executed command: !ping by your_username

The bot replies "pong!" in chat. You're live.


Setup Webhook (Development)

KickForge needs a public URL for Kick to send webhooks to. During development:

# Terminal 1: Run your bot
python bot.py

# Terminal 2: Expose to internet
ngrok http 8420

# Copy the ngrok URL (e.g. https://abc123.ngrok.io)
# Set it in Kick Dev settings: https://kick.com/settings/developer
# Webhook URL: https://abc123.ngrok.io/webhook

Project Structure

kickforge/
├── kickforge_core/     # OAuth, webhooks, events, API
├── kickforge_bot/      # Chat bot framework
├── kickforge_gsi/      # Game integrations (CS2, MC, GTA)
├── kickforge_clip/     # Auto clip pipeline
├── kickforge_overlay/  # OBS widgets
├── examples/           # Working examples
├── tests/              # Test suite
└── docs/               # Documentation

Contributing

KickForge is open source (MIT). Contributions welcome!

Roadmap

  • Core engine (OAuth, webhooks, events, API)
  • CLI scaffolding (kickforge init)
  • Bot framework (commands, loyalty, moderation, polls, plugins)
  • CS2 GSI adapter (read-only + RCON write)
  • Minecraft RCON adapter
  • Generic HTTP adapter (FiveM, custom games)
  • Auto-clip pipeline (heat detection, FFmpeg, Shorts formatter)
  • OBS overlay widgets (6 widgets via WebSocket)
  • PyPI release v0.1.0
  • Documentation site

License

MIT — do whatever you want with it. Build something cool.


Built by Yargitay | GitHub | PyPI — streaming on Kick, building tools for streamers.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kickforge-0.2.1.tar.gz (90.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kickforge-0.2.1-py3-none-any.whl (85.2 kB view details)

Uploaded Python 3

File details

Details for the file kickforge-0.2.1.tar.gz.

File metadata

  • Download URL: kickforge-0.2.1.tar.gz
  • Upload date:
  • Size: 90.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for kickforge-0.2.1.tar.gz
Algorithm Hash digest
SHA256 2a621013f5c80769a21b6b0d59d42ac5ae93e11c225f6e50067410c7c7c38b55
MD5 3a2b2d3609f20ef4e96b330f5c28f8f6
BLAKE2b-256 3fc3c4863898933b1247141886918e517a743ee57093de4181eab069ac334dfd

See more details on using hashes here.

File details

Details for the file kickforge-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: kickforge-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 85.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for kickforge-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2ab2328f1d9b6ddc2f9695185ffee4f9f9103bd577598303b26874877bc019da
MD5 db5e02dfa031a3a92bd8db6a7df3de17
BLAKE2b-256 5c2e53cdd69688bbbc48a3df719624ac51608a3be5fd9b99e27514d1f1842548

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page