Skip to content

C++ backend framework designed for efficient and fast development of web applications

License

Notifications You must be signed in to change notification settings

coding-cpp/expresso

Repository files navigation

Expresso ☕️

A C++ backend framework designed for web applications. A few features include:

  • Simple and easy to use API ✨
  • Built-in HTTP server 🌐
  • Out of the box multi-threading support 🧵
  • Expandable custom middleware 🧩

It is pretty straightforward and if you are familiar with the Express.js framework, you will feel right at home, as the API is very similar, which is my goal? 🎯

Installation 🚀

  1. Make sure you have the a c++ compiler (such as g++ or clang) installed on your system.
Install g++
sudo apt install g++
Install clang
sudo apt install clang

  1. Install the make utilities to build the binary:
sudo apt install cmake make
  1. Clone the repository:
git clone git@github.com:coding-cpp/expresso.git
  1. Clone the submodules:
cd expresso
git submodule init
git submodule update
  1. Make a .env file in the root directory of the project and add the environment variables present in the .env.sample file in it.

  2. Build the project:

mkdir build && cd build
cmake ..
make

Building

  1. Run the server:
./server

Starting

Example

You can find an example of how to use the framework in the example directory.

Docker 🐳

You can also run the server using Docker. Make sure you have Docker installed on your system.

  1. Build the Docker image:
docker build -f docker/build.dockerfile -t expresso .
  1. Run the Docker container:
docker run -p 8000:8000 -e PORT=8000 expresso

Alternatively, you can use the pre-built Docker image from Docker Hub (supports both amd64 and arm64 architectures):

docker run -p 8000:8000 -e PORT=8000 jadit19/expresso:latest

If you prefer to use Docker Compose, you can use the provided docker compose file and run it using the following command:

docker compose -f docker/compose.yaml up

Contributing 🤝

If you would like to contribute to the project, feel free to fork the repository and submit a pull request. I am always open to new ideas and suggestions. 🚀

Bugs and Issues

If you encounter any bugs or issues, feel free to open an issue on the repository. This is a work in progress and since I am the only one working on it, that too in my spare time, I might not have the time to fix it right away, but I will try my best to get to it as soon as possible. 🐛🔧