{"id":28534564,"url":"https://github.com/weavejester/hop","last_synced_at":"2025-07-07T21:31:30.694Z","repository":{"id":57713714,"uuid":"54571862","full_name":"weavejester/hop","owner":"weavejester","description":"An experimental declarative build tool for Clojure","archived":false,"fork":false,"pushed_at":"2016-04-13T14:25:53.000Z","size":41,"stargazers_count":16,"open_issues_count":6,"forks_count":0,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-12-18T02:22:00.266Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weavejester.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-03-23T15:38:30.000Z","updated_at":"2023-07-25T14:00:59.000Z","dependencies_parsed_at":"2022-08-25T10:30:20.754Z","dependency_job_id":null,"html_url":"https://github.com/weavejester/hop","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fhop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fhop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fhop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fhop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weavejester","download_url":"https://codeload.github.com/weavejester/hop/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weavejester%2Fhop/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":257295327,"owners_count":22522781,"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":[],"created_at":"2025-06-09T17:11:55.832Z","updated_at":"2025-07-07T21:31:30.688Z","avatar_url":"https://github.com/weavejester.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hop\n\nHop is a build tool for Clojure, like [Leiningen][] or [Boot][].\n\nIt's still early in development, and **not yet usable**.\n\n[leiningen]: http://leiningen.org/\n[boot]: http://boot-clj.com/\n\n## What's the big idea?\n\nHop compiles a declarative build file into a shell script, which is\ncached and then executed. The cache ensures Hop only needs to run its\ntransformation code once, so long as the build file remains the same.\n\nThe build file has a map of **tasks** that define shell commands. So\nIf the user runs `hop foo`, the shell command associated with `foo`\nwill be executed.\n\nOne may ask why this is better than just writing a shell script! Hop\nallows **middleware** functions to be declared that transform the\nbuild map. So a map of dependencies, source paths and other options\ncan be turned into a single (and often very long) shell command.\n\n## Why's it good?\n\nHop compiles into a shell script, so it has minimal overhead. This\ngives it a shorter startup time than Leiningen, once the cache is\nestablished.\n\nHop is fully declarative, so its build file is more useful to third\nparty tools than Boot's.\n\nHop gives each task its own process, so tasks are more isolated than\nthey are in Boot.\n\nHop ultimately executes raw shell commands, so tasks can written in\nother languages, such as Java or ClojureScript.\n\nHop tasks can come from external dependencies, or from files in your\nproject.\n\n## How do I contribute?\n\nPick an [issue][]. Most issues should be tagged by how easy they are\nto implement.\n\nWhen writing a pull request, follow the [seven rules][] of writing a\ngreat git commit message.\n\n[issue]: https://github.com/weavejester/hop/issues\n[seven rules]: http://chris.beams.io/posts/git-commit/#seven-rules\n\n## Development setup\n\nGo into `hop.core` and compile an uberjar:\n\n```bash\ncd hop.core\nbin/hop uberjar\n```\n\nIf `bin/hop uberjar` doesn't work, try falling back to using the\nstandard `lein uberjar` instead.\n\nOnce you have an uberjar, set the `HOP_JAR` environment variable. This\nwill force Hop to use the jar you just creasted:\n\n```bash\nexport HOP_JAR=target/hop.core-0.0.2-standalone.jar\n```\n\nWhen you make changes, be sure to clear the cache:\n\n```bash\nrm ~/.hop/cache/*.sh\n```\n\n## License\n\nCopyright © 2016 James Reeves\n\nDistributed under the Eclipse Public License either version 1.0 or (at\nyour option) any later version.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweavejester%2Fhop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweavejester%2Fhop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweavejester%2Fhop/lists"}