{"id":44809552,"url":"https://github.com/role-suite/role-client","last_synced_at":"2026-02-16T16:01:48.383Z","repository":{"id":331199001,"uuid":"1096263481","full_name":"role-suite/role-client","owner":"role-suite","description":"Relay: is on the way ! A beautiful, offline API client that stores everything in plain files, syncs with Git, and never requires login. Built with Flutter.","archived":false,"fork":false,"pushed_at":"2026-02-15T12:14:39.000Z","size":7174,"stargazers_count":8,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-15T18:26:58.776Z","etag":null,"topics":["dart","flutter","open-source","postman"],"latest_commit_sha":null,"homepage":"","language":"Dart","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/role-suite.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-14T07:03:56.000Z","updated_at":"2026-02-02T13:56:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/role-suite/role-client","commit_stats":null,"previous_names":["battletech45/relay","role-suite/role-client"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/role-suite/role-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/role-suite%2Frole-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/role-suite%2Frole-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/role-suite%2Frole-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/role-suite%2Frole-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/role-suite","download_url":"https://codeload.github.com/role-suite/role-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/role-suite%2Frole-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29512225,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T09:05:14.864Z","status":"ssl_error","status_checked_at":"2026-02-16T08:55:59.364Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["dart","flutter","open-source","postman"],"created_at":"2026-02-16T16:00:33.463Z","updated_at":"2026-02-16T16:01:48.364Z","avatar_url":"https://github.com/role-suite.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/image/app_logo.png\" alt=\"Röle Logo\" width=\"120\" height=\"120\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eRöle\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA modern, cross-platform API testing client built with Flutter\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#screenshots\"\u003eScreenshots\u003c/a\u003e •\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e •\n  \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e •\n  \u003ca href=\"#architecture\"\u003eArchitecture\u003c/a\u003e •\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e •\n  \u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Overview\n\n**Röle** (Turkish for \"Relay\") is a lightweight, modern API client designed for developers who need a fast, cross-platform tool for testing REST APIs. Built with Flutter and following clean architecture principles, Röle offers a beautiful native experience on Windows, macOS, Linux, Android, and iOS.\n\nWhether you're debugging backend endpoints, testing microservices, or documenting API behavior, Röle provides an intuitive interface with powerful features like environment variable substitution, request collections, and Postman import support.\n\n## Features\n\n### Core Functionality\n- 🚀 **Full HTTP Method Support** - GET, POST, PUT, DELETE, PATCH, HEAD, and OPTIONS\n- 📝 **Request Editor** - Intuitive interface for composing requests with headers, query parameters, and body\n- 📊 **Response Viewer** - Formatted JSON/HTML response display with syntax highlighting\n- ⏱️ **Performance Metrics** - Track response times and status codes\n- 🔄 **Request History** - Review history entries\n\n### Organization\n- 📁 **Collections** - Organize requests into logical groups\n- 🌍 **Environments** - Define variables for different environments (development, staging, production)\n- 🔗 **Variable Substitution** - Use `{{variableName}}` syntax to dynamically inject environment values into URLs, headers, and bodies\n\n### Import/Export\n- 📥 **Postman Import** - Seamlessly import Postman collections and environments\n- 📤 **Workspace Export** - Export your entire workspace (collections, requests, environments) as JSON\n- 🔀 **Conflict Resolution** - Smart handling of naming conflicts during import (skip, keep both, or overwrite)\n\n### User Experience\n- 🎨 **Modern Design** - Clean, Material Design 3 interface with carefully crafted theming\n- 🌙 **Dark Mode** - Full dark theme support for comfortable late-night debugging\n- 📱 **Responsive Layout** - Adapts beautifully from mobile to desktop screen sizes\n- ⚡ **Fast \u0026 Native** - Compiled to native code for each platform\n\n### Cross-Platform\n- 💻 Windows, macOS, Linux desktop support\n- 📱 Android and iOS mobile support\n\n## Screenshots\n\n### Home Screen\nThe main interface showing your API request collections and recent requests.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/home-screen.png\" alt=\"Röle Home Screen\" width=\"800\"\u003e\n\u003c/p\u003e\n\n### Request Editor\nCreate and edit API requests with support for environment variables, headers, and request bodies.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/request-editor.png\" alt=\"Röle Request Editor\" width=\"800\"\u003e\n\u003c/p\u003e\n\n### Request Body\nCompose JSON request bodies with a clean, intuitive editor.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/request-body.png\" alt=\"Röle Request Body Editor\" width=\"800\"\u003e\n\u003c/p\u003e\n\n### Response Viewer\nView formatted JSON responses with status codes and response times.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/response-body.png\" alt=\"Röle Response Body Viewer\" width=\"800\"\u003e\n\u003c/p\u003e\n\n### Response Headers\nInspect detailed response headers for debugging and analysis.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/response-headers.png\" alt=\"Röle Response Headers Viewer\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## Installation\n\n### Prerequisites\n\n- [Flutter SDK](https://docs.flutter.dev/get-started/install) (version 3.9.2 or higher)\n- For desktop: Platform-specific development tools\n  - **Windows**: Visual Studio 2022 with C++ workload\n  - **macOS**: Xcode 14+\n  - **Linux**: Required packages (see [Flutter Linux docs](https://docs.flutter.dev/get-started/install/linux))\n\n### From Source\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/battletech45/relay.git\n   cd relay\n   ```\n\n2. **Install dependencies**\n   ```bash\n   flutter pub get\n   ```\n\n3. **Run the application**\n   ```bash\n   # For desktop (macOS/Windows/Linux)\n   flutter run -d macos\n   flutter run -d windows\n   flutter run -d linux\n\n   # For mobile\n   flutter run -d android\n   flutter run -d ios\n   ```\n\n### Build for Release\n\n```bash\n# Windows\nflutter build windows --release\n\n# macOS\nflutter build macos --release\n\n# Linux\nflutter build linux --release\n\n# Android APK\nflutter build apk --release\n\n# iOS\nflutter build ios --release\n```\n\n### Pre-built Releases\n\nCheck the [Releases](https://github.com/battletech45/relay/releases) page for pre-built binaries for Windows.\n\n## Getting Started\n\n### Creating Your First Request\n\n1. Launch Röle\n2. Click the **\"New Request\"** floating action button\n3. Enter a name for your request (e.g., \"Get Users\")\n4. Select the HTTP method (GET, POST, etc.)\n5. Enter the URL (e.g., `https://jsonplaceholder.typicode.com/users`)\n6. Click **\"Send\"** to execute the request\n7. View the response in the **Response Body** tab\n\n### Using Environment Variables\n\nEnvironment variables let you switch between different API endpoints or authentication tokens without modifying your requests.\n\n1. Open the **drawer menu** (hamburger icon)\n2. Click **\"Create Environment\"**\n3. Add variables like:\n   - `baseUrl` → `https://api.example.com`\n   - `apiKey` → `your-api-key-here`\n4. Select the environment from the **environment dropdown** in the app bar\n5. Use variables in your requests with the `{{variableName}}` syntax:\n   - URL: `{{baseUrl}}/users`\n   - Header: `Authorization: Bearer {{apiKey}}`\n\n### Organizing with Collections\n\n1. Open the **drawer menu**\n2. Click **\"Create Collection\"**\n3. Name your collection (e.g., \"User API\")\n4. When creating new requests, select the collection from the dropdown\n5. Filter requests by collection using the **collection selector** in the app bar\n\n### Importing from Postman\n\n1. Export your Postman collection (Collection v2.1 format recommended)\n2. Open the **drawer menu** in Röle\n3. Click **\"Import Workspace\"**\n4. Select your `.json` file\n5. Handle any conflicts if prompted\n6. Your collections and environments are now imported!\n\n## Architecture\n\nRöle follows **Clean Architecture** principles with a feature-based structure:\n\n```\nlib/\n├── core/                    # Shared code across features\n│   ├── constant/           # App constants\n│   ├── model/              # Core data models\n│   │   ├── api_request_model.dart\n│   │   ├── collection_model.dart\n│   │   ├── environment_model.dart\n│   │   ├── request_result_model.dart\n│   │   └── workspace_bundle.dart\n│   ├── service/            # Core services\n│   │   ├── api_service.dart\n│   │   ├── environment_service.dart\n│   │   ├── file_storage_service.dart\n│   │   ├── theme_service.dart\n│   │   └── workspace_import_export_service.dart\n│   ├── presentation/       # Reusable UI components\n│   │   ├── layout/\n│   │   └── widgets/\n│   ├── theme/              # App theming\n│   └── util/               # Utilities\n├── features/\n│   └── home/\n│       ├── data/           # Data layer\n│       │   ├── datasources/\n│       │   └── repositories/\n│       ├── domain/         # Domain layer\n│       │   ├── repositories/\n│       │   └── usecases/\n│       └── presentation/   # Presentation layer\n│           ├── controllers/\n│           ├── providers/\n│           ├── viewmodels/\n│           └── widgets/\n└── main.dart\n```\n\n### Key Technologies\n\n| Technology | Purpose |\n|------------|---------|\n| [Flutter](https://flutter.dev) | Cross-platform UI framework |\n| [Riverpod](https://riverpod.dev) | State management |\n| [Dio](https://pub.dev/packages/dio) | HTTP client |\n| [SharedPreferences](https://pub.dev/packages/shared_preferences) | Local key-value storage |\n| [PathProvider](https://pub.dev/packages/path_provider) | File system paths |\n| [FilePicker](https://pub.dev/packages/file_picker) | File selection dialogs |\n\n### Data Flow\n\n```mermaid\ngraph LR\n    A[UI Widgets] --\u003e B[Providers/ViewModels]\n    B --\u003e C[Use Cases]\n    C --\u003e D[Repositories]\n    D --\u003e E[Data Sources]\n    E --\u003e F[(Local Storage)]\n```\n\n## Configuration\n\n### App Constants\n\nKey configuration values are defined in `lib/core/constant/app_constants.dart`:\n\n| Constant | Default Value | Description |\n|----------|---------------|-------------|\n| `appName` | Röle | Application display name |\n| `defaultConnectTimeout` | 15 seconds | HTTP connection timeout |\n| `defaultReceiveTimeout` | 30 seconds | HTTP receive timeout |\n| `maxHistoryEntriesPerRequest` | 20 | Maximum saved history per request |\n| `variableStart` / `variableEnd` | `{{` / `}}` | Environment variable syntax |\n\n### Supported HTTP Methods\n\n- `GET` - Retrieve resources\n- `POST` - Create resources\n- `PUT` - Update/replace resources\n- `DELETE` - Remove resources\n- `PATCH` - Partial update resources\n- `HEAD` - Retrieve headers only\n- `OPTIONS` - Discover allowed methods\n\n## Development\n\n### Running Tests\n\n```bash\nflutter test\n```\n\n### Code Style\n\nThis project uses Flutter's recommended lint rules. Check and fix issues with:\n\n```bash\nflutter analyze\n```\n\n## Contributing\n\nContributions are welcome! Here's how you can help:\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)\n3. **Commit** your changes (`git commit -m 'Add amazing feature'`)\n4. **Push** to the branch (`git push origin feature/amazing-feature`)\n5. **Open** a Pull Request\n\n### Guidelines\n\n- Follow the existing code style and architecture patterns\n- Write meaningful commit messages\n- Add tests for new features when applicable\n- Update documentation as needed\n\n## Roadmap\n\n- [ ] Request history with response snapshots\n- [ ] Syntax highlighting for request/response bodies\n- [ ] GraphQL support\n- [ ] WebSocket testing\n- [ ] gRPC support\n- [ ] Request chaining and scripting\n- [ ] Team collaboration features\n- [ ] API documentation generation\n\n## FAQ\n\n### Why \"Röle\"?\n\n\"Röle\" means \"Relay\" in Turkish. Just as a relay passes signals forward, Röle relays your API requests and brings back responses!\n\n### How is data stored?\n\nAll data is stored locally on your device using the platform's standard storage mechanisms:\n- **Desktop**: Application documents directory\n- **Mobile**: Application-specific storage\n\nNo data is ever sent to external servers.\n\n### Can I use this for GraphQL APIs?\n\nCurrently, Röle focuses on REST APIs. GraphQL support is on the roadmap for future releases.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cp align=\"center\"\u003e\n  Made with ❤️ and Flutter\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frole-suite%2Frole-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frole-suite%2Frole-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frole-suite%2Frole-client/lists"}