# Our stack
Here you can find a short introduction to the repositories that are central to our development stack.
We usually don't use any hyped frameworks or big libraries, instead preferring in-grown, small modules that use boring but reliable technologies.
## Sealious
Repo: {rS}
Project: #sealious
This is our ORM. It's a declarative tool that you can use to build production-reqdy REST API or an ORM for your backend in minutes. Check out its [README file](https://hub.sealcode.org/source/sealious/#sealious) to see for yourself :)
Sealious is only concerned about the data and logic of your app. It does not build views or any kind of UI for the end user.
You can use any GUI layer for your Sealious app that you'd like. You can have a taste of a React-based one in production here: https://dlaschroniska.pl/. We no longer use React here in Sealcode, though.
If you want to quickly run a local Sealious app, look no further than {rPLAY}
## Sealgen
Repo: {rSGEN}
Project: #sealgen
Sealgen is three things:
* a tool to programmatically build views and forms that don't rely on front-end-side JS; and
* a code generator for your Sealious-based project;
* a build tool for your Sealious-based project;
While working on a Sealious-based project, you can use `npx sealgen add-route` to scaffold the few files that are necessary to augment your app with another view or form. Thanks to that all apps built with sealgen follow a certain very predictable file structure.
Sealgen also helps with automatically detecting changes in your app and restarting it to reflect changes (it only takes an instant). We didn't implement watching and building from scratch - thankfully this part of Sealgen is just a simple wrapper around the wonderful and lightning-fast `esbuild`, with a default config and plugin setup.
## ts-predicates
Repo: {rPRED}
Project: #ts_predicates
This is our tool for checking the structure of unknown objects at runtime in a way that makes TypeScript happy. See the examples in the [README](https://hub.sealcode.org/source/ts-predicates/#ts-predicates) to get a taste of how it works
## ImageRouter
Repo: {rRIMAGEROUTER}
Project: #imagerouter
Serving responsive images is hard! Just look at this blog post to see how much manual labor it takes to do by hand:
https://hub.sealcode.org/phame/post/view/12/responsywne_obrazki_w_html/
The beautifully named koa-responsove-image-router handles all of that for you. You just tell it the target size of the image on page and point it to a photo file on a disk, and it handles the rest. It:
* generates the complex HTML needed to inform the browser about multiple download options for the image;
* serves the scaled up images on demand;
* handles cropping the images to the required proportions;
* and more!
Using ImageRouter makes hitting that high PageSpeed score much easier.
## Module starter
Repo: {rSTART}
Project: #module_starter
This is a bunch of boilerplate files that you can use when creating a new Typescript module for use at Sealcode. It makes the module work well with Typescript, Eslint, Phabricator and our linters.
## Locreq
Repo: {rLQ}
Project: #locreq
A small utility for importing files based on their relative path from the project root. Saves you typing a lot of "../../../../../" and makes the files more portable within a given project.
## multiple-scripts-tmux
Repo: {rMULT}
Project