{"id":13878643,"url":"https://github.com/digital-fabric/impression","last_synced_at":"2025-06-18T09:35:41.383Z","repository":{"id":56826957,"uuid":"341824572","full_name":"digital-fabric/impression","owner":"digital-fabric","description":"A modern web framework for Ruby","archived":false,"fork":false,"pushed_at":"2025-01-09T09:14:54.000Z","size":96,"stargazers_count":25,"open_issues_count":1,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-03-24T09:47:11.406Z","etag":null,"topics":["http","rest","web","web-framework"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/digital-fabric.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":"noteflakes"}},"created_at":"2021-02-24T08:05:35.000Z","updated_at":"2025-01-09T09:14:57.000Z","dependencies_parsed_at":"2024-01-13T20:36:28.116Z","dependency_job_id":"60ac0da1-a774-4a0a-ab53-5a8639626bbb","html_url":"https://github.com/digital-fabric/impression","commit_stats":{"total_commits":97,"total_committers":1,"mean_commits":97.0,"dds":0.0,"last_synced_commit":"8c7a89e2d86a138290e05e7336cf3b62f09d47de"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digital-fabric%2Fimpression","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digital-fabric%2Fimpression/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digital-fabric%2Fimpression/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/digital-fabric%2Fimpression/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/digital-fabric","download_url":"https://codeload.github.com/digital-fabric/impression/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248662274,"owners_count":21141545,"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":["http","rest","web","web-framework"],"created_at":"2024-08-06T08:01:55.540Z","updated_at":"2025-04-13T04:23:01.695Z","avatar_url":"https://github.com/digital-fabric.png","language":"Ruby","funding_links":["https://github.com/sponsors/noteflakes"],"categories":["Ruby"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  Impression\n\u003c/h1\u003e\n\n\u003ch4 align=\"center\"\u003eA modern web framework for Ruby\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://rubygems.org/gems/impression\"\u003e\n    \u003cimg src=\"https://badge.fury.io/rb/impression.svg\" alt=\"Ruby gem\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/digital-fabric/impression/actions?query=workflow%3ATests\"\u003e\n    \u003cimg src=\"https://github.com/digital-fabric/impression/workflows/Tests/badge.svg\" alt=\"Tests\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/digital-fabric/impression/blob/master/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## What is Impression\n\n\u003e Impression is still in a very early stage of development. Things might not\n\u003e work correctly.\n\nImpression is a modern web framework for Ruby. Unlike other web framework,\nImpression does not impose any rigid structure or paradigm, but instead provides\na minimalistic set of tools, letting you build any kind of web app, by freely\nmixing different kinds of web resources, be they static files, structured\ntemplates, Jamstack sites, or dynamic APIs.\n\n## Resources\n\nThe main abstraction in Impression is the resource - which represents an web\nendpoint that is mounted at a specific location in the URL namespace, and\nresponds to requests. Resources can be nested in order to create arbitrarily\ncomplex routing trees. Impression provides multiple resource types, each\ncustomized for a specific use case, be it a JSON API, a set of MVC-style\ncontrollers, or a Markdown-based blog with static content.\n\nFinally, any kind of resource can be used as an Impression app. Routing is\nperformed automatically according to the resource tree, starting from the root\nresource.\n\n## The request-response cycle\n\nThe handling of incoming HTTP requests is done in two stages. First the request\nis routed to the corresponding resource, which then handles the request by\ngenerating a response.\n\nHTTP requests and responses use the\n[Qeweney](https://github.com/digital-fabric/qeweney) API.\n\n## Resource types\n\nImpression provides the following resources:\n\n- `Resource` - a generic resource.\n- `FileTree` - a resource serving static files from the given directory.\n- `App` - a resource serving static files, markdown files with layouts and Ruby\n  modules from the given directory.\n- `RackApp` - a resource serving the given Rack app.\n\n## Setting up a basic resource\n\nTo setup a generic resource, call `Impression.resource` and provide a request\nhandler:\n\n```\napp = Impression.resource { |req| req.respond('Hello, world!') }\n```\n\n## Running your app with Tipi\n\nImpression is made for running on top of\n[Tipi](https://github.com/digital-fabric/tipi). Your Tipi app file would like\nsomething like the following:\n\n```ruby\n# app.rb\napp = Impression.resource { |req| req.respond('Hello, world!') }\nTipi.run(\u0026app)\n```\n\nYou can then start Tipi by running `tipi run app.rb`.\n\n## Running your app with a Rack app server\n\nYou can also run your app on any Rack app server, using something like the\nfollowing:\n\n```ruby\napp = Impression.resource { |req| req.respond('Hello, world!') }\nrun Qeweney.rack(\u0026app)\n```\n\n## Creating a routing map with resources\n\nA resource can be mounted at any point in the app's URL space. Resources can be\nnested within other resources by passing a `parent:` argument when creating a\nresource:\n\n```ruby\napp = Impression.app { |req| req.respond('Homepage') }\ngreeter = Impression.resource(parent: app, path: 'greeter')\nstatic = Impression.file_tree(parent: app, path: 'static', directory: __dir__)\n```\n\n## I want to know more\n\nFurther documentation is coming real soon (TM)...\n\n## Contributing\n\nContributions in the form of issues, PRs or comments will be greatly\nappreciated!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigital-fabric%2Fimpression","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdigital-fabric%2Fimpression","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdigital-fabric%2Fimpression/lists"}