{"id":49072402,"url":"https://github.com/h-shiono/mrtklib-docker-ui","last_synced_at":"2026-04-20T08:06:42.538Z","repository":{"id":347589142,"uuid":"1176540948","full_name":"h-shiono/mrtklib-docker-ui","owner":"h-shiono","description":"Web UI for MRTKLIB — GNSS post-processing, real-time positioning, QZSS CLAS/MADOCA, in Docker","archived":false,"fork":false,"pushed_at":"2026-04-20T07:33:52.000Z","size":362,"stargazers_count":8,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T07:35:06.705Z","etag":null,"topics":["clas","gnss","madoca","qzss","rtklib"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/h-shiono.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-09T05:50:33.000Z","updated_at":"2026-04-20T06:54:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/h-shiono/mrtklib-docker-ui","commit_stats":null,"previous_names":["h-shiono/mrtklib-docker-ui"],"tags_count":4,"template":false,"template_full_name":"h-shiono/rtklib-docker-ui","purl":"pkg:github/h-shiono/mrtklib-docker-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/h-shiono%2Fmrtklib-docker-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/h-shiono%2Fmrtklib-docker-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/h-shiono%2Fmrtklib-docker-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/h-shiono%2Fmrtklib-docker-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/h-shiono","download_url":"https://codeload.github.com/h-shiono/mrtklib-docker-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/h-shiono%2Fmrtklib-docker-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32038481,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["clas","gnss","madoca","qzss","rtklib"],"created_at":"2026-04-20T08:06:40.103Z","updated_at":"2026-04-20T08:06:42.532Z","avatar_url":"https://github.com/h-shiono.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MRTKLIB Web UI\n\nA modern web-based user interface for [MRTKLIB](https://github.com/h-shiono/MRTKLIB),\nrunning entirely in a Docker container. MRTKLIB is a modernized C11\nimplementation of RTKLIB with MADOCA-PPP, CLAS PPP-RTK, and advanced\nGNSS positioning capabilities. No compilation required — just\n`docker compose up` and start processing GNSS data from your browser.\n\n![License](https://img.shields.io/badge/license-MIT-blue.svg)\n![Python](https://img.shields.io/badge/python-3.11+-blue.svg)\n![React](https://img.shields.io/badge/react-18+-blue.svg)\n![MRTKLIB](https://img.shields.io/badge/MRTKLIB-0.6.4-green.svg)\n\n\u003e **Status**: v0.1.0-alpha — core features are functional.\n\u003e Known limitations are listed in [Known Issues](#known-issues).\n\n![MRTKLIB Web UI Dashboard](https://raw.githubusercontent.com/h-shiono/mrtklib-docker-ui/main/docs/screenshot.png)\n\n## Features\n\n### Post Processing (`mrtk post`)\n- Sidebar navigation covering all MRTKLIB configuration options\n  (Positioning, AR, Kalman Filter, Adaptive Filter, CLAS PPP-RTK,\n  Environment, Output, Files, Server)\n- Full TOML configuration import / export\n- Named preset management (saved to `/workspace/presets/`)\n- Support for all positioning modes: Single, DGPS, Kinematic,\n  Static, PPP-Kinematic, PPP-Static, PPP-AR, CLAS PPP-RTK,\n  MADOCA PPP, VRS-RTK\n\n### Real-Time Positioning (`mrtk run`)\n- Live position display (Lat / Lon / Height / AR Ratio /\n  Satellites / Age / GPST)\n- Fix quality badges: FIXED / FLOAT / SINGLE color-coded\n- Position scatter plot (E/N, 1:1 aspect ratio, quality colors)\n- Time series chart\n- Sky plot + SNR bar chart (per-constellation color coding,\n  used/unused satellite highlighting)\n- Solution and trace output streaming\n\n### Stream Relay (`mrtk relay`)\n- Multi-stream configuration (up to 4 simultaneous streams)\n- Per-stream Start / Stop control with live console output\n\n### RINEX Conversion (`mrtk convert`)\n- Supports all convbin formats: u-blox, Septentrio SBF,\n  NovAtel, BINEX, Trimble RT17, RTCM2/3, RINEX re-processing\n- Collapsible option groups (Time Range, Signal Options,\n  RINEX Header, Debug)\n- Live command preview before execution\n- RINEX file preview after conversion (header + first 5–10 epochs)\n\n### Receiver Monitor (NMEA / UBX / SBF)\n- Direct connection to GNSS receiver without invoking `mrtk run`\n- Parses NMEA GGA/RMC, UBX NAV-PVT, SBF PVTGeodetic\n- Live position visualization identical to Real-Time tab\n- Raw data file logging to `/workspace/logs/`\n\n### Tools\n- **GNSS Time Converter**: fully bidirectional conversion between\n  Calendar/UTC, GPS Week/ToW, and Day of Year/Session\n- **Data Downloader**: QZSS L6D (CLAS) and L6E (MADOCA) file\n  download; IGS atx update; IGS products and GSI CORS data\n  (NASA Earthdata and GSI credentials required for the latter two)\n\n### Configuration \u0026 Workflow\n- Two-volume Docker setup: `/workspace` (read-write) and\n  `/data` (read-only host data directory)\n- Server-side preset management with import / export\n- TOML import with lossless round-trip (unknown keys preserved)\n- IBM Plex Sans + IBM Plex Mono typography\n- Dark / light mode toggle\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- Docker (the **Build from source** flow additionally uses\n  `docker compose`, which ships with Docker Desktop)\n- GNSS data files (RINEX observation and navigation files)\n\n### Quick Start (pre-built image)\n\nThe fastest way to try MRTKLIB Web UI. No cloning or building required.\n\nImages are published for both `linux/amd64` and `linux/arm64`\n(Apple Silicon native).\n\n1. **Pull the image**\n   ```bash\n   # Docker Hub\n   docker pull hatognss/mrtklib-docker-ui:0.1.0-alpha\n\n   # or GitHub Container Registry\n   docker pull ghcr.io/h-shiono/mrtklib-docker-ui:0.1.0-alpha\n   ```\n\n2. **Prepare host directories**\n   ```bash\n   mkdir -p ./workspace ./data\n   # Place your GNSS data files under ./data (read-only in container)\n   ```\n\n3. **Run the container**\n   ```bash\n   docker run -d --name mrtklib-web-ui \\\n     -p 8080:8000 \\\n     -v \"$(pwd)/workspace:/workspace:rw\" \\\n     -v \"$(pwd)/data:/data:ro\" \\\n     hatognss/mrtklib-docker-ui:0.1.0-alpha\n   ```\n\n4. **Open the UI** at \u003chttp://localhost:8080\u003e\n\nPublished images:\n\n| Registry | Repository |\n|---|---|\n| Docker Hub | [`hatognss/mrtklib-docker-ui`](https://hub.docker.com/r/hatognss/mrtklib-docker-ui) |\n| GHCR | [`ghcr.io/h-shiono/mrtklib-docker-ui`](https://github.com/h-shiono/mrtklib-docker-ui/pkgs/container/mrtklib-docker-ui) |\n\nBoth repositories carry the same multi-arch manifest. See the\nrepository pages above for the list of available tags.\n\n### Build from source\n\nUse this flow if you need to customise the MRTKLIB version, build\nagainst a local MRTKLIB checkout, or develop the Web UI itself.\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/h-shiono/mrtklib-docker-ui.git\n   cd mrtklib-docker-ui\n   ```\n\n2. **Configure directories**\n   ```bash\n   mkdir -p ./workspace ./data\n   cp .env.example .env\n   # Edit .env to set DATA_DIR to your GNSS data directory\n   ```\n\n3. **Build and run**\n   ```bash\n   docker compose up --build\n   ```\n\n4. **Open the UI** at \u003chttp://localhost:8080\u003e\n\n### Data Directory Configuration\n\n| Mount | Default | Purpose | Access |\n|-------|---------|---------|--------|\n| `/workspace` | `./workspace` | Output files, presets, logs | Read-write |\n| `/data` | `./data` | Input GNSS data files | Read-only |\n```bash\n# .env\nDATA_DIR=/path/to/your/gnss-data\n```\n\n### Serial Device Passthrough (Monitor tab)\n\nTo connect to a GNSS receiver via serial port, add the device\nto `docker-compose.yml`:\n```yaml\nservices:\n  app:\n    devices:\n      - /dev/ttyUSB0:/dev/ttyUSB0\n```\n\n### Credentials (Data Downloader)\n\nThe Data Downloader supports three credential sources\n(priority order: `.netrc` mount \u003e environment variables \u003e UI):\n```bash\n# .env\nEARTHDATA_USER=your_username    # NASA Earthdata (IGS products)\nEARTHDATA_PASSWORD=your_password\nGSI_USER=your_username          # GSI CORS FTP\nGSI_PASSWORD=your_password\n```\n\nQZSS L6D/L6E files require no authentication.\n\n---\n\n## Architecture\n\n### Technology Stack\n\n#### Backend\n- **Language**: Python 3.11+\n- **Framework**: FastAPI\n- **Process Management**: asyncio.subprocess\n- **Real-time Communication**: WebSocket\n- **Data Validation**: Pydantic v2\n\n#### Frontend\n- **Framework**: React 18 + TypeScript\n- **Build Tool**: Vite\n- **UI Library**: Mantine v7\n- **Charts**: Chart.js, uPlot, Recharts\n- **Typography**: IBM Plex Sans + IBM Plex Mono\n\n#### Deployment\n- **Container**: Multi-stage Docker build\n- **MRTKLIB Binary**: Built from source via CMake (`mrtk` unified binary)\n- **Volumes**: `/workspace` (read-write), `/data` (read-only)\n\n---\n\n## Development Setup\n\n### Backend\n```bash\nuv sync\nuv run uvicorn mrtklib_web_ui.main:app --reload --host 0.0.0.0 --port 8000\n```\n\n### Frontend\n```bash\ncd frontend\nnpm install\nnpm run dev   # http://localhost:5173\n```\n\nThe frontend dev server runs on `http://localhost:5173` and proxies\nAPI requests to the backend at `http://localhost:8000`.\n\n---\n\n## Roadmap\n\n| Version | Description |\n|---------|-------------|\n| **v0.1.0-alpha** (current) | Core UI for all `mrtk` subcommands, presets, TOML I/O, Monitor tab |\n| **v0.2.0** | Configuration reference full verification, template presets, coordinate converter, Monitor Sky+SNR |\n| **v0.3.0** | IGS/GSI downloader (auth), GitHub Container Registry publish |\n\n---\n\n## Known Issues\n\nThis is an alpha release. Many features have been implemented\nbut not yet thoroughly tested in real-world conditions.\nBug reports and feedback are very welcome — please\n[open an issue](https://github.com/h-shiono/mrtklib-docker-ui/issues).\n\n### Known untested or partially tested areas\n\n- **Real-Time positioning** (`mrtk run`): basic operation confirmed;\n  edge cases (stream reconnection, dual-channel CLAS, long runs)\n  not yet validated\n- **Monitor tab** (NMEA/UBX/SBF): parser logic implemented but\n  not tested against real receiver hardware\n- **Data Downloader**: QZSS L6D/L6E endpoints implemented;\n  IGS products (NASA Earthdata) and GSI CORS (FTP) untested\n- **TOML import round-trip**: basic cases work; complex configs\n  with all options may have edge cases\n- **Configuration option coverage**: UI covers all options from\n  the reference, but default values and conditional logic have\n  not been exhaustively verified\n- **RINEX preview**: implemented but not tested across all\n  receiver formats\n- **Monitor tab Sky+SNR**: not yet implemented (planned for v0.2.0)\n- **Coordinate converter**: not yet implemented (planned for v0.2.0)\n- **Template presets**: not yet implemented (planned for v0.2.0)\n\n### Platform notes\n\n- Tested on: Linux (Ubuntu 22.04), macOS (Apple Silicon)\n- Windows (Docker Desktop): untested\n\nAll bug reports are appreciated, including partial or unclear ones.\n\n---\n\n## Contributing\n\nContributions of all kinds are welcome — bug reports, feature\nrequests, documentation improvements, and pull requests.\n\n**The most helpful thing right now is real-world testing.**\nIf you try MRTKLIB Web UI with your own receiver or dataset\nand something does not work as expected, please open an issue.\nYou do not need to have a fix ready — a clear description of\nwhat happened is enough.\n\n### Opening an Issue\n\nWhen reporting a bug, please include:\n\n- Which tab / feature was affected\n- What you expected to happen\n- What actually happened\n- Browser and OS (and Docker version if relevant)\n- Any error messages from the browser console or Docker logs\n\nFor feature requests, a brief description of the use case\nis more useful than a specific implementation proposal.\n\n### Pull Requests\n\nFor small fixes (typos, obvious bugs), a PR is welcome directly.\nFor larger changes, please open an issue first to discuss\nthe approach — this avoids duplicated effort.\n\n### Guidelines\n\n- Python: PEP 8, type hints throughout\n- TypeScript: strict mode, functional components\n- Commits: conventional commits (`feat:`, `fix:`, `docs:`)\n- Do not modify MRTKLIB source code in this repository\n\n---\n\n## Bundled Correction Files\n\nThe Docker image includes correction files from MRTKLIB for\nquick-start CLAS PPP-RTK and MADOCA PPP processing:\n\n### CLAS PPP-RTK\n| File | Purpose |\n|------|---------|\n| `clas_grid.def` | CLAS grid definition |\n| `clas_grid.blq` | Ocean tide loading coefficients |\n| `igu00p01.erp` | Earth rotation parameters |\n| `igs14_L5copy.atx` | Satellite/receiver antenna PCV |\n| `isb.tbl` | Inter-system bias table |\n| `l2csft.tbl` | L2C signal phase correction |\n\n### MADOCA PPP\n| File | Purpose |\n|------|---------|\n| `igs20.atx` | IGS antenna model (satellite + receiver PCO/PCV) |\n\nThese files are available at `/opt/mrtklib/corrections/` inside\nthe container and can be selected directly from the UI's\nFiles configuration panel. Use the \"Apply CLAS PPP-RTK profile\"\nor \"Apply MADOCA PPP profile\" buttons to set all paths at once.\n\nTo use a newer version of any file, place it in your `/data`\ndirectory and select it manually via the file browser.\n\n---\n\n## License\n\nMIT License. See [LICENSE](LICENSE).\n\nMRTKLIB is distributed under the BSD 2-Clause License.\nThis project provides a web interface only and does not modify\nMRTKLIB source code.\n\n---\n\n## Acknowledgements\n\nBuilt on [MRTKLIB](https://github.com/h-shiono/MRTKLIB) by Hayato Shiono,\nwhich is a modernized fork of\n[RTKLIB](https://github.com/tomojitakasu/RTKLIB) by Tomoji Takasu.\n\nDeveloped with assistance from **Claude** (Anthropic) and\n**Gemini** (Google).\n\nKey dependencies: FastAPI · React · Mantine · Vite · Chart.js · uv","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fh-shiono%2Fmrtklib-docker-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fh-shiono%2Fmrtklib-docker-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fh-shiono%2Fmrtklib-docker-ui/lists"}