{"id":13755965,"url":"https://github.com/skinny-framework/skinny-micro","last_synced_at":"2025-04-14T19:36:15.565Z","repository":{"id":36897512,"uuid":"41204520","full_name":"skinny-framework/skinny-micro","owner":"skinny-framework","description":":microphone: Micro Web framework to build Servlet applications in Scala, the core part of Skinny Framework 2","archived":false,"fork":false,"pushed_at":"2022-03-13T07:47:27.000Z","size":2827,"stargazers_count":57,"open_issues_count":4,"forks_count":7,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-28T08:01:42.069Z","etag":null,"topics":["jackson","jetty","json","json4s","scala","scalate","web-framework"],"latest_commit_sha":null,"homepage":"https://skinny-framework.github.io/documentation/micro.html","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skinny-framework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-08-22T11:39:58.000Z","updated_at":"2022-03-13T07:44:38.000Z","dependencies_parsed_at":"2022-08-25T19:21:02.913Z","dependency_job_id":null,"html_url":"https://github.com/skinny-framework/skinny-micro","commit_stats":null,"previous_names":[],"tags_count":56,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skinny-framework%2Fskinny-micro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skinny-framework%2Fskinny-micro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skinny-framework%2Fskinny-micro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skinny-framework%2Fskinny-micro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skinny-framework","download_url":"https://codeload.github.com/skinny-framework/skinny-micro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248946835,"owners_count":21187583,"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":["jackson","jetty","json","json4s","scala","scalate","web-framework"],"created_at":"2024-08-03T11:00:33.447Z","updated_at":"2025-04-14T19:36:15.546Z","avatar_url":"https://github.com/skinny-framework.png","language":"Scala","funding_links":[],"categories":["`API Frameworks`","Service Toolkits","API Frameworks"],"sub_categories":["Scala","JVM","Java VM"],"readme":"# Skinny Micro [![Maven Central](https://img.shields.io/maven-central/v/org.skinny-framework/skinny-micro_2.12.svg?label=Maven%20Central)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.skinny-framework%22%20a%3A%22skinny-micro_2.12%22) ![CI Build](https://github.com/skinny-framework/skinny-micro/workflows/CI%20Build/badge.svg)\n\nSkinny Micro is at once a micro Web framework to build Servlet applications in Scala and the core part of [Skinny Framework](http://skinny-framework.org/).\n\nSkinny Micro started as a fork of [Scalatra](http://scalatra.org/). After that, many improvements have been made to be safer and more efficient when working with Scala Future values upon it.\n\nBasically, Skinny Micro's DSLs are source compatible with Scalatra 2.3's ones. But names of base traits and packages are mostly renamed and the structure of internal modules are re-designed.\n\n## Getting Started\n\nTaking a look at [skinny-micro-heroku-example](https://github.com/skinny-framework/skinny-micro-heroku-example) first would be helpful to understand what you need to do. [samples](https://github.com/skinny-framework/skinny-micro/tree/master/samples) and [scalas-samples](https://github.com/skinny-framework/skinny-micro/tree/master/scalas-samples) in this repository are also worth looking at.\n\n### Library Dependencies\n\nWhen you start new sbt project, add the following dependencies:\n\n```scala\nlazy val skinnyMicroVersion = \"2.0.+\"\n\nlibraryDependencies ++= Seq(\n  // micro Web framework\n  \"org.skinny-framework\" %% \"skinny-micro\"             % skinnyMicroVersion,\n  // jackson integration\n  \"org.skinny-framework\" %% \"skinny-micro-jackson\"     % skinnyMicroVersion,\n  \"org.skinny-framework\" %% \"skinny-micro-jackson-xml\" % skinnyMicroVersion,\n  // json4s integration\n  \"org.skinny-framework\" %% \"skinny-micro-json4s\"      % skinnyMicroVersion,\n  // Scalate integration\n  \"org.skinny-framework\" %% \"skinny-micro-scalate\"     % skinnyMicroVersion,\n  // Standalone Web server (Jetty 9.4 / Servlet 3.1)\n  \"org.skinny-framework\" %% \"skinny-micro-server\"      % skinnyMicroVersion\n)\n```\n\n## Minimum Examples\n\nWe'd love to show you some simple but working examples briefly.\n\nPlease also see more examples under [samples](https://github.com/skinny-framework/skinny-micro/tree/master/samples) and [scalas-samples](https://github.com/skinny-framework/skinny-micro/tree/master/scalas-samples).\n\n### Simple Application\n\nThe following is a minimum Servlet example. `skinny.micro.SkinnyListener` initializes Skinny Micro's environment.\n\nAs same as Scalatra, `_root_.Bootstrap` class (instead of `_root_.ScalatraBootstrap` for Scalatra) is detected by default. If you'd like to change the name of the `Bootstrap` class, it's also possible by specifying with Servlet's init parameter.\n\nAlso take a look at [sbt-servlet-plugin](https://github.com/skinny-framework/sbt-servlet-plugin). The plugin will help you much when building Servlet applications in Scala.\n\nSee [samples](https://github.com/skinny-framework/skinny-micro/tree/master/samples) for more examples.\n\n#### src/main/scala/app.scala\n\n```scala\nimport javax.servlet._\nimport skinny.micro._\n\nobject Hello extends WebApp {\n  get(\"/say-hello\") {\n    s\"Hello, ${params.getOrElse(\"name\", \"Anonymous\")}!\\n\"\n  }\n}\n\nclass Bootstrap extends LifeCycle {\n  override def init(ctx: ServletContext) {\n    Hello.mount(ctx)\n  }\n}\n```\n\n#### src/main/webapp/WEB-INF/web.xml\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cweb-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd\"\n         version=\"3.1\"\u003e\n    \u003clistener\u003e\n        \u003clistener-class\u003eskinny.micro.SkinnyListener\u003c/listener-class\u003e\n    \u003c/listener\u003e\n\u003c/web-app\u003e\n```\n\n### Async Native Application\n\nSkinny Micro newly privides original base traits that named as `AsyncWebApp (AsyncSkinnyMicorFilter)` and `AsyncSingleWebApp (AsyncSkinnyMicroServlet)`.\n\nThey are natively suitable for building Future-wired async operations. You will no longer unwantedly feel stressed when working with Future-wired operations.\n\n```scala\ncase class Message(id: Long, text: String)\n\nobject Messages {\n  def search(keyword: Option[String])(implicit ctx: ExecutionContext): Future[Seq[Message]]\n}\n\nobject AsyncMessagesApp extends AsyncWebApp with JSONSupport {\n\n  post(\"/messages/search\") { implicit ctx =\u003e\n    // You don't need to explicitly wrap results with AsyncResult\n    // Of course, doing so is also fine\n    Messages.search(params.get(\"keyword\"))\n      .map(ms =\u003e Ok(toJSONString(ms))) // returns Future[ActionResult]\n  }\n}\n```\n\n### Scalas Example\n\nBy using scalas, script runnner from sbt, you can easily run small Scala applications.\n\nhttp://www.scala-sbt.org/0.13/docs/Scripts.html\n\n```scala\n#!/usr/bin/env scalas\n// or ./scalas app.scala\n/***\nscalaVersion := \"2.12.10\"\nlibraryDependencies += \"org.skinny-framework\" %% \"skinny-micro-server\" % \"2.0.+\"\n*/\nimport skinny.micro._\nobject HelloApp extends WebApp {\n  get(\"/say-hello\") {\n    s\"Hello, ${params.getOrElse(\"name\", \"Anonymous\")}!\\n\"\n  }\n}\nWebServer.mount(HelloApp).port(4567).start()\n\nprintln\nprintln(\"Try: curl -v 'localhost:4567/say-hello?name=Martin'\")\nprintln\n```\n\n### Other Examples\n\nMore working examples are available under [samples](https://github.com/skinny-framework/skinny-micro/tree/master/samples) and [scalas-samples](https://github.com/skinny-framework/skinny-micro/tree/master/scalas-samples).\n\n## License\n\n(The BSD 2-Clause License)\n\nCopyright (c) Alan Dipert\n\nCopyright (c) skinny-framework.org\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskinny-framework%2Fskinny-micro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskinny-framework%2Fskinny-micro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskinny-framework%2Fskinny-micro/lists"}