Learning Lua Step-By-Step (Part 15)

This entry is part 14 of 24 in the series Learning Lua Step-By-Step

Post Stastics

  • This post has 903 words.
  • Estimated read time is 4.30 minute(s).

Web Programming with Lua

In this series of articles, we’ll explore the world of web programming with Lua. We’ll build a simple multi-page web application that can be accessed in the browser on your local machine, providing a starting point for you to dive deeper into Lua-based web development.

Part 1: Setting up the Development Environment

Installing the Necessary Components

For this example, we’ll use the Lapis framework, a powerful Lua-based web framework that runs on the OpenResty (Nginx + Lua) platform. Lapis makes it easy to create web applications and APIs in Lua.

First, let’s install the necessary components:

  1. Install OpenResty: Follow the instructions for your operating system from the official OpenResty website.
  2. Install Lapis: Open a terminal and run the following command to install Lapis using LuaRocks (the Lua package manager):
   luarocks install lapis

Now, you’re ready to start building your Lua-based web application.

Part 2: Creating a Simple Web Application

Defining the Application Structure

Let’s create a simple Lapis application with three pages: a home page, an about page, and a contact page.

  1. Create a new file called app.lua and add the following code:
   local lapis = require "lapis"

   local app = lapis.Application()

   app:get("/", function(self)
     return { render = "index" }

   app:get("/about", function(self)
     return { render = "about" }

   app:get("/contact", function(self)
     return { render = "contact" }

   return app

This code sets up a basic Lapis application with three routes: the root URL (/), the about page (/about), and the contact page (/contact).

  1. Create three new files in the views/ directory:
  • index.etlua: This will be the home page.
  • about.etlua: This will be the about page.
  • contact.etlua: This will be the contact page.
  1. Fill each of these view templates with the desired HTML content for each page. If you don’t know HTML you can simply use the html below.File:

File: about.etlua

<!DOCTYPE html>
       <h1>About Page</h1>
       <p>Your text here...</p>

File: contact.etlua

<!DOCTYPE html>
       <h1>Contact Page</h1>
       <p>Your text here...</p>

File: index.etlua

<!DOCTYPE html>
       <h1>Home Page</h1>
       <p>Your text here...</p>

Starting the Server and Accessing the Application

  1. Start the Lapis server by running the following command in your terminal:
   lapis server

This will start the Lapis server and make your web application available at http://localhost:8080/.

  1. Open your web browser and navigate to the following URLs:
  • http://localhost:8080/: This will display the home page.
  • http://localhost:8080/about: This will display the about page.
  • http://localhost:8080/contact: This will display the contact page.

Congratulations! You’ve just built your first multi-page Lua-based web application.

Part 3: Enhancing the Web Application

Adding Dynamic Content

Let’s add some dynamic content to our web application. We’ll modify the home page to display a list of blog posts.

  1. Update the app.lua file to include a route for the blog posts:
   app:get("/blog", function(self)
     local posts = {
       { title = "My First Blog Post", content = "This is the content of my first blog post." },
       { title = "Another Blog Post", content = "This is the content of another blog post." },
       { title = "The Third Blog Post", content = "This is the content of the third blog post." }

     return { render = "blog", posts = posts }
  1. Create a new view template called blog.etlua and add the following code:
   <!DOCTYPE html>
       <h1>Blog Posts</h1>
       <% for _, post in ipairs(posts) do %>
         <h2><%= post.title %></h2>
         <p><%= post.content %></p>
       <% end %>
  1. Update the navigation links in your other view templates to include a link to the blog page.

Now, when you visit http://localhost:8080/blog, you should see the list of blog posts displayed on the page.


  1. Modify the application to accept a query parameter and display it on the page.
  2. Implement a form that allows users to submit new blog posts, and handle the form submission on the server-side.
  3. Add authentication functionality to your web application, allowing users to log in and perform actions based on their roles (e.g., create, edit, or delete blog posts).
  4. Explore the Lapis documentation and try to implement a more complex web application, such as a simple content management system or an e-commerce platform.


In this series of articles, we’ve introduced you to the world of web programming with Lua. By using the Lapis framework and the OpenResty platform, we’ve built a simple multi-page web application that can be accessed in the browser on your local machine.

This is just the beginning of your Lua web development journey. The Lapis framework and the broader Lua ecosystem offer a wealth of possibilities for building powerful and scalable web applications. Be sure to explore the resources below to deepen your understanding and continue your Lua web development learning.


Series Navigation<< Learning Lua Step-By-Step (Part 13)Learning Lua Step-By-Step (Part 16) >>

Leave a Reply

Your email address will not be published. Required fields are marked *