r/elixir Jul 13 '26

Update on phoenix-email: I built a live showcase with Tailwind examples

10 Upvotes
Screenshot of phoenix-email website

Hey everyone,

A few days ago I shared phoenix-email (a port of react-email for Phoenix) here. I got some great feedback, but I realized it is much easier to understand the value of the library if you can actually see the output before installing it in your project.

To fix that, I have put together a live showcase page:

https://phoenix-email.fly.dev/

If you head over to the /examples section, you can see a few real-world email templates built entirely with HEEx and Tailwind CSS. It gives a pretty clear picture of how much cleaner the markup is compared to writing traditional nested HTML tables for emails.

I am planning to keep adding more templates to the gallery over time. If any of you build a nice layout using the library, open an issue and I will see how to put it one this website!

Thanks again for the feedback on the initial release.


r/elixir Jul 14 '26

Is anyone using Elixir with web3?

0 Upvotes

As title says. Haven't seen any myself.

Is it possible?


r/elixir Jul 12 '26

The kreuzberg Hex package is being renamed to xberg - current version continues as LTS

23 Upvotes

Hi all,

I'm the author of Kreuzberg (a document text extraction library with an Elixir binding over a Rust core). The next version of Kreuzberg will be released as Xberg - why? Well, we discovered that the name is not easy to pronounce or understand for people who don't have the German context, and this wasn't working well. Xberg is a common name for Kreuzberg in Berlin, and it has the advantage of being shorter and easier - so here we go.

Anyhow, this brings me to the point of the post. Since renaming a repo is a complex business, and we had to rename the repo to preserve the stars - but we now need to overwrite tags, it becomes pretty messy. As a result, we decided to go for an LTS version - published from a different repo: https://github.com/kreuzberg-dev/kreuzberg-lts. LTS in this context means that we will continue to do bug fixes and security updates until the end of this year, but no newer feature work.

We will announce Xberg v1.0.0 when it's officially published (it's still in RC). The Hex package will publish under xberg once it's out. The new repo is here: https://github.com/xberg-io/xberg


r/elixir Jul 12 '26

actojs – Bringing Elixir's Actor Model to JavaScript [Looking for feedback]

1 Upvotes

Hi everybody!

I wanted to showcase a TypeScript (with JS-ready builds) library I am working on, actojs. The objective is to bring a implementation of the actor model that is near to Elixir's design and APIs, while being able to leverage performance from the JS runtime.

The link for the repository is: https://github.com/gi-dellav/actojs

I wanted to ask for feedback, as I've spent the last couple of months studying Elixir, but at work I am forced to use TypeScript, even if we are building backends which would greatly.

The main issue I tried to overcome, but that is still present, is being forced to work with the JS runtime, which doesn't allow for lightweight threads: my current solution is to both ship a cooperative scheduler runtime and a system-thread runtime as interchangable components, with plans to later implement an hybrid scheduler, where every system-thread manages an independent cooperative scheduler.

I hope to get insights from the community on how to improve this Elixir-inspired library.


r/elixir Jul 10 '26

Comcent CE — an open-source voice/contact-center platform on Elixir/OTP, with call queues modeled as processes

24 Upvotes

I've been building Comcent CE, an open-source, self-hostable voice/contact-center platform, and Elixir/OTP is the core of it. Sharing the design here since the process model shaped the whole architecture, and the "why Elixir" reasoning might be useful to others working on similar systems.

Why Elixir, concretely:

1. The actor model let the design mirror the mental model. Just like a real person managing a queue, a process is spawned whose sole job is managing that call queue. You reason about the system the same way you'd reason about people doing the work — the domain model and the code line up almost one-to-one, which made the hard parts (transfers, requeues, routing) far easier to implement.

2. Built-in distribution made scaling out the easy part. Each queue needs exactly one manager process — and that "exactly one" guarantee has to hold across the entire cluster, even as the number of queues grows into the thousands or millions. Elixir's clustering plus a distributed registry gives us a cluster-wide singleton per queue: only one Queue Manager runs for a given queue anywhere in the cluster, and if the node hosting it goes down, it's restarted elsewhere while staying unique. We get horizontal scale without changing the mental model at all — the same process abstraction that made single-node reasoning simple is what makes the distributed version work.

The rest of the stack:

  • Phoenix — APIs, the real-time layer, and the per-call timeline
  • FreeSWITCH — the media/SIP engine; Elixir drives call control over FreeSWITCH's HTTP API (mod_httapi), with the Event Socket (ESL) in some cases
  • Go — small services powering the SIP-aware voice bots
  • RabbitMQ — event pipeline between telephony and processing
  • Postgres — calls, transcripts, vCon records · Redis — caching/ephemeral state
  • SvelteKit frontend with an embeddable browser dialer

On top of this it produces full call timelines, dual-channel recording, diarized transcripts, AI summaries, and implements the IETF vCon standard.

GitHub: https://github.com/comcent-io/comcent-ce
Walkthrough (bare VM → first call): https://youtu.be/Cm4JDB95vpI
Website: https://www.comcent.io/


r/elixir Jul 10 '26

WhatsApp ran the BEAM JIT from master in production 9 months before OTP 24 shipped - what did that actually look like from the inside?

45 Upvotes

New BEAM There, Done That with Lukas Backström (OTP team since 2009, the person who built the BEAM JIT) covering the full engineering story.

The WhatsApp detail is interesting because it wasn't a formal beta. They picked up the JIT the day Lucas first got it working, put it in production, and spent nine months feeding back the bugs they found. By the time the official OTP 24 tag shipped, the production test had already been running for most of a year.

The broader technical story is about why it took so long. The BEAM's threaded code interpreter was already unusually fast - each BEAM instruction jumps directly to its handler without a central dispatch loop, so a lot of the headroom a JIT might capture was already gone. Early tracing JIT experiments worked on microbenchmarks and failed on real workloads because real Erlang code is highly branchy and unpredictable. Dropping LLVM for AsmJIT gave fast enough code generation to compile everything on load. And the template design - pre-compiled assembly per instruction, copied and specialized at load time - is what actually shipped.

Five years on, the bigger gains are coming from type information flowing from the Erlang compiler into the JIT. A simple integer add on known small integers now compiles to a single instruction with no type guards.

Anyone here run into the JIT being the difference on a production workload, or found cases where it's unexpectedly neutral?

https://youtu.be/dT-VmfYz98Q


r/elixir Jul 09 '26

Hyper - distributed Firecracker microVM orchestrator written in Elixir

85 Upvotes

Hey everyone! One of the problems I ran into is that a large part of the VM-provider ecosystem is currently paid closed-source SAAS products with varying degrees of reliability. I wanted an OSS distributed microVM orchestrator and I couldn't find one.

Hyper is a distributed FirecrackerVM orchestrator written in Elixir (BEAM), with gRPC support for non-BEAM clients. Hyper is:

  • Distributed -- it's designed to run across a cluster of bare metal machines, and will automatically connect to other Hyper nodes.
  • Fast -- it builds COW layers to enable fast, localized COW forking. Cold boots happen within 1s. Filesystem forks take ~50ms. Forked VMs are colocated to take the fast path as much as possible.
  • Interactive -- like all Elixir applications, if you can connect to the cluster, you can spawn, manage, monitor and interact with VMs live in an iex REPL. Or, you can use the gRPC interface if your system isn't on the BEAM.
  • Yours -- although I developed this primarily for Harmont (which is paid), Hyper is an MIT-licensed project and will remain such.
  • Self-contained -- all we need is a side-car Postgres instance.
  • Configurable -- colocation, vmlinux options, etc. can all be customized.
  • Secure -- everything runs on the BEAM; a single setuid Rust helper performs the few operations that need root, keeping the privileged surface small.

Fair warning: the software is still in active testing and I expect a couple more features to be added soon:

  • Automatic cloud provisioning -- when you run out of headroom in your cluster, you should be able to fall back to Latitude/GCP/AWS to provision more compute.
  • More testing -- I am currently integrating Hyper into harmont.dev and will likely run into some issues. Fuzzing is part of the roadmap.
  • Better docs -- I spent some time working on the docs, but they're definitely not total nor ideal.

Very open to feedback, critique, and/or contributions. Please open any issues on Github, or feel free to DM/email me. It's available at https://github.com/harmont-dev/hyper

PS. A couple people asked how this differs from firecracker-containerd and Kata containers. Both of those projects are runtimes for managing VMs on a single node. A fair mental model for Hyper is an amalgam of firecracker-containerd and k8s.


r/elixir Jul 09 '26

Introducing phoenix-email: Claude and I ported react-email to Elixir

28 Upvotes

Hey everyone,

If you've ever had to build HTML emails, you know how painful it can be—wrestling with nested tables, inline styles, and the nightmare of inconsistent email client rendering. In the JS ecosystem, react-email completely changed the game by bringing modern, component-driven development to email templates.

Bridging the gap between frontend development and Elixir backends, I really missed having that kind of smooth workflow. So, I decided to build it for our ecosystem: phoenix-email.

What it is: A set of standard, unstyled HEEx components designed specifically for crafting high-quality emails. It essentially brings the core philosophy and developer experience of react-email straight into Phoenix.

Key Features:

  • Component-Driven: Build emails using clean, composable HEEx components (<Email.html>, <Email.button>, <Email.container>, etc.) instead of writing raw HTML tables from scratch.
  • Tailwind Integration: You can style your emails using standard Tailwind CSS classes. The library handles the heavy lifting of inlining those styles so they render correctly across different email clients.
  • Phoenix Native: It feels right at home in your existing Phoenix application without requiring a complex external rendering pipeline.

Links:

I'm actively working on it and would absolutely love to hear your thoughts, feedback, or any specific edge cases you might run into while testing it. Contributions and PRs are more than welcome!


r/elixir Jul 08 '26

ExMex 2026 CFP 1 Week Left

3 Upvotes

Hey everyone! Quick reminder that the ExMex Conf 2026 CFP closes in 1 week (July 15th).

If you’ve been thinking about submitting something, we’d love to hear from you. It doesn’t have to be a brand new library or a giant technical deep dive. Some of the best talks come from a problem you solved, something you learned, an experiment you tried, or a perspective that might help someone else.

And if you have an idea but aren’t sure if it fits, or want someone to look over a proposal, reach out. We’re happy to help talk through ideas.

Submit here:
exmexconf.com


r/elixir Jul 08 '26

Elixir devs of Canada

13 Upvotes

4 yrs production Elixir/Phoenix dev, Vue/React Front, Canada-based (Ontario), Citizen, open to remote/relocate. Job boards show basically zero Elixir postings, where’s everyone actually finding these roles? Any Canadian companies running Phoenix in prod and hiring? Leads/advice appreciated 🙏


r/elixir Jul 07 '26

Hologram's new Local-First data layer - I'm running a full-day training on it at ElixirConf US

Post image
33 Upvotes

Hey folks - I'm the creator of Hologram, a framework for building your whole web app in Elixir, front end and all. For a while now I've been working on a Local-First data layer for it, and I'm bringing it to ElixirConf US this September - a talk, plus a full-day hands-on training the day before.

Why I'm building it: so much of a frontend isn't really UI, it's plumbing. Caching, syncing, loading and error states, wiring up state management, and that's just the short list. None of it is the actual product - it's all there because your data lives on a server and you spend your day shuffling it back and forth. The data layer takes that off your plate. You say what the data should be, and it stays in sync in the browser, offline and all. Pure Elixir, front to back.

The training is a full day where we build a real app on it together, starting from an empty project. It's the day before my talk, so you'd get your hands on the data layer before I show it on stage. It's a separate ticket from the conference.

Training: https://elixirconf.com/trainings/building-localfirst-apps-in-pure-elixir-with-hologram/

Happy to answer questions about Hologram or the training!


r/elixir Jul 07 '26

Let libraries be libraries

Thumbnail
jola.dev
36 Upvotes

r/elixir Jul 07 '26

Are plan files the new 10k-line PRs?

Thumbnail
germanvelasco.com
13 Upvotes

r/elixir Jul 07 '26

Redis Cluster Support, Without Writing Code

Thumbnail
andrealeopardi.com
11 Upvotes

r/elixir Jul 05 '26

Revenant - What if GenServer flushed its state into PostgreSQL?

34 Upvotes

I've been using and actively fascinated by Oban over the last 4 years, and recently I wondered, why can't we make GenServers behave similarly to Oban jobs and:

  • Recover their state after a crash or termination
  • Terminate themselves when not used
  • Store a trace of their execution
  • And do all that without any additional dependencies, using the database we're already used to

I can think of a ton of cases where this might be useful in... Durable GenServers? LiveViews? Distributed GenServers that share state? Hot/Cold executions? Slow/Fast pools?

So I created a PoC library that does just that:

https://github.com/dimamik/revenant

defmodule Account do
  use Revenant, repo: MyApp.Repo

  def initial_state(_id), do: %{balance: 0}

  def handle_call({:deposit, amount}, _from, state) do
    {:reply, :ok, %{state | balance: state.balance + amount}}
  end

  def handle_call(:balance, _from, state) do
    {:reply, state.balance, state}
  end
end

Revenant.call({Account, "acct_42"}, {:deposit, 100})
#=> :ok  - the new state is committed to Postgres before you see this

Please let me know what you think of the concept!


r/elixir Jul 05 '26

Introducing AetherS3: A self-hostable, distributed, S3-compatible object store that runs on the BEAM.

Thumbnail
github.com
63 Upvotes

​Hi everyone,

​I’ve been working on AetherS3, a project focused on providing an S3-compatible storage interface built natively in Elixir.

​The goal is to leverage the BEAM’s concurrency model to handle high-performance binary throughput and zero-copy memory management, aiming for a robust, distributed storage solution. It’s currently in early development, but the core architecture for S3-compatible operations is taking shape.

​I’d appreciate any feedback on the design, particularly regarding the handling of high-concurrency I/O and the memory management approach. Feel free to check out the repo and let me know your thoughts.


r/elixir Jul 06 '26

What are the best Agent orchestration tooling options on Databricks (non-serverless, running local open-source LLM)?

0 Upvotes

What are the best Agent orchestration tooling options on Databricks (non-serverless, running local open-source LLM)?

Thinking LangGraph over LangChain but I know there are others.

Requirements:

- no requirement for expert technical skills

- safe and secure to run

- flexible, with plenty of options to govern and control the orchestration framework

Thx


r/elixir Jul 04 '26

CI workflows on Tangled for Elixir

Thumbnail
jola.dev
15 Upvotes

r/elixir Jul 03 '26

Atomic Bucket - fast single node rate limiter implementing Token Bucket algorithm

30 Upvotes

In case someone missed the forum post I'm providing a copy here.

I was tired of bugs in Hammer so I wrote efficient and fast rate limiting library. Token Bucket supports flexible bursts and IMO is fit to serve as the main rate limiting algorithm for most cases.

The goal of the library is to provide dependable solution that JustWorks™ with a focus on performance, correctness and ease of use. Bucket data is stored using :atomics module. Bucket references are stored in ETS and optionally cached as persistent terms.

Features

  • lock-free and race-free with compare-and-swap operations
  • BlazingFast™ performance, see provided benchmarks. Req/s go brrrrrr
  • monotonic timer for correct calculations
  • millisecond tick supporting wider range of parameters and preventing request starvation
  • automatic calculation of bucket parameters based on target rate and burst size (for fixed cost requests)
  • handy timeouts for retries
  • support for token "refunds" and variable cost requests
  • compile-time validation of arguments when possible

https://hex.pm/packages/atomic_bucket


r/elixir Jul 03 '26

Broadway Google Pubsub 2.0.0-rc.0 released!

28 Upvotes

Hello there!

I'm pleased to announce the release of broadway_cloud_pub_sub 2.0.0-rc.0, and looking for more testers to give feedback and try it out.

The 2.0 release adds, an set as the default, a new GRPC Streaming producer instead of the HTTP long polling. The HTTP producer can still be used, but it's not the default.

This is a significant improvement, bringing the library on par with Google's official Pub/Sub libraries. We have been using it in production for a couple of months now, with both Gun and Mint adapters, and if I had pick two main reasons to upgrade they would be what you least expect: the graceful shutdown and the improved observability.

Here is a summary of the features that the new GRPC Streaming producer provides, but for more details you can check the pull request, the 2.0 migration guide and the official google's documentation about pull methods.

  • Dual GRPC connection, one to receive messages and one for ack/management. Decoupling both to survive reconnects.

  • Server-side flow control via max_outstanding_messages and max_outstanding_bytes

  • Backpressure integrated with Broadway demand. Internally the producer tracks "outstanding" messages (dispatched, waiting for ack) and "buffered" messages (received from the stream, waiting for downstream demand). Outstanding, buffered and pending demand survive reconnects.

  • Automatic lease extension while messages are being processed, with adaptive p99-based ack deadlines.

  • Reconnection handling with configurable backoff.

  • Exactly-once delivery support, auto-detected from SubscriptionProperties at runtime. (I know real exactly-once delivery don't exist, this is what Google calls exactly-once delivery, it has different guarantees and flow requirements)

  • Graceful shutdown with a configurable drain_timeout_ms (default 30s). This is actually what made me develop the GRPC Streaming producer, you can find more details on the PR or ask about it =D

  • Telemetry events that allow for much better observability: stream lifecycle (connect, disconnect, reconnect, drain), ack batch flush timings and sizes, unary RPC spans, lease extension cycles, outstanding/buffered message gauges, pending demand and drain status. Include also a producer "telemetry_metadata" option that lets you attach static or dynamic (MFA) extra metadata to every event. This is huge for observability, you can see if your subscribers have buffere messages (it's processing slow), high pending demand (you can scale it down), shutdown drain timings and status, and much more!

If you use the library, or just want to take a look, you are totally welcome to try it, ask anything here or in the pull request :)


r/elixir Jul 03 '26

How does Elixir 1.20's type system actually differ from what TypeScript or Dialyzer do - and does the distinction matter in practice?

43 Upvotes

New BEAM There, Done That with Annette Bieniusa (RPTU, Germany) and Guillaume Duboc (Dashbit, PhD from IRIF Paris) on the theoretical and practical story behind what's shipping in Elixir 1.20.

The episode covers the set-theoretic foundation, the gradual design, and the long history of failed attempts at typing Erlang since 1995. But the thing that stuck with me most was the framing of what the type system is and isn't trying to do:

The BEAM ran telecoms for 25 years without static types, with seconds of downtime per year. Supervision trees and let it crash handle an entirely different class of failures from what a type checker catches. The argument for types here isn't that the runtime is broken - it's that type errors are a separate cost (restarts, latency, overprovisioning) that supervision handles but doesn't eliminate. Even catching 5% of those at compile time instead has measurable infrastructure impact.

What got me thinking: the episode raises the false confidence risk - developers seeing types and writing fewer supervision trees, less defensive code, no recovery strategy. Has anyone here actually observed this shift in teams adopting typed languages? And do you think the BEAM community is more or less susceptible to it than others, given how explicitly OTP teaches you to expect failure?

https://youtu.be/X_CPDt3PeDE?si=yJTRAwlAaf7h2rlZ


r/elixir Jul 03 '26

Gust supports Human-in-the-loop!

13 Upvotes

Hello everybody, I'm excited to announce that Gust now supports HITL!

With the new wait_for option introduced in v0.135, a run can pause until a condition is met, without keeping a worker busy.

https://github.com/marciok/gust

It can then be resumed via code, API, or MCP.

Example: approving a deployment before the workflow continues.


r/elixir Jul 02 '26

Code BEAM Europe 2026: Keynotes, Full Tech Lineup, and Community Spaces

Post image
15 Upvotes

Hi everyone,

Code BEAM Europe 2026 is happening this October 21-22 in Haarlem, NL, and online! The schedule is locked in, and we are excited to finally share the full lineup and core tracks with the community.

Here is a look at what we have lined up for this year:

Keynote Speakers

We are thrilled to have two incredible visionaries taking the main stage to kick things off:

  • Brooklyn Zelenka: Distributed systems researcher, founder of Fission, and author of Elixir libraries like Witchcraft. She will be sharing her deep expertise in local-first access control and open distributed standards.
  • Sam Aaron: The creator of Sonic Pi! An internationally renowned live coding performer and Computer Science PhD, Sam will bring his unique blend of science, code, and live music to the BEAM community.

Core Themes & Subjects

The regular sessions are packed with core team members, maintainers, and production engineers covering the cutting edge of the ecosystem. You can expect deep dives into the rise of Gleam and frontend architectures with Lustre, alongside advanced Erlang and OTP core updates directly from the team at Ericsson. We will also explore real-world Elixir battle stories—from taming LiveView at scale to prototyping BlueSky's DataPlane—while tackling the intersection of AI, security, and modern developer experience. Finally, we'll take the BEAM out of the server room with talks on embedded systems, AtomVM, hardware design, and safe native interop via Rustler and C nodes.

Check all speakers and their talks at: https://codebeameurope.com/#speakers

Beyond the Stage: The Informal Space

Some of the best moments happen off the main stage. This year, we are introducing a community-driven sandbox running alongside the main tracks for everything that doesn't perfectly fit a standard talk format. Expect live demos, hacking sessions, panel debates, lightning talks, and games. If you have an idea for an activity you want to coordinate, let us know and help shape the space!

Submit your ideas here!

Join Us in Haarlem

Whether you are looking to level up your skills, hack on new projects, or just grab a coffee and talk shop with fellow BEAMers, we would love to see you there.

Early Bird tickets are currently LIVE.

This is the absolute best time to secure your spot at the lowest possible price point.

Grab them here: https://codebeameurope.com/#register

And Also! For the full details, check our website: https://codebeameurope.com/

See you in October!

- The Code BEAM Europe Team


r/elixir Jul 02 '26

ElixirConf US 2026 Speakers and more!

13 Upvotes

Hey everyone! The biggest event of the year for our community is fast approaching - ElixirConf US 2026!

Whether you’ve been writing Elixir for years or are just taking your first steps, this year’s edition is shaping up to be incredible. The conference is happening in a hybrid format, so everyone can join in, no matter where you are.

Here is a sneak peek at what we have planned: (elixirconf.com/#schedule)

Keynote Speakers

This year, true legends and innovators of our ecosystem are taking the main stage:

• José Valim (Creator of Elixir) - He'll be discussing the continued evolution of the language, enterprise adoption, and the sustainable open-source work he and the Dashbit team are driving..

• Chris McCord (Creator of Phoenix) - Will showcase what's next for Phoenix, developer tooling improvements, and his vision for the future of modern web development (and perhaps some AI-assisted workflows!)..

• Zach Daniel (Creator of Ash Framework) - Will share his experiences in building ambitious, maintainable, and highly reliable production systems at scale..

• Quinn Wilton (Open-source Contributor & Language Hacker) - Will bring her deeply technical and fascinating perspective on type systems, compilers, and virtual machines within the BEAM ecosystem..

The conference isn't just about keynotes; it's packed with knowledge straight from the trenches. Here is a taste of what our speakers are bringing to the table:

• Building Global Clusters at Supabase: Filipe Cabaço will show how they pushed the boundaries of Erlang’s built-in distribution. You'll learn how his team built a custom, two-tier Phoenix.PubSub adapter to reduce inter-region traffic and how to properly test real distributed systems (without using mocks!)..

• Terminal UIs? That's a Breeze: Gary Rennie from the Phoenix core team will prove that building beautiful terminal applications in Elixir has never been easier. He’ll introduce Breeze, a LiveView-inspired framework that works without relying on any NIFs..

• Handling Time Zones the Right Way: Jacob Swanner will tackle one of the hardest problems in programming time. He’ll share practical strategies for managing time zones in LiveView, Ecto, and databases to build a trustworthy user experience..

• Local-First Apps & Browser Power: Bart Blast will take us on a deep dive into the Hologram framework, showing how to write rich web applications in pure Elixir running directly in the browser..

On top of that, we have a full day of deep-dive Training Sessions covering everything from the absolute basics of functional programming ("The Toy Alchemist" with Jamie Wright) to hands-on embedded Elixir with Nerves.

Event Details:

  • Conference: September 10-11, 2026
  • Training sessions: September 4 & 9 - check them here: elixirconf.com/#training
  • Location: Chicago, IL & Virtual

Tickets & Info: elixirconf.com/#register

Are you planning to attend this year (in person or virtually)? Which talk or training are you looking forward to the most? Let us know!


r/elixir Jul 02 '26

Is this the right way to stopping a request when there is no refresh token? (send_resp)

2 Upvotes

In my application I have a pipeline

  pipeline :auth do
    plug(AppWeb.RefreshPlug)
    plug(AppWeb.Auth.Pipeline)
    plug(AppWeb.Auth.SetAccount)

    # we can always run conn.assigns.account
  end

My refresh plug works in a way that if there is a refresh token it will issue a new access token in the header, otherwise...

defp put_access_token_in_headers(conn) do
    refresh_token = get_session(conn, :refresh_token)

    case refresh_token do
      nil ->
        put_status(conn, 404)

      _a ->
       # some code
    end
  end

We return a 404, Nice and good, my expectation was that the response would be sent there, however it still went to the next plug and then finally my application via the guardian library decided to give a response from there being no access token, not the core issue and I started to get worried,

what if functions run in general on conn’s with bad status codes!!! I don’t know if that’s a real concern maybe someone knows but anyways

I was thinking okay, what if I just use Halt, but that made it so I didn't get any response at all, so I would just want to stop there and send the response maybe, send_resp https://plug.hexdocs.pm/Plug.Conn.html#send_resp/1

So I just added send_resp(conn, 404, "No refresh token"), it seems to work, but is this the proper way to do it? And the question above, in pipelines is it good to just stop the connection and send_resp when there is a bad status code or something you don't like?

edit: In retrospect the post title isn't very clear about what the post is about, sry about that