{"id":17579430,"url":"https://github.com/fponticelli/tempots","last_synced_at":"2025-08-02T16:38:00.452Z","repository":{"id":247156272,"uuid":"783466523","full_name":"fponticelli/tempots","owner":"fponticelli","description":"A lightweight UI Framework ","archived":false,"fork":false,"pushed_at":"2025-04-14T20:12:48.000Z","size":13092,"stargazers_count":14,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-14T21:28:47.562Z","etag":null,"topics":["components","framework","frontend","typescript","ui","web"],"latest_commit_sha":null,"homepage":"https://tempots.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fponticelli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-08T00:10:49.000Z","updated_at":"2025-03-22T03:35:38.000Z","dependencies_parsed_at":"2024-07-19T09:43:32.631Z","dependency_job_id":"8c3a50d5-453d-4c69-85a5-8a54edfc0ee9","html_url":"https://github.com/fponticelli/tempots","commit_stats":null,"previous_names":["fponticelli/tempots"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fponticelli%2Ftempots","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fponticelli%2Ftempots/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fponticelli%2Ftempots/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fponticelli%2Ftempots/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fponticelli","download_url":"https://codeload.github.com/fponticelli/tempots/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248965633,"owners_count":21190646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["components","framework","frontend","typescript","ui","web"],"created_at":"2024-10-22T00:44:46.663Z","updated_at":"2025-08-02T16:38:00.434Z","avatar_url":"https://github.com/fponticelli.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tempo\n\n[![npm @tempots/dom](https://img.shields.io/npm/v/@tempots/dom?label=@tempots/dom)](https://www.npmjs.com/package/@tempots/dom)\n[![npm @tempots/std](https://img.shields.io/npm/v/@tempots/std?label=@tempots/std)](https://www.npmjs.com/package/@tempots/std)\n[![npm @tempots/ui](https://img.shields.io/npm/v/@tempots/ui?label=@tempots/ui)](https://www.npmjs.com/package/@tempots/ui)\n[![codecov](https://codecov.io/gh/fponticelli/tempots/branch/main/graph/badge.svg)](https://codecov.io/gh/fponticelli/tempots)\n[![CI](https://github.com/fponticelli/tempots/workflows/CI/badge.svg)](https://github.com/fponticelli/tempots/actions)\n[![GitHub stars](https://img.shields.io/github/stars/fponticelli/tempots?label=Star%20me%20on%20Github\u0026style=social)](https://github.com/fponticelli/tempots)\n\nTempo is a modern, lightweight UI framework for building dynamic frontend applications with TypeScript. It provides a simple, predictable way to create reactive web interfaces without the complexity of other frameworks.\n\n[Project Homepage](https://tempo-ts.com/)\n\n## Key Features\n\n- **Simple TypeScript Functions**: Build UIs with plain functions, no complex class hierarchies or special syntax\n- **Zero Dependencies**: Lightweight and efficient with no external dependencies\n- **Predictable Rendering**: Direct DOM updates without a virtual DOM for better performance\n- **Reactive by Design**: Built-in reactive state management with Signals\n- **Type-Safe**: Fully typed with TypeScript for better developer experience\n- **Fine-Grained Control**: Precise control over rendering and updates when needed\n\n## Installation\n\n```bash\n# npm\nnpm install @tempots/dom\n\n# yarn\nyarn add @tempots/dom\n\n# pnpm\npnpm add @tempots/dom\n```\n\nFor UI components and utilities:\n\n```bash\n# npm\nnpm install @tempots/dom @tempots/std @tempots/ui\n\n# yarn\nyarn add @tempots/dom @tempots/std @tempots/ui\n\n# pnpm\npnpm add @tempots/dom @tempots/std @tempots/ui\n```\n\n## Quick Start\n\n```typescript\nimport { html, render, prop, on } from '@tempots/dom'\n\nfunction Counter() {\n  // Create a reactive state\n  const count = prop(0)\n\n  // Create a UI with the reactive state\n  return html.div(\n    html.h1('Counter Example'),\n    html.div(\n      'Count: ',\n      count.map(String)\n    ),\n    html.button(\n      on.click(() =\u003e count.value--),\n      'Decrement'\n    ),\n    html.button(\n      on.click(() =\u003e count.value++),\n      'Increment'\n    )\n  )\n}\n\n// Render to the DOM\nrender(Counter(), document.getElementById('app'))\n```\n\n## Packages\n\nTempo consists of three main packages:\n\n### @tempots/dom\n\nThe core UI framework that provides the foundation for building web applications. It includes:\n\n- Renderables - The building blocks for creating UI elements\n- Signals - Reactive state management\n- DOM manipulation utilities\n- Event handling\n\n### @tempots/std\n\nA standard library of utility functions for TypeScript that complements Tempo:\n\n- Array, string, and object utilities\n- Async helpers\n- Validation tools\n- Timer functions\n- And more\n\n### @tempots/ui\n\nA collection of reusable UI components and renderables built on top of @tempots/dom:\n\n- Common UI components\n- Routing utilities\n- Form controls\n- Layout helpers\n\n## Demos\n\nCheck out these demos to see Tempo in action:\n\n- [Hacker News PWA](https://tempo-ts.com/demos/hnpwa/index.html) - A Hacker News reader built with Tempo\n- [7GUIs](https://tempo-ts.com/demos/7guis/index.html) - Implementation of the 7GUIs benchmark\n- [TodoMVC](https://tempo-ts.com/demos/todomvc/index.html) - The classic TodoMVC example\n- [Counter App](https://tempo-ts.com/demos/counter/index.html) - A simple counter application\n\n## Documentation\n\nFor comprehensive documentation, visit the [Tempo Documentation Site](https://tempo-ts.com/).\n\n- [Quick Start Guide](https://tempo-ts.com/page/quick-start.html)\n- [How Tempo Works](https://tempo-ts.com/page/how-it-works.html)\n- [Renderables](https://tempo-ts.com/page/renderables.html)\n- [Signals](https://tempo-ts.com/page/signals.html)\n- [Building Components](https://tempo-ts.com/page/components.html)\n\n## Why Choose Tempo?\n\n- **Simplicity**: No complex abstractions or special syntax to learn\n- **Performance**: Direct DOM updates without the overhead of a virtual DOM\n- **Type Safety**: Built with TypeScript for better tooling and fewer runtime errors\n- **Lightweight**: Small bundle size for faster loading\n- **Predictable**: Clear, functional approach to UI development\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffponticelli%2Ftempots","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffponticelli%2Ftempots","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffponticelli%2Ftempots/lists"}