Fully offline tiny LLM chatbot on the ESP32-S3 Cardputer ADV - 8M params, Q4 weights baked into the firmware, ~5 tok/s.
C++
93
17 commits
updated Sep 25, 2026
A real chatbot that lives on a microchip.
No internet. No cloud. No phone. Just a tiny chip with 512 KB of RAM, and it talks back.
⬇️ Download firmware · ▶️ Watch the promo · 🤗 Get the model · 📰 Press kit
https://github.com/user-attachments/assets/4f42d833-51dd-4b7c-823d-9e9852355083
Chatbots like ChatGPT run on giant data centers full of GPUs.
Cardputer AI runs on a chip that costs a few dollars. The whole thing (the brain, the words it knows, the chat) fits inside a pocket computer the size of a credit card. Unplug the Wi-Fi. It still works.
Tiny AI on microchips has been done before. But those models could only continue a story: you type "Once upon a time" and they keep going. Ask them a question and you get more story.
This one chats. You say something, it answers. It stays on topic. It asks you questions back. It says "I don't know" when it doesn't know.
To our knowledge, this is the first chatbot that holds a coherent English conversation while running entirely on a microcontroller this small. That means 512 KB of RAM, no extra memory chips, and no internet.
In 2023, the TinyStories paper asked: "How small can language models be and still speak coherent English?" Our answer: small enough to fit on a microchip, and still hold a chat.
| Cardputer AI | |
|---|---|
| 🧠 Brain size | 8 million parameters. That's ~50,000× smaller than Llama 3.1 405B |
| 💾 Memory | 512 KB of RAM, less than one photo on your phone |
| 📦 Model file | 5.7 MB, baked right into the firmware |
| ⚡ Speed | ~5 tokens (word pieces) per second |
| 📡 Internet | Not needed. Ever. |
| 🔋 Power | Runs on the Cardputer's battery |
https://github.com/user-attachments/assets/c9977f6f-6a45-461b-82ca-8b01988d8508
A real conversation, word for word, from the demo video above:
> Hi! How are you?
Hey! I'm good, thanks for asking. How about you?
> I just got a new puppy!
Oh, really? What kind is it?
> He is small and brown.
That's nice. Can I pet him?
> I feel a bit sad today.
Why are you sad?
> My friend moved away.
Oh, that's terrible. Do you want to talk about it?
> What color is the sky?
The sky is blue.
> What does a cow say?
A cow says moo!
> How far away is the moon?
I am too little to know that.
It can tell stories too. Switch to story mode, type "a brave little cat who saves her friend", and you get:
Once upon a time, there was a brave little cat. She lived in a big tree with her friends. One day, she saw a bird in the sky. The bird was scared. The cat wanted to help the bird. The brave cat climbed the tree. She saved her friend. The bird was happy. The cat and her friends played and laughed. They were happy that the brave cat saved her friend.
Think of it as a friendly 4-year-old that lives in your pocket.
| 👍 Good at | 👎 Not good at |
|---|---|
| Small talk: "how are you?", pets, feelings | Facts about the real world |
| Simple facts: colors, animal sounds, opposites | Math, homework, coding |
| Saying "I don't know" instead of making things up (mostly) | Remembering more than ~3 messages |
| Short bedtime stories | Long, deep conversations |
It's 8 million parameters. Expect charming nonsense at the edges. That's part of the fun.
cardputer_ai_<version>.bin from Releases and install it with M5Launcher. Or build it yourself: pio run -t upload.| Key | What it does |
|---|---|
Enter | send your message |
/new + Enter | start a fresh conversation |
Tab | settings: chat / story mode, creativity (temperature), reply length |
` | stop a reply mid-sentence |
Fn + ; / . | scroll up / down through the chat |
No Cardputer? The model runs on your computer too: ollama run hf.co/TheREZOR/TinyTalk-2-GGUF
The short version:
The long version, with every build, training and hacking detail, is in docs/DEVELOPING.md.
Writing about Cardputer AI? Use anything here. No need to ask. A credit line and a link to this repo are appreciated.
One-line summary: Cardputer AI is an open-source chatbot that runs entirely on a few-dollar ESP32-S3 microcontroller with 512 KB of RAM. It needs no internet, holds a simple English conversation, and generates about 5 tokens per second.
| Asset | Preview |
|---|---|
| Promo video: 75-second trailer, 1080p MP4 with music · download | |
| Demo video: full demo at real speed, 1080p MP4 (2 min) · download | ![]() |
| Demo GIF: same demo in a device frame · download | ![]() |
| Social banner: 1280×640 · download | ![]() |
| Device frame stills · chat · story | ![]() |
| Screenshots: 1920×1080, pixel-exact · small talk · feelings · facts · settings · story | ![]() |
| Full transcript of the demo · text |
Key facts:
How the media was made: the screens come from the firmware's own UI and chat code, run in a pixel-exact simulator with the real embedded model. Every step is timed at the measured on-device speed. The bot's words are unedited model output. We picked the best random seed per scene, just like picking the best take. The device frame is an illustration, not a photo.
9 tok @ 5.10 t/s (read 61 in 11.8s). It used to
divide the reply's tokens by the whole wait, including re-reading the
chat history (one forward per prompt token), which showed e.g. 0.66 t/s.docs/media); build and training notes moved to docs/DEVELOPING.md.tools/sim: host screen simulator that runs the real firmware UI + model
at device speed and regenerates all media; tools/video: Remotion promo.llm_forward_at / llm_kv_slide), since GPT-Neo bakes its
learned position into the cached keys and they can't be re-rotated.tools/host/host_test.cpp mirrors the firmware's generation loop
(--slide, --sink N, --old-policy, --replay-by-pos) and reports
which prompt tokens each slide drops, so the policy is testable on a host.model_data.cpp blobs are rejected at boot instead of
producing gibberish; SIMD kernel self-tests against the scalar path.tools/eval_chat.py (masked val loss) and
tools/eval_battery.py (scored prompt battery via the host harness).`) key to stop a reply while it's being typed out.Code: MIT (see LICENSE). The embedded model derives from TinyStories-Instruct and the SODA (CC BY 4.0), DailyDialog (CC BY-NC-SA 4.0) and SciQ (CC BY-NC 3.0) datasets. The latter two are non-commercial; see NOTICE.md for full third-party attributions.
16 commits
1 commits
C++
99.6%
Fully offline tiny LLM chatbot on the ESP32-S3 Cardputer ADV - 8M params, Q4 weights baked into the firmware, ~5 tok/s.
C++
93
17 commits
updated Sep 25, 2026
A real chatbot that lives on a microchip.
No internet. No cloud. No phone. Just a tiny chip with 512 KB of RAM, and it talks back.
⬇️ Download firmware · ▶️ Watch the promo · 🤗 Get the model · 📰 Press kit
https://github.com/user-attachments/assets/4f42d833-51dd-4b7c-823d-9e9852355083
Chatbots like ChatGPT run on giant data centers full of GPUs.
Cardputer AI runs on a chip that costs a few dollars. The whole thing (the brain, the words it knows, the chat) fits inside a pocket computer the size of a credit card. Unplug the Wi-Fi. It still works.
Tiny AI on microchips has been done before. But those models could only continue a story: you type "Once upon a time" and they keep going. Ask them a question and you get more story.
This one chats. You say something, it answers. It stays on topic. It asks you questions back. It says "I don't know" when it doesn't know.
To our knowledge, this is the first chatbot that holds a coherent English conversation while running entirely on a microcontroller this small. That means 512 KB of RAM, no extra memory chips, and no internet.
In 2023, the TinyStories paper asked: "How small can language models be and still speak coherent English?" Our answer: small enough to fit on a microchip, and still hold a chat.
| Cardputer AI | |
|---|---|
| 🧠 Brain size | 8 million parameters. That's ~50,000× smaller than Llama 3.1 405B |
| 💾 Memory | 512 KB of RAM, less than one photo on your phone |
| 📦 Model file | 5.7 MB, baked right into the firmware |
| ⚡ Speed | ~5 tokens (word pieces) per second |
| 📡 Internet | Not needed. Ever. |
| 🔋 Power | Runs on the Cardputer's battery |
https://github.com/user-attachments/assets/c9977f6f-6a45-461b-82ca-8b01988d8508
A real conversation, word for word, from the demo video above:
> Hi! How are you?
Hey! I'm good, thanks for asking. How about you?
> I just got a new puppy!
Oh, really? What kind is it?
> He is small and brown.
That's nice. Can I pet him?
> I feel a bit sad today.
Why are you sad?
> My friend moved away.
Oh, that's terrible. Do you want to talk about it?
> What color is the sky?
The sky is blue.
> What does a cow say?
A cow says moo!
> How far away is the moon?
I am too little to know that.
It can tell stories too. Switch to story mode, type "a brave little cat who saves her friend", and you get:
Once upon a time, there was a brave little cat. She lived in a big tree with her friends. One day, she saw a bird in the sky. The bird was scared. The cat wanted to help the bird. The brave cat climbed the tree. She saved her friend. The bird was happy. The cat and her friends played and laughed. They were happy that the brave cat saved her friend.
Think of it as a friendly 4-year-old that lives in your pocket.
| 👍 Good at | 👎 Not good at |
|---|---|
| Small talk: "how are you?", pets, feelings | Facts about the real world |
| Simple facts: colors, animal sounds, opposites | Math, homework, coding |
| Saying "I don't know" instead of making things up (mostly) | Remembering more than ~3 messages |
| Short bedtime stories | Long, deep conversations |
It's 8 million parameters. Expect charming nonsense at the edges. That's part of the fun.
cardputer_ai_<version>.bin from Releases and install it with M5Launcher. Or build it yourself: pio run -t upload.| Key | What it does |
|---|---|
Enter | send your message |
/new + Enter | start a fresh conversation |
Tab | settings: chat / story mode, creativity (temperature), reply length |
` | stop a reply mid-sentence |
Fn + ; / . | scroll up / down through the chat |
No Cardputer? The model runs on your computer too: ollama run hf.co/TheREZOR/TinyTalk-2-GGUF
The short version:
The long version, with every build, training and hacking detail, is in docs/DEVELOPING.md.
Writing about Cardputer AI? Use anything here. No need to ask. A credit line and a link to this repo are appreciated.
One-line summary: Cardputer AI is an open-source chatbot that runs entirely on a few-dollar ESP32-S3 microcontroller with 512 KB of RAM. It needs no internet, holds a simple English conversation, and generates about 5 tokens per second.
| Asset | Preview |
|---|---|
| Promo video: 75-second trailer, 1080p MP4 with music · download | |
| Demo video: full demo at real speed, 1080p MP4 (2 min) · download | ![]() |
| Demo GIF: same demo in a device frame · download | ![]() |
| Social banner: 1280×640 · download | ![]() |
| Device frame stills · chat · story | ![]() |
| Screenshots: 1920×1080, pixel-exact · small talk · feelings · facts · settings · story | ![]() |
| Full transcript of the demo · text |
Key facts:
How the media was made: the screens come from the firmware's own UI and chat code, run in a pixel-exact simulator with the real embedded model. Every step is timed at the measured on-device speed. The bot's words are unedited model output. We picked the best random seed per scene, just like picking the best take. The device frame is an illustration, not a photo.
9 tok @ 5.10 t/s (read 61 in 11.8s). It used to
divide the reply's tokens by the whole wait, including re-reading the
chat history (one forward per prompt token), which showed e.g. 0.66 t/s.docs/media); build and training notes moved to docs/DEVELOPING.md.tools/sim: host screen simulator that runs the real firmware UI + model
at device speed and regenerates all media; tools/video: Remotion promo.llm_forward_at / llm_kv_slide), since GPT-Neo bakes its
learned position into the cached keys and they can't be re-rotated.tools/host/host_test.cpp mirrors the firmware's generation loop
(--slide, --sink N, --old-policy, --replay-by-pos) and reports
which prompt tokens each slide drops, so the policy is testable on a host.model_data.cpp blobs are rejected at boot instead of
producing gibberish; SIMD kernel self-tests against the scalar path.tools/eval_chat.py (masked val loss) and
tools/eval_battery.py (scored prompt battery via the host harness).`) key to stop a reply while it's being typed out.Code: MIT (see LICENSE). The embedded model derives from TinyStories-Instruct and the SODA (CC BY 4.0), DailyDialog (CC BY-NC-SA 4.0) and SciQ (CC BY-NC 3.0) datasets. The latter two are non-commercial; see NOTICE.md for full third-party attributions.
16 commits
1 commits
C++
99.6%