{"id":13527555,"url":"https://github.com/cmorten/opine","last_synced_at":"2025-05-16T04:04:29.762Z","repository":{"id":37693381,"uuid":"265215050","full_name":"cmorten/opine","owner":"cmorten","description":"Minimalist web framework for Deno ported from ExpressJS.","archived":false,"fork":false,"pushed_at":"2024-01-28T09:41:46.000Z","size":5005,"stargazers_count":854,"open_issues_count":0,"forks_count":43,"subscribers_count":16,"default_branch":"main","last_synced_at":"2024-10-29T17:11:38.773Z","etag":null,"topics":["deno","deno-doc","deno-module","denojs","denoland","express","expressjs","opine"],"latest_commit_sha":null,"homepage":"https://github.com/cmorten/opine/blob/main/.github/API/api.md","language":"TypeScript","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/cmorten.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS.md","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":["cmorten"]}},"created_at":"2020-05-19T10:20:52.000Z","updated_at":"2024-10-16T00:02:39.000Z","dependencies_parsed_at":"2024-01-28T12:32:05.884Z","dependency_job_id":"0ea8c69d-93f1-4e64-bfc6-931789b5f9c1","html_url":"https://github.com/cmorten/opine","commit_stats":{"total_commits":375,"total_committers":27,"mean_commits":13.88888888888889,"dds":0.7413333333333334,"last_synced_commit":"2e0f3c93c240cda4fda38f4aa4ca464a815aca74"},"previous_names":["asos-craigmorten/opine"],"tags_count":94,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmorten%2Fopine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmorten%2Fopine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmorten%2Fopine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmorten%2Fopine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmorten","download_url":"https://codeload.github.com/cmorten/opine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254464893,"owners_count":22075570,"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":["deno","deno-doc","deno-module","denojs","denoland","express","expressjs","opine"],"created_at":"2024-08-01T06:01:51.217Z","updated_at":"2025-05-16T04:04:29.727Z","avatar_url":"https://github.com/cmorten.png","language":"TypeScript","funding_links":["https://github.com/sponsors/cmorten"],"categories":["TypeScript","Modules"],"sub_categories":["Web framework"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.linkedin.com/in/hannah-morten-b1218017a/\"\u003e\u003cimg height=\"200\" style=\"height:200px;\" src=\"https://github.com/cmorten/opine/raw/main/.github/icon.png\" alt=\"Deno reading an opinionated book\"\u003e\u003c/a\u003e\n  \u003ch1 align=\"center\"\u003eOpine\u003c/h1\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nA minimalist web framework for \u003ca href=\"https://deno.land/\"\u003eDeno\u003c/a\u003e ported from \u003ca href=\"https://github.com/expressjs/express\"\u003eExpressJS\u003c/a\u003e.\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://github.com/cmorten/opine/tags/\"\u003e\u003cimg src=\"https://img.shields.io/github/tag/cmorten/opine\" alt=\"Current version\" /\u003e\u003c/a\u003e\n   \u003cimg src=\"https://github.com/cmorten/opine/workflows/Test/badge.svg\" alt=\"Current test status\" /\u003e\n   \u003ca href=\"https://doc.deno.land/https/deno.land/x/opine/mod.ts\"\u003e\u003cimg src=\"https://doc.deno.land/badge.svg\" alt=\"Deno docs\" /\u003e\u003c/a\u003e\n   \u003ca href=\"http://makeapullrequest.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" alt=\"PRs are welcome\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://github.com/cmorten/opine/issues/\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/cmorten/opine\" alt=\"Opine issues\" /\u003e\u003c/a\u003e\n   \u003cimg src=\"https://img.shields.io/github/stars/cmorten/opine\" alt=\"Opine stars\" /\u003e\n   \u003cimg src=\"https://img.shields.io/github/forks/cmorten/opine\" alt=\"Opine forks\" /\u003e\n   \u003cimg src=\"https://img.shields.io/github/license/cmorten/opine\" alt=\"Opine license\" /\u003e\n   \u003ca href=\"https://GitHub.com/cmorten/opine/graphs/commit-activity\"\u003e\u003cimg src=\"https://img.shields.io/badge/Maintained%3F-no-green.svg\" alt=\"Opine is not maintained\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://nest.land/package/opine\"\u003e\u003cimg src=\"https://nest.land/badge.svg\" alt=\"Published on nest.land\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://deno.land/x/opine\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fdeno-visualizer.danopia.net%2Fshields%2Flatest-version%2Fx%2Fopine%2Fmod.ts\" alt=\"Opine latest /x/ version\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://github.com/denoland/deno/blob/main/Releases.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/deno-1.32.4-brightgreen?logo=deno\" alt=\"Minimum supported Deno version\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://deno-visualizer.danopia.net/dependencies-of/https/deno.land/x/opine/mod.ts\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fdeno-visualizer.danopia.net%2Fshields%2Fdep-count%2Fx%2Fopine%2Fmod.ts\" alt=\"Opine dependency count\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://deno-visualizer.danopia.net/dependencies-of/https/deno.land/x/opine/mod.ts\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fdeno-visualizer.danopia.net%2Fshields%2Fupdates%2Fx%2Fopine%2Fmod.ts\" alt=\"Opine dependency outdatedness\" /\u003e\u003c/a\u003e\n   \u003ca href=\"https://deno-visualizer.danopia.net/dependencies-of/https/deno.land/x/opine/mod.ts\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?url=https%3A%2F%2Fdeno-visualizer.danopia.net%2Fshields%2Fcache-size%2Fx%2Fopine%2Fmod.ts\" alt=\"Opine cached size\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n_**Now in maintenance mode:** Deno has introduced Node and NPM compat, [considering using Express itself in\nDeno](https://deno.com/blog/v1.25#experimental-npm-support)!_\n\n```ts\nimport express from \"npm:express\";\n```\n\nExpress not working for you? [Raise an issue on Deno](https://github.com/denoland/deno/issues) and keep reading for Opine usage :tada:\n\n---\n\n## Table of Contents\n\n- [Getting Started](#getting-started)\n- [Installation](#installation)\n- [Features](#features)\n- [Documentation](#documentation)\n- [Quick Start](#quick-start)\n- [Philosophy](#philosophy)\n- [Examples](#examples)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Getting Started\n\n```ts\nimport { opine } from \"https://deno.land/x/opine@2.3.4/mod.ts\";\n\nconst app = opine();\n\napp.get(\"/\", function (req, res) {\n  res.send(\"Hello World\");\n});\n\napp.listen(3000, () =\u003e\n  console.log(\"server has started on http://localhost:3000 🚀\")\n);\n```\n\n## Installation\n\nThis is a [Deno](https://deno.land/) module available to import direct from this\nrepo and via the [Deno Registry](https://deno.land/x).\n\nBefore importing, [download and install Deno](https://deno.land/#installation).\n\nYou can then import Opine straight into your project:\n\n```ts\nimport { opine } from \"https://deno.land/x/opine@2.3.4/mod.ts\";\n```\n\nOpine is also available on [nest.land](https://nest.land/package/opine), a\npackage registry for Deno on the Blockchain.\n\n```ts\nimport { opine } from \"https://x.nest.land/opine@2.3.4/mod.ts\";\n```\n\n## Features\n\n- Robust routing\n- Large selection of HTTP helpers including support for downloading / sending\n  files, etags, Content-Disposition, cookies, JSONP etc.\n- Support for static serving of assets\n- View system supporting template engines\n- Content negotiation\n\n## Documentation\n\n- [Opine Docs](https://github.com/cmorten/opine/blob/main/.github/API/api.md) -\n  usually the best place when getting started ✨\n- [Opine Type Docs](https://cmorten.github.io/opine/)\n- [Opine Deno Docs](https://doc.deno.land/https/deno.land/x/opine/mod.ts)\n- [ExpressJS API Docs](https://expressjs.com/en/4x/api.html)\n- [License](https://github.com/cmorten/opine/blob/main/LICENSE.md)\n- [ExpressJS License](https://github.com/cmorten/opine/blob/main/EXPRESS_LICENSE.md)\n- [Changelog](https://github.com/cmorten/opine/blob/main/.github/CHANGELOG.md)\n\n## Quick Start\n\nThe quickest way to get started with Opine is to utilize the\n[Opine CLI](https://github.com/cmorten/opine-cli) to generate an application as\nshown below:\n\nInstall the executable. The executable's major version will match Opine's:\n\n```bash\ndeno install -f -q --allow-read --allow-write --allow-net --unstable https://deno.land/x/opinecli@2.0.0/opine-cli.ts\n```\n\nAnd follow any suggestions to update your `PATH` environment variable.\n\nCreate the app:\n\n```bash\nopine-cli --view=ejs hello-deno \u0026\u0026 cd hello-deno\n```\n\nStart your Opine app at `http://localhost:3000/`:\n\n```bash\ndeno run --allow-net --allow-read --allow-env mod.ts\n```\n\n## Philosophy\n\nThe [Express](https://github.com/expressjs/express) philosophy is to provide\nsmall, robust tooling for HTTP servers, making it a great solution for single\npage applications, web sites, hybrids, or public HTTP APIs.\n\nOpine aimed to achieve these same great goals, focussing on providing equivalent\nrobust tooling and features for Deno uses.\n\nNow Deno's [Node compatibility layer](https://deno.land/std/node/README.md) is\nmaturing sufficiently to support Express out of the box, Opine is operating\nmaintenance mode.\n\n## Examples\n\nTo run the [examples](./examples), you have two choices:\n\n1. Run the example using Deno directly from GitHub, for example:\n\n   ```bash\n   deno run --allow-net --allow-read https://raw.githubusercontent.com/cmorten/opine/main/examples/hello-world/index.ts\n   ```\n\n1. Clone the Opine repo locally:\n\n   ```bash\n   git clone git://github.com/cmorten/opine.git --depth 1\n   cd opine\n   ```\n\n   Then run the example you want:\n\n   ```bash\n   deno run --allow-net --allow-read ./examples/hello-world/index.ts\n   ```\n\nAll the [examples](./examples) contain example commands in their READMEs to help\nget you started for either of the above methods.\n\n## Contributing\n\n[Contributing guide](https://github.com/cmorten/opine/blob/main/.github/CONTRIBUTING.md)\n\n---\n\n## License\n\nThere are several third party modules that have been ported into this module.\nEach third party module has maintained it's license and copyrights. The only\nexception is for Express, from which this entire module has been ported, whose\nlicense and copyrights are available at [EXPRESS_LICENSE](./EXPRESS_LICENSE.md)\nin the root of this repository, and cover all files within the [source](./src)\ndirectory which not been explicitly licensed otherwise.\n\nAll modules adapted into this module are licensed under the MIT License.\n\nOpine is licensed under the [MIT License](./LICENSE.md).\n\nIcon designed and created by\n[Hannah Morten](https://www.linkedin.com/in/hannah-morten-b1218017a/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmorten%2Fopine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmorten%2Fopine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmorten%2Fopine/lists"}