{"id":13571851,"url":"https://github.com/ninjudd/drip","last_synced_at":"2025-04-04T09:30:28.645Z","repository":{"id":4399072,"uuid":"5536234","full_name":"ninjudd/drip","owner":"ninjudd","description":"Fast JVM launching without the hassle of persistent JVMs.","archived":false,"fork":false,"pushed_at":"2021-01-27T05:51:38.000Z","size":182,"stargazers_count":1546,"open_issues_count":37,"forks_count":70,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-03-27T14:17:13.549Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ninjudd.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":"2012-08-24T05:12:32.000Z","updated_at":"2025-03-15T15:23:12.000Z","dependencies_parsed_at":"2022-09-21T16:42:22.562Z","dependency_job_id":null,"html_url":"https://github.com/ninjudd/drip","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninjudd%2Fdrip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninjudd%2Fdrip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninjudd%2Fdrip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ninjudd%2Fdrip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ninjudd","download_url":"https://codeload.github.com/ninjudd/drip/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247152740,"owners_count":20892546,"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":"2024-08-01T14:01:07.217Z","updated_at":"2025-04-04T09:30:28.134Z","avatar_url":"https://github.com/ninjudd.png","language":"Shell","funding_links":[],"categories":["Shell","Runtimes"],"sub_categories":[],"readme":"Drip is a launcher for the Java Virtual Machine that provides much faster\nstartup times than the `java` command. The `drip` script is intended to be a\ndrop-in replacement for the `java` command, only faster.\n\nDrip is a single bash script and a little bit of C and Java code. It is intended\nto work with any JVM-based language and anywhere bash is available.\n\n# How does it work?\n\nUnlike other tools intended to solve the JVM startup problem (e.g. Nailgun,\nCake), Drip does not use a persistent JVM. There are many pitfalls to using a\npersistent JVM, which we discovered while working on the Cake build tool for\nClojure. The main problem is that the state of the persistent JVM gets dirty\nover time, producing strange errors and requiring liberal use of `cake kill`\nwhenever any error is encountered, *just in case* dirty state is the cause.\n\nInstead of going down this road, Drip uses a different strategy. It keeps a\nfresh JVM spun up in reserve with the correct classpath and other JVM options\nso you can quickly connect and use it when needed, then throw it away. Drip\nhashes the JVM options and stores information about how to connect to the JVM\nin a directory with the hash value as its name.\n\n# Installation\n\nThe following instructions assume that `~/bin` is on your `$PATH`. If that is\nnot the case, you can substitute your favorite location.\n\n**Standalone** \u0026mdash; *We recommend this to get started quickly.*\n\n    curl -L https://raw.githubusercontent.com/ninjudd/drip/master/bin/drip \u003e ~/bin/drip\n    chmod 755 ~/bin/drip\n\n**Checkout** \u0026mdash; *If you want to hack on Drip or follow the latest\ndevelopment, this is the way to go.*\n\n    git clone https://github.com/ninjudd/drip.git\n    cd drip \u0026\u0026 make prefix=~/bin install\n\n**Homebrew** \u0026mdash; *This is a convenient way to brew drip on OS X.*\n\n    brew install drip\n\nNote: Installing brew requires `gcc`. Here are [instructions](http://stackoverflow.com/questions/9353444)\nfor how to install it on OS X Mountain Lion.\n\n# Usage\n\nYou can call `drip` with the same arguments as `java`. Try it. The first time\nyou execute `drip` with new arguments, it will take as long as a plain `java`\ncommand, because it has to spin up a JVM from scratch, but after that it will be\nfast.\n\nFor example, to start a Clojure repl with drip:\n\n    drip -cp clojure.jar clojure.main\n\nThe Drip JVM will eventually shut itself down if you never connect to it. The\ntime limit defaults to four hours, but you can change this by setting the\n`DRIP_SHUTDOWN` environment variable before calling `drip` to set a timeout, in\nminutes:\n\n    DRIP_SHUTDOWN=30 drip -cp clojure.jar clojure.main\n\nThis creates a Clojure repl as usual, either by starting up a new one or\nconnecting to a waiting JVM. But the JVM that is spun up to serve future\nrequests with the same classpath will have a 30-minute timeout to deactivation.\n\n### JVM Language Integration\n\nFor more information about how to integrate Drip with your favorite JVM\nlanguage, check out the [wiki](https://github.com/ninjudd/drip/wiki).\n\n# Advanced settings\n\nDrip supports the following advanced settings.\n\n## Pre-Initialization\n\nBy default, Drip only loads your main class at startup, but you can tell Drip to\nrun additional code at startup. This can be used to load classes or execute any\ninitialization code you like. For a language like Clojure, which compiles code\non-the-fly, this can be used to precompile commonly used code by requiring it.\n\nTo tell Drip how to initialize a new JVM, use the `DRIP_INIT` and\n`DRIP_INIT_CLASS` environment variables. `DRIP_INIT` should be a\nnewline-separated list of args to be passed to the `main()` function of\n`DRIP_INIT_CLASS`. `DRIP_INIT_CLASS` defaults to the main class the JVM was\nstarted with.\n\n## System Properties\n\nSometimes, you need to set Java system properties, but you don't want them to be\nincluded in the JVM options used for hashing. In this case, use two dashes\ninstead of one, and the options won't be passed to the JVM at startup, instead\nthey will be passed at runtime. Keep in mind that any system properties passed\nthis way will not be set during initialization.\n\n## Environment Variables\n\nDrip passes all environment variables exported at runtime to the JVM and merges\nthem into the map returned by `System.getenv`. Keep in mind that the environment\nisn't modified until we connect to the JVM; during initialization, the\nenvironment will be derived from the previous process that launched the spare\nJVM. \n\n# License\n\nDrip is licensed under the EPL Eclipse Public License. See LICENSE for\ndetails.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fninjudd%2Fdrip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fninjudd%2Fdrip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fninjudd%2Fdrip/lists"}