# Honeybadger

Useful articles for web developers in Ruby, Javascript, Elixir, and more

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## A Starlette middleware guide for FastAPI and Python developers

DevFeed: [A Starlette middleware guide for FastAPI and Python developers](<https://devfeed.tech/articles/a-starlette-middleware-guide-for-fastapi-and-python-developers-20057.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/starlette-middleware/>)

Author: Aditya Raj

Published: 2026-08-28T07:00:00Z

Content type: tutorial

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [FastAPI](<https://devfeed.tech/topics/fastapi.md>), [Python](<https://devfeed.tech/topics/python.md>), [ASGI](<https://devfeed.tech/topics/asgi.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [Cross-origin resource sharing (CORS)](<https://devfeed.tech/topics/cors.md>)

Tags: [auth](<https://devfeed.tech/tags/auth.md>), [cors](<https://devfeed.tech/tags/cors.md>), [developers](<https://devfeed.tech/tags/developers.md>), [fastapi](<https://devfeed.tech/tags/fastapi.md>), [guide](<https://devfeed.tech/tags/guide.md>), [logging](<https://devfeed.tech/tags/logging.md>), [middleware](<https://devfeed.tech/tags/middleware.md>), [python](<https://devfeed.tech/tags/python.md>), [python-articles](<https://devfeed.tech/tags/python-articles.md>), [starlette](<https://devfeed.tech/tags/starlette.md>), [web-applications](<https://devfeed.tech/tags/web-applications.md>)

### AI overview

This guide explains how middleware works in Starlette and FastAPI applications. It covers built-in middleware, custom middleware using pure ASGI and BaseHTTPMiddleware, and execution order when multiple middleware layers process requests and responses.

### Source excerpt

Starlette middlewares let you apply logging, auth, and CORS across every route in a web app without duplicating code. This article covers Starlette's built-in middlewares, building custom ones with pure ASGI and BaseHTTPMiddleware, and the execution-order rules that keep your FastAPI applications secure and fast. Read on to learn how to build and order Starlette middlewares the right way.

## How we teach LLMs to write BadgerQL

DevFeed: [How we teach LLMs to write BadgerQL](<https://devfeed.tech/articles/how-we-teach-llms-to-write-badgerql-20060.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/teaching-llms-badgerql/>)

Author: Kevin Webster

Published: 2026-08-18T07:00:00Z

Content type: article

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [clickhouse](<https://devfeed.tech/topics/clickhouse.md>), [SQL](<https://devfeed.tech/topics/sql.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [automated](<https://devfeed.tech/tags/automated.md>), [clickhouse](<https://devfeed.tech/tags/clickhouse.md>), [devops-articles](<https://devfeed.tech/tags/devops-articles.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [llms](<https://devfeed.tech/tags/llms.md>), [observability](<https://devfeed.tech/tags/observability.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

The article explains how Honeybadger taught LLMs to generate BadgerQL queries for Insights searches. It describes using a structured, example-driven system prompt and automated integration tests to measure whether the generated queries produced the expected results.

### Source excerpt

LLMs don't understand BadgerQL out of the box. Here's how we used our existing integration tests to teach them BQL--and measure whether the resulting queries actually worked.

## How Fly.io logging works and how to collect application logs

DevFeed: [How Fly.io logging works and how to collect application logs](<https://devfeed.tech/articles/a-comprehensive-guide-to-fly-io-logging-20051.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/fly-io-logging/>)

Author: Muhammed Ali

Published: 2026-08-13T07:00:00Z

Content type: tutorial

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [fly.io](<https://devfeed.tech/topics/fly-io.md>), [Logging](<https://devfeed.tech/topics/logging.md>), [App](<https://devfeed.tech/topics/app.md>), [FastAPI](<https://devfeed.tech/topics/fastapi.md>), [Streams](<https://devfeed.tech/topics/streams.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [devops-articles](<https://devfeed.tech/tags/devops-articles.md>), [fastapi](<https://devfeed.tech/tags/fastapi.md>), [fly-io](<https://devfeed.tech/tags/fly-io.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [logging](<https://devfeed.tech/tags/logging.md>), [streams](<https://devfeed.tech/tags/streams.md>), [vector](<https://devfeed.tech/tags/vector.md>)

### AI overview

This tutorial explains how Fly.io collects and routes application logs, including output from standard output and standard error. It also demonstrates a FastAPI application that generates different log messages and describes handling logs with Honeybadger.

### Source excerpt

Logging is an import part of debugging an app. Without a good method of catching errors or logs in general, you would end up with uncaught issues and could also lose valuable customers in the process. Read this article to learn how to effectively handle logs on Fly.io.

## August 2026 product update: hosted MCP and more

DevFeed: [August 2026 product update: hosted MCP and more](<https://devfeed.tech/articles/august-2026-product-update-hosted-mcp-and-more-20050.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/2026-august-product-update/>)

Author: Joshua Wood

Published: 2026-08-12T07:00:00Z

Content type: release

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [Model Context Protocol](<https://devfeed.tech/topics/model-context-protocol.md>), [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [OAuth](<https://devfeed.tech/topics/oauth.md>), [Self-hosted](<https://devfeed.tech/topics/self-hosted.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [agent](<https://devfeed.tech/tags/agent.md>), [company-updates](<https://devfeed.tech/tags/company-updates.md>), [developer-tools](<https://devfeed.tech/tags/developer-tools.md>), [hosted-mcp-server](<https://devfeed.tech/tags/hosted-mcp-server.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [oauth](<https://devfeed.tech/tags/oauth.md>), [product](<https://devfeed.tech/tags/product.md>), [python](<https://devfeed.tech/tags/python.md>), [search](<https://devfeed.tech/tags/search.md>), [self-hosting](<https://devfeed.tech/tags/self-hosting.md>), [update](<https://devfeed.tech/tags/update.md>)

### AI overview

Honeybadger's August 2026 product update introduces OAuth for its hosted MCP server, adds EU support for self-hosting, and announces natural-language error search, anomaly alerts, and Oban-py support.

### Source excerpt

This cycle: OAuth on the hosted MCP server, EU support for self-hosting it, natural-language error search, anomaly alerts, and Oban-py support.

## Starlette vs FastAPI: what FastAPI actually adds

DevFeed: [Starlette vs FastAPI: what FastAPI actually adds](<https://devfeed.tech/articles/starlette-vs-fastapi-what-fastapi-actually-adds-20058.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/starlette-vs-fastapi/>)

Author: Farhan Hasin Chowdhury

Published: 2026-07-20T07:00:00Z

Content type: comparison

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [FastAPI](<https://devfeed.tech/topics/fastapi.md>), [Pydantic](<https://devfeed.tech/topics/pydantic.md>), [ASGI](<https://devfeed.tech/topics/asgi.md>), [OpenAPI Specification](<https://devfeed.tech/topics/openapi.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Python](<https://devfeed.tech/topics/python.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>), [Cross-origin resource sharing (CORS)](<https://devfeed.tech/topics/cors.md>)

Tags: [cors](<https://devfeed.tech/tags/cors.md>), [data-validation](<https://devfeed.tech/tags/data-validation.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [fastapi](<https://devfeed.tech/tags/fastapi.md>), [frameworks](<https://devfeed.tech/tags/frameworks.md>), [openapi](<https://devfeed.tech/tags/openapi.md>), [python](<https://devfeed.tech/tags/python.md>), [python-articles](<https://devfeed.tech/tags/python-articles.md>), [starlette](<https://devfeed.tech/tags/starlette.md>), [websocket](<https://devfeed.tech/tags/websocket.md>)

### AI overview

This comparison explains how FastAPI builds on Starlette and Pydantic. Starlette provides the ASGI-based HTTP layer, while Pydantic handles typed data validation; FastAPI adds type-driven parameter parsing, dependency injection, and automatic OpenAPI documentation. It also discusses when using raw Starlette may be preferable.

### Source excerpt

FastAPI is built on Starlette, but most developers never look at what's underneath. Learn what FastAPI actually adds on top of Starlette and Pydantic, what comes straight from Starlette, and when dropping down to raw Starlette makes more sense than pulling in the full stack.

## How a status page can show a site at its best (and 10 examples)

DevFeed: [How a status page can show a site at its best (and 10 examples)](<https://devfeed.tech/articles/how-a-status-page-can-show-a-site-at-its-best-and-10-examples-20059.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/status-page-examples/>)

Author: James Konik

Published: 2026-07-15T07:00:00Z

Content type: article

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [incident](<https://devfeed.tech/topics/incident.md>), [Tool](<https://devfeed.tech/topics/tool.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [communication](<https://devfeed.tech/tags/communication.md>), [customer](<https://devfeed.tech/tags/customer.md>), [developer-tools](<https://devfeed.tech/tags/developer-tools.md>), [devops](<https://devfeed.tech/tags/devops.md>), [devops-articles](<https://devfeed.tech/tags/devops-articles.md>), [incident](<https://devfeed.tech/tags/incident.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [metrics](<https://devfeed.tech/tags/metrics.md>), [services](<https://devfeed.tech/tags/services.md>), [tool](<https://devfeed.tech/tags/tool.md>), [uptime](<https://devfeed.tech/tags/uptime.md>)

### AI overview

This article explains why public status pages help build customer trust, communicate incidents and scheduled maintenance, and demonstrate service reliability. It outlines principles for effective status pages, including clarity and useful metrics, and presents examples before showing how to set one up with Honeybadger.

### Source excerpt

A status page is an essential tool for keeping users updated, but how can you make sure yours is the best possible? In this article you'll see how to make your status page perfect, and how Honeybadger can help you do that.

## Next.js error handling: a practical guide

DevFeed: [Next.js error handling: a practical guide](<https://devfeed.tech/articles/next-js-error-handling-a-practical-guide-20052.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/next-js-error-handling/>)

Author: Farhan Hasin Chowdhury

Published: 2026-06-18T07:00:00Z

Content type: tutorial

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [Next.js](<https://devfeed.tech/topics/next-js.md>), [API](<https://devfeed.tech/topics/api.md>), [bug](<https://devfeed.tech/topics/bug.md>), [React](<https://devfeed.tech/topics/react.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [error-reporting](<https://devfeed.tech/tags/error-reporting.md>), [guide](<https://devfeed.tech/tags/guide.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [javascript-articles](<https://devfeed.tech/tags/javascript-articles.md>), [next-js](<https://devfeed.tech/tags/next-js.md>), [nextjs](<https://devfeed.tech/tags/nextjs.md>)

### AI overview

A practical guide to handling expected and unexpected errors in Next.js applications using the App Router. It covers return-value-based handling for expected errors, Server Actions, Server Components, 404 responses, error boundaries, and Honeybadger-based production error reporting.

### Source excerpt

Next.js gives developers a structured way to handle errors at every level of an application -- from form validation to root-level crashes. Learn how to manage expected errors with return values, catch uncaught exceptions with error boundaries, and set up automatic error reporting in production.

## Next.js vs React: What's the difference and which should you use?

DevFeed: [Next.js vs React: What's the difference and which should you use?](<https://devfeed.tech/articles/next-js-vs-react-what-s-the-difference-and-which-should-you-use-20053.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/next-js-vs-react/>)

Author: Muhammed Ali

Published: 2026-05-28T07:00:00Z

Content type: comparison

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [Next.js](<https://devfeed.tech/topics/next-js.md>), [React](<https://devfeed.tech/topics/react.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Server-side rendering](<https://devfeed.tech/topics/server-side-rendering.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [API](<https://devfeed.tech/topics/api.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [article](<https://devfeed.tech/tags/article.md>), [comparison](<https://devfeed.tech/tags/comparison.md>), [framework](<https://devfeed.tech/tags/framework.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [javascript-articles](<https://devfeed.tech/tags/javascript-articles.md>), [next-js](<https://devfeed.tech/tags/next-js.md>), [react](<https://devfeed.tech/tags/react.md>), [routing](<https://devfeed.tech/tags/routing.md>), [server-side-rendering](<https://devfeed.tech/tags/server-side-rendering.md>)

### AI overview

This comparison explains that React is a JavaScript library for building user interfaces, while Next.js is a framework built on React that adds routing, data fetching, server-side rendering, image optimization, and API capabilities. It also discusses their technical behavior, file structures, rendering modes, and practical use.

### Source excerpt

Next.js and React are often compared, but they solve different problems. React focuses on building user interfaces, while Next.js adds structure, rendering strategies, and back-end capabilities. Read this article to see how we break down their differences.

## How to Design SIEM Alerts for Real-Time Application Security Monitoring

DevFeed: [How to Design SIEM Alerts for Real-Time Application Security Monitoring](<https://devfeed.tech/articles/siem-alerts-everything-you-need-to-know-20056.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/siem-alerts/>)

Author: Muhammed Ali

Published: 2026-05-21T07:00:00Z

Content type: tutorial

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [SIEM, Security](<https://devfeed.tech/topics/siem-security.md>), [Security](<https://devfeed.tech/topics/security.md>), [Application Security](<https://devfeed.tech/topics/application-security.md>), [Monitoring](<https://devfeed.tech/topics/monitoring.md>), [threat detection](<https://devfeed.tech/topics/threat-detection.md>), [real-time](<https://devfeed.tech/topics/real-time.md>)

Tags: [application-security](<https://devfeed.tech/tags/application-security.md>), [devops](<https://devfeed.tech/tags/devops.md>), [devops-articles](<https://devfeed.tech/tags/devops-articles.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [security](<https://devfeed.tech/tags/security.md>), [security-events](<https://devfeed.tech/tags/security-events.md>), [siem](<https://devfeed.tech/tags/siem.md>), [threat-detection](<https://devfeed.tech/tags/threat-detection.md>)

### AI overview

This tutorial explains SIEM alerts, their role in application security, and how SIEM platforms aggregate and correlate logs and security events to identify suspicious behavior. It also provides practical alert examples and describes configuring simple alerts with Honeybadger Insights.

### Source excerpt

SIEM alerts help you detect suspicious behavior before it becomes a breach. But security monitoring can quickly turn into noisy dashboards and missed threats without the right approach. Read this article to learn how to design effective SIEM alerts and implement real-time security monitoring.

## Comprehensive guide to working with Python markdown

DevFeed: [Comprehensive guide to working with Python markdown](<https://devfeed.tech/articles/comprehensive-guide-to-working-with-python-markdown-20054.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/python-markdown/>)

Author: Ravgeet Dhillon

Published: 2023-11-27T08:00:00Z

Content type: tutorial

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [Markdown](<https://devfeed.tech/topics/markdown.md>), [Python](<https://devfeed.tech/topics/python.md>), [HTML](<https://devfeed.tech/topics/html.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [html](<https://devfeed.tech/tags/html.md>), [markdown](<https://devfeed.tech/tags/markdown.md>), [packages](<https://devfeed.tech/tags/packages.md>), [python](<https://devfeed.tech/tags/python.md>), [python-articles](<https://devfeed.tech/tags/python-articles.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

This tutorial explains how to work with Markdown in Python. It covers project setup and converting Markdown to HTML using Python packages such as markdown, with additional discussion of front matter and markdownify.

### Source excerpt

Markdown makes it easy to add syntax to your plain text documents for readability and machine parsing. Read to learn how to work with markdown in Python using the Python markdown package.

## Test-Commit-Revert: A useful workflow for testing legacy code in Ruby

DevFeed: [Test-Commit-Revert: A useful workflow for testing legacy code in Ruby](<https://devfeed.tech/articles/test-commit-revert-a-useful-workflow-for-testing-legacy-code-in-ruby-20055.md>)

Original publisher: [Read original article](<https://www.honeybadger.io/blog/ruby-tcr-test-commit-revert/>)

Author: José M. Gilgado

Published: 2020-10-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Honeybadger](<https://devfeed.tech/sources/honeybadger.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [bridgetown](<https://devfeed.tech/topics/bridgetown.md>), [Test coverage](<https://devfeed.tech/topics/coverage.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [code](<https://devfeed.tech/tags/code.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [ruby-articles](<https://devfeed.tech/tags/ruby-articles.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [techniques](<https://devfeed.tech/tags/techniques.md>), [test-coverage](<https://devfeed.tech/tags/test-coverage.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This article explains test-commit-revert (TCR), a workflow for adding tests to legacy Ruby code. Tests run automatically when files are saved: passing changes are committed, while failing changes are reverted. The technique aims to improve understanding, increase test coverage, and enable refactoring while keeping the code in a passing state.

### Source excerpt

When you inherit a legacy app with no tests, your first step should be to add them. But that can be a huge task! How do you even start? In this article, José will introduce us to a testing workflow called test-commit-revert (TCR) that is particularly useful for adding tests to legacy systems. Read to see practical examples and how to set up your tooling for minimal friction.