Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/springtype-org/springtype

~1k TypeScript/TSX nano-framework for the web
https://github.com/springtype-org/springtype

development fast framework functional functional-programming micro performance pwa-apps simplicity springtype testable tiny tsx typescript vdom web websites zero-dependency

Last synced: about 1 month ago
JSON representation

~1k TypeScript/TSX nano-framework for the web

Awesome Lists containing this project

README

        

SpringType


„Everything should be made as simple as possible, but no simpler.” - Albert Einstein


SpringType NPM version
LGTM Code Quality Rating
LGTM Total alerts
License
Circle CI
Gitter Chat

Example code

SpringType combines the best parts of the React API with the simplicity of jQuery:

```tsx
import { tsx, render, Ref } from "springtype";
import { $ } from "st-query";

interface HelloMessageProps {
text: string;
}

// a functional component, just like in React
// but it only renders one time
const HelloMessage = ({ text }: HelloMessageProps) => {

// reference is stored when the element is created
const messageRef: Ref = {};

// because there is no magic re-rendering,
// we can safely use setInterval() and can also
// safely wave goodbye to fancy hooks like useCallback() or useEffect()!
setInterval(() => {

// in case we want to change the rendering,
// we just do this programmatically, where it's needed
$(messageRef.current).html(

SpringType

);

}, 1000 /* 1 sec */);

return (


Hello, {text}!

)
}

// SpringType renders to document.body by default
// but you can just provide a second argument to change this
render();
```

For a more complex demo, see:
TODO list demo

Features

- ✅ React-like VDOM supporting native DOM access via `ref`
- ✅ HTML/SVG-compatible `TSX` - supports standard `class`
- ✅ ~1k bundle size: `1008 byte` (best, brotli) - `1319 byte` (worst, umd, gz)
- ✅ Zero dependencies
- ✅ Purely functional
- ✅ First class TypeScript support
- ✅ 100% Unit Test coverage
- ✅ TestCafé smoke tests

Philosophy

Less is more! Complexity is the devil! SpringType does render the TSX structure only one-time.

SpringType does NOT update the DOM. This takes away tons of complexity and performance headaches.

After initial rendering, you can basically go with pure TypeScript/DOM APIs to mutate the DOM wherever and whenever it is actually needed - not when the framework *thinks* it's needed.

However there is...

- st-query - a jQuery-like nano library for runtime DOM manipulation (+~`500 byte`)
- st-route - an Expess-like nano library for client-side DOM routing (+~`400 byte`)
- st-bus - a socket.io-like nano library for application/component eventing (+~`150 byte`)
- st-state - a map-like nano library for client-side state management and persistency (+~`200 byte`)
- st-i18n - a i18next-like nano library for translation and string interpolation (+~`500 byte`)
- st-jss - a JSS-like nano library for working with CSS in TS/JS (+~`600 byte`)

...to make your life easier :-)

Backers

Thank you so much for supporting us financially! 🙏🏻😎🥳👍






Tom


Maintainers

SpringType is brought to you by:






Aron Homberg




Tom




Michael Mannseicher


Contributing

Please help out to make this project even better and see your name added to the list of our
[CONTRIBUTORS.md](./CONTRIBUTORS.md) :tada: