{"id":26121546,"url":"https://github.com/fizzed/stork","last_synced_at":"2025-05-16T17:07:11.877Z","repository":{"id":22845809,"uuid":"26193137","full_name":"fizzed/stork","owner":"fizzed","description":"Launch and deploy your Java apps","archived":false,"fork":false,"pushed_at":"2025-01-22T16:28:55.000Z","size":27666,"stargazers_count":177,"open_issues_count":21,"forks_count":19,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-07T18:11:12.970Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","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/fizzed.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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":"2014-11-04T23:12:41.000Z","updated_at":"2025-04-05T06:51:11.000Z","dependencies_parsed_at":"2025-01-10T22:28:05.362Z","dependency_job_id":"319730f1-972c-4d91-b84d-23d1c0744a08","html_url":"https://github.com/fizzed/stork","commit_stats":null,"previous_names":["fizzed/java-stork"],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fizzed%2Fstork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fizzed%2Fstork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fizzed%2Fstork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fizzed%2Fstork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fizzed","download_url":"https://codeload.github.com/fizzed/stork/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254573588,"owners_count":22093731,"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-03-10T14:23:43.730Z","updated_at":"2025-05-16T17:07:11.810Z","avatar_url":"https://github.com/fizzed.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stork by Fizzed\n\n[![Maven Central](https://img.shields.io/maven-central/v/com.fizzed/stork?color=blue\u0026style=flat-square)](https://mvnrepository.com/artifact/com.fizzed/stork)\n\n## Automated Testing\n\nThe following Java versions and platforms are tested using GitHub workflows:\n\n[![Java 8](https://img.shields.io/github/actions/workflow/status/fizzed/stork/java8.yaml?branch=master\u0026label=Java%208\u0026style=flat-square)](https://github.com/fizzed/stork/actions/workflows/java8.yaml)\n[![Java 11](https://img.shields.io/github/actions/workflow/status/fizzed/stork/java11.yaml?branch=master\u0026label=Java%2011\u0026style=flat-square)](https://github.com/fizzed/stork/actions/workflows/java11.yaml)\n[![Java 17](https://img.shields.io/github/actions/workflow/status/fizzed/stork/java17.yaml?branch=master\u0026label=Java%2017\u0026style=flat-square)](https://github.com/fizzed/stork/actions/workflows/java17.yaml)\n[![Java 21](https://img.shields.io/github/actions/workflow/status/fizzed/stork/java21.yaml?branch=master\u0026label=Java%2021\u0026style=flat-square)](https://github.com/fizzed/stork/actions/workflows/java21.yaml)\n\n[![Linux x64](https://img.shields.io/github/actions/workflow/status/fizzed/stork/java11.yaml?branch=master\u0026label=Linux%20x64\u0026style=flat-square)](https://github.com/fizzed/stork/actions/workflows/java11.yaml)\n[![MacOS arm64](https://img.shields.io/github/actions/workflow/status/fizzed/stork/macos-arm64.yaml?branch=master\u0026label=MacOS%20arm64\u0026style=flat-square)](https://github.com/fizzed/stork/actions/workflows/macos-arm64.yaml)\n[![Windows x64](https://img.shields.io/github/actions/workflow/status/fizzed/stork/windows-x64.yaml?branch=master\u0026label=Windows%20x64\u0026style=flat-square)](https://github.com/fizzed/stork/actions/workflows/windows-x64.yaml)\n\nThe following platforms are tested using the [Fizzed, Inc.](http://fizzed.com) build system:\n\n[![Linux arm64](https://img.shields.io/badge/Linux%20arm64-passing-green)](buildx-results.txt)\n[![Linux riscv64](https://img.shields.io/badge/Linux%20riscv64-passing-green)](buildx-results.txt)\n[![Linux MUSL x64](https://img.shields.io/badge/Linux%20MUSL%20x64-passing-green)](buildx-results.txt)\n[![MacOS x64](https://img.shields.io/badge/MacOS%20x64-passing-green)](buildx-results.txt)\n[![Windows arm64](https://img.shields.io/badge/Windows%20arm64-passing-green)](buildx-results.txt)\n[![FreeBSD x64](https://img.shields.io/badge/FreeBSD%20x64-passing-green)](buildx-results.txt)\n[![OpenBSD x64](https://img.shields.io/badge/OpenBSD%20x64-passing-green)](buildx-results.txt)\n\n## Overview\n\nSo you've engineered that amazing Java-based application.  Then what?  Distributing\nit or getting it into production is your new problem.  Fat/uber jar? Vagrant?\nDocker? Rkt? LXD? Traditional bare metal deploy? There are so many options!\n\nStork is a collection of lightweight utilities for optimizing your \"after-build\" workflow by\nfilling in the gap between your Java build system and execution.  Using well-tested\nmethods across operating systems, containers, etc. Stork will let you safely\nand securely run your app in any environment -- be it Docker, Rkt, LXD, or\ntraditional systems.  There are 3 main Stork components that you can pick and\nchoose from to help with your app:\n\n- [stork-launcher](#stork-launcher) will generate well-tested, rock solid, secure\n  launcher scripts from a yaml configuration file for either console or daemon/service\n  JVM apps. The generated launchers will run your app the same way regardless of whether\n  running within a container or numerous different operating systems.\n\n- [stork-assembly](#stork-assembly) will assemble your JVM app into a standard,\n  well-defined [canonical layout](docs/CANONICAL_LAYOUT.md) as a tarball ready\n  for universal distribution or deployment.  Regardless of whether your user\n  is on Linux, Windows, OSX, *BSD, etc., our tarball will include everything\n  for your user to be happy.\n\n- [stork-deploy](#stork-deploy) will rapidly and securely deploy your assembly\n  via SSH into a versioned directory structure to various operating systems.\n  It will handle restarting daemons, use strict user/group permissions, and verify\n  the deploy worked.  Power users can combine with [Blaze](https://github.com/fizzed/blaze)\n  for even more advanced deploys.\n\n[Using Stork to deploy a production Ninja Framework app](http://fizzed.com/blog/2015/01/using-stork-deploy-production-ninja-framework-app)\n\n## Sponsorship \u0026 Support\n\n![](https://cdn.fizzed.com/github/fizzed-logo-100.png)\n\nProject by [Fizzed, Inc.](http://fizzed.com) (Follow on Twitter: [@fizzed_inc](http://twitter.com/fizzed_inc))\n\n**Developing and maintaining opensource projects requires significant time.** If you find this project useful or need\ncommercial support, we'd love to chat. Drop us an email at [ping@fizzed.com](mailto:ping@fizzed.com)\n\nProject sponsors may include the following benefits:\n\n- Priority support (outside of Github)\n- Feature development \u0026 roadmap\n- Priority bug fixes\n- Privately hosted continuous integration tests for their unique edge or use cases\n\n## Example\n\n[stork-demo-hellod](stork-demo/stork-demo-hellod) is an example Maven project\nfor a simple Java web application.  It demos the `stork-launcher`\nand `stork-assembly` utilities and produces a tarball assembly that can be\ndeployed using `stork-deploy`.  To generate the launchers and assembly, run\nthis from the `stork` main directory:\n\n    mvn package -DskipTests=true\n\nThis will generate all launchers, prep the assembly in `target/stork`, and\ntarball it up to `target/stork-demo-hellod-X.X.X.tar.gz` (X.X.X is the version\nof your project).  You can quickly try it out:\n\n    cd stork-demo/stork-demo-hellod\n    target/stork/bin/stork-demo-hellod --run\n\nOr you can deploy it via SSH using `stork-deploy`:\n\n    stork-deploy --assembly target/stork-demo-hellod-X.X.X.tar.gz ssh://host.example.com\n\nOr you can build a Docker image:\n\n    docker build -t stork-demo-hellod .\n    docker run -it stork-demo-hellod\n\n## Usage\n\n### Maven plugin\n\n```xml\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003ecom.fizzed\u003c/groupId\u003e\n            \u003cartifactId\u003estork-maven-plugin\u003c/artifactId\u003e\n            \u003cversion\u003e3.2.0\u003c/version\u003e\n            \u003c!-- configuration / execution (see below) --\u003e\n        \u003c/plugin\u003e\n    \u003c/plugins\u003e\n\u003c/build\u003e\n```\n\n## Why not just create my own script?\n\nThat's what we used to do with all of our Java apps too.  Eventually, you'll have\na problem -- we guarantee it.  For example, you simply ran `java -jar app.jar \u0026`\nin a shell and everything is working.  You close your terminal/SSH session and\nyour app is no longer running.  Oops, you forgot to detach your app from the\nterminal.  Use systemd?  Did you remember to add the `-Xrs` flag when you launched\nyour java process?  Customer needs to run your app on Windows?  In that case\nyou have no option but to use some sort of service framework.  Or even something\nsimple like `java` isn't found by your init system, but it works in your shell.\nStork launchers solve these common problems.\n\n## Why not just a fat/uber jar?\n\nAn uber/fat jar is a jar that has all dependencies merged into it.  Usually\nan application consists of more than your jar (such as config files), so you'll\nstill need to package that up.  Then how do you run it as a daemon/service? \nPlus, its becoming more important to cache/retain most of the dependencies that\ndidn't change for faster deploys using Docker or rsync.\n\n## Stork launcher\n\nUtility for generating native launchers for Java-based applications\nacross Windows, Linux, Mac, and many other UNIX-like systems.\n\nYou simply create a YAML-based config file (that you can check-in to\nsource control) and then you compile/generate it into one or more launchers.\nThese launchers can then be distributed with your final tarball/assembly/package\nso that your app looks like a native compiled executable.\n\n### Features\n\n * Generate *secure* launcher scripts for either console or daemon/service JVM apps.\n * Heavily tested across all major operating systems for every release\n    * Windows XP+\n    * Linux (Ubuntu, Debian, Redhat flavors)\n    * Mac OSX\n    * FreeBSD\n    * OpenBSD\n * Intelligent \u0026 automatic JVM detection (e.g. no need to have JAVA_HOME set)\n * Carefully researched, tested, and optimized methods for running daemons/services\n    * Windows daemons installed as a service (32 and/or 64-bit daemons supported)\n    * Linux/UNIX daemons can either use `exec` or use NOHUP, detach TTY properly,\n      and do NOT spawn any sort of annoying helper/controller process\n    * Execellent SystemD and SysV support\n    * Mac OSX daemons integrate seamlessly with launchctl\n    * All daemons can easily be run in non-daemon mode (to make debugging simpler)\n    * All companion helper scripts are included to get the daemon to start\n      at boot\n * Configurable methods supported for verifying a daemon started -- including useful\n   debug output (e.g. if daemon fails to start, tail the log so the error is printed\n   if an error is encountered).\n * Supports fixed or percentage-based min/max memory at JVM startup\n * Supports launching apps with retaining the working dir of the shell or setting\n   the working directory to the home of app.\n * Sets the working directory of the app without annoyingly changing the working\n   directory of the shell that launched the app (even on Windows).\n * Command-line arguments and/or system properties are seamlessly passed thru to\n   the underlying Java app\n * Runtime debugging using simple LAUNCHER_DEBUG=1 env var before executing binary\n   to see what's going on (e.g. how is the JVM found?)\n * Support for symlinking detected JVM as application name so that Linux/UNIX commands\n   such as TOP/PS make identifying application easier.\n\n### Usage\n\nCompiles all launchers in src/main/launchers to target/stork (which will result\nin target/stork/bin and target/stork/share dirs).\n\nCommand-line\n\n    stork-launcher -o target/stork src/main/launchers\n\nMaven\n\n```xml\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003ecom.fizzed\u003c/groupId\u003e\n            \u003cartifactId\u003estork-maven-plugin\u003c/artifactId\u003e\n            \u003cversion\u003e3.2.0\u003c/version\u003e\n            \u003cexecutions\u003e\n                \u003cexecution\u003e\n                    \u003cid\u003estork-launcher\u003c/id\u003e\n                    \u003cgoals\u003e\n                        \u003cgoal\u003elauncher\u003c/goal\u003e\n                    \u003c/goals\u003e\n                \u003c/execution\u003e\n            \u003c/executions\u003e \n        \u003c/plugin\u003e\n        ...\n    \u003c/plugins\u003e\n\u003c/build\u003e\n```\n\nTo customize, the following properties are supported:\n\n - outputDirectory: The directory the launcher will compile/generate launchers\n   to. Defaults to ${project.build.directory}/stork\n\n - inputFiles: An array of input directories or files to compile in a single\n   invocation.  Defaults to ${basedir}/src/main/launchers\n\n### Configuration file\n\n```yaml\n# Name of application (make sure it has no spaces)\nname: \"hello-console\"\n\n# Domain of application (e.g. your organization such as com.example)\ndomain: \"com.fizzed.stork.sample\"\n\n# Display name of application (can have spaces)\ndisplay_name: \"Hello Console App\"\n\nshort_description: \"Demo console app\"\n\nlong_description: \"Demo of console app for mfizz jtools launcher\"\n\n# Type of launcher (CONSOLE or DAEMON)\ntype: CONSOLE\n\n# Java class to run\nmain_class: \"com.fizzed.stork.sample.HelloConsole\"\n\n# Platform launchers to generate (WINDOWS, LINUX, MAC_OSX)\n# Linux launcher is suitable for Bourne shells (e.g. Linux/BSD)\nplatforms: [ WINDOWS, LINUX, MAC_OSX ]\n\n# Working directory for app\n#  RETAIN will not change the working directory\n#  APP_HOME will change the working directory to the home of the app\n#    (where it was intalled) before running the main class\nworking_dir_mode: RETAIN\n\n# Arguments for application (as though user typed them on command-line)\n# These will be added immediately after the main class part of java command\n# Users can either entirely override it at runtime with the environment variable\n# APP_ARGS or append extra arguments with the EXTRA_APP_ARGS enviornment variable\n# or by passing them in on the command-line too.\n#app_args: \"-c config.yml\"\n\n# Arguments to use with the java command (e.g. way to pass -D arguments)\n# Users can either entirely override it at runtime with the environment variable\n# JAVA_ARGS or append extra arguments with the EXTRA_JAVA_ARGS enviornment variable\n# or by passing them in on the command-line too.\n#java_args: \"-Dtest=foo\"\n\n# Minimum version of java required (system will be searched for acceptable jvm)\n# Defaults to Java 1.6.\n#min_java_version: \"1.6\"\n\n# Maximum version of java required (system will be searched for acceptable jvm)\n# Defaults to empty (all)\n#max_java_version: \"\"\n\n# Min/max fixed memory (measured in MB). Defaults to empty values which allows\n# Java to use its own defaults.\n#min_java_memory: 30\n#max_java_memory: 256\n\n# Min/max memory by percentage of system\n#min_java_memory_pct: 10\n#max_java_memory_pct: 20\n\n# Try to create a symbolic link to java executable in \u003capp_home\u003e/run with\n# the name of \"\u003capp_name\u003e-java\" so that commands like \"ps\" will make it\n# easier to find your app. Defaults to false.\n#symlink_java: true\n```\n\n## Overriding launcher environment variables\n\nAll launcher scripts are written to allow last-minute or per-environment \nreplacement.  As of v2.7.0, let's say you needed to add a few more Java\nsystem properties and wanted to execute a daemon launcher named \"hellod\".\n\n    EXTRA_JAVA_ARGS=\"-Da=1 -Db=2\" /opt/hellod/current/bin/hellod --run\n\nIf you run `hellod` as a daemon using SYSV or SystemD init scripts then stork\nwill load environment variables from `/etc/default/hellod`.  You could place\nthis value in there as well as others you need.  In `/etc/default/hellod`:\n\n    APP_HOME=/opt/hello/current\n    EXTRA_JAVA_ARGS=\"-Da=1 -Db=2\"\n    DB_PASSWORD=mypass\n\nStork's launcher scripts for daemons will load these environment variables\nwhen starting.  For variables used by the launcher script (e.g. APP_HOME or\nEXTRA_JAVA_ARGS), these are overrides.  For variables no used (e.g. DB_PASSWORD)\nthese are effectively passed through to the Java process.\n\n\n## Stork assembly\n\nStages and assembles your application into a [canonical stork layout](docs/CANONICAL_LAYOUT.md).\nThe following are copied to target/stork/lib using the full groupId-artifactId-version naming\nformat:\n\n - Your project artifact (if its a jar)\n - Any additional \"attached\" runtime jar artifacts\n - Your runtime dependencies\n\nYour project basedir conf/, bin/ and share/ directories are then copied to\ntarget/stork (will overlay/overwrite any files currently in target/stork).\nTo include launchers as part of your assembly, you will need to include both\nthe assembly and one or more generate goals. Finally, the contents\nof target/stork are tarballed into ${finalName}.tar.gz with an install prefix\nof ${finalName} as the root directory of the tarball (so it unpacks correctly)\n\n### Usage\n\nMaven\n\n```xml\n\u003cbuild\u003e\n    \u003cplugins\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003ecom.fizzed\u003c/groupId\u003e\n            \u003cartifactId\u003estork-maven-plugin\u003c/artifactId\u003e\n            \u003cversion\u003e3.2.0\u003c/version\u003e\n            \u003cexecutions\u003e\n                \u003cexecution\u003e\n                    \u003cid\u003estork-assembly\u003c/id\u003e\n                    \u003cgoals\u003e\n                        \u003cgoal\u003eassembly\u003c/goal\u003e\n                    \u003c/goals\u003e\n                \u003c/execution\u003e\n            \u003c/executions\u003e \n        \u003c/plugin\u003e\n    \u003c/plugins\u003e\n\u003c/build\u003e\n```\n\nGradle (to be released soon)\n\n* task name: storkAssembly\n```groovy\nstorkAssembly {\n    stageDirectory = new File(\"${project.buildDir}\", \"stork\")\n    outputFile = project.buildDir\n}\n```\n\nWhat's nice is that target/stork still exists and you are free to directly\nrun anything in target/stork/bin -- since the launcher scripts correctly\npick up your relative dependencies.  You can quickly run your application\nas though you had already deployed it to a remote system.\n\nTo customize, the following properties are supported:\n\n - stageDirectory: The directory where assembly contents will be staged to and\n   tarballed from. Defaults to ${project.build.directory}/stork\n\n - outputDirectory: The directory the final tarball assembly will be output.\n   Defaults to ${project.build.directory}\n\n - finalName: The final name of the assembly tarball -- as well as the name of\n   the root directory contained within the tarball -- that will contain the \n   contents of stageDirectory. Defaults to ${project.build.finalName}\n   \n - attachArtifacts: If true the .tar.gz archive will be attached as an artifact to the maven build,\n   installed to the local repository and deployed to the remote in the deploy phase. Defaults to false\n   \n - classifier: Classifier used for the attached .tar.gz archive. Only relevant when attachArtifact is set to true.\n   Defaults to no classifier.\n\n\n## Stork deploy\n\nUtility for rapidly deploying a \"versioned\" install on one or more remote\nLinux-based systems via SSH. Installs a stork-based assembly tarball into a\nversioned directory structure on a remote system and handles restarting daemons\nas needed.  The versioned directory structure allows rapid deployment with the\nability to revert to a previous version if needed.  Power users can combine with\n[Blaze](https://github.com/fizzed/blaze) for even more advanced deploys.\n\n### Usage\n\nCommand-line to traditional remote system\n\n    stork-deploy --assembly target/myapp-1.0.0-SNAPSHOT.tar.gz ssh://host.example.com\n\nCommand-line to Vagrant\n\n    stork-deploy --assembly target/myapp-1.0.0-SNAPSHOT.tar.gz vagrant+ssh://machine-name\n\n### Overview\n\nSince this a \"SNAPSHOT\" version, a timestamp would be generated (such as\n20160401-121032 for April 1, 2016 12:10:32) and this application would be installed\nto:\n\n    /opt/myapp/v1.0.0-20160401-121032\n\nA symlink will be created:\n\n    /opt/myapp/current -\u003e /opt/myapp/v1.0.0-20160401-121032\n\nSince this application contains one daemon called \"hello-server\", the daemon\nwould be stopped (if it existed), the upgrade would occur, then the daemon would\nbe installed (if needed) and started back up.  The directories described above\nin the canonical layout as (retained on upgrade) would be moved rather than\noverwritten. That means during a fresh install, the bin/, lib/, conf/, and\nshare/ directories are installed.  On an upgrade install, the bin/, lib, and\nshare/ directories are installed, while conf/ and runtime dirs data/, log/, and\nrun/ directories are moved.\n\n## Programmatic deploys using Blaze\n\nYou can combine Stork with [Blaze](https://github.com/fizzed/blaze) to make\nautomating your deployments even simpler.  You'll also never need to download\nstork locally since Blaze will automatically fetch the dependency for you.\n\nDownload blaze:\n\n    curl -o blaze.jar 'http://repo1.maven.org/maven2/com/fizzed/blaze-lite/0.16.0/blaze-lite-0.16.0.jar'\n\nCreate a `blaze.conf` file:\n\n    blaze.dependencies = [\n      \"com.fizzed:stork-deploy:3.2.0\"\n    ]\n\nCreate a `blaze.java` file:\n\n```java\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\nimport com.fizzed.stork.deploy.Assembly;\nimport com.fizzed.stork.deploy.Assemblys;\nimport com.fizzed.stork.deploy.DeployOptions;\nimport com.fizzed.stork.deploy.Deployer;\n\npublic class blaze {\n\n    private final Path archiveFile = Paths.get(\"target/hello-0.0.1-SNAPSHOT.tar.gz\");\n\n    @Task(\"Deploy assembly to staging env\")\n    public void deploy_stg() throws Exception {\n        DeployOptions options = new DeployOptions()\n            .user(\"hello\")\n            .group(\"hello\");\n\n        try (Assembly assembly = Assemblys.process(archiveFile)) {\n            new Deployer().deploy(assembly, options, \"ssh://app1\");\n            new Deployer().deploy(assembly, options, \"ssh://app2\");\n        }\n    }\n}\n```\n\nRun it\n\n    java -jar blaze.jar deploy_stg\n\n## More examples\n\n### stork-demo-hellod\n\n[stork-demo/stork-demo-hellod](stork-demo/stork-demo-hellod)\n\nTo try this demo out, we use [Blaze](https://github.com/fizzed/blaze) for\nscripting the build and execution process\n\n    java -jar blaze.jar demo_hellod\n\n### stork-demo-dropwizard\n\n[stork-demo/stork-demo-dropwizard](stork-demo/stork-demo-dropwizard)\n\nTo try this demo out, we use [Blaze](https://github.com/fizzed/blaze) for\nscripting the build and execution process\n\n    java -jar blaze.jar demo_dropwizard\n\nBy default the server runs on port 8080 and you can then visit the sample in \nyour browser @ http://localhost:8080/\n\n## Development \u0026 contributing\n\nPlease see the [development guide](docs/DEV.md) for info on building, testing,\nand eventually contributing to this project.\n\n## License\n\nCopyright (C) 2025 Fizzed, Inc.\n\nThis work is licensed under the Apache License, Version 2.0. See LICENSE for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffizzed%2Fstork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffizzed%2Fstork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffizzed%2Fstork/lists"}