1
Choose your packs
Browse feature packs below and click to select the ones you want.
2
Generate a template
We'll compile your selections into a single Rails template file.
3
Create your app
Run rails new myapp -m template.rb and you're ready to go.
Start with a preset
Pick a starting point, then customize by adding or removing packs below.
No packs match your search. Try a different term.
Core
27 packs
Essential building blocks like authentication, authorization, background jobs, and caching.
AnyCable — high-performance WebSocket server replacing ActionCable
After install
- AnyCable: Install the AnyCable Go server: https://docs.anycable.io/anycable-go/getting_started
- AnyCable: Start alongside Rails with: anycable & rails s
- AnyCable: See https://docs.anycable.io for full configuration
authentication-zero (generates code you own, 2FA, recovery codes)
After install
- Authentication: Run `bin/rails db:migrate` to create auth tables
- Authentication: See app/controllers/sessions_controller.rb to customize login flow
Action Policy for authorization (Rails-idiomatic, scoping, caching)
After install
- Authorization: Generate policies with `bin/rails g action_policy:policy User`
- Authorization: See https://actionpolicy.evilmartians.io for docs
Azure Blob Storage for Active Storage file uploads
After install
- Azure: Add your credentials with `bin/rails credentials:edit`:
- azure:
- storage_account_name: your-account-name
- storage_access_key: your-access-key
- container: your-container-name
- Azure: Create a storage account at portal.azure.com and grab the access key from Access Keys
Solid Queue + Mission Control Jobs (Rails 8 default, no Redis)
Gems installed
-
solid_queue
-
mission_control-jobs
After install
- Background Jobs: Run `bin/rails db:migrate` to create Solid Queue tables
- Background Jobs: Monitor jobs at /jobs
- Background Jobs: Start the worker with `bin/jobs`
Solid Cache (Rails 8 default, database-backed caching)
After install
- Caching: Run `bin/rails db:migrate` to create Solid Cache tables
- Caching: Already configured as the default cache store in production
CarrierWave file upload library
After install
- CarrierWave: Generate your first uploader: rails generate uploader Avatar
- CarrierWave: Mount in a model: mount_uploader :avatar, AvatarUploader
- CarrierWave: Add migration: add_column :users, :avatar, :string
- CarrierWave: See https://github.com/carrierwaveuploader/carrierwave for docs
Devise for full-featured authentication (OmniAuth, LDAP, etc.)
After install
- Devise: Run `bin/rails db:migrate` to create users table
- Devise: Generate views with `bin/rails g devise:views`
- Devise: Configure mailer sender in config/initializers/devise.rb
Faraday for composable HTTP client requests
Gems installed
-
faraday (~> 2.0)
-
faraday-retry
After install
- Faraday: Base client class at app/clients/application_client.rb
- Faraday: Create service-specific clients inheriting from ApplicationClient
Google Cloud Storage for Active Storage file uploads
After install
- GCS: Add your credentials with `bin/rails credentials:edit`:
- gcs:
- project: your-gcp-project-id
- bucket: your-bucket-name
- credentials:
- type: service_account
- project_id: your-gcp-project-id
- private_key_id: ...
- private_key: ...
- GCS: Create a service account at console.cloud.google.com with Storage Object Admin role
GoodJob for Postgres-backed background jobs (no Redis needed)
After install
- GoodJob: Run `bin/rails db:migrate` to create job tables
- GoodJob: Monitor jobs at /good_job
- GoodJob: Supports cron-like recurring jobs via config/good_job.yml
Image processing for Active Storage variants using libvips (Rails 7+ recommended)
Gems installed
-
image_processing
-
ruby-vips
After install
- ImageProcessing: Install libvips on your system:
- macOS: brew install vips
- Ubuntu: apt install libvips-tools
- Heroku: add the heroku/heroku-buildpack-apt buildpack and apt-packages: libvips
- ImageProcessing: Use variants in views: <%= image_tag user.avatar.variant(resize_to_limit: [300, 300]) %>
Invisible Captcha for honeypot-based spam prevention
After install
- Invisible Captcha: Add `invisible_captcha` to forms that need spam protection
- Invisible Captcha: No user-facing CAPTCHA -- uses honeypots and timing
Mobility for translatable model attributes (i18n)
Gems installed
-
mobility (~> 1.3)
-
mobility-ransack
After install
- Mobility: Run `bin/rails db:migrate` to create translation tables
- Mobility: Add `extend Mobility` and `translates :title, type: :string` to models
- Mobility: Set locale with `Mobility.locale = :fr` or use `I18n.locale`
acts_as_tenant for row-based multi-tenancy
After install
- Multitenancy: Add `set_current_tenant_through_filter` to ApplicationController
- Multitenancy: Add `acts_as_tenant :account` to tenant-scoped models
- Multitenancy: All queries are automatically scoped to current tenant
OmniAuth for social/OAuth login (Google, GitHub, etc.)
Gems installed
-
omniauth
-
omniauth-rails_csrf_protection
-
omniauth-google-oauth2
-
omniauth-github
After install
- OmniAuth: Add OAuth credentials with `bin/rails credentials:edit`:
- google:
- client_id: your_client_id
- client_secret: your_client_secret
- github:
- client_id: your_client_id
- client_secret: your_client_secret
- OmniAuth: Create a callback controller to handle /auth/:provider/callback
Passwordless for magic-link email authentication
After install
- Passwordless: Run `bin/rails db:migrate` to create session tables
- Passwordless: Add `passwordless_with :email` to your User model
- Passwordless: Users sign in via emailed magic links -- no passwords
Pundit for simple, policy-based authorization
After install
- Pundit: Generate policies with `bin/rails g pundit:policy User`
- Pundit: Use `authorize @user` in controllers
Cloudflare R2 for S3-compatible Active Storage (no egress fees)
After install
- R2: Add your Cloudflare credentials with `bin/rails credentials:edit`:
- r2:
- endpoint: https://ACCOUNT_ID.r2.cloudflarestorage.com
- region: auto
- bucket: your-bucket-name
- access_key_id: your_access_key
- secret_access_key: your_secret_key
- R2: Zero egress fees -- great for media-heavy apps
Rails I18n locale data for 100+ languages
After install
- I18n: Add locales to config.i18n.available_locales as needed
- I18n: Locale files available for 100+ languages (date formats, pluralization, etc.)
reCAPTCHA v3 for Google-powered bot protection
After install
- reCAPTCHA: Add your keys with `bin/rails credentials:edit`:
- recaptcha:
- site_key: your_site_key
- secret_key: your_secret_key
- reCAPTCHA: Use `<%= recaptcha_v3 %>` in forms and `verify_recaptcha` in controllers
Rolify for role management (admin, editor, viewer, etc.)
After install
- Rolify: Run `bin/rails db:migrate` to create roles table
- Rolify: Assign with `user.add_role :admin`
- Rolify: Check with `user.has_role? :admin`
- Rolify: Pairs well with Pundit or Action Policy for authorization
AWS S3 for Active Storage file uploads
After install
- S3: Add your AWS credentials with `bin/rails credentials:edit`:
- aws:
- access_key_id: AKIA...
- secret_access_key: your_secret
- region: us-east-1
- bucket: your-bucket-name
Recurring tasks with Solid Queue and solid_queue recurring
After install
- Scheduling: Define recurring jobs in config/recurring.yml
- Scheduling: Solid Queue handles scheduling natively -- no cron or external gems needed
Shrine file attachment library — flexible alternative to Active Storage
After install
- Shrine: Create an uploader: app/uploaders/image_uploader.rb
- Shrine: Include in models: include ImageUploader::Attachment(:photo)
- Shrine: Add migration: add_column :users, :photo_data, :text
- Shrine: See https://shrinerb.com for full documentation
Sidekiq for Redis-backed background jobs (high throughput)
After install
- Sidekiq: Requires Redis -- install and run `redis-server`
- Sidekiq: Start worker with `bundle exec sidekiq`
- Sidekiq: Monitor jobs at /sidekiq
Solid Cable (Rails 8 default, database-backed ActionCable)
After install
- WebSockets: Solid Cable is configured as the ActionCable adapter
Data & Storage
21 packs
Data modeling, state machines, search, audit trails, and other data layer tools.
AASM for state machines in ActiveRecord models
After install
- AASM: Add `include AASM` to models
- AASM: Define states with `aasm do; state :draft, initial: true; state :published; end`
- AASM: Define events with `event :publish do; transitions from: :draft, to: :published; end`
Split for A/B testing and experiments
After install
- Split: Requires Redis for experiment storage
- Split: Use `ab_test("button_color", "red", "blue")` in views/controllers
- Split: Call `ab_finished("button_color")` on conversion
- Split: Dashboard at /split
Public Activity for activity feeds and timelines
After install
- Activity Feed: Run `bin/rails db:migrate` to create activities table
- Activity Feed: Add `include PublicActivity::Model` and `tracked` to models
- Activity Feed: Query with `PublicActivity::Activity.order(created_at: :desc)`
Acts As List for sortable, orderable records
After install
- Acts As List: Add `acts_as_list` to models with a `position` integer column
- Acts As List: Use `item.move_to_top`, `item.move_lower`, `item.insert_at(2)`
Acts As Votable for likes, upvotes, and reactions
After install
- Votable: Run `bin/rails db:migrate` to create votes table
- Votable: Add `acts_as_votable` to models that can be voted on
- Votable: Add `acts_as_voter` to User model
- Votable: Use `user.likes @post` and `@post.liked_by user`
Annotate models and routes with schema info
After install
- Annotate: Schema comments are auto-added to models after migrations
- Annotate: Run `bin/rails annotate_models` to annotate manually
PaperTrail for model versioning and audit trail
After install
- PaperTrail: Run `bin/rails db:migrate` to create versions table
- PaperTrail: Add `has_paper_trail` to models you want to track
- PaperTrail: Access history with `record.versions` and `record.paper_trail.previous_version`
Counter Culture for turbo-charged counter caches
After install
- Counter Culture: Add `counter_culture :category` to models
- Counter Culture: Supports conditional counters, multi-level, and custom columns
- Counter Culture: Fix counts with `Model.counter_culture_fix_counts`
Data Migrate for separating data migrations from schema migrations
After install
- Data Migrate: Generate with `bin/rails g data_migration backfill_users`
- Data Migrate: Run with `bin/rails data:migrate`
- Data Migrate: Data migrations live in db/data/ separate from schema migrations
Searchkick for Elasticsearch-powered search
After install
- Searchkick: Install and run Elasticsearch (or OpenSearch)
- Searchkick: Add `searchkick` to models you want to search
- Searchkick: Reindex with `Model.reindex`
- Searchkick: Search with `Model.search("query")`
Lockbox for application-level field encryption
After install
- Lockbox: Generate a master key with `Lockbox.generate_key`
- Lockbox: Add to credentials with `bin/rails credentials:edit`:
- lockbox:
- master_key: your_generated_key
- Lockbox: Use `encrypts :email` in models to encrypt fields
- Lockbox: Use `blind_index :email` for searchable encrypted fields
Rails Event Store for event sourcing and CQRS
After install
- Event Store: Run `bin/rails db:migrate` to create events table
- Event Store: Publish events with `Rails.configuration.event_store.publish(event)`
- Event Store: Browse events at /res if you mount the browser engine
Geocoder for address lookup, geocoding, and distance queries
After install
- Geocoder: Add `geocoded_by :address` to models with latitude/longitude columns
- Geocoder: Use `Model.near("New York", 50)` for proximity search
- Geocoder: Default uses free Nominatim API -- switch to Google/Mapbox for production
Kredis for structured Redis types in Rails models
After install
- Kredis: Requires Redis -- configure in config/redis/shared.yml
- Kredis: Use `kredis_list :recent_searches` in models
- Kredis: Supports lists, sets, flags, counters, enums, and more
Meilisearch for typo-tolerant, fast full-text search
After install
- Meilisearch: Install and run the Meilisearch server (see https://meilisearch.com)
- Meilisearch: Add `include MeiliSearch::Rails` to models
- Meilisearch: Use `Model.search("query")` for instant search
Scenic for versioned database views
After install
- Scenic: Generate views with `bin/rails g scenic:view search_results`
- Scenic: Views are versioned -- update with `bin/rails g scenic:view search_results --replace`
pg_search for PostgreSQL full-text search
After install
- Search: Run `bin/rails db:migrate` to create pg_search tables
- Search: Add `include PgSearch::Model` to models you want to search
- Search: Requires PostgreSQL database
Discard for soft deletes (archive instead of destroy)
After install
- Discard: Add `include Discard::Model` to models
- Discard: Add `discarded_at:datetime` column via migration
- Discard: Use `record.discard` instead of `record.destroy`
- Discard: Query with `User.kept` and `User.discarded`
Active Storage Validations for file type, size, and dimension checks
Gems installed
-
active_storage_validations
After install
- Storage Validations: Use `validates :avatar, attached: true, content_type: :image` in models
- Storage Validations: Supports size, dimension, aspect ratio, and content type validations
Strong Migrations -- catch unsafe migrations before they run
After install
- Strong Migrations: Dangerous migrations will raise errors with safe alternatives
- Strong Migrations: Use `safety_assured { }` to override when you know it's safe
Acts As Taggable On for tagging models
Gems installed
-
acts-as-taggable-on (~> 11.0)
After install
- Tagging: Run `bin/rails db:migrate` to create tag tables
- Tagging: Add `acts_as_taggable_on :tags` to models
- Tagging: Use `@post.tag_list.add("ruby", "rails")`
Operations & DevOps
26 packs
Deployment, monitoring, error tracking, linting, and infrastructure tooling.
AfterParty for one-time post-deploy tasks
After install
- AfterParty: Generate tasks with `bin/rails g after_party:task seed_admin_user`
- AfterParty: Run with `bin/rails after_party:run`
- AfterParty: Tasks only run once (tracked in task_records table)
Standard Ruby + ERB Lint for code and template linting
Gems installed
-
standard
development
-
erb_lint
development
After install
- Linting: Run `bundle exec standardrb` to check Ruby code
- Linting: Run `bundle exec standardrb --fix` to auto-fix
- Linting: Run `bundle exec erblint --lint-all` to check ERB templates
Circuitbox for circuit breaking on external service calls
After install
- Circuitbox: Wrap external calls with `Circuitbox.circuit(:my_service, exceptions: [Timeout::Error]) { call }`
- Circuitbox: Circuit opens after repeated failures, preventing cascade failures
Datadog APM for tracing, metrics, and log management
After install
- Datadog: Install the Datadog Agent on your server (not a Ruby gem)
- Datadog: Set DD_API_KEY and DD_ENV environment variables in production
Kamal for zero-downtime deploys to any Linux box
After install
- Deployment: Edit config/deploy.yml with your server details
- Deployment: Run `kamal setup` to provision, then `kamal deploy`
Dotenv for loading .env files in development
After install
- Dotenv: Copy .env.example to .env and fill in your values
- Dotenv: .env files are gitignored -- never commit secrets
Flipper for feature flags with web UI
Gems installed
-
flipper
-
flipper-active_record
-
flipper-ui
After install
- Feature Flags: Run `bin/rails db:migrate` to create Flipper tables
- Feature Flags: Manage flags at /flipper
- Feature Flags: Use `Flipper.enabled?(:my_feature)` in code
OkComputer for health check endpoints (load balancers, k8s)
After install
- Health Check: Endpoints at /health and /health/all
- Health Check: Point load balancer/k8s probes at /health
Honeybadger for error tracking and uptime monitoring
After install
- Honeybadger: Add your API key with `bin/rails credentials:edit`:
- honeybadger:
- api_key: your_api_key_here
Hotwire LiveReload for automatic page refresh on file changes
Gems installed
-
hotwire-livereload
development
After install
- LiveReload: Pages auto-refresh when you save views, CSS, or JS files
- LiveReload: Works via Hotwire/Turbo -- no browser extension needed
Letter Opener for previewing emails in the browser (dev)
Gems installed
-
letter_opener
development
After install
- Letter Opener: Emails open in your browser automatically in development
- Letter Opener: No SMTP setup needed for dev -- just send and it pops up
Letter Opener Web for browsable email inbox in development
Gems installed
-
letter_opener_web
development
After install
- Letter Opener Web: Browse all sent emails at /letter_opener in development
- Letter Opener Web: Provides a persistent inbox UI (vs letter_opener which just opens a tab)
Lograge for clean, single-line structured request logs
After install
- Lograge: Production logs are now single-line structured format
- Lograge: Customize payload in config/environments/production.rb
Turnout for easy maintenance mode pages
After install
- Maintenance Mode: Enable with `rake maintenance:start`
- Maintenance Mode: Disable with `rake maintenance:end`
- Maintenance Mode: Customize page in public/maintenance.html
- Maintenance Mode: Allow specific IPs with `rake maintenance:start ALLOWED_IPS=1.2.3.4`
Maintenance Tasks (Shopify) for admin-triggered background tasks
After install
- Maintenance Tasks: Run `bin/rails db:migrate` to create task tables
- Maintenance Tasks: Generate with `bin/rails g maintenance_tasks:task BackfillUsers`
- Maintenance Tasks: Trigger and monitor at /maintenance_tasks
New Relic APM for performance monitoring and observability
After install
- New Relic: Add your license key with `bin/rails credentials:edit`:
- newrelic:
- license_key: your_license_key_here
Rack Mini Profiler + Bullet for performance debugging
Gems installed
-
rack-mini-profiler
development
-
bullet
development
After install
- Performance: Rack Mini Profiler badge appears top-left in development
- Performance: Bullet alerts on N+1 queries and unused eager loading in development
PgHero for Postgres performance dashboard
After install
- PgHero: Dashboard at /pghero
- PgHero: Shows slow queries, index usage, connections, and space usage
- PgHero: Requires PostgreSQL
Pretender for user impersonation (admin support tool)
After install
- Pretender: Impersonate with `impersonate_user(user)` in a controller action
- Pretender: Stop with `stop_impersonating_user`
- Pretender: `true_user` returns the admin, `current_user` returns the impersonated user
Stackprof + memory_profiler for CPU and memory profiling
Gems installed
-
stackprof
development
-
memory_profiler
development
After install
- Profiling: CPU profile with `StackProf.run(mode: :cpu) { code }` and `StackProf::Report`
- Profiling: Memory profile with `MemoryProfiler.report { code }.pretty_print`
- Profiling: Both available in development only
Rack::Timeout for request timeout protection
After install
- Rack::Timeout: Requests exceeding 15s are terminated with a Rack::Timeout::RequestTimeoutError
- Rack::Timeout: Customize thresholds in config/initializers/rack_timeout.rb
Rack::Attack for throttling and blocking
After install
- Rate Limiting: Customize throttle rules in config/initializers/rack_attack.rb
Rollbar for real-time error tracking and debugging
After install
- Rollbar: Add your access token with `bin/rails credentials:edit`:
- rollbar:
- access_token: your_token_here
Brakeman + bundler-audit for security scanning
Gems installed
-
brakeman
development
-
bundler-audit
development
After install
- Security: Run `bundle exec brakeman` to scan for vulnerabilities
- Security: Run `bundle exec bundler-audit check --update` to check gem CVEs
- Security: Add both to CI for continuous security checks
Sentry for error tracking and performance monitoring
After install
- Sentry: Add your DSN with `bin/rails credentials:edit`:
- sentry:
- dsn: https://[email protected]/project-id
Hotwire Spark — hot reloading for HTML, CSS, and Ruby changes without full page reload
Gems installed
-
hotwire-spark
development
After install
- Spark: HTML, CSS, and Ruby file changes are streamed live without full page reload
- Spark: No browser extension needed -- works via Turbo Streams over ActionCable
UI & Frontend
17 packs
Frontend components, rich text editing, file uploads, charts, and view helpers.
Action Text for rich text editing with Trix
After install
- Action Text: Run `bin/rails db:migrate` to create rich text tables
- Action Text: Add `has_rich_text :body` to models
- Action Text: Use `<%= form.rich_text_area :body %>` in forms
Gretel for flexible breadcrumb navigation
After install
- Breadcrumbs: Define breadcrumbs in config/breadcrumbs.rb
- Breadcrumbs: Set in controllers with `breadcrumb :home, root_path`
- Breadcrumbs: Render with `<%= breadcrumbs %>` in layouts
Chartkick + Groupdate for charts and time-series visualization
Gems installed
-
chartkick (~> 5.2)
-
groupdate (~> 6.0)
After install
- Charting: Use `<%= line_chart User.group_by_day(:created_at).count %>` in views
- Charting: Groupdate adds `.group_by_day`, `.group_by_week`, etc. to ActiveRecord
- Charting: See https://chartkick.com for full documentation
Cloudinary for cloud image and video management
Gems installed
-
cloudinary
-
activestorage-cloudinary-service
After install
- Cloudinary: Add your credentials with `bin/rails credentials:edit`:
- cloudinary:
- cloud_name: your_cloud_name
- api_key: your_api_key
- api_secret: your_api_secret
- Cloudinary: Use as Active Storage service by setting `service: Cloudinary` in storage.yml
ViewComponent for component-based views
After install
- Components: Generate with `bin/rails g component MyComponent`
- Components: See https://viewcomponent.org for docs
FriendlyId for human-readable URL slugs
After install
- FriendlyId: Run `bin/rails db:migrate` to create slugs table
- FriendlyId: Add `extend FriendlyId` and `friendly_id :name, use: :slugged` to models
- FriendlyId: Use `User.friendly.find("john-doe")` instead of `User.find(id)`
Lucide Rails for modern SVG icons
After install
- Icons: Use `<%= lucide_icon "home" %>` in views
- Icons: Browse icons at https://lucide.dev
Redcarpet for Markdown rendering with syntax highlighting
After install
- Markdown: Use `<%= render_markdown(@post.body) %>` in views
- Markdown: Rouge provides syntax highlighting for code blocks
Pagy for fast, lightweight pagination
After install
- Pagy: Use `@pagy, @records = pagy(User.all)` in controllers
- Pagy: Use `<%%= pagy_nav(@pagy) %>` in views
Grover for PDF generation from HTML (Puppeteer-based)
After install
- PDF: Requires Node.js and Puppeteer (`npm i puppeteer`)
- PDF: Use `Grover.new(html_string).to_pdf` to generate PDFs
- PDF: Or use as Rack middleware to serve .pdf versions of any page
RQRCode for QR code generation (SVG, PNG, ANSI)
After install
- QR Code: Use `<%= qr_code_svg("https://example.com") %>` in views
- QR Code: Also supports PNG with `qr.as_png` and ANSI terminal output
Ransack for object-based search and filter forms
After install
- Ransack: Use `@q = User.ransack(params[:q])` in controllers
- Ransack: Build forms with `search_form_for @q do |f|` in views
- Ransack: Supports sorting, predicates (_cont, _eq, _gt, etc.)
Simple Calendar for month/week/day calendar views
After install
- Simple Calendar: Use `<%= month_calendar events: @events do |date, events| %>` in views
- Simple Calendar: Models need a `start_time` attribute (or configure with `attribute: :my_date`)
- Simple Calendar: Supports month_calendar, week_calendar, and custom ranges
Simple Form for easy, flexible form building
After install
- Simple Form: Use `<%= simple_form_for @user do |f| %>` in views
- Simple Form: Customize wrappers in config/initializers/simple_form.rb
Caxlsx for Excel spreadsheet generation
After install
- Spreadsheets: Create .xlsx templates in app/views with `.xlsx.axlsx` extension
- Spreadsheets: Use `format.xlsx` in controllers to serve Excel downloads
Stimulus Components -- pre-built Stimulus controllers (dropdowns, modals, etc.)
After install
- Stimulus Components: Pre-built controllers for dropdowns, modals, tabs, clipboard, etc.
- Stimulus Components: See https://www.stimulus-components.com for full list
Vite Rails for fast frontend bundling with HMR
After install
- Vite: Run `bin/vite dev` alongside `bin/rails s` for development
- Vite: Hot Module Replacement (HMR) for instant updates
- Vite: Build for production with `bin/vite build`
Analytics
13 packs
Product analytics, dashboards, and user behavior tracking services.
Ahoy for visit and event tracking (first-party analytics)
After install
- Ahoy: Run `bin/rails db:migrate` to create visits and events tables
- Ahoy: Track events with `ahoy.track "Viewed product", product_id: product.id`
- Ahoy: Visits auto-tracked -- access with `current_visit` in controllers
Amplitude for product analytics, funnels, and retention
After install
- Amplitude: Add your API key with `bin/rails credentials:edit`:
- amplitude:
- api_key: your_api_key
- Amplitude: Use `AmplitudeAPI.track(event)` server-side for backend events
SQL analytics dashboards with Blazer
After install
- Blazer: Run `bin/rails db:migrate` to create Blazer tables
- Blazer: Access dashboards at /blazer
- Blazer: For production, set BLAZER_DATABASE_URL to a read-only database connection
Clicky for real-time web analytics
After install
- Clicky: Add your site ID with `bin/rails credentials:edit`:
- clicky:
- site_id: 123456
Fathom -- simple, privacy-focused website analytics
After install
- Fathom: Add your site ID with `bin/rails credentials:edit`:
- fathom:
- site_id: ABCDEFGH
- Fathom: No cookie banner needed -- privacy-first, GDPR compliant
Google Analytics 4 (GA4) for web analytics
After install
- Google Analytics: Add your measurement ID with `bin/rails credentials:edit`:
- google_analytics:
- measurement_id: G-XXXXXXXXXX
Google Tag Manager for managing analytics and marketing tags
After install
- GTM: Add your container ID with `bin/rails credentials:edit`:
- gtm:
- container_id: GTM-XXXXXXX
- GTM: Manage all your analytics/marketing tags from the GTM dashboard
Heap for auto-captured product analytics
After install
- Heap: Add your app ID with `bin/rails credentials:edit`:
- heap:
- app_id: "1234567890"
- Heap: Auto-captures all user interactions -- no manual event tracking needed
Matomo -- self-hosted open-source web analytics (Google Analytics alternative)
After install
- Matomo: Add your instance details with `bin/rails credentials:edit`:
- matomo:
- url: https://your-matomo-instance.com
- site_id: 1
- Matomo: Self-hosted -- you own 100% of your analytics data
Mixpanel for event-based product analytics
After install
- Mixpanel: Add your project token with `bin/rails credentials:edit`:
- mixpanel:
- token: your_project_token
- Mixpanel: Use `MIXPANEL.track(distinct_id, 'Event Name', properties)` server-side
Plausible -- privacy-focused analytics (no cookies, GDPR compliant)
After install
- Plausible: Add your domain with `bin/rails credentials:edit`:
- plausible:
- domain: yourdomain.com
- Plausible: No cookie banner needed -- fully GDPR/CCPA/PECR compliant out of the box
PostHog product analytics (server-side + JS snippet)
Gems installed
-
posthog-ruby
-
posthog-rails
After install
- PostHog: Add your API key with `bin/rails credentials:edit`:
- posthog:
- api_key: phc_your_key_here
- host: https://us.i.posthog.com
- PostHog: posthog-rails automatically injects the JS snippet into your layout
StatCounter for visitor stats and web analytics
After install
- StatCounter: Add your project credentials with `bin/rails credentials:edit`:
- statcounter:
- project_id: 12345678
- security_code: your_security_code
Notifications
10 packs
Email delivery services, SMS, and messaging integrations.
Amazon SES for high-volume email delivery
After install
- AWS SES: Add your SMTP credentials with `bin/rails credentials:edit`:
- aws_ses:
- smtp_username: your_smtp_username
- smtp_password: your_smtp_password
- region: us-east-1
- AWS SES: Verify your sending domain/email in the AWS SES console
Mailgun for transactional email delivery
After install
- Mailgun: Add your credentials with `bin/rails credentials:edit`:
- mailgun:
- smtp_login: [email protected]
- smtp_password: your_smtp_password
- Mailgun: Verify your sending domain in the Mailgun dashboard
Noticed for multi-channel notifications
After install
- Notifications: Run `bin/rails db:migrate` to create notification tables
- Notifications: Generate notifiers with `bin/rails g noticed:notifier CommentNotifier`
Postmark for fast transactional email (99%+ inbox delivery)
After install
- Postmark: Add your API token with `bin/rails credentials:edit`:
- postmark:
- api_token: your_server_api_token
- Postmark: Known for excellent deliverability and fast delivery times
Resend for transactional and marketing email delivery
After install
- Resend: Add your API key with `bin/rails credentials:edit`:
- resend:
- api_key: re_your_api_key_here
- Resend: Verify your sending domain at https://resend.com/domains
SendGrid for transactional and marketing email delivery
After install
- SendGrid: Add your API key with `bin/rails credentials:edit`:
- sendgrid:
- api_key: SG.your_api_key_here
- domain: yourdomain.com
Sent.dm for multi-channel message delivery (email, SMS, push)
After install
- Sent.dm: Add your API key with `bin/rails credentials:edit`:
- sent_dm:
- api_key: your_api_key_here
- Sent.dm: Supports email, SMS, and push notifications from a single API
Slack Notifier for sending webhook notifications to Slack
After install
- Slack: Add your webhook URL with `bin/rails credentials:edit`:
- slack:
- webhook_url: https://hooks.slack.com/services/...
- Slack: Send with `SLACK_NOTIFIER.ping("Hello from Rails!")`
Twilio for SMS, voice, and WhatsApp messaging
After install
- Twilio: Add your credentials with `bin/rails credentials:edit`:
- twilio:
- account_sid: your_account_sid
- auth_token: your_auth_token
- phone_number: "+1234567890"
Web Push for browser push notifications
After install
- Web Push: Generate VAPID keys with `WebPush.generate_key`
- Web Push: Add keys with `bin/rails credentials:edit`:
- vapid:
- public_key: your_public_key
- private_key: your_private_key
- Web Push: Register a service worker in your app for push subscriptions
Payments
7 packs
Payment processing and subscription billing providers.
Lemon Squeezy -- merchant of record for SaaS (handles tax/VAT)
After install
- Lemon Squeezy: Add your API key with `bin/rails credentials:edit`:
- lemon_squeezy:
- api_key: your_api_key_here
- Lemon Squeezy: Acts as merchant of record -- handles sales tax, VAT, and billing for you
Mollie for European payment processing
After install
- Mollie: Add your API key with `bin/rails credentials:edit`:
- mollie:
- api_key: test_your_api_key_here
- Mollie: Supports iDEAL, Bancontact, SEPA, credit cards, and more EU payment methods
Paddle -- merchant of record for SaaS (handles tax/VAT globally)
After install
- Paddle: Add your API key with `bin/rails credentials:edit`:
- paddle:
- api_key: your_api_key_here
- Paddle: Acts as merchant of record -- handles sales tax, VAT, and invoicing globally
Pay + Stripe for subscriptions and billing
Gems installed
-
pay (~> 7.0)
-
stripe (~> 12.0)
After install
- Payments: Run `bin/rails db:migrate` to create Pay tables
- Payments: Add Stripe keys with `bin/rails credentials:edit`:
- stripe:
- private_key: sk_test_...
- public_key: pk_test_...
- signing_secret: whsec_...
PayPal for payments, checkout, and subscriptions
After install
- PayPal: Add your credentials with `bin/rails credentials:edit`:
- paypal:
- client_id: your_client_id
- client_secret: your_client_secret
RevenueCat for subscription management and in-app purchases
After install
- RevenueCat: Add your API key with `bin/rails credentials:edit`:
- revenuecat:
- api_key: your_api_key_here
- RevenueCat: Best suited for apps with mobile (iOS/Android) subscription billing
Solidus for full-featured e-commerce (products, orders, payments)
After install
- Solidus: Run `bin/rails db:migrate` and `bin/rails db:seed` to set up
- Solidus: Admin panel at /admin (default: [email protected] / test123)
- Solidus: See https://solidus.io/docs for customization guides
API
7 packs
API authentication, serialization, documentation, and GraphQL.
Rack CORS for cross-origin API requests
After install
- CORS: Update allowed origins in config/initializers/cors.rb
- CORS: Set CORS_ORIGINS env var in production (comma-separated domains)
Rswag for Swagger/OpenAPI documentation from tests
Gems installed
-
rswag-api
-
rswag-ui
-
rswag-specs
test
After install
- Rswag: Write request specs with `describe 'API', swagger_doc: 'v1/swagger.yaml'`
- Rswag: Generate docs with `rake rswag:specs:swaggerize`
- Rswag: Swagger UI available at /api-docs
API Guard for JWT authentication in Rails APIs
After install
- API Guard: Run `bin/rails db:migrate` to create token tables
- API Guard: Add `api_guard_routes for: 'users'` to routes
- API Guard: Endpoints: POST /users/sign_in, DELETE /users/sign_out, POST /users/tokens
Alba for fast, flexible JSON serialization
After install
- Alba: Create resources in app/resources/ inheriting from ApplicationResource
- Alba: Use `UserResource.new(user).serialize` to generate JSON
Doorkeeper for OAuth2 provider (issue tokens, authorize apps)
After install
- Doorkeeper: Run `bin/rails db:migrate` to create OAuth tables
- Doorkeeper: Configure resource owner in config/initializers/doorkeeper.rb
- Doorkeeper: Manage OAuth apps at /oauth/applications
GraphQL API with graphql-ruby
After install
- GraphQL: Endpoint available at /graphql
- GraphQL: Generate types with `bin/rails g graphql:object User`
- GraphQL: GraphiQL IDE available in development at /graphiql
Incoming and outgoing webhook handling
After install
- Webhooks: Incoming endpoint at POST /webhooks/:provider
- Webhooks: Add signature verification per provider in WebhooksController
Testing
4 packs
Test helpers, code coverage, and mocking libraries.
Shoulda Matchers for one-liner model and controller test assertions
After install
- Shoulda: Use `should validate_presence_of(:name)` in model tests
- Shoulda: Use `should belong_to(:user)` for association tests
SimpleCov for code coverage reporting
After install
- SimpleCov: Coverage report generated at coverage/index.html after running tests
- SimpleCov: Branch coverage enabled by default
VCR + WebMock for recording and replaying HTTP interactions in tests
After install
- VCR: Wrap HTTP tests with `VCR.use_cassette("name") { }` to record/replay
- VCR: Cassettes stored in test/cassettes/
- WebMock: All external HTTP is blocked in tests by default -- use VCR or stub explicitly
FactoryBot + Faker + Capybara for testing
Gems installed
-
factory_bot_rails
test
-
faker
test
-
capybara
test
-
selenium-webdriver
test
After install
- Testing: Generate factories with `bin/rails g factory_bot:model User`
- Testing: Use `build(:user)`, `create(:user)` in tests
Admin
4 packs
Admin dashboard frameworks for managing your app's data.
ActiveAdmin -- classic, battle-tested admin framework
After install
- ActiveAdmin: Run `bin/rails db:migrate` to create admin tables
- ActiveAdmin: Access admin at /admin
- ActiveAdmin: Register resources with `bin/rails g active_admin:resource User`
Administrate -- Thoughtbot's lightweight admin framework
After install
- Administrate: Access admin at /admin
- Administrate: Generate dashboards with `bin/rails g administrate:dashboard User`
Avo -- modern, customizable admin panel framework
After install
- Avo: Run `bin/rails db:migrate` to create Avo tables
- Avo: Access admin at /avo
- Avo: Generate resources with `bin/rails g avo:resource User`
Madmin -- a modern admin framework by Chris Oliver (GoRails)
After install
- Madmin: Access admin at /madmin
- Madmin: Resources are auto-generated from your models
- Madmin: Customize with `bin/rails g madmin:resource User`
SEO
1 pack
Search engine optimization tools like meta tags, sitemaps, and structured data.
meta-tags + sitemap_generator for SEO
Gems installed
-
meta-tags (~> 2.22)
-
sitemap_generator (~> 6.3)
After install
- SEO: Use `set_meta_tags title: "Page"` in controllers
- SEO: Generate sitemap with `bin/rails sitemap:refresh`