StackShareStackShare
Follow on
StackShare

Discover and share technology stacks from companies around the world.

Product

  • Stacks
  • Tools
  • Companies
  • Feed

Company

  • About
  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2025 StackShare. All rights reserved.

API StatusChangelog
  1. Home
  2. Companies
  3. Orbulo
Orbulo logo

Orbulo

Verified

The virtual replacement for classroom whiteboards.

tabulo.app
83
Tools
1
Decisions
0
Followers

Tech Stack

Application & Data

43 tools

Elixir logo
Elixir
Phoenix Framework logo
Phoenix Framework
bcryptjs logo
bcryptjs
pkg-dir logo
pkg-dir
jsonwebtoken logo
jsonwebtoken
lint-staged logo
lint-staged
module-alias logo
module-alias
jwt-decode logo
jwt-decode
Lodash logo
Lodash
html2canvas logo
html2canvas
Quasar Framework logo
Quasar Framework
base64-js logo
base64-js
aws-sdk logo
aws-sdk
ts-node-dev logo
ts-node-dev
ts-node logo
ts-node
graphql-tools logo
graphql-tools
dateformat logo
dateformat
escape-html logo
escape-html
inquirer logo
inquirer
uuid logo
uuid
pretty-ms logo
pretty-ms
pg logo
pg
ioredis logo
ioredis
nanoid logo
nanoid
dotenv logo
dotenv
dayjs logo
dayjs
Actix logo
Actix
Rust logo
Rust
ts-jest logo
ts-jest
Capacitor logo
Capacitor
Markdown logo
Markdown
GraphQL logo
GraphQL
CSS 3 logo
CSS 3
Vue.js logo
Vue.js
Python logo
Python
Lua logo
Lua
CloudFlare logo
CloudFlare
JavaScript logo
JavaScript
Node.js logo
Node.js
HTML5 logo
HTML5
PostgreSQL logo
PostgreSQL
ES6 logo
ES6
TypeScript logo
TypeScript

Utilities

1 tool

Amazon ElastiCache logo
Amazon ElastiCache

Team Members

Leon Si
Leon SiCTO

Engineering Blog

Stack Decisions

Leon Si
Leon Si

Jul 23, 2021

At Tabulo, we make extensive use of Redis as a state store. However, for common operations, we found ourselves making multiple requests to the Redis server from our Elixir microservice. These network requests became a bottleneck, and so we turned to using Lua scripts that could be run on the context of the Redis server, which would only require one network request per script.

However, the Redis implementation of Lua had its restrictions; for one, we couldn't use require() calls in Lua. There were also times when we wanted to call one Lua script from another, which Redis didn't support (there was an undocumented workaround, but it made debugging a pain). So, we wrote a preprocessor that would replace require() calls with the actual content of the file it was requiring and create generated Lua files that could be read and loaded into the Redis server.

However, as our Lua scripts got more complex, we wanted a more maintainable way to write them. We turned to Teal (https://github.com/teal-language/tl), a dialect of Lua that adds static types while still compiling to Lua (similar to TypeScript for JavaScript). Teal worked beautifully, and we now write our Lua scripts using Teal, compile them into Lua, and preprocess them using our custom preprocessor.

For us, while Lua may not be the most powerful language, it has served us beautifully for writing Redis scripts, especially in combination with Teal.

34.5k views34.5k
Comments