{"id":46147326,"url":"https://github.com/peterprototypes/dontpanic-server","last_synced_at":"2026-03-02T07:35:35.962Z","repository":{"id":254456314,"uuid":"801036160","full_name":"peterprototypes/dontpanic-server","owner":"peterprototypes","description":"💥 Backend server for the dontpanic crate.","archived":false,"fork":false,"pushed_at":"2025-09-18T10:55:59.000Z","size":1659,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-18T12:50:01.641Z","etag":null,"topics":["monitoring","rust"],"latest_commit_sha":null,"homepage":"https://dontpanic.rs","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/peterprototypes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2024-05-15T13:22:06.000Z","updated_at":"2025-09-18T10:56:03.000Z","dependencies_parsed_at":"2024-09-12T21:37:18.919Z","dependency_job_id":"3d7c245b-44a5-442d-9cf4-416a062f3218","html_url":"https://github.com/peterprototypes/dontpanic-server","commit_stats":null,"previous_names":["peterprototypes/dontpanic-server"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/peterprototypes/dontpanic-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterprototypes%2Fdontpanic-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterprototypes%2Fdontpanic-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterprototypes%2Fdontpanic-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterprototypes%2Fdontpanic-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peterprototypes","download_url":"https://codeload.github.com/peterprototypes/dontpanic-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peterprototypes%2Fdontpanic-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29995110,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["monitoring","rust"],"created_at":"2026-03-02T07:35:35.457Z","updated_at":"2026-03-02T07:35:35.957Z","avatar_url":"https://github.com/peterprototypes.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/peterprototypes/dontpanic-server/253282285864ef092281bc63be70f79bdb10670b/static/dontpanic-ferris-logo.svg\" width=\"20%\" /\u003e\n  \u003ch1\u003edontpanic-server\u003c/h1\u003e\n  \u003cp\u003e\n    Backend web server for the \u003ca href=\"https://crates.io/crates/dontpanic\"\u003edontpanic\u003c/a\u003e crate. Receives and displays panic reports and log messages. Optionally sends notifications via multiple configurable channels.\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Features\n\n- Friendly UI\n- Authentication \u0026 Authorization\n- View reported panics \u0026 errors\n- View panic backtrace and log messages\n- Mark a panic as resolved\n- Setup and manage notifications\n- Organizations and project management\n- User management\n\n## Screenshots\n\nList of panic!()s and error!()s                | Individual report\n:---------------------------------------------:|:--------------------------------------------------:\n![](/frontend/public/screenshot_list.png?raw=true)  |  ![](/frontend/public/screenshot_report.png?raw=true)\n\n## Running via docker compose\n\n### SQLite\n\n```yml\nservices:\n  dontpanic:\n    image: ptodorov/dontpanic-server:latest\n    ports:\n      - 8080:8080\n    environment:\n      DATABASE_URL: sqlite:///data/dontpanic.sqlite?mode=rwc\n      DEFAULT_USER_EMAIL: admin@example.com\n      DEFAULT_USER_PASSWORD: admin123\n    volumes:\n      - database-data:/data\n\nvolumes:\n  database-data:\n```\n\n### MariaDB/MySQL\n\n```yml\nservices:\n\n  dontpanic:\n    image: ptodorov/dontpanic-server:latest\n    restart: always\n    container_name: dontpanic\n    ports:\n      - 8080:8080\n    environment:\n      DATABASE_URL: mysql://dontpanic:32as1e78gdfbqwe5tx@database/dontpanic\n      DEFAULT_USER_EMAIL: admin@example.com\n      DEFAULT_USER_PASSWORD: admin123\n    depends_on:\n      database:\n        condition: service_healthy\n\n  database:\n    image: mariadb\n    restart: always\n    container_name: database\n    command:\n      [\n        \"mariadbd\",\n        \"--character-set-server=utf8mb4\",\n        \"--collation-server=utf8mb4_unicode_ci\",\n      ]\n    ports:\n      - 3306:3306\n    environment:\n      MARIADB_DATABASE: dontpanic\n      MARIADB_USER: dontpanic\n      MARIADB_PASSWORD: 32as1e78gdfbqwe5tx\n      MARIADB_RANDOM_ROOT_PASSWORD: 1\n    healthcheck:\n      test: [\"CMD\", \"healthcheck.sh\", \"--connect\", \"--innodb_initialized\"]\n      start_period: 10s\n      interval: 10s\n      timeout: 5s\n      retries: 3\n    volumes:\n      - database-data:/var/lib/mysql\n\nvolumes:\n  database-data:\n```\n\n## Environment Variables\n\n| Variable                      | Description                                                                                                                           | Default\n|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|------------------\n| `BIND_ADDRESS`                | The address:port that can access dontpanic web interface. Use 0.0.0.0:8080 to allow anybody to connect.                               | `0.0.0.0:8080`\n| `BASE_URL`                    | Url to use when generating links in notifications and emails.                                                                         | `localhost`\n| `SCHEME`                      | Http scheme to use when generating links in notifications and emails.  Possible values: `http`, `https`                               | `http`\n| `RUST_LOG`                    | Logging level. Valid values are `trace`, `debug`, `info`, `warn`, `error`                                                             | `info`\n| `COOKIE_SECRET`               | The secret key used to encrypt session cookies. Set this to a random string. If this is not set, a random secret will be generated on each startup. Every time this key is changed, all sessions will be dropped and all users will need to log in again. | Random\n| `DATABASE_URL`                | Mysql: `mysql://username:password@host/database` Sqlite: `sqlite://[PATH_TO_FILE].sqlite?mode=rwc`                                    | None\n| `EMAIL_URL`                   | Optional SMTP connection url for email notifications. Format: `smtps://username:password@smtp.example.com/client.example.com:465`, [Documentation](https://docs.rs/lettre/latest/lettre/transport/smtp/struct.AsyncSmtpTransport.html#method.from_url) | None\n| `EMAIL_FROM`                  | Source email address for email notifications.                                                                                         | no-rely@dontpanic.rs\n| `DEFAULT_USER_EMAIL`          | This account will be created at startup if it does not exist. Use this to login into your self-hosted deployment.                     | None\n| `DEFAULT_USER_PASSWORD`       | Password for the default user. Min 8 characters long. Both email and password must be provided or no account will be created.         | None\n| `DEFAULT_USER_TIMEZONE`       | IANA Timezone name for the default user and for all new registrations.                                                                | `UTC`\n| `DEFAULT_USER_ORGANIZATION`   | Organization name to use when creating the default user.                                                                              | `Default Organization`\n| `REGISTRATION_ENABLED`        | Enable/disable account creation. `yes`, `1`, `true` all count as true, anything else is false. Care must be taken when setting this to yes. Anyone with access to the server can register. | `true`\n| `REQUIRE_EMAIL_VERIFICATION`  | Require new users to verify their email address before they can login. A working `EMAIL_URL` configuration is required.               | `true` if `EMAIL_URL` is set, `false` otherwise.\n| `SLACK_CLIENT_ID`             | Slack app client id. Required for Slack notifications to work. See [this](https://api.slack.com/quickstart)                           | None\n| `SLACK_CLIENT_SECRET`         | Slack app client secret. Keep this secure.                                                                                            | None\n| `PUSHOVER_APP_TOKEN`          | Pushover app token will allow users to add pushover keys to their profiles. Register an app [here](https://pushover.net/apps/build)   | None\n\n## Development\n\nIn one console start the frontend:\n```bash\ncd frontend\nnpm i\nnpm run dev\n```\n\nIn another start the project:\n```bash\nDATABASE_URL=\"sqlite://localdev.sqlite?mode=rwc\" DEFAULT_USER_EMAIL=dev@example.com DEFAULT_USER_PASSWORD=$DEFAULT_USER_EMAIL cargo run\n```\n\nhttp://localhost:8080  \nUser: `dev@example.com`  \nPass: `dev@example.com`\n\n### Database changes\n\nDon't Panic uses the excellent [SeaORM](https://www.sea-ql.org/SeaORM/) project. Make sure you have the cli installed:\n`cargo install sea-orm-cli`\n\nSet your database url environment var to avoid typing it before every command:\n`DATABASE_URL=\"mysql://user:pass@127.0.0.1:3306/database\"`\n\nTo create a database migration run:\n`sea-orm-cli migrate generate NAME_OF_MIGRATION`\n\nAfter populating the migration file, execute it:\n`sea-orm-cli migrate up`\n\nAnd finally regenerate the entity files:\n`sea-orm-cli generate entity -o src/entity --with-serde serialize`\n\n**Note that the entity ids generate as i32 when using sqlite. The entity folder in this project was generated from a mysql database which supports unsigned integers and all ids are u32s**\n\n### Contributing\n\nAll commit messages must follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification.\n\n## License\n\nGNU Affero General Public License v3.0 only [LICENSE.md](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterprototypes%2Fdontpanic-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeterprototypes%2Fdontpanic-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterprototypes%2Fdontpanic-server/lists"}