Skip to content
View pboling's full-sized avatar
πŸ“
Ping me if you need me!
πŸ“
Ping me if you need me!

Sponsors

@healthsherpa-sponsorships
@andrew
@makeplans
@frenkel
@murb
@vesan

Block or report pboling

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
pboling/README.md

Hi, I'm Peter πŸ‘‹

I have authored and/or currently maintain hundreds of open source libraries, including many you might use (as a developer or a consumer of the internet). Around half a percent of the RubyGems downloaded every day are ones I maintain.

turbo_tests2 Logo by Aboling0, CC BY-SA 4.0 :dependabot: GitHub's dependabot-core test runner has been migrated to use my re-architected turbo_tests2. If you use rspec you owe it to yourself to try it out! Parallelized tests with buffered, clean, safe, configurable test output.

🍁 I recently worked on the Go project for dependency license scanning Apache SkyWalking Eyes, where I integrated Bundler and gemspec (Ruby) compatibility, added ASF Category A and B license checks, FSF Free/Libre checks, and OSI Approved checks (all configurable). Learn how to use it as a GitHub Action in your project.

Most of my open source work happens in these organizations:

πŸ‘£ How will my projects approach the September 2025 hostile takeover of RubyGems? πŸš‘οΈ

I've summarized my thoughts in this blog post.

I maintain the following RubyGems:

  • appraisal-rb / appraisal2 - Downloads Rank πŸ™:appraisal-rb/appraisal2
  • Dynamoid / dynamoid - Downloads Rank πŸ™:Dynamoid/dynamoid
  • galtzo-floss / flag_shih_tzu - Downloads Rank πŸ™:galtzo-floss/flag_shih_tzu
  • galtzo-floss / sanitize_email - Downloads Rank πŸ™:galtzo-floss/sanitize_email
  • galtzo-floss / turbo_tests2 - Downloads Rank πŸ™:galtzo-floss/turbo_tests2
  • kettle-dev / kettle-dev - Downloads Rank πŸ™:kettle-dev/kettle-dev
  • structuredmerge / ruby / tree_haver - Downloads Rank πŸ™:structuredmerge/ruby/tree_haver
  • structuredmerge / ruby / ast-merge - Downloads Rank πŸ™:structuredmerge/ruby/ast-merge
  • omniauth / omniauth-jwt - Downloads Rank πŸ™:omniauth/omniauth-jwt
  • omniauth / omniauth-jwt2 - Downloads Rank πŸ™:omniauth/omniauth-jwt2
  • omniauth / omniauth-identity - Downloads Rank πŸ™:omniauth/omniauth-identity
  • omniauth / omniauth-ldap - Downloads Rank πŸ™:omniauth/omniauth-ldap
  • rdp / os - Downloads Rank πŸ™:rdp/os
  • ruby-oauth / anonymous_loader - Downloads Rank πŸ™:ruby-oauth/anonymous_loader
  • ruby-oauth / auth-sanitizer - Downloads Rank πŸ™:ruby-oauth/auth-sanitizer
  • ruby-oauth / oauth - Downloads Rank πŸ™:ruby-oauth/oauth
  • ruby-oauth / oauth2 - Downloads Rank πŸ™:ruby-oauth/oauth2
  • ruby-oauth / oauth2-mcp - Downloads Rank πŸ™:ruby-oauth/oauth2-mcp
  • ruby-oauth / oauth-tty - Downloads Rank πŸ™:ruby-oauth/oauth-tty
  • ruby-oauth / snaky_hash - Downloads Rank πŸ™:ruby-oauth/snaky_hash
  • ruby-oauth / version_gem - Downloads Rank πŸ™:ruby-oauth/version_gem
  • ruby-oauth / warden_oauth - Downloads Rank πŸ™:ruby-oauth/warden_oauth
  • ruby-openid / omniauth-openid - Downloads Rank πŸ™:ruby-openid/omniauth-openid
  • ruby-openid / rack-openid - Downloads Rank πŸ™:ruby-openid/rack-openid
  • ruby-openid / ruby-openid - Downloads Rank πŸ™:ruby-openid/ruby-openid
  • many ast-parsing, benchmarking, rails, resque, rspec, rubocop plugins & more... (in details below)
StructuredMerge Ruby

StructuredMerge Ruby is the Ruby implementation of the StructuredMerge contract. The actively maintained package family is developed and released from that monorepo; its package inventory and backend notes are the authoritative source for supported formats and runtimes.

benchmarking libraries
  • galtzo-floss / gem_bench - Downloads Rank πŸ™:galtzo-floss/gem_bench
  • galtzo-floss / react-rails-benchmark_renderer - Downloads Rank πŸ™:galtzo-floss/react-rails-benchmark_renderer
  • galtzo-floss / require_bench - Downloads Rank πŸ™:galtzo-floss/require_bench
rails plugins
  • galtzo-floss / active_security - Downloads Rank πŸ™:galtzo-floss/active_security
  • galtzo-floss / activerecord-transactionable - Downloads Rank πŸ™:galtzo-floss/activerecord-transactionable
  • galtzo-floss / activesupport-broadcast_logger - Downloads Rank πŸ™:galtzo-floss/activesupport-broadcast_logger
  • galtzo-floss / activesupport-logger - Downloads Rank πŸ™:galtzo-floss/activesupport-logger
  • galtzo-floss / activesupport-tagged_logging - Downloads Rank πŸ™:galtzo-floss/activesupport-tagged_logging
  • galtzo-floss / debug_logging - Downloads Rank πŸ™:galtzo-floss/debug_logging
  • galtzo-floss / destination_errors - Downloads Rank πŸ™:galtzo-floss/destination_errors
  • galtzo-floss / include_with_respect - Downloads Rank πŸ™:galtzo-floss/include_with_respect
  • galtzo-floss / seed_migration - Downloads Rank πŸ™:galtzo-floss/seed_migration
  • galtzo-floss / shiftable - Downloads Rank πŸ™:galtzo-floss/shiftable
  • galtzo-floss / simple_column-scopes - Downloads Rank πŸ™:galtzo-floss/simple_column-scopes
  • galtzo-floss / spyke-connection_lambda - Downloads Rank πŸ™:galtzo-floss/spyke-connection_lambda
  • galtzo-floss / status_tag - Downloads Rank πŸ™:galtzo-floss/status_tag
gem-development tooling
  • appraisal-rb / appraisal2-rubocop - Downloads Rank πŸ™:appraisal-rb/appraisal2-rubocop
  • appraisal-rb / kettle-jem-appraisals - Downloads Rank πŸ™:appraisal-rb/kettle-jem-appraisals
  • galtzo-floss / gitmoji-regex - Downloads Rank πŸ™:galtzo-floss/gitmoji-regex
  • galtzo-floss / stone_checksums - Downloads Rank πŸ™:galtzo-floss/stone_checksums
  • kettle-dev / kettle-dev - Downloads Rank πŸ™:kettle-dev/kettle-dev
  • kettle-dev / kettle-family - Downloads Rank πŸ™:kettle-dev/kettle-family
  • kettle-dev / kettle-test - Downloads Rank πŸ™:kettle-dev/kettle-test
  • kettle-dev / kettle-changelog - Downloads Rank πŸ™:kettle-dev/kettle-changelog
  • kettle-dev / kettle-drift - Downloads Rank πŸ™:kettle-dev/kettle-drift
  • kettle-dev / kettle-gha-pins - Downloads Rank πŸ™:kettle-dev/kettle-gha-pins
  • kettle-dev / kettle-ndjson - Downloads Rank πŸ™:kettle-dev/kettle-ndjson
  • kettle-dev / kettle-rb - Downloads Rank πŸ™:kettle-dev/kettle-rb
  • kettle-dev / kettle-wash - Downloads Rank πŸ™:kettle-dev/kettle-wash
  • kettle-dev / nomono - Downloads Rank πŸ™:kettle-dev/nomono
  • kettle-dev / token-resolver - Downloads Rank πŸ™:kettle-dev/token-resolver
documentation and YAML tools
  • galtzo-floss / yard-fence - Downloads Rank πŸ™:galtzo-floss/yard-fence
  • galtzo-floss / yard-timekeeper - Downloads Rank πŸ™:galtzo-floss/yard-timekeeper
  • galtzo-floss / yard-yaml - Downloads Rank πŸ™:galtzo-floss/yard-yaml
  • galtzo-floss / yaml-converter - Downloads Rank πŸ™:galtzo-floss/yaml-converter
resque & queue plugins
  • galtzo-floss / qfill - Downloads Rank πŸ™:galtzo-floss/qfill
  • resque / resque-lonely_job - Downloads Rank πŸ™:resque/resque-lonely_job
  • resque / resque-unique_at_runtime - Downloads Rank πŸ™:resque/resque-unique_at_runtime
  • resque / resque-unique_by_arity - Downloads Rank πŸ™:resque/resque-unique_by_arity
  • resque / resque-unique_in_queue - Downloads Rank πŸ™:resque/resque-unique_in_queue
testing and development tools
  • galtzo-floss / activerecord-tablefree - Downloads Rank πŸ™:galtzo-floss/activerecord-tablefree
  • galtzo-floss / anonymous_active_record - Downloads Rank πŸ™:galtzo-floss/anonymous_active_record
  • galtzo-floss / json_schemer-fuzz - Downloads Rank πŸ™:galtzo-floss/json_schemer-fuzz
  • galtzo-floss / rspec-block_is_expected - Downloads Rank πŸ™:galtzo-floss/rspec-block_is_expected
  • galtzo-floss / rspec-pending_for - Downloads Rank πŸ™:galtzo-floss/rspec-pending_for
  • galtzo-floss / rspec-stubbed_env - Downloads Rank πŸ™:galtzo-floss/rspec-stubbed_env
  • galtzo-floss / silent_stream - Downloads Rank πŸ™:galtzo-floss/silent_stream
  • galtzo-floss / timecop-rspec - Downloads Rank πŸ™:galtzo-floss/timecop-rspec
  • kettle-dev / kettle-soup-cover - Downloads Rank πŸ™:kettle-dev/kettle-soup-cover
rubocop plugins

Want RuboCop to have its rules explicitly configured for compatibility with the oldest version of Ruby that your library officially supports in two lines of code?

inherit_gem:
  rubocop-lts: rubocop-lts.yml # for ruby + rspec

More examples for rails-specific, or non-rspec projects are at rubocop-lts.gitlab.io

If you think this is what
TargetRubyVersion
does, you've misunderstood its purpose, which is to turn off rules that are incompatible with older versions of Ruby, not to make your rules configuration compatible with a specific version of Ruby, nor to turn on rules that would help with compatibility.
  • rubocop-lts / rubocop-lts - Downloads Rank πŸ™:rubocop-lts/rubocop-lts
  • rubocop-lts / rubocop-lts-rspec - Downloads Rank πŸ™:rubocop-lts/rubocop-lts-rspec
  • rubocop-lts / rubocop-lts-ruby - Downloads Rank πŸ™:rubocop-lts/rubocop-lts-ruby
  • rubocop-lts / rubocop-ruby1_8 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby1_8
  • rubocop-lts / rubocop-ruby1_9 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby1_9
  • rubocop-lts / rubocop-ruby2_0 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_0
  • rubocop-lts / rubocop-ruby2_1 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_1
  • rubocop-lts / rubocop-ruby2_2 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_2
  • rubocop-lts / rubocop-ruby2_3 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_3
  • rubocop-lts / rubocop-ruby2_4 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_4
  • rubocop-lts / rubocop-ruby2_5 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_5
  • rubocop-lts / rubocop-ruby2_6 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_6
  • rubocop-lts / rubocop-ruby2_7 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby2_7
  • rubocop-lts / rubocop-ruby3_0 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby3_0
  • rubocop-lts / rubocop-ruby3_1 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby3_1
  • rubocop-lts / rubocop-ruby3_2 - Downloads Rank πŸ™:rubocop-lts/rubocop-ruby3_2
  • rubocop-lts / standard-rubocop-lts - Downloads Rank πŸ™:rubocop-lts/standard-rubocop-lts

I'm attempting to document all of the logos for the FLOSS/FOSS/OSS projects I'm either involved in, or have need to render somewhere, with their attendant licenses and copyrights, here: logos.galtzo.com. It has been a multi-year effort hunting down the original creators for some of these logos, and documenting the conditions under which they can be used. I'd love to hear if this is useful in your projects!

I was laid off in a March 2025 RIF, and am looking for my next sponsor and my next role.

Liberapay Goal Progress Sponsor Me on Github Buy me a coffee Donate to my FLOSS or refugee efforts at ko-fi.com Donate to my FLOSS or refugee efforts using Patreon


Want to chat about open source, or any of my projects? Join my FLOSS discord.

Live Chat on Discord

Or join the Ruby Friends Squad on Daily.dev

Join Me on Daily.dev's RubyFriends

Want to pay me for work? I'm available!

Get help from me on Upwork


Follow Me on Ruby.Social Follow Me on Bluesky Contact Me My technical writing X (formerly Twitter) Follow


Follow Me on LinkedIn Find Me on WellFound: Find Me on CrunchBase My LinkTree My Blog More About Me

Sponsors

Thanks to all my sponsors across any of the donation platforms! Special thanks to my biggest sponsor HealthSherpa!

health-sherpa-logo

Latest FLOSS Releases Subscribe to my Rubygems updates

  • List is updated frequently by my pet robot: @autobolt
  • πŸ—“οΈ 2026-09-09T05:21:27Z | rubocop-ruby3_1 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 3.1 code

  • πŸ—“οΈ 2026-09-09T05:20:45Z | rubocop-ruby3_2 (3.0.8) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 3.2 code

  • πŸ—“οΈ 2026-09-09T05:02:23Z | rubocop-ruby1_9 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 1.9 code

  • πŸ—“οΈ 2026-09-09T05:02:20Z | rubocop-ruby2_5 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.5 code

  • πŸ—“οΈ 2026-09-09T05:02:19Z | rubocop-ruby2_2 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.2 code

  • πŸ—“οΈ 2026-09-09T05:02:18Z | rubocop-ruby2_0 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.0 code

  • πŸ—“οΈ 2026-09-09T05:02:16Z | rubocop-ruby2_4 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.4 code

  • πŸ—“οΈ 2026-09-09T05:02:15Z | rubocop-ruby2_1 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.1 code

  • πŸ—“οΈ 2026-09-09T05:02:14Z | rubocop-ruby2_7 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.7 code

  • πŸ—“οΈ 2026-09-09T05:02:11Z | rubocop-ruby1_8 (2.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 1.8 code

  • πŸ—“οΈ 2026-09-09T05:02:09Z | rubocop-ruby2_3 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.3 code

  • πŸ—“οΈ 2026-09-09T05:02:07Z | rubocop-ruby3_0 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 3.0 code

  • πŸ—“οΈ 2026-09-09T05:02:05Z | rubocop-ruby2_6 (3.0.7) | 🦾 Configure RuboCop + a bevy of friends to gradually lint Ruby 2.6 code

  • πŸ—“οΈ 2026-09-09T04:36:56Z | standard-rubocop-lts (2.0.13) | Enables Ruby projects to more confidently support even the most finely-aged Rubies. Part of the rubocop-lts family.

  • πŸ—“οΈ 2026-09-08T03:20:51Z | standard-rubocop-lts (2.0.12) | Enables Ruby projects to more confidently support even the most finely-aged Rubies. Part of the rubocop-lts family.

Latest Blog Posts My technical writing

  • List is updated frequently by my pet robot: @autobolt

Contributions

github-snake

Comment Reactions Notable Contributions

πŸ§’ How it started

Holding a black caiman, Amazon River, Brazil. 1997

A cheeky me holding a baby black caiman, Amazon River, Brazil, June 24, 1997, shortly after completing my first programming course - Pascal. The black caiman, a baby specimen of the family Alligatoridae and order Crocodilia, was unharmed, and released back to the water, where it promptly continued following its mother. Full grown they are among the largest alligators and crocodiles in the world.

:godmode: How it's going

  • 🦷 I'm putting more of my focus on FLOSS/FOSS/OSS efforts (of myself and others)! and from
  • πŸ‘· I build big things and small things out of tiny bits.
  • ✨ Recently created rubocop-lts for library maintainer happiness πŸ‘©β€β€οΈβ€πŸ‘©.
  • πŸ”­ I’m working on finishing the migration away from TravisCI to modern CI tools.
  • 🌱 I’m learning Svelte & SvelteKit, with Lucia, Drizzle, Zod, Inlang Paraglide, Skeleton, Tailwind, Typescript, and so many more cool tools.
  • πŸ‘― Preparing next release of seed_migrations and oauth gems!
  • πŸ€” I’ve moved my suite of Resque plugins to the Resque org!
  • πŸ“« How to reach me
  • πŸ˜„ Pronouns: He/Him
  • πŸ—¨οΈ I speak 3 languages fluently, and for a 4th I'm learning Bahasa Indonesia!
  • πŸ‘·β€β™‚οΈ I help refugees and ex-refugees in GhanaπŸ‡¬πŸ‡­ and LiberiaπŸ‡±πŸ‡·, respectively, through Hope For Tomorrow, a Liberian NGO. DM me if interested in knowing more.
πŸ› οΈ My Dev Tools:
AWS bash circleci codecov css3 debian digitalocean docker git github gitlab gitter graphql handlebars heroku jamstack javascript jetbrains jira kubernetes linux markdown mysql neo4j nodejs postgresql rails ruby rubymine svelte wordpress

πŸ’Ό Career

🧻 Current Roles

Pinned Loading

  1. rubocop-lts/rubocop-lts rubocop-lts/rubocop-lts Public

    Rubocop LTS - Rules for Rubies: Rubocop + Standard + Betterlint + Shopify + Gradual

    Ruby 12

  2. ruby-oauth/oauth2 ruby-oauth/oauth2 Public

    πŸ” oauth2 - A Ruby wrapper for the OAuth 2.0, & 2.1 Authorization Frameworks, including OpenID Connect (OIDC)

    Ruby 2.2k 627

  3. Dynamoid/dynamoid Dynamoid/dynamoid Public

    Ruby ORM for Amazon's DynamoDB.

    Ruby 612 193

  4. galtzo-floss/flag_shih_tzu galtzo-floss/flag_shih_tzu Public

    🏁 Bit fields for ActiveRecord

    Ruby 508 65

  5. galtzo-floss/sanitize_email galtzo-floss/sanitize_email Public

    πŸ“§ An Email Condom for your Ruby Server

    Ruby 174 34

  6. floss-funding/floss_funding floss-funding/floss_funding Public

    🦷 Help overlooked open source projects - the ones at the bottom of the stack, and the dev dependencies - by funding them.

    Ruby 5 2