impress.js animates these slides with CSS 3D transforms, which this browser does not support. Open the deck in a current version of Chrome, Firefox, Safari, or Edge.
What messaging protocols do apps use beyond plain HTTP REST?
Learn a tool stack you can use for pure web applications and later scale into IoT, firmware, and hardware.
Emulate deploying cloud environments by practicing first on a local Linux SSH server.
This session is run by AWS User Group Cebu community leads together with Student Builder Group leads from Cebu, as guest facilitators for AWS Community Day Davao 2026.
Follow along on your own device: open mqtt-slides.awsugcebu.org in a browser. Slides will stay online after the event.
Core goal: kickstart your journey, help you build things with MQTT, and prepare you for future software, hardware, and IoT projects.
If you are confused about something, you are almost certainly not the only one. Asking is the fastest tool you have, and it costs nothing.
Noticing you have a question, and going to find the answer, is the skill. It is the whole job. Socratic questioning and epistemic humility are named, studied practices, not a polite way of saying "no stupid questions."
Ubuntu is 1 to 3 GB. Start it now and it downloads while we talk. Do not wait for it.
Ubuntu 24.04.Mac and Linux users: skip this, you already have a terminal.
Windows browses. Linux runs servers. WSL2 is a real Ubuntu kernel inside Windows, with its own filesystem, networking, and always-on services.
# verify you are on a Linux kernel uname -a
# right-click Start, choose Terminal (Admin) # or PowerShell (Admin), then run: wsl --install -d Ubuntu-24.04 # if it asks to restart, do it now
Same result as the Microsoft Store, just without the Store. Restart when prompted, then open Ubuntu from the Start menu.
Your password is invisible. Nothing appears as you type. No dots, no stars. That is Linux security, not a broken keyboard.
"Virtualization not enabled"? In Windows Features, enable Virtual Machine Platform and Windows Subsystem for Linux, then reboot.
What is Kiro? An agentic development environment that turns plain English specification into working code, tooling, and terminal workflows.
Action pause. Redeem your credits and confirm your tier now. Raise your hand for login or access errors and we fix it together.
Steering via a single plain English file such as project.md beats unstructured chat prompts: the intent stays stable, reviewable, and repeatable across sessions.
Under the hood, Kiro harnesses powerful models such as Claude or Sonnet. Raw model quality is the engine, not the whole vehicle.
What Kiro adds is a spec-driven workspace and orchestration harness that manages context, files, tools, and execution order.
Because the harness owns context and execution order, you stay in charge of what actually gets written. The spec steers, you approve.
Tip: use Kiro as your real-time learning assistant. Ask it to explain every command before you run it.
Interactive check. Who here uses Linux or Unix devices?
Reveal: Your iPhone runs iOS on Darwin, a direct descendant of Unix. Your Android phone runs the Linux kernel. Your pocket is full of Unix and Linux.
You have been using Unix and Linux for years without calling it that. Today we just give it a terminal.
# connect to your server ssh user@host # confirm who and where you are whoami hostname uname -a # packages need root sudo apt update
Needed only when connecting to localhost. On a cloud instance it already runs.
# WSL2 / Ubuntu / Debian sudo apt update sudo apt install -y openssh-server sudo service ssh start # macOS -- ships with OpenSSH sudo systemsetup -setremotelogin on
WSL2 has no systemd by default. sudo systemctl start ssh fails, so use sudo service ssh start.
| Polling | Client asks again and again, wasting requests and battery to discover nothing changed |
| Headers | Every REST call carries kilobytes of text overhead before any payload |
| Real time | Needs WebSockets or SSE bolted on just to fake a push |
| Devices | Sensors on constrained networks cannot afford HTTP round trips |
workshop/chatScope note: everything here is classic MQTT, the v3.1.1 family. MQTT v5 landed in March 2019 and adds more features: shared subscriptions, message expiry, reason codes, user properties, and request/response patterns. We teach v3 because brokers and libraries default to it and it is what you will meet in the field. It is not the latest version.
The publisher sends once and stops caring. The broker copies it to every client subscribed to that topic.
Add a subscriber and it receives immediately. Neither side knows how many clients are on the other end.
Topics are hierarchical paths separated by slashes. Matching is literal.
| + | One level. workshop/+/temp matches workshop/kitchen/temp, not workshop/a/b/temp |
| # | Everything below. workshop/# matches all of workshop/. Last segment only |
| case | Workshop/Chat and workshop/chat are different topics |
| leading / | /workshop is not workshop. It adds an empty level |
Wildcards work when subscribing, never when publishing.
Install the broker, test it in the terminal, then prompt Kiro for the web app.
# install the broker and clients sudo apt update sudo apt install -y mosquitto mosquitto-clients # start it. WSL2 has no systemd, so use service sudo service mosquitto start # browsers need a WebSocket listener, 1883 is MQTT only sudo tee /etc/mosquitto/conf.d/ws.conf >/dev/null <<'EOF' listener 9001 protocol websockets allow_anonymous true EOF sudo service mosquitto restart
# terminal 1: subscribe to the workshop broker mosquitto_sub -h 159.223.45.148 -u workshop -P mqtt-davao-2026 -t workshop/chat # terminal 2: publish mosquitto_pub -h 159.223.45.148 -u workshop -P mqtt-davao-2026 -t workshop/chat -m "hello"
Two terminals is the whole lesson. One listens, one talks, the broker connects them. Swap 159.223.45.148 for localhost if you built your own broker.
# Project: Minimal MQTT Chat WebApp and Linux Broker Setup ## Objective Help the user learn how to set up an MQTT broker on a Linux SSH server, test it using terminal commands, and build a barebones web application to demonstrate real-time pub/sub messaging. ## Tech Stack - Broker: Mosquitto MQTT Broker running on Linux via SSH - Terminal Tools: `mosquitto_pub` and `mosquitto_sub` - Web Frontend: Simple HTML, CSS, and JS using MQTT.js via CDN
## Core Requirements
1. Linux and SSH Instructions: Provide clear terminal commands to
install and start Mosquitto on Linux.
2. Terminal Testing: Show how to open two terminal windows to publish
and subscribe to a test topic (`workshop/chat`).
3. Chat WebApp: Generate a single `index.html` file with a basic input
field, send button, and raw message log box without complex styling.
Paste both halves into Kiro before you prompt it for anything else. This file is the steering context for the rest of the build.
Leverage the steering file to have Kiro generate a barebones web app tied to the broker. One file, no build step, no framework.
| Connect | MQTT.js connects to the WebSocket port, 9001 locally or 8443 on the shared broker |
| Subscribe | Client listens on workshop/chat and appends incoming text to the log |
| Publish | Send button publishes the input value to the same topic |
A shared broker is running for anyone whose local build did not work. Open the demo, connect, and talk to the room.
| Slides | mqtt-slides.awsugcebu.org |
| Demo page | 159.223.45.148:8082 |
| Broker | 159.223.45.148 · MQTT 1883 · WebSockets 8443 |
| Username | workshop |
| Password | mqtt-davao-2026 |
You have a broker running on Linux, a terminal-proven pub/sub path, and a browser client you built by describing it.
You built a broker, proved pub and sub in a terminal, and shipped a browser client by describing it. That is a foundation, not a finish line.
Contributing is the fastest way to learn, and every community needs more people who show up twice.
Technology is one lens. The same skills apply to problems that matter to you.
Your skills transfer. The domain is yours to choose.
Nothing. We have no product, no service, no subscription, and no interest in you needing us.
What we brought is an idea: that the path to learning and upskilling is far more attainable when you join a community and contribute to it.
You do not need permission, credentials, or a company paying for it. With what you have, and people around you, you can learn almost anything. Go teach the next person.
You showed up, you installed things that fought back, and you asked questions. That is the whole workshop working as intended.
One last ask: tell us how it went. Two minutes, and it is the only way we get better at this.
forms.gle/TpKhTi6wtoDnzBZH6
Scan or type it. It works from your phone.