[HN Gopher] Tactility: An ESP32 OS
___________________________________________________________________
Tactility: An ESP32 OS
Author : surprisetalk
Score : 188 points
Date : 2025-09-29 13:11 UTC (3 days ago)
(HTM) web link (tactility.one)
(TXT) w3m dump (tactility.one)
| sroerick wrote:
| I bought a Picocalc and I have to confess I don't know what to do
| with it. Picomite looks like a pretty awesome and capable BASIC
| implementation, but it doesn't seem like there's any wifi
| capability at all.
|
| I suppose I could do read write on an SD card but that's a lot of
| legwork for a not great workflow.
|
| I'd love a simple device like the pico calc which I can use to
| hit a simple api endpoint. Clockwork PI and full Ubuntu seem a
| little bit like overkill.
|
| I'd like to have a cool BASIC or Forth implementation and use a
| fun stack like that, but without being able to hit an API I'm not
| sure I will be motivated to use it.
|
| This seems like a big improvement here, maybe I take a look at
| the LilyGo. I'm impressed
| gregsadetsky wrote:
| I've been surprised personally that there are now a number of
| these small qwerty-LCD portable devices (that mostly resemble
| blackberries), but very few? (certainly not none..??) of them
| boast actual 3g/4g ie "real" cell phone connectivity
|
| I might personally find it a lot more tempting to use a super
| DIY device (ie a baroque OS, unique input devices, etc.) if I
| could also make calls out to the public Internet (to read
| wikipedia? answer SMS? fetch any sort of map/transit info?)
|
| Feel free to pile on and tell me which devices I've missed..!
| :-) I'm sure there must be some out there, considering that
| "cell phone in a chip" is pretty much a whole category now ie
| the qualcomm snapdragon chips, mediatek, etc.
|
| ... (reading more about it) actually, is it true that
| design/certification of a small device that boasts a cellular
| module is a lot harder than an esp32/wifi-only board? which
| explains why there isn't a plethora of cell-internet-enabled
| devices?
| bArray wrote:
| > I might personally find it a lot more tempting to use a
| super DIY device (ie a baroque OS, unique input devices,
| etc.) if I could also make calls out to the public Internet
| (to read wikipedia? answer SMS? fetch any sort of map/transit
| info?)
|
| A browser would be quite tough on such an embedded system,
| you would need to really think outside of the box. The issue
| is that a browser could easily need more space to render than
| is available, have tonnes of images, require JS, etc.
|
| On my machine. the lightweight browser dillo is 852kB, and
| that doesn't include the shared libraries (I could 26 on my
| machine). It's not going to be easy to get a similar
| experience running.
|
| > Feel free to pile on and tell me which devices I've
| missed..! :-) I'm sure there must be some out there,
| considering that "cell phone in a chip" is pretty much a
| whole category now ie the qualcomm snapdragon chips,
| mediatek, etc.
|
| I'm hoping to add to the list of devices myself maybe next
| year. It's a very difficult space to operate in.
|
| > ... (reading more about it) actually, is it true that
| design/certification of a small device that boasts a cellular
| module is a lot harder than an esp32/wifi-only board? which
| explains why there isn't a plethora of cell-internet-enabled
| devices?
|
| For the most part you can get already certified modules,
| where the ESP32 is itself largely one of these modules (the
| small ones with the metal body on a thin PCB). I think
| cellular is mostly avoided due to the increase in BOM, and
| you're not easily going to get 4G/5G support.
| gregsadetsky wrote:
| Thanks for your reply! Good point re: browser but I guess
| that's where my excitement about the possibilities lies: I
| wouldn't mind an extremely under-resourced device. RSS
| feeds and text content could be sent (and wouldn't require
| specialized rendering), vector maps and points of interest
| or transit info could be super minimal in terms of
| bandwidth/rendering requirements, etc.
|
| I think that I want a 5G tty qwerty terminal..? :-)
|
| aka https://github.com/rastapasta/mapscii for maps, etc.
|
| > and you're not easily going to get 4G/5G support
|
| Sorry, what do you mean by that? In the sense of 4G not
| being that supported vs 3G? As in the chips aren't
| available? Or 4G service is hard to find..?
|
| Cheers
| bArray wrote:
| > I wouldn't mind an extremely under-resourced device.
| RSS feeds and text content could be sent (and wouldn't
| require specialized rendering), vector maps and points of
| interest or transit info could be super minimal in terms
| of bandwidth/rendering requirements, etc.
|
| A compromise might be to send the traffic via a proxy
| that pre-resizes images, renders content and chops it up
| into a manageable format for a resource constrained
| device.
|
| > I think that I want a 5G tty qwerty terminal..? :-)
|
| > aka https://github.com/rastapasta/mapscii for maps,
| etc.
|
| For resource constrained devices, it's probably easier to
| render the vector graphics. There's a few open end points
| out there that could make it feasible for basic
| navigation.
|
| > Sorry, what do you mean by that? In the sense of 4G not
| being that supported vs 3G? As in the chips aren't
| available? Or 4G service is hard to find..?
|
| You can get them, but they are harder to interface with
| than the existing 2G/3G chips. Whoever takes on the
| challenge might have to do some work reverse engineering
| how to correctly speak to the modem, for example.
| mlhpdx wrote:
| WML is (needed) back?
|
| https://en.m.wikipedia.org/wiki/Wireless_Markup_Language
| bArray wrote:
| It would help, but the majority of pages out there are
| completely unusable without Javascript.
| joshmarinacci wrote:
| I'm currently working on a browser targeting the T-deck in
| pure Rust. It's effectively a text mode command line
| browser good for reading pages with links and nothing else.
| There just isn't the ram for anything more. Interestingly,
| The slowest part is actually SSL connections.
| bArray wrote:
| See the other comment for a MITM large browser server:
| https://news.ycombinator.com/item?id=45446991
|
| To do everything onboard, maybe, just maybe, you could
| parse basic HTML/CSS and images. But the majority of
| pages would of course fail anyway without full support
| for every modern feature.
|
| This seems like it could be useful:
| https://limpet.net/mbrubeck/2014/08/08/toy-layout-
| engine-1.h...
| miki123211 wrote:
| What you could do is the "opera mini trick", AKA one beefy
| server, shared between many users, used to run heavyweight
| browsers. The pre-rendered DOM from these browsers could
| then be optimized and compressed, HTMX / Liveview style,
| and sent to the device.
|
| The key insight here is that most smartphones are idle most
| of the time, so such a server (or group of servers) would
| need far less processing power than all the smartphones it
| replaces.
|
| Given a Mitmproxy trace, modern llms could probably quickly
| build you simple apps for most popular services, leaving
| the heavyweight browsers for the long tail.
| bArray wrote:
| Yeah, exactly. I think this could make browsing feasible
| for small embedded devices. I even had an idea on how to
| make Youtube possible too with a similar method.
| estimator7292 wrote:
| I'm no expert, but as I understand the 2.4GHz band has more
| lax requirements than the cellular bands, but it's not like
| _ridiculously_ difficult, it 's "just" a matter of money.
| Especially if you're using off the shelf modules.
|
| But at a practical level, there's really extremely few
| situations where you actually need a WWAN modem. There's
| almost always wifi available and if not you almost always
| have a phone with an internet connection. That aside, a big
| part of why people make these devices is specifically to get
| away from always-connected internet devices.
|
| It also may or may not need approval from whichever telco
| operator you're trying to connect to, and the user has to
| provide their own SIM and do the legwork to get a
| subscription. It's just not super practical. Not impossible,
| but a big pain in the ass for not much benefit.
| ACCount37 wrote:
| Just about every modem that can do actual real 4G cell phone
| connectivity is built around a SoC that blows the socks off
| your usual microcontroller.
|
| The cheapest noname 4G USB stick you can buy now probably has
| a Qualcomm MSM8916 in it, and runs, I shit you not, Android.
|
| As you can imagine, development with this kind of thing can
| be rather involved. No open development kits are available.
| There are no reference designs that don't require you to sign
| off on an NDA to access it, and Qualcomm wouldn't even want
| to talk to you unless you are at least "MOQ 100000+" tall.
|
| The best you can do is get an existing modem module that
| hopefully doesn't bury too many of the interfaces you want,
| try to run your firmware on it, and then design your own
| board around that.
|
| Which would probably yield a device that's inferior to most
| cheap smartphones or even feature phones.
| colechristensen wrote:
| I'm consistently puzzled why 5G versions of these SoC don't
| seem to exist for hardware hackers yet. I plain can't find
| any kind of 5G modem that isn't just a whole phone unless I
| pay like $1,000.
| cyberax wrote:
| There are some available. For example:
| https://www.quectel.com/product/5g-redcap-rg255c-gl-m2/ -
| it costs around $120 per module. They have others:
| https://www.quectel.com/5g-iot-modules/
|
| Which is pretty much what it costs for phone
| manufacturers right now.
|
| I guess the real reason is that 4G is more than
| sufficient for pretty much anything, and it's going to be
| supported for the foreseeable future?
| gunalx wrote:
| Where I live we are already talking about abandoning 2g,
| and 4g. (3g died a while back and 2g was kept as legacy
| network).
| cyberax wrote:
| Really? Even satellites for off-grid messaging abandoned
| _5G_ and instead went with the good old LTE.
| extraduder_ire wrote:
| Reminds me of people using esp8266/esp32 chips just for
| wifi/bluetooth when paired with an AVR chip on an arduino.
| miki123211 wrote:
| The cheapest noname 4G USB stick you can buy now probably
| has a Qualcomm MSM8916 in it, and runs, I shit you not,
| Android.
|
| You're not wrong, see also [1].
|
| > and Qualcomm wouldn't even want to talk to you unless you
| are at least "MOQ 100000+"
|
| These[2,3,4] definitely aren't MoQ "100000+" (I know this
| market), and yet they have gotten their hands on Android
| chipsets somehow, [2] even includes a cellular modem. Not
| cheap devices by any means though.
|
| [1] https://nickvsnetworking.com/adventures-with-a-10-lte-
| mifi-d... [2] https://www.blindshell.com/eshop/blindshell-
| classic-3-eu [3]
| https://www.himsintl.com/en/blindness/view.php?idx=8 [4] ht
| tps://www.humanware.com/microsite/bntouch/index.php?srslti.
| ..
| numpad0 wrote:
| Those products are almost always sourced from Chinese
| ODMs. They're the adults in the projects to the eyes of
| chip vendors, and the ODMs handle the quadrillion MOQ
| situation between them and vendors. Also products in [3]
| and [4] don't seem to support cellular? [3] smells
| AllWinner or MediaTek, [4] specifies TI OMAP in
| specifications page. Those are less NDA/bajilion MOQ
| bound.
| ACCount37 wrote:
| Those specialized devices are usually made in partnership
| with some third party ODM that's big enough to get
| Qualcomm's attention. Same for things like warehouse
| barcode scanners that run Android.
|
| Even if you could get attention of one, and get it to
| design and make a custom device that wouldn't break the
| bank? You are still likely to end up with that OEM owning
| the design and/or binding you with a small pile of NDAs.
|
| Another option would be to find a supplier that can get
| you some "fell off the back of a truck" smartphone
| chipsets, and either design your own PCB and roll your
| own software, or use a "fell off the back of a truck"
| reference design, SDK and tooling too. You'd need to be a
| real hardcore motherfucker to do that though.
| M95D wrote:
| There was a DYI mobile phone project (real mobile phone,
| with GSM/3G calling and SMS). Abandoned now.
|
| https://github.com/CircuitMess/CircuitMess-Ringo
| rtpg wrote:
| beyond the unihertz existing, I think that there's probably
| an interesting space for a device that works on the idea of
| intermittent internet (i.e. wifi)
|
| Offline maps being a big one that you could maybe "just" do.
| If you really need to get the device online pull out your
| phone.
|
| Though I feel like there's loads of stuff that are on LTE
| etc. Just... they're real companies doing real things and not
| people hacking together one-offs. Think agtech, vending
| machines etc.
| pjmlp wrote:
| We couldn't hit any Web API on TI 8x models, CASIO 8xx series,
| HP-48 GX, and yet there was plenty of motivation on how to use
| them for games and demoscene like coding.
|
| No need for Internet for some fun.
| Rebelgecko wrote:
| Neat, seems like a good way to build a flipper like experience
| with different utility apps. What is the "chat" app using for
| sending messages? Something local like BT/Esp now? Or a longer
| range platform like Meshtastic?
| bArray wrote:
| Seems to be using ESP now:
| https://github.com/ByteWelder/Tactility/blob/main/Tactility/...
|
| I think this device is begging for an IRC client though.
| nunobrito wrote:
| I was writing that app together with the author, the
| communication is using ESPnow at the moment, albeit Tactility
| is running on devices with LoRa so it isn't that difficult to
| extend for LoRa.
| NellowTCS wrote:
| Also contributor to Tactility, there's a pull request for a
| LoRa chat app with (I believe) Meshtastic support.
| https://github.com/ByteWelder/Tactility/issues/342
| nunobrito wrote:
| Very good. I guess will give a new look over there soon to
| try out the novelties.
| sunshine-o wrote:
| This is really great.
|
| There are so many cool use cases for those ESP32 type devices
| beyond IoT.
|
| Something I was thinking about it turning them into password
| managers or TOTP tokens. You would just need to be able to run an
| SSH server on it and have access to basic crypto. Apache NuttX is
| probably the best candidate for that.
|
| Then you would just need to turn them on or turn the wifi on when
| needed.
| 5- wrote:
| interestingly, this is the first esp32 firmware i've seen that
| claims to support loadable native code applications ("elf apps"),
| even though it seems to come with only a single example:
|
| https://github.com/ByteWelder/Tactility/blob/main/App/Source...
|
| since a lot of the newer esp32 devices purport to be computers
| (e.g. lilygo t-deck/t-lora pager, m5stack cardputer, ...), it's a
| bit strange that with a typical esp-idf setup you can't actually
| run arbitrary code on them.
| Rohansi wrote:
| You can technically do it on any processor that allows you to
| execute code from RAM. Loading ELF files at runtime is a whole
| process provided by an OS kernel, which ESP-IDF is not.
| lelanthran wrote:
| > interestingly, this is the first esp32 firmware i've seen
| that claims to support loadable native code applications ("elf
| apps"),
|
| Very skeptical that this is of any use; after bootup you have,
| what ... 260kb of RAM? Just doing runtime linking/relocations
| would eat up some of that. Just how small would your
| application have to be to be loaded at runtime?
|
| Maybe they don't load the whole think into RAM, but thunk it
| somehow (I assume that elf supports that)?
| Rohansi wrote:
| Some variants of the ESP32 support executing code from
| external memory (PSRAM) too. That gives you 8MB more to play
| with.
| elcritch wrote:
| Pretty sure with xtensa and gcc you can compile to PIC.
| Google says a linker only would need to modify the Global
| Offset Table and Procedure Linkage Table. That doesn't sound
| too terrible.
|
| Also 260kB of RAM on a 32bit processor could be a fair bit of
| code. Plus you could write it to external or internal flash.
| Though I don't know if esp-idf supports XIP (Zephyr does).
| mrheosuper wrote:
| > esp-idf supports XIP
|
| XIP depends on hardware support, not software.
| iberator wrote:
| There must be some a.out format there or .com like in Dos.
| Also original Unix run at 48kb of ram
| Cheer2171 wrote:
| The Apollo Guidance Computer only had 4kb of RAM and got to
| the moon and back.
| numpad0 wrote:
| You don't link bunch of stuffs in RAM at execution time on
| embedded devices... all static and anything static stays in
| ROM. "eXecute In Place". ROM's just slow RAM that forget
| writes. Only variables goes on to RAM, and 260kB is enough
| for a lot of non-multimedia data.
| nerdsniper wrote:
| Some ESP32's have 8MB of PSRAM and 16MB of flash "storage".
| You can theoretically also add external SRAM modules but I've
| never seen that IRL for the ESP32 family. I've occasionally
| seen the flash used as slower, persistent RAM.
| nunobrito wrote:
| It isn't easy but flipper did a remarkable work demonstrating
| it was possible. Tactility is following a similar concept and
| in my opinion is the project that implemented it best after
| flipper.
|
| In the past, the solution for arbitrary code was running
| scripts such as Wrench: https://github.com/jingoro2112/wrench
|
| More recently also became possible to run Java apps with a JVM
| on ESP32: https://github.com/FlintVN/FlintESPJVM which is not
| yet arbitrary (e.g. download and run) but that is the route of
| development.
|
| Even Linux was demonstrated running on ESP32 albeit I've never
| tried it: https://www.youtube.com/watch?v=pj0a91vlcGo
| anonymousiam wrote:
| I've been toying with the ESP32 architecture for a few years.
| (I began with ESP32-DevKitC in 2022.) I recently got four
| ESP32-S3 modules with the intent of trying out the ESP32 Bus
| Pirate (https://github.com/geo-tp/ESP32-Bus-Pirate).
|
| I hadn't heard about any Linux ports until I saw your comment
| here. Thanks!
|
| The "playground" Linux port looks interesting, but it hasn't
| seen any updates for nearly a year. Still, I'm going to try
| it on a ESP32-S3 N16R8 and see how it goes.
|
| It's funny, because I first ran Linux (SLS & Yggdrasil) on a
| PC with a 33MHz clock, 32MB RAM, and a 70MB hard drive. The
| N16R8 clock speed, RAM, and flash are all within an order of
| magnitude of what was on that old PC.
|
| https://github.com/ESP32DE/Boot-Linux-ESP32S3-Playground
| nunobrito wrote:
| Yes, kind of crazy for those of us that remember those
| days. ESP32 are quite the magical devices when considering
| the price/features ratio.
|
| If you try the Linux build I'd appreciate to read your
| feedback/experience when running it.
| mrheosuper wrote:
| Zephyr support ESP32 and LLEXT
| ByteWelder wrote:
| That app is just an internal one for when people build their
| own firmware. The external apps have recently moved to
| https://github.com/ByteWelder/TactilityApps
|
| It's still not much, but more will be made in the coming
| months. I wanted to stabilize the APIs a bit more before making
| more apps. I almost finished a Diceware app.
| solarkraft wrote:
| I am also looking for this.
|
| I envision an OS that handles networking, remote maintenance
| and updates and possibly even some scheduling for multiple
| applications, so that I don't have to do all that in my
| application code. I don't see what conceptually would make this
| hard and it would be a great step up in hobbyist development
| experience to me.
|
| As far as I'm aware NuttX (POSIX-like) even has a shell, so I
| don't see what should be so hard about it (please correct me).
|
| Edit: Apparently Zephyr is also gaining support for this.
| Whoever builds a simple platform on top of one of these
| definitely had my attention.
| NullCascade wrote:
| The Toit language and runtime is also ESP32-focused:
|
| https://github.com/toitlang/toit
| snvzz wrote:
| Does this support the recent RISC-V based ESP32s, or is it
| restricted to just legacy devices?
| lioeters wrote:
| I see a change log that mentions RISC-V support.
|
| > ## v1.0.0 - 2024-12-09
|
| > * Added support for the following RISC-V chips: ESP32-P4 and
| ESP32-C6
| mrheosuper wrote:
| This is, AFAICT, not an OS.
| stonogo wrote:
| I'm not sure a definition of "operating system" that doesn't
| cover this software is particularly meaningful.
| mrheosuper wrote:
| it's just misleading to me, i was expecting a brand new RTOS.
|
| People keep throwing OS into anything that is slightly look
| like a graphic interface.
| iamflimflam1 wrote:
| What would be your definition of an OS?
| mrheosuper wrote:
| At least have a scheduler. That's bare minimum.
| iamflimflam1 wrote:
| Would define MS-DOS as an operating system?
| mrheosuper wrote:
| Later vesion of ms-dos has scheduler, so yes.
|
| Early version to me is just a fancy bootloader, that boot
| whatever program you choose and give up complete system
| control to that program.
| Imustaskforhelp wrote:
| There is coreboot which is technically just linux but as
| the bootloader so a fancy bootloader could have many
| similarities with a os as although I know that linux is a
| kernel but I am not really sure as linux is also an
| operating system as well so the lines are definitely
| blurry and not as clear I suppose
|
| Fun fact I was actually thinking of a similar idea and I
| had always known about coreboot but I hadn't known that
| it was actually invented because someone figured out that
| the bootloader and the linux kernel had similarities and
| so that's why. it was an aha moment of me for sorts
|
| I came to know about this from the heads firmware ccc
| speech yesterday which I am going to link later as I saw
| it on my pc and I don't have its access right now
|
| See coreboot till then https://www.coreboot.org/ and also
| a fork of coreboot which removes propreitory blobs iirc
| https://libreboot.org/ as well
| iberator wrote:
| yes. It had an Impressive kernel API. It was a single
| user _by design_. Background resident programs were
| possible and common btw (TRS) especially after 286 came
| to the market.
| elcritch wrote:
| Looks fun! I recently updated my Nim wrapper for esp32 for esp-
| idf 5.5 [1]. I've been wanting to play with a graphics device,
| maybe via Tactility..
|
| Also the integrated usb-phy on newer esp32s is pretty handy. I
| setup a driver to do PPP (!) connection over a USB-CDC serial
| port with a second serial port for logging [2]. All in 200 lines
| of Nim and a few Codex/GPT5 prompts.
|
| I got a multithreaded MsgPack RPC server over the PPP connection
| using IPv6. Unfortunately you can't use CDC mode and USB JTAG, so
| I have a little rpc based binary uploader.
|
| 1: https://github.com/elcritch/nesper 2:
| https://github.com/elcritch/nesper/blob/devel/src/nesper/net...
| iamflimflam1 wrote:
| I'm probably missing it - but are there any instructions on how
| to add support for another board?
___________________________________________________________________
(page generated 2025-10-02 23:01 UTC)