ServCore - a minimal, production-grade server framework for building reliable, observable backend services

Elixir Server Core — Standalone Worker Services in Elixir

I have been learning elixir for a while now and I’ve enjoyed every bit. In my beginner endeavours I built Elixir Server Core as a lightweight, forkable framework for building standalone background-processing services in Elixir as part of my learning journey. This is more of a learning project I have decided to share with the larger community.

It’s meant for situations where you don’t really want the overhead of a full stack like Phoenix, but you still want structure instead of wiring GenServers and queues from scratch every time.

It works well when you need:

  • HTTP endpoints to receive requests
  • A background job queue to process work asynchronously
  • Worker processes managed under OTP supervision
  • Basic durability, retries, and scheduling
  • A simple deployment model for single-purpose services

Instead of repeatedly assembling Phoenix, Oban, and custom infrastructure, this gives you a small, ready-to-run foundation that you can either use directly or fork and shape into your own service.

What it gives you

  • Plug + Cowboy HTTP server
  • OTP-based job queue and worker pool
  • Job lifecycle tracking (queued, running, done, failed)
  • Retry system with exponential backoff
  • Optional job scheduling
  • Pluggable persistence (in-memory, SQLite, or custom stores)
  • Telemetry hooks for observability

What I use it for

  • Small backend services with a single responsibility
  • Background processing workloads (media, documents, webhooks, automation)
  • Lightweight VPS or edge deployments
  • Learning and experimenting with OTP in a real system

What it is not

  • Not a replacement for Phoenix
  • Not a distributed job system like Oban
  • Not a full web application framework

It sits somewhere between “building everything from scratch” and “bringing in a full framework,” giving you a minimal but structured starting point for worker-based services.

Feel free to poke around : hex-package

3 Likes

Update: ServCore has moved the HTTP server from Plug.Cowboy to Bandit. Same Plug interface, but with HTTP/2 enabled by default and fewer transitive dependencies. The rest of the framework (job queue, worker pools, SQLite persistence, Telemetry) is unchanged.

1 Like