Packages
Custom Credo checks for common Elixir/Phoenix anti-patterns and CWE Top 25 security vulnerabilities. Provides 40 comprehensive checks covering code quality, error handling, performance, change risk, telemetry, and security (SQL injection, XSS, path traversal, CSRF, SSRF, hardcoded credentials, etc).
Current section
Files
Jump to
Current section
Files
oeditus_credo
CHANGELOG.md
CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- **Standalone Escript** - Build standalone executable with `mix escript.build`
- **Hex Archive Support** - Install globally with `mix archive.install`
- **Mix Task** - `mix oeditus_credo` command with all checks pre-enabled
- **CLI Module** - Automatic configuration generation
- STANDALONE.md guide with detailed installation and usage instructions
- CI/CD integration examples for GitHub Actions and GitLab CI
### Changed
- Updated README with standalone installation options
- Added escript configuration to mix.exs
## [0.1.0] - 2026-01-18
### Added
#### Error Handling Checks (3)
- `MissingErrorHandling` - Detects `{:ok, x} =` pattern without error handling
- `SilentErrorCase` - Detects case statements missing error branches
- `SwallowingException` - Detects try/rescue blocks without logging or re-raising
#### Database & Performance Checks (3)
- `InefficientFilter` - Detects `Repo.all` followed by Enum filtering
- `NPlusOneQuery` - Detects potential N+1 queries (Enum.map with Repo calls)
- `MissingPreload` - Detects Ecto queries without proper preloading
#### LiveView & Concurrency Checks (5)
- `UnmanagedTask` - Detects unsupervised `Task.async` calls
- `SyncOverAsync` - Detects blocking operations in LiveView/GenServer callbacks
- `MissingHandleAsync` - Detects blocking in handle_event without async pattern
- `MissingThrottle` - Detects form inputs without phx-debounce/throttle
- `InlineJavascript` - Detects inline JS handlers instead of phx-* bindings
#### Code Quality Checks (4)
- `HardcodedValue` - Detects hardcoded URLs, IPs, and secrets
- `DirectStructUpdate` - Detects direct struct updates instead of changesets
- `CallbackHell` - Detects deeply nested case statements (suggests `with`)
- `BlockingInPlug` - Detects blocking operations in Plug functions
#### Telemetry & Observability Checks (5)
- `MissingTelemetryInObanWorker` - Detects Oban workers without telemetry instrumentation
- `MissingTelemetryInLiveViewMount` - Detects LiveView mount/3 without telemetry events
- `TelemetryInRecursiveFunction` - Detects telemetry inside recursive functions (anti-pattern)
- `MissingTelemetryInAuthPlug` - Detects auth/authz plugs without telemetry
- `MissingTelemetryForExternalHttp` - Detects HTTP client calls without telemetry wrapper
### Documentation
- Comprehensive README with installation and usage instructions
- Detailed documentation for all 20 checks
- Configuration examples and best practices
### Testing
- 60+ comprehensive tests covering all checks
- Positive and negative test cases for each check
- Test coverage reporting with ExCoveralls
### Licensing
- Dual-licensed under GPLv3 and CC-BY-SA-4.0
- Open-source use under GPLv3
- Commercial license available for proprietary applications
[0.1.0]: https://github.com/oeditus/oeditus_credo/releases/tag/v0.1.0