Welcome to the official Telebugs manual. This guide will teach you how to set up and use Telebugs, a refreshingly simple and self-hosted error tracking tool compatible with the Sentry SDKs.
This manual (Telebugs) is available in multiple formats:
telebugs
command referenceThank you for choosing Telebugs!
Telebugs is a refreshingly simple error tracking tool designed to help you catch and fix production errors in real-time. Whether you’re building web apps, mobile apps, embedded systems, or games, Telebugs ensures you stay on top of issues before they impact your users.
It’s fully compatible with Sentry SDKs, meaning it works seamlessly with a wide range of languages and frameworks right out of the box.
Unlike cloud-based error tracking services, Telebugs is self-hosted — so you own your data, with no restrictions on the number of errors, projects, or team members. Track as much as you want, invite as many collaborators as you need, and maintain complete control over your infrastructure.
This manual will walk you through setting up Telebugs and making the most of its features.
Let’s get started on making your software more reliable than ever!
Telebugs adheres strictly to its guiding principles, which emphasize simplicity, security, and user control in error tracking. This approach addresses common challenges in modern software tools, where SaaS providers often impose escalating costs for basic functionality.
At the heart of Telebugs lies a simple idea: error tracking should be straightforward, secure, and entirely under your control. The Telebugs philosophy shapes every aspect of it, from its design to its deployment, ensuring it empowers developers without getting in their way.
Telebugs is built on the following pillars.
Error tracking shouldn’t require complex setups or steep learning curves. Telebugs is deliberately designed to be simple. Simple to install, simple to use, and simple to maintain. The less is more principle is reflected at each level of Telebugs.
The goal of Telebugs is not to impress you — it’s to perform reliably.
Why? Because reliable tools quietly do the job without fanfare. Have you ever
been excited about cd
’ing into a directory? That’s the level of
dependability Telebugs aims to achieve.
Software giants try to scare you into thinking that as soon as you save a file on disk, it evaporates the next instant unless it’s replicated, backed up, and prayed upon. This is true. To some degree. And that degree is what they disproportionately exploit and artificially inflate. Yes, you need to do backups, but it’s not as scary or complex as it seems. You can do it without a sysadmin.
You don’t need Kubernetes to run Telebugs (although some Telebugs users still do it). You can start on the cheapest Hetzner VPS and scale up your instance as you go. Telebugs won’t scale infinitely, but it will cover the majority of your needs for the entire lifecycle of most indie and medium business projects.
Telebugs strives to become
finished
software. Imagine if cd
required an account? Atrocious. How could it
even end up like that? Well, that’s what inevitably happens with all
software. It grows and grows indefinitely, adding more features (asked
for or not), and once the board realizes there’s not much left to add,
they might even allow you to cd
with a guest account. This is not
Telebugs.
Telebugs is built with proven and reliable technologies. Understanding the underlying stack is valuable because when you purchase Telebugs, you also get its full source code that you will own for life. You can even modify the source code however you want (as long as you don’t share it, because Telebugs is not open source (See Software License Agreement)).
Telebugs is built with the following technologies:
That’s all! Error processing can be that simple!
So is it just for Rails devs? No! You don’t have to modify the code or even touch it at all. You can read it, of course. It’s all pure Ruby, probably the most programmer-friendly syntax to read. It almost reads like English.
And if you’re not familiar with it, just pair up with an LLM of your choice and vibe code your way. That said, I don’t expect you to do that because Telebugs aims to ship all the necessities.
Telebugs isn’t trying to change the world. It’s trying to leave you alone — and that’s the point.
Since Telebugs is self-hosted, you’ll need to have a few things ready before getting started:
Note: New to self-hosting? Don’t worry — the installer handles everything for you: Docker installation, configuration, and even the TLS certificate. Just run a single command, sit back, and sip a cup of tea.
Telebugs can run on nearly any hardware, including a VPS, cloud server, home
server, or even a Raspberry Pi. It supports
both AMD64
(also known as x86-64
, x64
, x86_64
, and
Intel 64) and ARM64
(also known as AArch64
) architectures. In
general, if Docker can run on it, Telebugs can too.
Telebugs is compatible with over 100 programming languages and frameworks through Sentry SDKs, including popular choices like JavaScript (Node.js, React, Angular), Python (Django, Flask), Ruby (Rails), Java (Spring), PHP (Laravel), .NET (ASP.NET Core), and Go. For a complete list of supported platforms, see Supported platforms.
When deciding how powerful your machine needs to be, consider the following table:
CPU | Est. max errors/second | Est. max errors/day |
---|---|---|
2 | 30 | 2,592,000 |
4 | 60 | 5,184,000 |
8 | 120 | 10,368,000 |
16 | 240 | 20,736,000 |
Throughput depends on your machine’s CPU and RAM. The table above provides rough estimates of how many errors Telebugs can handle per second and per day, based on the number of CPU cores. These figures are approximate and may vary depending on your setup, application complexity, and error volume.
Throughput is shared across all projects in a Telebugs installation. If you run multiple projects, each one gets a fraction of the total. For example, with two projects, each gets half; with four, each gets a quarter, and so on.
The whole process takes less than 10 minutes. Here’s how to get started:
Your personalized installation command will be similar to the following:
bash -c "$(curl -fsSL https://auth.telebugs.com/install/a12b-c34d-e56f-g78h)"
IMPORTANT: Keep your install command private — don’t share it with anyone or post it online. It’s uniquely linked to your account, and the license is tied to you. Your personal purchase token is included in the email you received after downloading Telebugs.
When you run this command, it will automatically install Docker on your server (assuming you’re using Linux, which is standard for most cloud environments). It will then download the latest version of the Telebugs app as a Docker container. During setup, you’ll be prompted to enter your domain name so we can generate a TLS certificate for you.
That’s it! You’re now ready to set up the first user on your new
Telebugs installation. Just visit https://YOUR-DOMAIN
in your
browser to get started. After that, you can begin inviting the rest of
your team.
Telebugs will automatically update itself to the latest version every
night at 1 AM (based on your server’s local time). You can disable this,
or perform other admin tasks — like backing up data, resetting
passwords, and more — using the telebugs
command. Simply connect
to your server and run telebugs
to see all available options.
Enjoy error tracking with Telebugs!
P.S. Planning to run multiple Telebugs installations? You’ll need a separate license for each domain.
Telebugs automatically generates and installs a TLS certificate for you using Let’s Encrypt. If you already have a TLS certificate for your domain, you can use it instead.
Nginx is the recommended way to serve Telebugs over
HTTPS when using your own TLS certificate. It acts as a reverse proxy, handling
TLS termination and forwarding requests to the Telebugs app running in a Docker
container.
When prompted to enter your domain during the telebugs setup
command,
leave it empty and press Enter
. This configures Telebugs to run
on http://localhost:5555 without TLS, allowing Nginx to manage the
certificate.
apt-get update apt-get install nginx
server { listen 443 ssl; server_name <YOUR_DOMAIN>; ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; location / { proxy_pass http://localhost:5555; # Forward to Docker container proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name <YOUR_DOMAIN>; return 301 https://$host$request_uri; # Redirect HTTP to HTTPS }
ln -s /etc/nginx/sites-available/telebugs /etc/nginx/sites-enabled/
nginx -t systemctl restart nginx
Once completed, Nginx will handle your custom certificate and securely forward traffic to Telebugs on http://localhost:5555. This setup gives you the flexibility to use your preferred TLS certificates.
HAProxy is another option for serving Telebugs
over HTTPS with your own TLS certificate. It can also act as a reverse proxy,
similar to Nginx.
When prompted to enter your domain during the telebugs setup
command,
leave it empty and press Enter
. This configures Telebugs to run
on http://localhost:5555 without TLS, allowing HAProxy to manage the
certificate.
apt-get update apt-get install haproxy
frontend https_frontend bind *:443 ssl crt /path/to/your/certificate.pem mode http option httplog default_backend telebugs_backend backend telebugs_backend mode http server telebugs_server localhost:5555 check option http-server-close http-request set-header X-Forwarded-Proto https http-request set-header X-Forwarded-For %[src] http-request set-header X-Forwarded-Host %[req.hdr(Host)] http-request set-header X-Real-IP %[src]
Note: The certificate.pem file should contain your TLS certificate and private key concatenated together. If you’re using Let’s Encrypt, you can concatenate them like this:
cat fullchain.pem privkey.pem > /etc/ssl/private/certificate.pem
haproxy -c -f /etc/haproxy/haproxy.cfg systemctl restart haproxy
Once completed, HAProxy will handle your custom certificate and securely forward traffic to Telebugs on http://localhost:5555. This setup gives you the flexibility to use your preferred TLS certificates.
Telebugs can be installed on a Kubernetes cluster using the official Helm chart. This allows you to deploy Telebugs in a containerized environment, making it easy to manage and scale.
This is not a beginner-friendly option, so it’s recommended only if you already have experience with Kubernetes and Helm. The recommended way to install Telebugs is by following the Installation instructions above.
On first launch, you’ll arrive at the Set up Telebugs screen. From here, you can create your first user account and start using Telebugs.
You’ll begin by creating an admin account. The setup form asks for:
Hit Create your account, and you’re in! Your Telebugs journey has officially begun.
Telebugs’ autocomplete suggests "Grace Hopper" for your name. Here’s why:
With Telebugs, you continue her tradition of squashing bugs (minus the moth wings).
Ready to begin tracking errors effectively? In Telebugs, Projects are your organizational foundation — they keep errors from different apps, languages, or environments neatly separated. Each project gets its own unique token, which your code uses to send errors directly to Telebugs. This setup makes debugging efficient, whether you’re managing a monolithic app or a suite of microservices.
This chapter guides you through a recommended workflow for setting up projects, shares tips on organization, and explains the creation form. By the end, you’ll have a project tailored to your needs — let’s build something robust!
Think of projects as folders for your errors: group them logically to avoid clutter. Here’s a flexible approach — mix and match based on your setup:
Quick hack: Start simple with one project per app. As your setup grows, spin off new ones. You can always merge or purge later if needed.
Let’s make this real with a sample web app. Imagine you’re running a blog built on Ruby on Rails with some JavaScript flair:
Blog
or blog.example.com
Blog (JavaScript)
or blog.js
This split lets you assign different teams (e.g., backend devs vs. frontend wizards) and tailor notifications. Bonus: Spot patterns faster, like if JS errors spike after a Rails deploy!
Fire up a new project by clicking the New Project button in the top-right of your dashboard. You’ll land on this sleek form — fill it out, hit create, and you’re off to the races!
Breaking down the fields so you know exactly what to pick:
Name | Description |
---|---|
Project name | Your project’s alias — go wild with characters! Make it snappy and descriptive, like "Ecommerce Backend" for quick recognition. |
Reporting timezone | Starts with your local time, but tweak it to match your servers or team (UTC for global ops?). This powers "today’s errors" views and graphs — super handy for time-sensitive debugging. |
Platform | Choose your tech stack (e.g., Ruby, JavaScript). Right now, it jazzes up your project icon and tunes SDK guides; future updates might add platform-specific smarts. |
Once created, grab that shiny new token and plug it into your app’s config. Test by triggering a harmless error — watch it appear in your dashboard! With projects set, you’re primed for the next step: integrating Telebugs into your code. Flip to the integration chapter and let’s get reporting!
You’ve got your project set up — excellent! Now comes the key step: sending that first error report to Telebugs. This connects your app to Telebugs so it can start catching and displaying those pesky bugs automatically. This chapter guides you through integrating a Sentry SDK, troubleshooting common issues, and what to expect next. By the end, you’ll be seeing real error data roll in. Let’s connect your app to Telebugs!
Error reports are the lifeblood of debugging — they’re like detailed snapshots of what went wrong in your app. You might call them exceptions, crashes, or stack traces, but in Telebugs, we stick with "error reports" because that’s how you’ll interact with them in Telebugs’ clean, intuitive UI. These reports include everything from the error message to the code path that led there, helping you fix issues fast. Think of it as your app’s way of saying, "Hey, something broke — here’s the full story!"
If your project is fresh and error-free, Telebugs greets you with tailored SDK setup instructions right on the dashboard. No guesswork needed! These steps link straight to Sentry’s official docs, customized for the platform you picked during project creation. Spot the DSN (Data Source Name) here — it’s your project’s unique address for sending errors.
Time to get hands-on! Follow Sentry’s platform-specific guide to add the SDK to your app. It’s usually a quick gem install, package add, or script include.
Here’s a snappy example for Ruby on Rails to give you the feel:
# Gemfile gem "sentry-rails"
$ bundle install
# config/initializers/sentry.rb Sentry.init do |config| config.dsn = "https://[email protected]/123" config.breadcrumbs_logger = [ :active_support_logger, :http_logger ] config.send_default_pii = true # Optional: Adds user context like IP end
Restart your server after setup. For other platforms like JavaScript or Python, the process is similar — just swap in the right package and config. If you’re new to Sentry, their docs are gold — follow along closely.
The DSN is your secret sauce: a URL that routes errors from your app to
Telebugs. Grab it from your project page (it looks like
https://[email protected]/project-id
). Paste it exactly into your
SDK init code — no typos! Quick check: Trigger a test error in your app (e.g.,
raise "Test error"
in Ruby). If it shows up in Telebugs, you’re golden.
No luck? Verify the DSN and restart.
Telebugs focuses on rock-solid error tracking, so stick to core features. Turn
off Tracing, Profiling, Session Replay, or Performance Monitoring in your SDK
config — they won’t work here and might clutter things. But go wild with
breadcrumbs, contexts, and tags — they enrich your reports beautifully! Example
tweak in config: Set config.traces_sample_rate = 0.0
to disable tracing.
Hitting a snag? You’re not alone — here’s how to squash the usual suspects:
Still stuck? Double-check Sentry docs for your platform or drop me a line — I’m here to help!
Boom — your first error just landed! Telebugs auto-updates the dashboard, so watch those reports flow in. Now explore:
Pro tip: Simulate a few errors with different scenarios to see how Telebugs handles them. It’ll build your confidence fast!
Quick reference for the jargon:
Your app’s "oops" moment captured: message, stack trace, and context.
Data Source Name: The URL directing errors to your Telebugs project.
Software Development Kit: The library you add to auto-report errors.
Trail of events before the crash — super helpful for "what happened?"
Your app’s tech (e.g., Ruby on Rails) — guides SDK choice and setup.
You’ve nailed your first project and started catching those errors — now it’s time to level up by bringing in the squad!
Team management in Telebugs lets you invite collaborators, dish out roles like a boss, lock down project access, and fine-tune notifications so everyone stays in the loop without the spam. Whether you’re scaling a solo gig to a full team or just sharing the load, this is your guide to building a bug-busting dream team. Let’s make collaboration seamless and secure!
To get started, click your profile icon in the top-right, select Team
Management, and explore the tabs. We’ll break it down with tips to keep things
smooth.
Telebugs keeps permissions simple yet powerful with a role-based system. This ensures the right people see the right stuff, protecting sensitive data while boosting productivity. There are two straightforward roles:
Pro tip: Start small — make new joins members, then promote as trust builds. This keeps your instance tidy and secure.
Ready to expand your crew? Inviting is easy and gets everyone on board fast.
The link’s universal (not user-specific), so share wisely with trusted folks only. If it leaks? No sweat — hit Regenerate to zap the old one and create a fresh link instantly.
Quick tip: Personalize your invite message with a quick note like "Join our Telebugs team to crush those bugs together!" It sets a collaborative tone.
Got an invite link? You’re moments away from jumping in! Click it, and you’ll see a friendly prompt:
Post-join, you’ll land in a holding pattern — no projects yet! Ping your admin to get assigned (they’ll toggle you in via access controls). Once in, you’ll see errors and can start resolving.
Heads-up: If you’re granted admin powers later, you’ll unlock full settings access. Until then, enjoy the focused view!
As your team evolves, so do roles. Need to elevate a star performer or dial back access? It’s a simple toggle.
Pro tip: Communicate changes upfront to avoid surprises. For example, "Hey team, promoting Alex to admin for better project oversight!"
Sometimes teams shift — offboarding is quick and clean.
Gentle reminder: This revokes all access, so archive any needed notes first. It’s reversible by re-inviting, but better to handle gracefully.
Forgotten password got someone locked out? As an admin, you’re the hero.
Quick win: This bypasses email resets, making recovery lightning-fast. Use it for quick fixes during crunch time!
Not all projects are for everyone — assign access to keep things organized.
Pro tip: Use this for segmented teams, like devs on backend projects only. Review periodically to keep access current.
Keep the team alerted without overwhelming inboxes — admins can control the flow.
Fun twist: Tailor this for on-call rotations — enable for critical projects only. Combine with personal settings for ultimate customization.
Team assembled? Great! Now check out Project settings to customize per project, or explore Notifications settings for advanced alerts. Remember, a well-managed team turns bug hunting into a group adventure — happy collaborating!
Your Telebugs account is your command center for managing how you interact with the platform. From personalizing your profile to securing your access, the Account Settings section is where you make Telebugs truly yours. Whether you’re tweaking your profile picture, locking down your API key, or updating your email, this is your one-stop shop for all things account-related. To jump in, click your profile icon in the top-right corner of the Telebugs dashboard and select Account Settings from the dropdown. Ready to take control? Let’s walk through each part with some flair and practical tips.
Your profile picture is your digital handshake — it’s what your team sees next to your name across Telebugs. Make it pop with a photo that screams "you" (or at least makes you recognizable in a team meeting!).
Want to swap out that generic avatar for something with personality? Here’s how:
Pro tip: Choose a high-res image for crisp display. It’ll show up everywhere, from comments to team lists, so make it count!
Decided to go incognito? No problem. To ditch your profile picture:
This reverts you to the default avatar — clean and simple. Perfect if you’re feeling minimalist or just want a reset.
The Security tab is your fortress for keeping your account safe. From API keys to email updates, this is where you tighten the bolts on your Telebugs access. Navigate to Account Settings and click the Security tab to get started.
Your API key is the golden ticket for interacting with Telebugs programmatically. If it’s compromised (or you just want a fresh one), regenerating is quick and keeps things secure. Here’s the playbook:
Quick tip: Store your API key in a secure vault or environment variable, not in your codebase. After regenerating, test your integration to ensure reports are flowing. No reports? Check that new key!
Need to switch the email tied to your account? Maybe you’re moving to a new domain or just want a fresh inbox. It’s straightforward:
Heads-up: You’ll likely need to verify the new email via a confirmation link. Keep an eye on your inbox (and spam folder) to complete the switch. This ensures notifications and resets go to the right place.
Keep your account locked tight with a strong password. Updating it regularly (or after a security scare) is a smart move. Here’s how:
Pro tip: Use a unique, complex password (mix letters, numbers, symbols). A password manager can help. Test logging in after the change to confirm it worked. Locked out? Ask your admin for a sign-in link.
Telebugs supports multiple notification channels to keep you informed about new error reports in real time. The available channels are:
This chapter explains how to configure each notification channel to match your workflow.
To receive error notifications via email, you must first configure global email settings.
Individual projects can disable email notifications in their project settings, and each user can opt out in their profile settings. Once global email notifications are configured, project-level rules determine when you will be notified.
Email notifications are sent to the address associated with your Telebugs account.
If you need notifications sent to a different address, update your email in your profile.
You can choose to receive notifications based on the following conditions:
Follow these steps to configure email notifications:
The Email notifications configuration form defines global settings that all projects inherit. Complete the fields as follows:
Once you save these settings, Telebugs will send notification emails according to the project-level rules you configured earlier. To receive error notifications via push notifications, you must first configure global push notification settings. Individual projects can disable push notifications in their project settings, and each user can opt out in their profile settings. Once global push notifications are configured, project-level rules determine when you will be notified. Push notifications are sent to devices where you have allowed notifications for Telebugs. This can include desktop browsers (like Chrome or Firefox) and mobile devices with the Telebugs Progressive Web App (PWA) installed. To enable notifications, you’ll need to grant permission on each device you use — typically through a browser prompt or your device’s notification settings.
Note: For mobile devices, installing the Telebugs PWA can enhance the notification experience. For a quick guide on installing the PWA, See Installing Telebugs as a Progressive Web App (PWA).
You can choose to receive notifications based on the following conditions:
Note: Push notifications require your permission to be sent. You may be prompted to allow notifications when you configure them or when you visit your Telebugs instance.
Follow these steps to configure push notifications:
The Push notifications configuration form defines global settings that all projects inherit. Complete the fields as follows:
https://telebugs.example.com
or mailto:[email protected]
). This field is required.
Once you save these settings, Telebugs will send push notifications according to the project-level rules you configured earlier.
Telebugs can be installed as a Progressive Web App (PWA) on your mobile device. A PWA is a web application that provides a native app-like experience, including the ability to receive push notifications more reliably. Installing Telebugs as a PWA is optional but recommended for users who want to receive push notifications on their mobile devices.
For Android devices:
You can install the Telebugs PWA on Android using one of the following methods:
When you visit the Telebugs web app in Chrome on Android, you may see an "Install" button at the bottom of the screen. This is an automatic prompt from the browser to install the PWA.
For iOS devices:
If you prefer to have Telebugs as a standalone application on your desktop, you can install it as a PWA using Chrome. This is not required for receiving push notifications on desktop, as they work directly in the browser once notifications are allowed.
Note: The exact steps may vary slightly depending on your device and browser version. If you encounter issues during installation, ensure that your browser is up to date and that you have granted the necessary permissions for notifications.
Webhooks in Telebugs enable real-time notifications to be sent to external services whenever specific events occur, such as a new error being reported, an error reoccurring, or the error frequency exceeding a set threshold. This feature allows integration with tools like Slack, Discord, or any custom endpoint that accepts HTTP POST requests. Once webhooks are configured globally, individual projects can opt to use them or disable them via project settings. After setup, project-level rules dictate when notifications are sent to the configured webhook URLs.
You can configure webhooks to trigger under these conditions:
Follow these steps to configure webhook notifications:
The Add a new webhook form defines the settings for each webhook. Complete the fields as follows:
In the template body, use placeholders like {{key}}
to insert dynamic
values. The following keys are available:
project_name
: The project name (e.g., "Backend", "example.com").
trigger
: The event triggering the notification (e.g., "error",
"reoccurrence", "error frequency exceeded").
subject
: A brief error description (e.g., "NoMethodError in
ScoresController#create").
culprit
: The code location of the error (e.g.,
"ScoresController#create").
location
: The error’s location (e.g., file path or module).
error_type
: The error type (e.g., "NoMethodError", "Exception").
error_message
: The detailed error message (e.g., "undefined method
‘+’ for nil").
project_url
: The project’s URL in Telebugs (e.g.,
"https://tests.telebugs.com/projects/7").
view_url
: The URL to the error report (e.g.,
"https://tests.telebugs.com/errors/107").
Click the Help button next to the template body field for links to resources on webhooks, Slack, and Discord integration.
Slack webhooks allow Telebugs to send error notifications directly to a Slack channel or user. This integration provides real-time alerts, enabling teams to monitor and respond to errors efficiently.
To configure a Slack webhook in Telebugs, follow these steps:
Navigate back to Telebugs to complete the webhook configuration:
Here’s an example of a Slack-compatible payload:
{ "username": "Telebugs", "attachments": [ { "fallback": "{{project_name}}: {{trigger}} - {{error_type}}: {{error_message}}", "pretext": "*{{trigger}}* from <{{project_url}}|{{project_name}}>", "color": "#D00000", "fields": [ { "title": "{{error_type}}{{culprit}}", "value": "{{error_message}}", "short": false }, { "title": "Location", "value": "{{location}}", "short": false } ], "actions": [ { "type": "button", "text": "View", "url": "{{view_url}}" } ] } ] }
You can customize the payload however you like, using the available keys to include dynamic values from the error report (see Webhook template body placeholders). For example, you can change the color, add more fields, or modify the message format.
Discord webhooks allow Telebugs to send error notifications directly to a Discord channel. This integration provides real-time alerts, enabling teams to monitor and respond to errors efficiently.
To configure a Discord webhook, follow these steps:
Navigate back to Telebugs to complete the webhook configuration:
Here’s an example of a Discord-compatible payload:
{ "content": "**{{trigger}}** from [{{project_name}}]({{project_url}})\n[View error]({{view_url}})", "embeds": [ { "color": 16711680, "fields": [ { "name": "{{error_type}}{{culprit}}", "value": "{{error_message}}" }, { "name": "Location", "value": "{{location}}" } ] } ] }
You can customize the payload however you like, using the available keys to include dynamic values from the error report (see Webhook template body placeholders). For example, you can change the color, add more fields, or modify the message format.
Custom webhooks in Telebugs allow you to integrate with any external service that accepts HTTP POST requests. This flexibility enables you to send error notifications to various platforms, such as custom logging systems, incident management tools, or any other service that can process JSON payloads. By using custom webhooks, you can tailor the notification format and content to meet your specific requirements. To configure a custom webhook, follow these steps:
{{key}}
to insert dynamic values from the error
report. Refer to the Webhook template body placeholders section for a list
of available keys.
Below is an example of a custom JSON payload that you can use as a starting point:
{ "project_name": "{{project_name}}", "trigger": "{{trigger}}", "subject": "{{subject}}", "culprit": "{{culprit}}", "location": "{{location}}", "error_type": "{{error_type}}", "error_message": "{{error_message}}", "view_url": "{{view_url}}" }
This payload includes key details about the error, such as the project name, trigger event, error type, and a link to the error report. You can customize this structure by adding or removing fields, modifying the keys, or formatting the data to suit your service’s requirements. For instance, you might add a timestamp or reformat the message for better readability. Note: Ensure that your custom endpoint is configured to accept POST requests and can process the JSON payload correctly. After saving the webhook, use the Test button to verify that the notification is sent and received as expected. This step is crucial to confirm the integration works before relying on it for real error notifications.
Projects are the beating heart of Telebugs — your dedicated workspaces for tracking, analyzing, and conquering errors in specific apps or services. Whether you’re monitoring a single side project or juggling multiple enterprise apps, each project keeps things organized with its own error reports, settings, and team access. Think of them as isolated bug-hunting arenas. In this chapter, we’ll explore how to view your projects, dive into individual dashboards, and customize settings to fit your workflow. Let’s jump in!
Your projects live in a clean, glanceable index view — perfect for getting the big picture. Head to the main dashboard (or click "Projects" in the nav) to see them all laid out in a responsive grid. Each project card packs a punch:
If you’re flying solo with one project, this view keeps it simple. Got a fleet? The grid scales beautifully on desktop or mobile.
Pro tip: Use the "New Project" button at the top-right to spin up more — Telebugs makes it effortless to segment your monitoring.
Click into a project, and you’re in the command center: a dynamic dashboard tailored for deep dives into your errors. This is where the real action happens — spotting patterns, resolving issues, and keeping your app humming.
Key features at a glance:
If your project is error-free (lucky you!), you’ll see SDK setup instructions instead. Once reports flow in, the dashboard auto-refreshes with real data — no manual reloads needed.
Quick tip: Use the search and filters to triage fast — focus on unresolved high-volume errors first. The chart is your trend-spotter; watch for patterns tied to deploys or traffic surges.
Welcome to the nerve center of your Telebugs project! Project settings are where you fine-tune how Telebugs works for you, from basic details like names and timezones to security tokens, team access, notifications, and even those high-stakes "danger zone" actions. Think of this as your project’s control panel: customize it wisely to keep everything running smoothly.
To get started, go to your project dashboard, click the three dots on the project card, and select Settings:
If you’re inside a project, click the project name in the top-left corner and select Project Settings from the dropdown menu.
In this guide, I’ll walk you through each tab in the project settings, explaining what you can do and why it matters. Whether you’re a project owner or an admin, these settings help you tailor Telebugs to your team’s needs.
Start here to set the foundation. The General tab is all about the basics that make your project feel like home. Updating these won’t mess with your data — it’s purely for clarity and convenience.
These tweaks make your dashboard more intuitive. For example, if you’re debugging late-night issues, the right timezone can save you from mental math headaches!
Security first! Tokens are the keys to your project’s door — they let your app send error reports without exposing everything. If something feels off (like unexpected reports), regenerate and update your code pronto.
Quick guide: After regenerating, test your setup by triggering a sample error. No reports? Double-check the new token in your app.
Collaboration is key, but so is control. This tab lets you decide who sees what in your project. It’s perfect for teams where not everyone needs full access.
View your team list and toggle checkboxes to grant or revoke project access. Admins can do everything; members can view reports but not change settings.
Step-by-step:
For broader team management, jump to Team management to handle roles and invites. This keeps sensitive projects locked down while fostering teamwork.
Stay in the loop without the noise. Notifications ensure you’re alerted to issues that matter, via your preferred channels.
Pro tip: Combine channels for redundancy (email + push). Test by simulating an error and checking if alerts fire. Fine-tune to avoid alert fatigue!
Proceed with caution — this is where irreversible actions live. Use these for cleanup or resets, but always back up if possible.
Before clicking, ask: "Do I need this data?" For audits, export first. These tools keep your instance lean, but wield them wisely!
Releases in Telebugs let you tag versions of your app, mainly to link source maps for unminifying stack traces in error reports. This keeps your debugging clean by mapping minified code back to readable sources. They’re straightforward — no bells and whistles beyond sourcemap support right now. In this chapter, we’ll cover the basics: viewing your releases, adding new ones, and managing them including artifacts and deletion.
In your project dashboard (see Individual project view), spot the "Releases (N)" link top-right. It shows the count and jumps you to the list. Releases here are tied to source maps, so if you’re using minification, this is key for actionable stack traces.
Pro tip: Set releases during deploys to ensure source maps match versions accurately.
The releases index is a simple chronological list. Each entry shows:
Quick tip: Check here post-deploy to verify source maps uploaded correctly.
Creating a release is easy, either manually, via SDK/API for automation, or using the Sentry CLI. In the UI:
Via SDK (example in JS):
Telebugs.setRelease('v1.2.3'); // Then upload source maps separately if required
Via Sentry CLI: Set the environment variables as described in Uploading source maps, then run:
sentry-cli releases new <version>
Focus on including source maps; that’s the core value for now.
Quick tip: Integrate with your build process for automatic release creation and sourcemap uploads.
Click a release in the list to view its details. This page shows specifics for that version, including any attached artifacts like source maps.
Key actions:
Pro tip: Before deleting, ensure no active errors rely on that version’s mapping. Always test post-deletion.
Source maps in Telebugs enable the resolution of minified JavaScript and TypeScript stack traces to their original, readable source code. These maps link production-minified code back to the developer’s original files, facilitating accurate debugging in error reports. This chapter covers the integration of source maps with Telebugs, including creation, uploading, and management within releases.
Source maps are files generated during the build process that associate minified or transpiled code with its original source. They are particularly useful for JavaScript and TypeScript applications using bundlers such as Webpack, Rollup, or Vite, where production code is optimized for size and performance. Without source maps, error stack traces reference the minified code, complicating issue identification. When uploaded to Telebugs and linked to a release, source maps allow automatic unminification, displaying errors with references to the original file, line, and code context.
To generate source maps, enable the appropriate option in your bundler
configuration (e.g., set sourceMap: true
).
In Telebugs, source maps are associated with specific releases (see Releases) to ensure they align with the corresponding application version. This linkage allows Telebugs to apply the correct maps when processing error reports. Access releases via the "Releases (N)" link in the project dashboard (see Individual project view).
Create a release manually, via SDK, or using the Sentry CLI before uploading source maps (see Creating releases).
Upload source maps to an existing release either manually through the user interface or automatically using the Sentry CLI tool, which is compatible with Telebugs.
.map
files. Multiple files can be uploaded simultaneously.
tlbgs_
.
Before running the commands, set the following environment variables:
export SENTRY_URL=<your-telebugs-url> export SENTRY_AUTH_TOKEN=tlbgs_<your-api-key> export SENTRY_PROJECT=<your-project-id> export SENTRY_ORG=<any-value> # This is not used but required for compatibility
Execute the following commands:
sentry-cli sourcemaps upload --release=<version> ./path/to/maps
For builds requiring injection of source map references:
sentry-cli sourcemaps inject ./build sentry-cli sourcemaps upload --release=<version> ./build
Upon upload, Telebugs applies the maps to incoming error reports, resolving minified traces without further configuration. To verify, trigger a test error and review the resolved stack trace in the report.
Source maps appear as artifacts in the release details page (see Release details). From there, download individual maps for inspection or delete the entire release to remove associated maps. Deletion affects unminification for errors linked to that release, so confirm no active dependencies exist beforehand.
For organization, use descriptive release versions. Apply data retention policies as needed to manage storage (see Data retention), exporting essential data prior to deletion.
Telebugs collects detailed error reports using Sentry SDKs, providing comprehensive insights into issues occurring in your applications. These reports include various data points to help diagnose and resolve errors efficiently. By capturing structured data such as backtraces, breadcrumbs, and contextual information, Telebugs enables developers to quickly identify the root cause of errors and improve application reliability. In this chapter, we will explore the structure of error reports in Telebugs, how similar errors are grouped, and how to annotate reports with notes for collaboration.
Error reports in Telebugs are composed of multiple sections, each offering specific insights into the error event. This structure mirrors Sentry’s event payload model, which includes required fields like event ID and timestamp, as well as optional interfaces for richer context. The following subsections detail each component.
The Report details section offers a high-level overview to quickly assess the error’s impact and origin, including:
The Backtrace section displays the backtrace leading to the error, which is crucial for pinpointing the exact location in code where the issue arose. Each frame includes:
Code snippets from the relevant lines are shown, with the error line highlighted in orange for emphasis. If source maps are applied (for minified code), both original and minified views are available. Frames can be expanded to show pre- and post-context lines of code.
This corresponds to Sentry’s exception
or threads
interface, which
captures the call stack. It supports features like "in-app" frames to
distinguish application code from dependencies.
To verify, expand frames and check if the highlighted line matches the error description.
For web applications, the HTTP Request section captures request details, providing context about the network interaction that led to the error:
This section maps to Sentry’s request
interface, which helps reproduce
errors by showing the exact request state. It’s particularly useful for
debugging API or web-related issues.
Tags are key-value pairs providing additional context, such as request
IDs, custom labels, or system metrics (e.g., "browser: Chrome", "os: Windows").
In Telebugs, tags appear in a table format and can be used for filtering and
searching error reports. This aligns with Sentry’s tags
interface,
enabling categorization and quick querying across events.
Add tags via the SDK to enhance searchability, e.g.,
Telebugs.setTag('user_role', 'admin')
.
Breadcrumbs are chronological events leading up to the error, forming a timeline of actions. Each breadcrumb includes:
Breadcrumbs can be expanded to view detailed data in JSON format. This section
corresponds to Sentry’s breadcrumbs
interface, which records events like
log statements, UI interactions, or network calls, aiding in reconstructing the
error sequence.
Configure the SDK to automatically capture breadcrumbs for better diagnostic trails.
Contexts provide environmental information about the runtime and system:
Displayed in a table, this maps to Sentry’s contexts
interface, offering
multi-faceted context (e.g., app, device, GPU) to understand the error’s
surroundings.
The Dependencies section lists all loaded modules or packages with
their versions (e.g., "express: 4.17.1"). This corresponds to Sentry’s
modules
attribute, helping identify if a specific library version is
causing issues.
Review this for potential compatibility problems or outdated libraries.
The SDK section identifies the Sentry SDK used, including name (e.g.,
"sentry-javascript") and version. This aligns with Sentry’s sdk
interface, which includes details like integrations and packages, ensuring
compatibility and tracing SDK-related anomalies.
The Affected user section captures information about the user impacted by the error:
Additional user data can be included in an extra data subsection. This maps to
Sentry’s user
interface, aiding in user-specific debugging and
personalization.
Set user context via the SDK, e.g., Telebugs.setUser({ id: '123', email: '[email protected]' })
.
The Additional data section holds arbitrary key-value pairs for custom
metadata (e.g., session variables or debug info). This corresponds to Sentry’s
extra
interface, allowing flexible extension of event data.
Use this for application-specific details not covered by other sections.
Grouping rules determine how similar errors are grouped together in Telebugs. This helps reduce noise and makes it easier to focus on unique issues. Telebugs uses a fingerprinting mechanism similar to Sentry’s, where events with matching fingerprints (e.g., based on backtrace or custom rules) are aggregated into a single issue.
In Telebugs, the grouping process starts by checking for a custom fingerprint
provided via the SDK. If present, it computes the fingerprint by hashing the
custom value (or joined array values separated by "|
"). If no custom fingerprint
is set, Telebugs generates a default fingerprint by hashing a "group string"
derived from the event data in this order of priority:
This hierarchical approach mirrors Sentry’s default strategies, focusing on stack traces for precision, falling back to exceptions or messages when needed. For example, two exceptions with identical application stack traces but different system frames would share the same fingerprint and group together.
Grouping details, accessible via a square stack icon in error reports, show the
fingerprint (e.g., a hash like 7bcb86ee6ce64c0a8d0f37fde2ff18c
), method
(e.g., "backtrace"), specific frames, message, and merged errors.
Custom fingerprinting allows you to control how errors are grouped by providing
a list of strings when reporting an error. Errors sharing the same fingerprint
are grouped together, overriding default grouping. By default, Telebugs might
group errors separately if they contain unique details, such as different order
numbers in error messages (e.g., Payment failed for order 123
and
Payment failed for order 456
). With custom fingerprinting, users can
group such errors together.
For example, to group payment failure errors regardless of order IDs:
begin # Some code that might fail rescue StandardError => e Sentry.capture_exception(e, fingerprint: ["payment-failure"]) end
In this example, setting ["payment-failure"]
as the fingerprint ensures
all errors with this fingerprint are grouped into one, making it easier to track
payment-related issues collectively.
For dynamic grouping by user action (e.g., "checkout" or "login"):
begin # Some code that might fail rescue StandardError => e action = "checkout" # From app context Sentry.capture_exception(e, fingerprint: ["error", action]) end
This creates separate groups for each action type, such as ["error",
"checkout"]
for checkout errors and ["error", "login"]
for login errors,
providing a clearer picture of where problems occur.
This aligns with Sentry’s fingerprinting, enabling flexible organization by features or error types.
Telebugs allows manual group merging to combine similar errors that end up in separate groups due to minor differences, keeping error tracking organized. Once merged, future reports matching either original group are directed to the new combined group. This action is irreversible, so users are advised to double-check the URLs before confirming.
Steps for manual group merging:
Merge Errors
to confirm.
For instance, if there are two groups for Database Connection Failed
— one
with a timeout message and another with a retry failure — they can be merged
into a single group for easier management.
Telebugs adds grouping details to error reports, enabling users to see why an error was grouped in a particular way, including the fingerprint used. This feature enhances transparency and helps verify or adjust grouping logic.
When viewing an error report, a new button resembling a "square stack" is available. Clicking this button reveals the grouping details, which include:
7bcb86ee6ce64c0a8d0f37fde2ff18c
.
This visibility helps pinpoint grouping issues, debug why certain errors are separated (e.g., due to differing stack frames or messages), and ensures accurate error organization. If the default grouping doesn’t suit your needs, use custom fingerprints or manual merging to refine it.
Notes in Telebugs allow team members to annotate error reports with additional context, explanations, or updates, fostering collaboration and helping track the resolution process. Notes are visible to all project members and appear in a chronological feed within the error group’s details. This section covers how to create, view, and manage notes, including attachments for richer documentation.
Access notes by navigating to an error group’s page and selecting the Notes tab or section. The feed displays each note with:
Notes from inactive users are still visible but without profile links. The feed is sorted oldest to newest, making it easy to follow discussions over time.
For example, a note might include a screenshot of the error in production, a code diff for a potential fix, or a link to a related ticket in your issue tracker.
Fun fact: The first attachment of an error is used as the error’s main image in the dashboard, providing a quick visual reference.
To add a note:
Attachments are uploaded directly (with progress indicators if large) and can be up to reasonable sizes; however, for storage management, project admins can purge all note attachments via the project’s danger zone settings, triggering a background job.
This feature is ideal for collaborative debugging — e.g., one developer adds a reproduction step, another attaches a log file, and a third notes the fix deployment.
Notes enhance team communication, turning error reports into dynamic discussion threads for faster issue resolution.
Data retention in Telebugs allows you to manage how long error reports, release artifacts, and related data are stored, balancing storage needs with historical analysis. Policies can be set for automatic cleanup based on time or disk usage, ensuring compliance, cost control, and performance. Telebugs supports full or partial purges for errors and targeted deletions for artifacts. Cleanup jobs run nightly at 2 AM server time, with options for immediate manual actions in project settings.
This chapter covers configuring retention policies for errors and artifacts, understanding purge types, and monitoring disk usage.
The error retention policy controls the lifecycle of error reports and associated data (e.g., backtraces, breadcrumbs, tags). Enable it to automatically remove old or excess data, preventing database bloat. Policies include time-based (deleting reports older than a set period) and disk-based (purging when usage exceeds limits) options.
Access the policy via the "Data Retention" section in settings. Toggle "Enable automatic error cleanup" to activate. Once enabled, configure sub-options for time- or disk-based rules. The UI shows the next cleanup time (e.g., "in 12 hours") and requires saving changes to apply.
Time-based cleanup removes reports created before a specified cutoff date (e.g., older than 365 days). Choose between:
Set the retention period in days; the job identifies eligible reports and processes them in batches to avoid locking issues.
For example, with a 90-day partial purge, reports from 91+ days ago keep basic stats but lose stack traces.
Disk-based cleanup activates when the database file exceeds a limit, purging oldest reports first (full purge only). Limits can be:
The system estimates excess by average report size, then deletes until under the limit. This runs alongside time-based if both enabled.
Monitor via disk stats: total size, free space, database usage (size and percentage), and report count.
Artifacts (e.g., source maps uploaded with releases) have separate retention to manage storage independently. Policies mirror errors but focus on releases without recent reports.
Toggle "Enable automatic artifact cleanup" in settings. Configure time- or disk-based rules, plus an option to purge on new release uploads.
Deletes artifacts from releases created before the cutoff (e.g., older than 365 days), but only if no recent reports link to them (based on error retention safe cutoff). Purges files and records in batches.
Triggers when total artifact size exceeds the limit (absolute GB or percentage). Estimates excess, then deletes from oldest inactive releases (no recent reports) until compliant.
Stats include artifact size and count alongside general disk info.
When enabled, uploading a new release triggers cleanup of excess releases beyond a max kept (e.g., 20). Deletes artifacts from oldest inactive releases first, ensuring space for new ones without manual intervention.
View real-time stats in the Data Retention dashboard: total/free disk, database/artifact sizes, percentages, and counts. Cache refreshes automatically post-cleanup.
For optimization, a VACUUM job reclaims space if sufficient free disk exists (database size + 10% buffer). Run via cron nightly.
Purged data is irreversible; export critical reports beforehand. Use partial purges for errors to retain analytics value. For projects, admins can purge all data or attachments via danger zone, triggering dedicated jobs.
Copyright © 2025, Kyrylo Silin PE.
Permission is hereby granted to any person purchasing or receiving a copy of Telebugs, its source code and associated documentation files (the “Software”), to install and use a single instance and modify a single version of the Software as provided. This does not include the rights to publish, distribute, sublicense, and/or sell copies of the Software, source code or products derived from it.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
The user of the software represents and warrants that they will at all times comply with applicable law in their download and use of the Software.
telebugs
command reference ¶Install and manage your Telebugs instance.
To run the telebugs
command, connect to your server using SSH or your cloud provider’s web-based terminal.
telebugs
— Displays the main menu with available commands.
password
— Manage passwords.
auto-update
— Manage automatic updates.
data
— Manage application data.
help
— Displays help information for the telebugs
command.
setup
— Runs the initial setup process for Telebugs.
start
— Start Telebugs.
stop
— Stop Telebugs.
status
— Displays the current status of the Telebugs instance.
update
— Update Telebugs to the latest version.
-h
, --help
— Displays help information for the telebugs
command.
Use telebugs [command] --help
to see detailed help for a specific command.
Telebugs supports error tracking for a wide range of programming languages, frameworks, and platforms through compatibility with Sentry SDKs. By configuring the appropriate Sentry SDK with your Telebugs DSN, you can send error reports from your application to your Telebugs instance. Below is an exhaustive list of supported platforms, organized by category, with links to setup instructions from Sentry’s official documentation.
This list reflects all platforms we currently support. For the most up-to-date information or additional setup details, refer to https://docs.sentry.io/platforms/.
Using Digital Ocean to host Telebugs is a great choice. It’s affordable and easy to set up.
After signing up for a Digital Ocean account, follow these steps. It should take about 5 minutes.
Create > Droplets
and pick a plan for your server.
ipv4
address. You’ll use it to link your domain to this server.
A record
with the IP you copied. It should look like this:
Hosting Writebook on Hetzner is a smart pick. It’s budget-friendly and simple to set up if you’re comfortable with some basic tech steps.
After signing up for a Hetzner account, follow these steps. It should take about 5 minutes.
You need at least 2GB RAM and 1 CPU.
A record
with the IP you copied. It should look like this: