{"id":22306556,"url":"https://github.com/supermomonga/nonius","last_synced_at":"2025-09-30T07:31:42.371Z","repository":{"id":265780514,"uuid":"863247915","full_name":"supermomonga/Nonius","owner":"supermomonga","description":"Lightweight Profiler Viewer for Rails Apps","archived":false,"fork":false,"pushed_at":"2024-10-09T01:47:30.000Z","size":1984,"stargazers_count":5,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-19T19:55:24.545Z","etag":null,"topics":["rails","ruby","ruby-on-rails"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/supermomonga.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2024-09-26T01:12:46.000Z","updated_at":"2025-01-12T03:43:01.000Z","dependencies_parsed_at":"2024-11-30T22:50:01.926Z","dependency_job_id":"8ddc4019-dc21-42bf-8805-f31280d496db","html_url":"https://github.com/supermomonga/Nonius","commit_stats":null,"previous_names":["supermomonga/nonius"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supermomonga%2FNonius","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supermomonga%2FNonius/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supermomonga%2FNonius/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supermomonga%2FNonius/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/supermomonga","download_url":"https://codeload.github.com/supermomonga/Nonius/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234715618,"owners_count":18875905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["rails","ruby","ruby-on-rails"],"created_at":"2024-12-03T19:29:23.082Z","updated_at":"2025-09-30T07:31:36.888Z","avatar_url":"https://github.com/supermomonga.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nonius\n\n![Nonius - screenshot](docs/nonius.png)\n\n### Lightweight Profiler Viewer for Rails Apps\n\nNonius is a desktop app that provides a streamlined interface for viewing and managing profiling results from your Rails applications. It integrates seamlessly with the Ruby profiling tool [Vernier](https://github.com/jhawthorn/vernier) and presents profiling data using the powerful [Firefox Profiler](https://profiler.firefox.com/). If you're working with Rails apps and need an efficient way to visualize performance data, Nonius is here to make it simple and fast.\n\n## 📦 Install\n\n### Pre-compiled binary\n\n- **macOS**: \u003cs\u003e[Download the latest release](https://github.com/supermomonga/Nonius/releases)\u003c/s\u003e codesign is not ready. please wait a moment.\n- **Windows \u0026 Linux**: Coming soon!\n\n### Build from source\n\nYou need to install [.NET SDK](https://dotnet.microsoft.com/en-us/download).\n\n```sh\ndotnet publish src/Nonius/Nonius.csproj -c Release -r osx-arm64 -p:Platform=osx-arm64 -p:UseAppHost=true\nsh src/bundle-macos.sh\n```\n\nThen, you can use `dist/Nonius.app`.\n\n## 🔥 Key Features\n\n- **Tailored for Rails**: Nonius is designed specifically for Rails applications, making it easy to view profiling data with a UI optimized for common Rails patterns.\n- **Multi-App Support**: Manage and analyze profiling data from multiple Rails applications, all within the same interface.\n- **Lightweight \u0026 Efficient**: Nonius is designed to be fast and minimal, ensuring that you can quickly dive into performance insights without bloat or distractions.\n- **Seamless Vernier Integration**: Nonius automatically syncs with Vernier profiler to retrieve and display your profiling results.\n- **Interactive Filtering**: Easily sift through large profiling data with built-in filtering and search tools (coming soon).\n\n## 🖥️ How It Works\n\n1. **Profile Your Rails App**: Integrate the [Vernier](https://github.com/jhawthorn/vernier) profiler into your Rails app by adding the necessary code. This could be done either via:\n   - **Rack Middleware** for monitoring general app performance, or\n   - **RSpec Request Specs** for more targeted profiling.\n\n2. **View Results in Nonius**: Once profiling data is collected, simply open Nonius to see the results displayed using the Firefox Profiler interface. Nonius adds additional functionality like profiling data list views and filtering, making it easier to analyze your app's performance.\n\n3. **Optimize Your App**: Use the detailed profiling insights to identify performance bottlenecks and make your Rails app more efficient!\n\n## 📚 Vernier Setup Guide\n\n1. Install [Vernier](https://github.com/jhawthorn/vernier) in your Rails app:\n\n```rb\n# Gemfile\ngroup :development, :test do\n  gem 'vernier'\nend\n```\n\n2. Add Vernier profiling hooks, such as in a middleware or test suite:\n\nfor RSpec request spec:\n\n```rb\n# spec/support/vernier_profiler_support.rb\nrequire 'vernier'\nrequire 'securerandom'\n\nmodule VernierProfilerSupport\n  def get(path, **args) = with_vernier_profiling { super }\n  def post(path, **args) = with_vernier_profiling { super }\n  def delete(path, **args) = with_vernier_profiling { super }\n  def put(path, **args) = with_vernier_profiling { super }\n  def patch(path, **args) = with_vernier_profiling { super }\n  def head(path, **args) = with_vernier_profiling { super }\n\n  private def with_vernier_profiling\n    Vernier.start_profile(\n      out: Rails.root.join('tmp/profiling', \"#{SecureRandom.uuid}.json\").to_s,\n      hooks: [:rails]\n    )\n    result = yield\n    Vernier.stop_profile\n    return result\n  end\nend\n```\n\n```rb\n# spec/rails_helper.rb\nif ENV.fetch('ENABLE_VERNIER_PROFILER', false)\n  require_relative 'support/vernier_profiler_support'\n  RSpec.configure do |config|\n    config.include VernierProfilerSupport, type: :request\n  end\nend\n```\n\nfor Rails server:\n\n```rb\n# lib/rack/vernier_profiler.rb\nrequire 'vernier'\nrequire 'securerandom'\n\nclass VernierProfiler\n  def initialize(app)\n    FileUtils.mkdir_p(Rails.root.join('tmp/profiling'))\n    @app = app\n  end\n\n  def call(env)\n    Vernier.start_profile(out: Rails.root.join('tmp/profiling', \"#{SecureRandom.uuid}.json\").to_s, hooks: [:rails])\n    status, headers, response = @app.call(env)\n    Vernier.stop_profile\n    return [status, headers, response]\n  end\nend\n```\n\n```rb\n# config/environments/development.rb\nrequire \"active_support/core_ext/integer/time\"\n\nRails.application.configure do\n  if ENV.fetch('ENABLE_VERNIER_PROFILER', false)\n    require_relative '../../lib/rack/vernier_profiler'\n    config.middleware.use VernierProfiler\n  end\nend\n```\n\n\n3. Create a new project in Nonius, and configure profile data directory. In this case, `your_rails_app_root_dir/tmp/profiling` is the data directory.\n4. Start analyzing!\n\n\n## 🚀 Roadmap\n\n- Offline Mode: Currently, Nonius relies on vernier's hosted profiler web interface ( https://vernier.prof/ ). An offline mode is planned to ensure full functionality without internet access.\n- Advanced Filtering: More powerful filtering and search capabilities, similar to Datadog, will soon be available for deep analysis of your profiling data.\n\n## 🛠️ Contribution\n\nWe welcome contributions! If you find bugs or have feature suggestions, feel free to open an issue or submit a pull request.\n\n## 📄 License\n\nNonius is open-source and available under the MIT License. See the LICENSE file for more information.\n\n---\n\nHappy profiling! 🎯\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupermomonga%2Fnonius","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsupermomonga%2Fnonius","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupermomonga%2Fnonius/lists"}