{"id":13456885,"url":"https://github.com/saket/unfurl","last_synced_at":"2025-04-06T18:14:53.247Z","repository":{"id":55048351,"uuid":"470656959","full_name":"saket/unfurl","owner":"saket","description":"Generate link previews, inspired by Slack.","archived":false,"fork":false,"pushed_at":"2024-08-28T15:34:25.000Z","size":353,"stargazers_count":266,"open_issues_count":1,"forks_count":11,"subscribers_count":4,"default_branch":"trunk","last_synced_at":"2024-10-14T20:48:11.396Z","etag":null,"topics":["kotlin","preview","social"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/saket.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}},"created_at":"2022-03-16T16:07:55.000Z","updated_at":"2024-10-12T15:57:01.000Z","dependencies_parsed_at":"2024-01-02T05:27:04.736Z","dependency_job_id":"b6dda9b3-ea03-46eb-8846-06ab1fe09fe4","html_url":"https://github.com/saket/unfurl","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2Funfurl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2Funfurl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2Funfurl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saket%2Funfurl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saket","download_url":"https://codeload.github.com/saket/unfurl/tar.gz/refs/heads/trunk","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247526764,"owners_count":20953143,"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":["kotlin","preview","social"],"created_at":"2024-07-31T08:01:29.567Z","updated_at":"2025-04-06T18:14:53.206Z","avatar_url":"https://github.com/saket.png","language":"Kotlin","funding_links":[],"categories":["Kotlin"],"sub_categories":[],"readme":"# unfurl\n\nA kotlin library for generating link previews by extracting their [Twitter Card](https://developer.x.com/en/docs/twitter-for-websites/cards/guides/getting-started) and [Open Graph](https://ogp.me/) tags.\n\n```groovy\nimplementation \"me.saket.unfurl:unfurl:2.2.0\"\n```\n\n```kotlin\nval unfurler = Unfurler()\nprintln(unfurler.unfurl(\"https://saket.me/great-teams-merge-fast/\"))\n\nUnfurlResult(\n  url = \"https://saket.me/great-teams-merge-fast\", \n  title = \"Great teams merge fast\", \n  description = \"Observations from watching my team at Square produce stellar work while moving fast and not breaking things.\", \n  favicon = \"https://saket.me/wp-content/uploads/2022/03/cropped-saket-photo-180x180.jpg\", \n  thumbnail = \"https://saket.me/wp-content/uploads/2021/02/great_teams_merge_fast_cover.jpg\"\n)\n```\n\n`unfurl` is extensible. See [MastodonUnfurlerExtension](https://github.com/saket/unfurl/blob/0867097e4ac310605b8a789ae20518f9ad3a3f13/cli/src/main/kotlin/me/saket/unfurl/cmd/extensions/MastodonUnfurlerExtension.kt#L16) as an example for unfurling statuses that can't be HTML scraped.\n\n```kotlin\nval unfurler = Unfurler(\n  extensions = listOf(MastodonUnfurlerExtension(), ...)\n)\n```\n\n### cli\n```bash\n$ brew install saket/repo/unfurl\n$ unfurl https://saket.me/great-teams-merge-fast\n```\n\n## License\n\n```\nCopyright 2022 Saket Narayan.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaket%2Funfurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaket%2Funfurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaket%2Funfurl/lists"}