ameba
Version, currently 1.7.0-dev50 versions
- 1.7.0latestAug 26, 2026
- 1.7.0-devnot indexedAug 12, 2026
- 1.6.4Nov 25, 2024
- 1.6.3not indexedAug 12, 2026
- 1.6.2not indexedAug 12, 2026
- 1.6.1not indexedAug 12, 2026
- 1.6.0not indexedAug 12, 2026
- 1.5.0not indexedAug 12, 2026
- 1.4.3not indexedAug 12, 2026
- 1.4.2not indexedAug 12, 2026
- 1.4.1not indexedAug 12, 2026
- 1.4.0not indexedAug 12, 2026
- 1.3.1not indexedAug 12, 2026
- 1.3.0not indexedAug 12, 2026
- 1.2.0not indexedAug 12, 2026
- 1.1.0not indexedAug 12, 2026
- 1.0.1not indexedAug 12, 2026
- 1.0.0not indexedAug 12, 2026
- 0.14.4not indexedAug 12, 2026
- 0.14.3not indexedAug 12, 2026
- 0.14.2not indexedAug 12, 2026
- 0.14.1not indexedAug 12, 2026
- 0.14.0not indexedAug 12, 2026
- 0.13.4not indexedAug 12, 2026
- 0.13.3not indexedAug 12, 2026
- 0.13.2not indexedAug 12, 2026
- 0.13.1not indexedAug 12, 2026
- 0.13.0not indexedAug 12, 2026
- 0.12.1not indexedAug 12, 2026
- 0.12.0not indexedAug 12, 2026
- 0.11.0not indexedAug 12, 2026
- 0.10.1not indexedAug 12, 2026
- 0.10.0not indexedAug 12, 2026
- 0.9.2not indexedAug 12, 2026
- 0.9.1not indexedAug 12, 2026
- 0.9.0not indexedAug 12, 2026
- 0.8.1not indexedAug 12, 2026
- 0.8.0not indexedAug 12, 2026
- 0.7.0not indexedAug 12, 2026
- 0.6.0not indexedAug 12, 2026
- 0.5.1not indexedAug 12, 2026
- 0.5.0not indexedAug 12, 2026
- 0.4.2not indexedAug 12, 2026
- 0.4.1not indexedAug 12, 2026
- 0.4.0not indexedAug 12, 2026
- 0.3.0not indexedAug 12, 2026
- 0.2.2not indexedAug 12, 2026
- 0.2.1not indexedAug 12, 2026
- 0.2.0not indexedAug 12, 2026
- 0.1.0not indexedAug 12, 2026
github.com/crystal-ameba/ameba
A static code analysis tool for Crystal
Nothing has been indexed for 1.7.0-dev yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.
Installation
# Add this to your shard.yml
dependencies:
ameba:
github: crystal-ameba/ameba
version: ~> 1.7.0-devThen run:
shards installshard.yml
No shard.yml has been indexed for 1.7.0-dev. You can read it on the repository.
Dependencies
Unknown: the shard.yml for this version has not been read yet.
README
This README is the one indexed from the repository at its latest ref, not from the tag for this version.
About
Ameba is a static code analysis tool for the Crystal language. It enforces a consistent Crystal code style, also catches code smells and wrong code constructs.
See also Roadmap.
Usage
Run ameba binary within your project directory to catch code issues:
$ ameba
Inspecting 107 files
...............F.....................FF....................................................................
src/ameba/formatter/flycheck_formatter.cr:6:37
[W] Lint/UnusedArgument: Unused argument `location`. If it's necessary, use `_` as an argument name to indicate that it won't be used.
> source.issues.each do |issue, location|
^------^
src/ameba/formatter/base_formatter.cr:16:14
[W] Lint/UselessAssign: Useless assignment to variable `size`
> return size += issues.size
^--^
src/ameba/formatter/base_formatter.cr:16:7 [Correctable]
[C] Style/RedundantReturn: Redundant `return` detected
> return size += issues.size
^------------------------^
Finished in 389.45 milliseconds
107 inspected, 3 failures
Watch a tutorial
🎬 Watch the LuckyCast showing how to use Ameba
Autocorrection
Rules that are marked as [Correctable] in the output can be automatically corrected using --fix flag:
$ ameba --fix
Explain issues
Ameba allows you to dig deeper into an issue, by showing you details about the issue and the reasoning behind it being reported.
For convenience, you can just copy-paste the PATH:line:column string from the
report and paste it behind the ameba command to check it out.
$ ameba crystal/command/format.cr:26:83 # show explanation for the issue
$ ameba --explain crystal/command/format.cr:26:83 # same thing
Describe rules
You can use --describe flag to get a detailed description of a rule:
$ ameba --describe Lint/UselessAssign
Installation
As a project dependency
Add this to your application's shard.yml:
development_dependencies:
ameba:
github: crystal-ameba/ameba
To prioritize runtime performance over compilation time, you can add ameba
target to the shard.yml file:
targets:
ameba:
main: lib/ameba/bin/ameba.cr
And then run:
$ shards build ameba
Alternatively, skip adding ameba target and use crystal build command directly:
$ crystal build -o bin/ameba lib/ameba/bin/ameba.cr
Both of these will result in a compiled binary placed under bin/ameba path.
You can also just run the lib/ameba/bin/ameba.cr file, compiling it on the fly,
which is the slowest option:
$ lib/ameba/bin/ameba.cr
Homebrew
$ brew tap crystal-ameba/ameba
$ brew install ameba
Docker
Build the image:
$ docker build -t ghcr.io/crystal-ameba/ameba .
To use the resulting image on a local source folder, mount the current (or target) directory into /src:
$ docker run -v $(pwd):/src ghcr.io/crystal-ameba/ameba
Also available on GitHub: https://github.com/crystal-ameba/ameba/pkgs/container/ameba
From sources
$ git clone https://github.com/crystal-ameba/ameba && cd ameba
$ make install
Configuration
Default configuration file is .ameba.yml.
It allows to configure rule properties, disable specific rules and exclude sources from the rules.
Generate new file by running ameba --gen-config.
Sources
List of sources to run Ameba on can be configured globally via:
Globssection - an array of wildcards (or paths) to include to the inspection. Defaults to%w[**/*.cr **/*.ecr], meaning it includes all project files with*.crand*.ecrextensions.Excludedsection - an array of wildcards (or paths) to exclude from the source list defined byGlobs. Defaults to%w[lib], meaning it excludes thelibfolder.
In this example we define default globs and exclude lib and src/compiler folders:
Globs:
- "**/*.cr"
- "**/*.ecr"
Excluded:
- lib
- src/compiler
Specific sources can be excluded at rule level:
Style/RedundantBegin:
Excluded:
- src/server/processor.cr
- src/server/api.cr
Rules
One or more rules, or a one or more group of rules can be included or excluded via command line arguments:
$ ameba --only Lint/Syntax # runs only Lint/Syntax rule
$ ameba --only Style,Lint # runs only rules from Style and Lint groups
$ ameba --except Lint/Syntax # runs all rules except Lint/Syntax
$ ameba --except Style,Lint # runs all rules except rules in Style and Lint groups
Or through the configuration file:
Style/RedundantBegin:
Enabled: false
Inline disabling
One or more rules or one or more group of rules can be disabled using inline directives:
# ameba:disable Style/LargeNumbers
time = Time.epoch(1483859302)
time = Time.epoch(1483859302) # ameba:disable Style/LargeNumbers, Lint/UselessAssign
time = Time.epoch(1483859302) # ameba:disable Style, Lint
Editors & integrations
- Ameba Language Server: ameba-ls
- Vim: vim-crystal, Ale
- Emacs: ameba.el
- Sublime Text: Sublime Linter Ameba
- VS Code: vscode-crystal-ameba
- Zed (via Ameba LS): Crystal — Zed extension
- Codacy: codacy-ameba
- GitHub Actions: github-action
Credits & inspirations
Contributors
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
1.7.0-dev- Tagged
- Aug 12, 2026
- Commit
34a3de4598aa- Indexed
- not yet
Dependents
- crinit
- cl8r
- cre
- grafito
- patchy
- amazonite
- placeos-models
- socket_connect_fix
- enkaidu
- dotfiles
- placeos-auth
- pg-orm
and 844 more
Repository
github.com/crystal-ameba/ameba
Metadata
- Created
- Aug 12, 2026
- Updated
- Sep 18, 2026
- Synced
- Sep 18, 2026
- Versions
- 50