{"id":13646287,"url":"https://github.com/metaparticle-io/package","last_synced_at":"2025-05-16T14:04:48.155Z","repository":{"id":25699608,"uuid":"105680691","full_name":"metaparticle-io/package","owner":"metaparticle-io","description":"Metaparticle/Package: Language Fluent Containerization and Deployment in Java, .NET and Javascript (and more coming soon)","archived":false,"fork":false,"pushed_at":"2022-12-07T18:43:53.000Z","size":347,"stargazers_count":493,"open_issues_count":34,"forks_count":55,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-05-11T13:04:28.145Z","etag":null,"topics":["distributed-systems","docker","dotnet","dotnet-core","java","javascript","kubernetes","programmer"],"latest_commit_sha":null,"homepage":"https://metaparticle.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/metaparticle-io.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":"2017-10-03T17:21:51.000Z","updated_at":"2025-02-16T06:37:49.000Z","dependencies_parsed_at":"2023-01-14T03:11:36.269Z","dependency_job_id":null,"html_url":"https://github.com/metaparticle-io/package","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaparticle-io%2Fpackage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaparticle-io%2Fpackage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaparticle-io%2Fpackage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaparticle-io%2Fpackage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metaparticle-io","download_url":"https://codeload.github.com/metaparticle-io/package/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254544146,"owners_count":22088807,"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":["distributed-systems","docker","dotnet","dotnet-core","java","javascript","kubernetes","programmer"],"created_at":"2024-08-02T01:02:52.168Z","updated_at":"2025-05-16T14:04:48.126Z","avatar_url":"https://github.com/metaparticle-io.png","language":"Go","readme":"# Metaparticle/Package\n\nLanguage Idiomatic bindings for building Container Images.\n\n## What's this about?\nContainers are an optimal way to package and deploy your code. However, teaching developers to learn a new\nconfiguration file format, and toolchain, just to package their application in a container is an\nunnecessary barrier to entry for many programmers just starting out with containers.\n\nMetaparticle/Package simplifies the task of building and deploying container images. Metaparticle/Package is\na collection of libraries that enable programmers to build and deploy containers using code that feels\nfamiliar to them.\n\nRather than learn a new set of tools, syntaxes or workflows. The package libraries aim to use language level features to add new capabilities to existing programming languages.\n\n## Can you give me an example?\nHere's a simple example of building a containerized Java application:\n\n```Java\nimport io.metaparticle.annotations.Package;\nimport static io.metaparticle.Metaparticle.Containerize;\n\npublic class Main {\n    @Package(repository=\"brendanburns\",\n             jarFile=\"path/to/my-fat-jar.jar\")\n    public static void main(String[] args) {\n        Containerize(() -\u003e {\n            System.out.println(\"Hello Metaparticle/Package\");\n        });\n    }\n}\n```\n\nWhen you run this program via the `java` command or your IDE, rather than simply executing your code, this program\npackages up the Java code in a container, and runs that container.\n\n## What languages do you support?\n\nCurrently:\n   * [java](java)\n   * [.NET core](dotnet)\n   * [javascript](javascript) (NodeJS)\n   * [go](go)\n   * [python](python)\n   * [ruby](ruby)\n\nBut it's fairly straightforward to add other languages, we would love to see contributions.\n\n## Details\n\nFor more details see the more complete walkthroughs for each language:\n   * [java tutorial](tutorials/java/tutorial.md)\n   * [.NET Core tutorial](tutorials/dotnet/tutorial.md)\n   * [javascript tutorial](tutorials/javascript/tutorial.md)\n   * [python tutorial](tutorials/python/tutorial.md)\n   * [go tutorial](tutorials/go/tutorial.md)\n   * [Ruby tutorial](tutorials/ruby/tutorial.md)\n\n## Operation\nWhen you link the metaparticle package library into your application, it intercepts and overwrites the\n`main` program entry point. This interception performs the following pseudo code:\n```go\nfunc main(args []string) {\n    if runningInDockerContainer {\n        executeOriginalMain(args)\n    } else {\n        buildDockerImage()\n        pushDockerImage()\n        if deployRequested {\n            deployDockerImage()\n        }\n    }\n}\n```\n\nThe net effect of this is that a developer can containerize, distribute and optionally deploy their application without ever leaving the syntax or confines of their development environment and language of choice.\n\nAt the same time, metaparticle is not intended to be a platform. Under the hood, the libraries still\nwrite `Dockerfiles` and make calls to the same build and push code. So when a developer wants or needs\nto switch to the complete container tooling, they can easily take their application with them.\n\nIn addition to basic packaging and deployment, metaparticle can also implement more [complex distributed system patterns](distributed-patterns.md) via language fluent semantics.\n\n## Contribute\nThere are many ways to contribute to Metaparticle\n\n * [Submit bugs](https://github.com/metaparticle-io/package/issues) and help us verify fixes as they are checked in.\n * Review the source code changes.\n * Engage with other Metaparticle users and developers on [gitter](https://gitter.im/metaparticle-io/Lobby).\n * Join the #metaparticle discussion on [Twitter](https://twitter.com/MetaparticleIO).\n * [Contribute bug fixes](https://github.com/metaparticle-io/package/pulls).\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto://opencode@microsoft.com) with any additional questions or comments.\n\n","funding_links":[],"categories":["Configuration Management","Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaparticle-io%2Fpackage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetaparticle-io%2Fpackage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaparticle-io%2Fpackage/lists"}