{"id":21102365,"url":"https://github.com/mijick/timer","last_synced_at":"2026-04-01T21:49:23.834Z","repository":{"id":196718157,"uuid":"694753102","full_name":"Mijick/Timer","owner":"Mijick","description":"Timers Made Simple. The Ultimate Swift Framework with advanced timer management, state control and reactive programming support.","archived":false,"fork":false,"pushed_at":"2025-05-14T15:27:25.000Z","size":32,"stargazers_count":200,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-28T00:22:52.581Z","etag":null,"topics":["combine","ios","ios-sdk","ios-swift","macos","spm","swift","swift-6","swift-package","swift-package-manager","swift5","swift6","swiftlibrary","swiftui","swiftui-framework","timer","uikit","visionos","visionos-timer"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/Mijick.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"mijick","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"mijick","custom":null}},"created_at":"2023-09-21T16:11:04.000Z","updated_at":"2026-03-24T14:03:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"205d9611-c801-4a18-8ca0-c407c599d833","html_url":"https://github.com/Mijick/Timer","commit_stats":null,"previous_names":["mijick/timer"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Mijick/Timer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mijick","download_url":"https://codeload.github.com/Mijick/Timer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["combine","ios","ios-sdk","ios-swift","macos","spm","swift","swift-6","swift-package","swift-package-manager","swift5","swift6","swiftlibrary","swiftui","swiftui-framework","timer","uikit","visionos","visionos-timer"],"created_at":"2024-11-19T23:55:03.227Z","updated_at":"2026-04-01T21:49:23.827Z","avatar_url":"https://github.com/Mijick.png","language":"Swift","readme":"\u003c!--Hero Image--\u003e\n\u003cp align=\"center\"\u003e\n    \u003cpicture\u003e \n      \u003cimg alt=\"MijickTimer Hero\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/hero.png\" width=\"100%\"\u003e\n    \u003c/picture\u003e\n\u003c/p\u003e\n\n\n\u003c!--Text Header--\u003e\n\u003cp\u003e\n    \u003ch3 align=\"center\"\u003eTimers made simple\u003c/h3\u003e\n    \u003cp align=\"center\"\u003eEasy to use yet powerful Timer library. Keep your code clean.\u003c/p\u003e\n\u003c/p\u003e\n\n\n\u003c!--Links: Demo, Wiki--\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://link.mijick.com/timer-demo\" rel=\"nofollow\"\u003e\u003cb\u003eTry demo we prepared\u003c/b\u003e\u003c/a\u003e\n    |\n    \u003ca href=\"https://link.mijick.com/timer-wiki\" rel=\"nofollow\"\u003e\u003cb\u003eFramework documentation\u003c/b\u003e\u003c/a\u003e\n    |\n    \u003ca href=\"https://link.mijick.com/timer-roadmap\" rel=\"nofollow\"\u003e\u003cb\u003eRoadmap\u003c/b\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\n\u003c!--Labels--\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Labels\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Labels/labels.svg\"/\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\n\u003c!--GIFs--\u003e\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eMultiple Timers\u003c/th\u003e\n            \u003cth\u003eState Control\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cimg alt=\"Timer Examples\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/GIFs/Timer-1.gif\"/\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003cimg alt=\"Timer Examples\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/GIFs/Timer-2.gif\"/\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n\u003c!--Buttons--\u003e\n\u003cp\u003e\n    \u003c!--Website--\u003e\n    \u003ca href=\"https://link.mijick.com/app\"\u003e\n        \u003cimg alt=\"Visit our Website\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/website.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--Discord--\u003e\n    \u003ca href=\"https://link.mijick.com/discord\"\u003e\n        \u003cimg alt=\"Join us on Discord\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/discord.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--Linkedin--\u003e\n    \u003ca href=\"https://link.mijick.com/linkedin\"\u003e\n        \u003cimg alt=\"Follow us on LinkedIn\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/linkedin.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--GitHub--\u003e\n    \u003ca href=\"https://link.mijick.com/github\"\u003e\n        \u003cimg alt=\"See our other frameworks\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/github.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--Medium--\u003e\n    \u003ca href=\"https://link.mijick.com/medium\"\u003e\n        \u003cimg alt=\"Read us on Medium\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/medium.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--Buymeacoffee--\u003e\n    \u003ca href=\"https://link.mijick.com/buymeacoffee\"\u003e\n        \u003cimg alt=\"Buy us a coffee\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/buymeacoffee.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003c!--Features table--\u003e\n# ✨ Features\n\u003ctable\u003e\n        \u003ctbody\u003e\n            \u003ctr\u003e\n              \u003ctd\u003e \n                ⏳\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Countdown Timer (Down-Going)\n              \u003c/td\u003e\n            \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏱️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Count-Up Timer (Elapsed Time)\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏸️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Pause Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ▶️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Resume Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏭️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Skip Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏮️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Cancel Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n           \u003ctr\u003e\n              \u003ctd\u003e \n              ⚡\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Reactive programming friendly\n              \u003c/td\u003e\n          \u003c/tr\u003e\n        \u003c/tbody\u003e\n    \u003c/table\u003e\n\n\n\u003c!--Description--\u003e\n# ☀️ What is MijickTimer?\nMijickTimer library is Swift-based library that offers powerful and flexible timer features for iOS and macOS and visionOS apps. It allows to create both countdown and count-up timers with enhanced state management and observation options. \n\n\u003cp\u003e\n    \u003ch3\u003eCount-Up Timer\u003c/h3\u003e\n    \u003cp\u003e Track elapsed time seamlessly with a count-up timer. Ideal for productivity, logging or workout apps.\u003c/p\u003e\n    \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-Start-Up\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"A demonstration of the code used to compare the implementation of the native iOS timer framework with the custom MijickTimer.\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/less-code.png\" width=\"100%\"\u003e\n\n\u003cp\u003e\n    \u003ch3\u003eCountdown Timer\u003c/h3\u003e\n    \u003cp\u003e Easily create countdown timers to track remaining time. Perfect for games, events or task apps.\u003c/p\u003e\n    \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-Start-Up\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"An illustration of how to create a countdown timer using only a few lines of code with the MijickTimer library.\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/countdown.png\" width=\"100%\"\u003e\n\n\u003cp\u003e\n    \u003ch3\u003eControl Timer state\u003c/h3\u003e\n    \u003cp\u003e Pause timers and resume them later without losing progress. It also allows to skip and cancel the progress. \u003c/p\u003e\n    \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-State-Control\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n    \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"Demonstrates code for controlling the Timer state via the MijickTimer library: stop, pause, resume, skip, and cancel or stop the Timer.\", src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/state-control.png\" width=\"100%\"\u003e\n\n\u003ch3\u003eObserve Timer State\u003c/h3\u003e\n\u003cp\u003e \n  \u003cp\u003e Monitor timer state with a variety of different approaches: binding, callbacks, combine, state value updates.\u003c/p\u003e\n  \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-State-Observing\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"The code illustrates various methods for monitoring the current timer state, including binding, callbacks, combining, and state observation\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/state-observe.png\" width=\"100%\"\u003e\n\n\n\u003c!--Why to choose description--\u003e\n# ✅ Why MijickTimer?\n\u003ch4\u003eMultiple Apple Platform Support:\u003c/h4\u003e\n\n* iPhone, iPad. Requires iOS 13.0+  .\n* Mac. Requires macOS 10.15+.\n* Apple Vision Pro. Requires visionOS 1.0+.\n  \n\u003ch4\u003eBuilt for Swift 6:\u003c/h4\u003e\n    \n* Modern, efficient, and designed for performance.\n  \n\u003ch4\u003eAll-in-One Timer Solution:\u003c/h4\u003e\n    \n* Handles countdowns, count-ups, pausing, resuming and state management seamlessly.\n  \n\u003ch4\u003eVersatile Observation:\u003c/h4\u003e\n    \n*  Choose callbacks, bindings or Combine for the implementation that works best for you.\n*  Provides the ability to access the state of a specific timer from any part of the code base.\n\n\u003ch4\u003eIt's just a cool library 😎\u003c/h4\u003e\n\n\n\u003c!--Documentation--\u003e\n# 🚀 How to use it?\nVisit the framework's [documentation](https://link.mijick.com/timer-wiki) to learn how to integrate your project with **MijickTimer**. \u003cbr\u003e\nSee for yourself how does it work by cloning [project](https://link.mijick.com/timer-demo) we created\n\n\n\u003c!--Community--\u003e\n# 🍀 Community\nJoin the welcoming community of developers on [Discord](https://link.mijick.com/discord).\n\n\n\u003c!--Contribution--\u003e\n# 🌼 Contribute\nTo contribute a feature or idea to **MijickTimer**, create an [issue](https://github.com/Mijick/Timer/issues/new?assignees=FulcrumOne\u0026labels=state%3A+inactive%2C+type%3A+feature\u0026projects=\u0026template=🚀-feature-request.md\u0026title=%5BFREQ%5D) explaining your idea or bring it up on [Discord](https://discord.com/invite/dT5V7nm5SC). \u003cbr\u003e\nIf you find a bug, please create an [issue](https://github.com/Mijick/Timer/issues/new?assignees=FulcrumOne%2C+jay-jay-lama\u0026labels=state%3A+inactive%2C+type%3A+bug\u0026projects=\u0026template=🦟-bug-report.md\u0026title=%5BBUG%5D). \u003cbr\u003e\nIf you would like to contribute, please refer to the [Contribution Guidelines](https://link.mijick.com/contribution-guidelines).\n\n\n\u003c!--Sponsorship--\u003e\n# 💜 Sponsor our work\nSupport our work by [becoming a backer](https://link.mijick.com/buymeacoffee).\n\n","funding_links":["https://github.com/sponsors/mijick","https://buymeacoffee.com/mijick"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmijick%2Ftimer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmijick%2Ftimer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmijick%2Ftimer/lists"}