{"id":13410229,"url":"https://github.com/theckman/yacspin","last_synced_at":"2025-05-15T19:05:15.256Z","repository":{"id":36877028,"uuid":"230719171","full_name":"theckman/yacspin","owner":"theckman","description":"Yet Another CLi Spinner; providing over 80 easy to use and customizable terminal spinners for multiple OSes","archived":false,"fork":false,"pushed_at":"2022-01-03T06:35:23.000Z","size":2336,"stargazers_count":447,"open_issues_count":6,"forks_count":10,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-15T19:04:31.355Z","etag":null,"topics":["cli","go","golang","spinner","statusbar","terminal","terminal-ui"],"latest_commit_sha":null,"homepage":"","language":"Go","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/theckman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-29T07:41:23.000Z","updated_at":"2025-05-07T14:58:56.000Z","dependencies_parsed_at":"2022-08-08T18:01:28.333Z","dependency_job_id":null,"html_url":"https://github.com/theckman/yacspin","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theckman%2Fyacspin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theckman%2Fyacspin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theckman%2Fyacspin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theckman%2Fyacspin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/theckman","download_url":"https://codeload.github.com/theckman/yacspin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254404357,"owners_count":22065641,"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":["cli","go","golang","spinner","statusbar","terminal","terminal-ui"],"created_at":"2024-07-30T20:01:05.675Z","updated_at":"2025-05-15T19:05:15.201Z","avatar_url":"https://github.com/theckman.png","language":"Go","funding_links":[],"categories":["Command Line","命令行","Build Automation","高级控制台UI`用于构建控制台应用程序和控制台用户界面的库.`","高级控制台UI"],"sub_categories":["Advanced Console UIs","高级控制台用户界面","标准 CLI"],"readme":"# Yet Another CLi Spinner (for Go)\n[![License](https://img.shields.io/github/license/theckman/yacspin.svg)](https://github.com/theckman/yacspin/blob/master/LICENSE)\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/theckman/yacspin)\n[![Latest Git Tag](https://img.shields.io/github/tag/theckman/yacspin.svg)](https://github.com/theckman/yacspin/releases)\n[![GitHub Actions master Build Status](https://github.com/theckman/yacspin/actions/workflows/tests.yaml/badge.svg?branch=master)](https://github.com/theckman/yacspin/actions/workflows/tests.yaml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/theckman/yacspin)](https://goreportcard.com/report/github.com/theckman/yacspin)\n[![Codecov](https://img.shields.io/codecov/c/github/theckman/yacspin)](https://codecov.io/gh/theckman/yacspin)\n\nPackage `yacspin` provides yet another CLi spinner for Go, taking inspiration\n(and some utility code) from the [github.com/briandowns/spinner](https://github.com/briandowns/spinner)\nproject. Specifically `yacspin` borrows the default character sets and color name mappings to\n[github.com/fatih/color](https://github.com/fatih/color) colors.\n\n## License\nBecause this package adopts the spinner character sets from\n[github.com/briandowns/spinner](https://github.com/briandowns/spinner), this\npackage is released under the Apache 2.0 License. The full content of the Apache\n2.0 license is available in the included [LICENSE](https://github.com/theckman/yacspin/blob/master/LICENSE)\nfile in the root of this repository.\n\n## Yet Another CLi Spinner?\nThis project was created after it was realized that [the most popular spinner library](https://github.com/briandowns/spinner)\nfor Go had some limitations, that couldn't be fixed without a massive overhaul of the API.\n\nThe other spinners tie the ability to show updated messages to the spinner's\nanimation, meaning you can't always show all the information you want to the end\nuser without changing the animation speed. This results in having to trade off\nanimation aesthetics to show \"realtime\" information. It was a goal to avoid this\nproblem and instead render the animation independently from the contents being\nupdated. An example of this is shown below.\n\nIn addition, there were also some API design choices that have made\n`github.com/briandowns/spinner` [unsafe for concurrent use](https://github.com/briandowns/spinner/issues/99),\nwhich presents challenges when trying to update the text in the spinner while\nit's animating. This could result in undefined behavior due to data races.\n\nThere were also some variable-width spinners in that project that did not render\ncorrectly. Because the width of the spinner animation would change, so would the\nposition of the message on the screen. `yacspin` uses a dynamic width when\nanimating, so your message should appear static relative to the animating\nspinner. There is also an example of this feature blow.\n\nFinally, there was an interest in the spinner being able to represent a task, and to\nindicate whether it failed or was successful. This would have further compounded\nthe API changes needed above to support in an intuitive way.\n\nThis project is inspired by github.com/briandowns/spinner, and takes a new\napproach to address some of the challenges and limitations it has.\n\n## Features\n#### Provided Spinners\nThere are over 90 spinners available in the `CharSets` package variable. They\nwere borrowed from [github.com/briandowns/spinner](https://github.com/briandowns/spinner).\nThere is a table with most of the spinners [at the bottom of this README](#Spinners).\n\n#### Dynamic Width of Animation\nBecause of how some spinners are animated, they may have different widths at\ndifferent frames in the animation. `yacspin` calculates the maximum width of the\nanimation, and then adds padding to ensure the text's position on the screen\ndoesn't change. This results in a smoother looking animation:\n\n##### yacspin:\n![yacspin animation with dynamic width](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/features/width_good.gif)\n\n##### other spinners:\n![other spinners' animation with dynamic width](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/features/width_bad.gif)\n\n#### Success and Failure Results\nThe spinner has both `Stop()` and `StopFail()` methods, which allow the\nspinner to result in a success message or a failure message. The messages,\ncolors, and even the character used to denote success or failure are\ncustomizable in either the initial config or via the spinner's methods.\n\nBy doing this you can use a single `yacspin` spinner to display the status of a\nlist of tasks being executed serially:\n\n##### Stop:\n![Animation with Success](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/features/stop.gif)\n\n##### StopFail:\n![Animation with Failure](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/features/stop_fail.gif)\n\n#### Animation At End of Line\nThe `SpinnerAtEnd` field of the `Config` struct allows you to specify whether\nthe spinner is rendered at the end of the line instead of the beginning. The\ndefault value (`false`) results in the spinner being rendered at the beginning\nof the line.\n\n#### Concurrency\nThe spinner is safe for concurrent use, so you can update any of its settings\nvia methods whether the spinner is stopped or is currently animating.\n\n#### Live Updates\nMany spinners tie the ability to show new messages to the animation of the\nspinner itself. So if the spinner animates every 200ms, you can only show\nupdated information every 200ms. If you wanted more frequent updates, you'd need\nto tradeoff the asthetics of the animation to display more data.\n\n`yacspin` updates the printed information of the spinner immediately on\nchange, without the animation updating. This allows you to use an animation\nspeed that looks astheticaly pleasing, while also knowing the data presented to\nthe user will be updated live.\n\nYou can see this in action in the following gif, where the filenames being\nuploaded are rendered independent of the spinner being animated:\n\n![Animation with Success](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/features/stop.gif)\n\n#### Pausing for Updates\nSometimes you want to change a few settings, and don't want the `yacspin`\nspinner to render your partially applied configuration. If your spinner is\nrunning, and you want to change a few configuration items via method calls, you\ncan `Pause()` the spinner first. After making the changes you can call\n`Unpause()`, and it will continue rendering like normal with the newly applied\nconfiguration. `yacspin` will then continue rendering the animation, while\ntriggering the next animation to happen as close as possible to the next\nFrequency period if it hasn't already passed.\n\n#### Supporting Non-Interactive (TTY) Output Targets\n`yacspin` also has native support for non-interactive (TTY) output targets. By\ndefault this is detected in the constructor, or can be overriden via the\n`TerminalMode` `Config` struct field. When detecting the application is not\nrunning withn a TTY session, the behavior of the spinner is different.\n\nSpecifically, when this is automatically detected the spinner no longer uses\ncolors, disables the automatic spinner animation, and instead only animates the\nspinner when updating the message. In addition, each animation is rendered on a\nnew line instead of overwriting the current line.\n\nThis should result in human-readable output without any changes needed by\nconsumers, even when the system is writing to a non-TTY destination.\n\n#### Manually Stepping Animation\nIf you'd like to manually animate the spinner, you can do so by setting the\n`TerminalMode` to `ForceNoTTYMode | ForceSmartTerminalMode`. In this mode the\nspinner will still use colors and other text stylings, but the animation only\nhappens when data is updated and on individual lines. You can accomplish this by\ncalling the `Message()` method with the same used previously.\n\n## Usage\n```\ngo get github.com/theckman/yacspin\n```\n\nWithin the `yacspin` package there are some default spinners stored in the\n`yacspin.CharSets` variable, and you can also provide your own. There is also a\nlist of known colors in the `yacspin.ValidColors` variable.\n\n### Example\n\nThere are runnable examples in the [examples/](https://github.com/theckman/yacspin/tree/master/examples)\ndirectory, with one simple example and one more advanced one. Here is a quick\nsnippet showing usage from a very high level, with error handling omitted:\n\n```Go\ncfg := yacspin.Config{\n\tFrequency:       100 * time.Millisecond,\n\tCharSet:         yacspin.CharSets[59],\n\tSuffix:          \" backing up database to S3\",\n\tSuffixAutoColon: true,\n\tMessage:         \"exporting data\",\n\tStopCharacter:   \"✓\",\n\tStopColors:      []string{\"fgGreen\"},\n}\n\nspinner, err := yacspin.New(cfg)\n// handle the error\n\nerr = spinner.Start()\n\n// doing some work\ntime.Sleep(2 * time.Second)\n\nspinner.Message(\"uploading data\")\n\n// upload...\ntime.Sleep(2 * time.Second)\n\nerr = spinner.Stop()\n```\n\n## Spinners\n\nThe spinner animations below are recorded at a refresh frequency of 200ms. Some\nanimations may look better at a different speed, so play around with the\nfrequency until you find a value you find aesthetically pleasing.\n\nyacspin.CharSets index | sample gif (Frequency: 200ms)\n-----------------------|------------------------------\n0 | ![0 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/0.gif)\n1 | ![1 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/1.gif)\n2 | ![2 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/2.gif)\n3 | ![3 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/3.gif)\n4 | ![4 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/4.gif)\n5 | ![5 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/5.gif)\n6 | ![6 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/6.gif)\n7 | ![7 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/7.gif)\n8 | ![8 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/8.gif)\n9 | ![9 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/9.gif)\n10 | ![10 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/10.gif)\n11 | ![11 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/11.gif)\n12 | ![12 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/12.gif)\n13 | ![13 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/13.gif)\n14 | ![14 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/14.gif)\n15 | ![15 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/15.gif)\n16 | ![16 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/16.gif)\n17 | ![17 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/17.gif)\n18 | ![18 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/18.gif)\n19 | ![19 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/19.gif)\n20 | ![20 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/20.gif)\n21 | ![21 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/21.gif)\n22 | ![22 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/22.gif)\n23 | ![23 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/23.gif)\n24 | ![24 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/24.gif)\n25 | ![25 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/25.gif)\n26 | ![26 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/26.gif)\n27 | ![27 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/27.gif)\n28 | ![28 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/28.gif)\n29 | ![29 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/29.gif)\n30 | ![30 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/30.gif)\n31 | ![31 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/31.gif)\n32 | ![32 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/32.gif)\n33 | ![33 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/33.gif)\n34 | ![34 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/34.gif)\n35 | ![35 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/35.gif)\n36 | ![36 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/36.gif)\n37 | ![37 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/37.gif)\n38 | ![38 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/38.gif)\n39 | ![39 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/39.gif)\n40 | ![40 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/40.gif)\n41 | ![41 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/41.gif)\n42 | ![42 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/42.gif)\n43 | ![43 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/43.gif)\n44 | ![44 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/44.gif)\n45 | ![45 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/45.gif)\n46 | ![46 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/46.gif)\n47 | ![47 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/47.gif)\n48 | ![48 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/48.gif)\n49 | ![49 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/49.gif)\n50 | ![50 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/50.gif)\n51 | ![51 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/51.gif)\n52 | ![52 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/52.gif)\n53 | ![53 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/53.gif)\n54 | ![54 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/54.gif)\n55 | ![55 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/55.gif)\n56 | ![56 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/56.gif)\n57 | ![57 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/57.gif)\n58 | ![58 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/58.gif)\n59 | ![59 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/59.gif)\n60 | ![60 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/60.gif)\n61 | ![61 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/61.gif)\n62 | ![62 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/62.gif)\n63 | ![63 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/63.gif)\n64 | ![64 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/64.gif)\n65 | ![65 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/65.gif)\n66 | ![66 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/66.gif)\n67 | ![67 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/67.gif)\n68 | ![68 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/68.gif)\n69 | ![69 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/69.gif)\n70 | ![70 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/70.gif)\n71 | ![71 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/71.gif)\n72 | ![72 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/72.gif)\n73 | ![73 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/73.gif)\n74 | ![74 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/74.gif)\n75 | ![75 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/75.gif)\n76 | ![76 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/76.gif)\n77 | ![77 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/77.gif)\n78 | ![78 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/78.gif)\n79 | ![79 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/79.gif)\n80 | ![80 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/80.gif)\n81 | ![81 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/81.gif)\n82 | ![82 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/82.gif)\n83 | ![83 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/83.gif)\n84 | ![84 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/84.gif)\n85 | ![85 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/85.gif)\n86 | ![86 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/86.gif)\n87 | ![87 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/87.gif)\n88 | ![88 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/88.gif)\n89 | ![89 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/89.gif)\n90 | ![90 gif](https://raw.githubusercontent.com/theckman/yacspin-gifs/11953a4f12560eaf4a27054d3adad471eb19193c/spinners/90.gif)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheckman%2Fyacspin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheckman%2Fyacspin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheckman%2Fyacspin/lists"}