{"id":13442482,"url":"https://github.com/screenshotbot/screenshotbot-oss","last_synced_at":"2026-02-09T16:10:35.194Z","repository":{"id":37607969,"uuid":"361308385","full_name":"screenshotbot/screenshotbot-oss","owner":"screenshotbot","description":"A Screenshot Testing service to tie with your existing Android, iOS and Web screenshot tests","archived":false,"fork":false,"pushed_at":"2026-02-08T16:03:11.000Z","size":119394,"stargazers_count":292,"open_issues_count":0,"forks_count":13,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-02-08T17:54:10.658Z","etag":null,"topics":["android-screenshot-tests","ci","ios-snapshot-tests","screenshot-tests","snapshot-testing","swift-snapshot-testing","testing"],"latest_commit_sha":null,"homepage":"https://screenshotbot.io","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/screenshotbot.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-04-25T02:02:14.000Z","updated_at":"2026-02-08T16:03:15.000Z","dependencies_parsed_at":"2025-10-23T18:35:56.404Z","dependency_job_id":null,"html_url":"https://github.com/screenshotbot/screenshotbot-oss","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/screenshotbot/screenshotbot-oss","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/screenshotbot%2Fscreenshotbot-oss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/screenshotbot%2Fscreenshotbot-oss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/screenshotbot%2Fscreenshotbot-oss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/screenshotbot%2Fscreenshotbot-oss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/screenshotbot","download_url":"https://codeload.github.com/screenshotbot/screenshotbot-oss/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/screenshotbot%2Fscreenshotbot-oss/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29271925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T13:47:44.167Z","status":"ssl_error","status_checked_at":"2026-02-09T13:47:43.721Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["android-screenshot-tests","ci","ios-snapshot-tests","screenshot-tests","snapshot-testing","swift-snapshot-testing","testing"],"created_at":"2024-07-31T03:01:46.244Z","updated_at":"2026-02-09T16:10:35.188Z","avatar_url":"https://github.com/screenshotbot.png","language":"Common Lisp","funding_links":[],"categories":["Common Lisp","Expert Systems"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://screenshotbot.io/assets/images/logo-dark.svg\" width=\"40%\" /\u003e\n\u003c/p\u003e\n\n# Screenshotbot: Screenshot Testing Service\n\n[![tdrhq](https://circleci.com/gh/screenshotbot/screenshotbot-oss.svg?style=shield)](https://app.circleci.com/pipelines/github/screenshotbot/screenshotbot-oss?branch=main)\n[![Screenshots](https://screenshotbot.io/badge?org=5fd16bcf4f4b3822fd0000e1\u0026channel=screenshotbot-oss\u0026branch=master\u0026cache-key=2)](https://screenshotbot.io/active-run?org=5fd16bcf4f4b3822fd0000e1\u0026channel=screenshotbot-oss\u0026branch=master)\n\n\nScreenshotbot is a Screenshot Testing service. Screenshotbot will\nconnect your existing Android, iOS or Selenium tests to track how\nscreenshots change over time, notifying you on Pull Requests, Jira\netc. We provide several integrations to common Code Review and Task\nManagement platforms, and have more in the pipeline.\n\nScreenshotbot-oss powers our own commercial platform\n[screenshotbot.io](https://screenshotbot.io).\n\n\n\u003cp align=\"center\"\u003e\n   \u003cimg src=\"https://cdn.screenshotbot.io/assets/images/new-landing/landing-hero.png\" width=\"60%\" /\u003e\n\u003c/p\u003e\n\n\n## Quick installation with Docker\n\n```\n$ docker-compose up --build\n```\n\nIf you need to modify the `config.lisp`, modify it before running this\ncommand. In the future we'll provide live reloading of config.lisp for\ndocker, but at the moment that's only available when not using docker.\n\n## Quick Installation in the cloud\n\nIf you want a publicly accessible instance, complete with HTTPS, we\nhave a script that will help you set it up in your cloud.\n\nSee [this wiki page](https://github.com/screenshotbot/screenshotbot-oss/wiki/Quick-installation-in-the-cloud) for details.\n\n## Configuration\n\nScreenshotbot has integrations with various external tools,\ne.g. GitHub, Jira, SSO etc. Most of these platforms require some\nkind of API key to access their APIs, and must be configured with\nScreenshotbot before you can use them.\n\nFor simplicity and maintainability, we don't have complex GUIs to\nmodify these _site-admin_ configurations. Instead each of these\nintegrations are exposed as plugins that must be configured with basic\nCommon Lisp code. The configuration can be hot-reloaded.\n\nScreenshotbot looks for a file called `config.lisp` in both the\ngit-root, and in `~/.config/screenshotbot/`. If found, it loads this\nfile as the configuration.\n\nSee [Updating\nconfig.lisp](https://github.com/screenshotbot/screenshotbot-oss/wiki/Updating-config.lisp)\nfor a more thorough discussion.\n\n### Becoming a Site-Admin\n\nAfter installing Screenshotbot, we recommend setting up one user as a\nsite-admin. The site-admin gets special administrative powers that\nwill be required for hot-reloading config files, and hot-reloading\nupdates. We might also build more configuration powers for site-admins\nin the future.\n\nAfter signing up and logging in, go to\n`https://\u003cdomain\u003e/site-admin/self-promotion`. Follow the steps. You'll\nneed shell access to the directory with the Screenshotbot\ninstallation. You'll now have access to an Admin menu on the bottom\nleft.\n\n\n## Calling Screenshotbot from your CI jobs\n\nFirst, you'll need to generate an API key inside Screenshotbot. You'll\nuse this to access the API or the CLI tools.\n\nNext you need to build the CLI tool for your platform. Common Lisp is\na compiled language, so in general you'll need different binaries for\ndifferent platforms (Linux, Mac or Windows; Intel vs ARM). You can\ndownload pre-built binaries for Linux and Mac from\nhttps://screenshotbot.io/recorder.sh.\n\nTo create a binary on a specific platform, call the script\n`scripts/build-cli.lisp`. For instance, if you're using SBCL to build the CLI,\nit will look like:\n\n```\n $ sbcl --script scripts/build-cli.lisp\n```\n\nThis will generate a screenshotbot-cli executable script. Copy it to a\nlocation from which it can be dowloading during your CI runs, or check\nit in to your repository. (As of this writing SBCL generates a binary\nthat is 105MB in size, and 24MB zipped; CCL 100MB/21MB excluding core;\nLispWorks 25MB/4.4MB. LispWorks has extra features to remove unused\ncode.)\n\nFor an example use of this executable see:\nhttps://github.com/tdrhq/fast-example/blob/master/.circleci/config.yml.\nYou'll also have to pass the `--hostname` argument, which will be the\nURL of your Screenshotbot installation.\n\n## Setting up SSO\n\nScreenshotbot comes with an in-built email/password authentication\nsystem, and also supports OpenID Connect out of the box. We also have\nin-built connectors for Google OAuth restricted to domains, which\nmight be easier for smaller companies.\n\nSee [Configuring\nSSO](https://github.com/screenshotbot/screenshotbot-oss/wiki/Configuring-SSO)\nfor a thorough discussion.\n\n\n## Feature Status\n\nNot all the features on [screenshotbot.io](https://screenshotbot.io)\nare available in this OSS repository. We are in the process of moving\nmost integrations here, but that will depend on community interest.\n| Feature               | LispWorks    | CCL          | SBCL              | screenshotbot.io  (Enterprise) |\n|:---------------------:|:------------:|:------------:|:-----------------:|:------------------------------:|\n| **SSO/OAuth**         |              |              |                   |                                |\n| User / Email          | Supported    | Supported    | Supported         | Supported                      |\n| OpenID Connect        | Supported    | Supported    | Supported         | Supported                      |\n| SAML                  | Via Keycloak | Via Keycloak | Via Keycloak      | Supported                      |\n| **VCS Integrations**  |              |              |                   |                                |\n| GitHub                | Supported    | Supported    | Supported         | Supported                      |\n| GitLab                | Supported    | Supported    | Supported         | Supported                      |\n| Phabricator           | Supported    | Supported    | Supported         | Supported                      |\n| BitBucket             | Supported    | Supported    | Supported         | Supported                      |\n| Azure DevOps          | Supported    | Supported    | Supported         | Supported                      |\n| **Tasks Integration** |              |              |                   |                                |\n| Slack                 | Supported    | Supported    | Supported         | Supported                      |\n| Email                 | Supported    | Supported    | Supported         | Supported                      |\n| Jira                  | Planned      | Planned      | Not supported [1] | Supported                      |\n| Trello                | Planned      | Planned      | Not supported [1] | Supported                      |\n| Asana                 | Planned      | Planned      | Not supported [1] | Planned                        |\n| **Annotations** [2]   | Planned      | Planned      | Planned           | Supported                      |\n| Jira                  | Planned      | Planned      | Not supported [1] | Supported                      |\n\nFootnotes:\n\n1. Not supported because SBCL doesn't support Java\n\n2. Annotations allow you to create tasks directly from Screenshotbot\n\n## Upgrading\n\nIn most cases, upgrading will be done via hot-reloading. As a\nsite-admin, you can `git pull` on the repository, on the shell, go to\ngo `https://\u003cdomain\u003e/admin` and hit `Reload`. This will bring the new\ncode live without any downtime.\n\nSmall catch: Our database is stored is in-memory (with transactions\nlogged to disk for recovery). Hot-reloading code can force schema\nchanges. For instance, if a field is deleted between two major\nversions, hot reloading will cause that field to be lost forever (but\nthere are snapshots of old versions of the database for recovery). In\ngeneral we'll try to guarantee that between minor versions, on\nreleased commits, as long as you're upgrading (as opposed to\ndowngrading), we'll be able to auto-migrate any schema cleanly.\n\nYou can also upgrade by killing the Lisp process and restarting it. If\nyou do so, we recommend hitting `Snapshot` on the admin menu before\nkilling the Lisp process. However killing the Lisp process can cause a\nminor downtime. You can work around this by using a tool called\n`socketmaster`, but the description of that tool is beyond the scope\nof this document.\n\n## Contributing\n\nWe welcome Pull Requests!\n\nKeep in mind, we'll do the code review on GitHub, but we'll merge it\nvia our internal Phabricator instance. The source of truth for the\ncode is in our internal mono-repo, which is copied over to the OSS\ncode via Copybara, similar to the process that Google and Facebook\nuse. We have open sourced many other projects where the source of\ntruth is GitHub, but Screenshotbot is an actively-developed complex\napplication that makes this difficult.\n\nWe might reject large new features if we think it adds too much\nmaintenance overhead for us. Bug-fixes are always welcome.\n\n## Open Source Support\n\nWe want the Open Source version of Screenshotbot to be successful. That being\nsaid, we are a very small company, so it's difficult for us to dedicate\na lot of resources specifically for keeping Open Source supported across multiple\nplatforms, multiple deployment styles, etc.\n\nYou can help us! Just be patient with us when we ask for specifics about your installation.\nSend us any feedback---good, bad or neutral---to arnold@screenshotbot.io.\nGet other\nteams to use Screenshotbot, either open-source or paid. The more users we have the\neasier it is for us to catch bugs early and stream-line the open source experience.\n\nGive us a star on GitHub!\n\nWe aren't currently accepting donations, but consider convincing your\nteam to pay us for support. If you're a small team or an individual\ndeveloper, just send us an email and we'll make sure you have a plan\nyou can afford. Most of our code is open-source, so by paying us\nyou're directly supporting our open-source contributions.\n\n## Security\n\nWe take security at Screenshotbot very seriously. We partner with an\nexternal security research firm, [Pensive\nSecurity](https://pensivesecurity.io) to perform annual penetration\ntests. The latest Penetration Test reports can be requested on our\n[Trust and Security](https://trust.screenshotbot.io) dashboard.\n\n\n## Authors\n\nScreenshotbot is built and maintained by Arnold Noronha\n(arnold@screenshotbot.io). I also wrote\n[screenshot-tests-for-android](https://github.com/facebook/screenshot-tests-for-android),\nthe de-facto screenshot testing library for Android.\n\n## License\n\nScreenshot is licensed under the Mozilla Public License, v2.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscreenshotbot%2Fscreenshotbot-oss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscreenshotbot%2Fscreenshotbot-oss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscreenshotbot%2Fscreenshotbot-oss/lists"}