{"id":16014698,"url":"https://github.com/pmonks/unfurl","last_synced_at":"2026-04-29T00:01:34.990Z","repository":{"id":45279209,"uuid":"67983353","full_name":"pmonks/unfurl","owner":"pmonks","description":"This library implements \"URL unfurling\" approximately according to how Slack does it.","archived":false,"fork":false,"pushed_at":"2026-04-28T05:51:02.000Z","size":1257,"stargazers_count":24,"open_issues_count":2,"forks_count":5,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2026-04-28T07:32:21.269Z","etag":null,"topics":["clojure","clojure-library","unfurl","url-unfurling"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pmonks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2016-09-12T06:49:37.000Z","updated_at":"2026-03-18T16:55:28.000Z","dependencies_parsed_at":"2023-01-31T07:15:51.644Z","dependency_job_id":"d3c81906-c934-4ee6-88bb-44ea8145a2eb","html_url":"https://github.com/pmonks/unfurl","commit_stats":{"total_commits":135,"total_committers":3,"mean_commits":45.0,"dds":"0.022222222222222254","last_synced_commit":"9266b64fc7e98bbaec53cc8d6fa8c404f0f6df71"},"previous_names":["clj-commons/unfurl"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/pmonks/unfurl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmonks%2Funfurl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmonks%2Funfurl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmonks%2Funfurl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmonks%2Funfurl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pmonks","download_url":"https://codeload.github.com/pmonks/unfurl/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmonks%2Funfurl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32404340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T19:38:08.556Z","status":"ssl_error","status_checked_at":"2026-04-28T19:37:55.688Z","response_time":56,"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":["clojure","clojure-library","unfurl","url-unfurling"],"created_at":"2024-10-08T15:04:47.999Z","updated_at":"2026-04-29T00:01:34.951Z","avatar_url":"https://github.com/pmonks.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# unfurl\n\n[![CI](https://github.com/pmonks/unfurl/actions/workflows/ci.yml/badge.svg?branch=dev)](https://github.com/pmonks/unfurl/actions?query=workflow%3ACI+branch%3Adev)\n[![Dependencies](https://github.com/pmonks/unfurl/actions/workflows/dependencies.yml/badge.svg?branch=dev)](https://github.com/pmonks/unfurl/actions?query=workflow%3Adependencies+branch%3Adev)\n[![Vulnerabilities](https://github.com/pmonks/unfurl/actions/workflows/vulnerabilities.yml/badge.svg)](https://pmonks.github.io/unfurl/nvd/dependency-check-report.html)\n\u003cbr/\u003e\n[![Latest Version](https://img.shields.io/clojars/v/com.github.pmonks/unfurl)](https://clojars.org/com.github.pmonks/unfurl/)\n[![Open Issues](https://img.shields.io/github/issues/pmonks/unfurl.svg)](https://github.com/pmonks/unfurl/issues)\n[![License](https://img.shields.io/github/license/pmonks/unfurl.svg)](https://github.com/pmonks/unfurl/blob/main/LICENSE)\n![Maintained](https://badges.ws/badge/?label=maintained\u0026value=yes,+at+author's+discretion)\n\nThis library implements \"URL unfurling\" approximately according to how Slack does it.  See [this blog post](https://medium.com/slack-developer-blog/everything-you-ever-wanted-to-know-about-unfurling-but-were-afraid-to-ask-or-how-to-make-your-e64b4bb9254#.jhd6zdyjs) for more info.\n\n## Installation\n\n`unfurl` is available as a Maven artifact from [Clojars](https://clojars.org/com.github.pmonks/unfurl).\n\n### Trying it Out\n\n#### Clojure CLI\n\n```shell\n$ clj -Sdeps '{:deps {com.github.pmonks/unfurl {:mvn/version \"RELEASE\"}}}'\n```\n\n#### Leiningen\n\n```shell\n$ lein try com.github.pmonks/unfurl\n```\n\n#### deps-try\n\n```shell\n$ deps-try com.github.pmonks/unfurl\n```\n\n## Usage\n\nThe functionality is provided by the `unfurl.api` namespace.\n\nRequire it in the REPL:\n\n```clojure\n(require '[unfurl.api :as uf] :reload-all)\n```\n\nRequire it in your application:\n\n```clojure\n(ns my-app.core\n  (:require [unfurl.api :as uf]))\n```\n\nThe library provides a single function - `unfurl`.  [The API documentation](https://pmonks.github.io/unfurl/) has full details, and [the unit tests](https://github.com/pmonks/unfurl/blob/master/test/unfurl/api_test.clj) provide some example usages.\n\n## Contributor Information\n\n[Contributing Guidelines](https://github.com/pmonks/unfurl/blob/main/.github/CONTRIBUTING.md)\n\n[Bug Tracker](https://github.com/pmonks/unfurl/issues)\n\n[Code of Conduct](https://github.com/pmonks/unfurl/blob/main/.github/CODE_OF_CONDUCT.md)\n\n### Developer Workflow\n\nThis project uses the [git-flow branching strategy](https://nvie.com/posts/a-successful-git-branching-model/), with the caveat that the permanent branches are called `release` and `dev`.  Any changes to the `release` branch are considered a release and auto-deployed (JARs to Clojars, API docs to GitHub Pages, etc.).\n\nFor this reason, **all development must occur either in branch `dev`, or (preferably) in temporary branches off of `dev`.**  All PRs from forked repos must also be submitted against `dev`; the `release` branch is **only** updated from `dev` via PRs created by the core development team.  All other changes submitted to `release` will be rejected.\n\n### Why are there so many different groupIds on Clojars for this project?\n\nThe project was originally developed under my personal GitHub account.  In early 2018 it was transferred to the `clj-commons` GitHub organisation, but then, as that group refined their scope and mission, it was determined that it no longer belonged there, and the project were transferred back in late 2021.  During this time the build tooling for the project also changed from Leiningen to tools.build, which created further groupId churn (tools.build introduced special, useful semantics for `com.github.username` groupIds that don't exist with Leiningen or Clojars).\n\n## License\n\nCopyright © 2016 Peter Monks\n\nDistributed under the [Mozilla Public License, version 2.0](https://www.mozilla.org/en-US/MPL/2.0/).\n\nSPDX-License-Identifier: [`MPL-2.0`](https://spdx.org/licenses/MPL-2.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmonks%2Funfurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpmonks%2Funfurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmonks%2Funfurl/lists"}