{"id":50868215,"url":"https://github.com/vixcpp/pico","last_synced_at":"2026-06-15T03:07:52.606Z","repository":{"id":363272354,"uuid":"1171558101","full_name":"vixcpp/pico","owner":"vixcpp","description":"tiny production test app built with Vix.cpp.","archived":false,"fork":false,"pushed_at":"2026-06-08T07:53:52.000Z","size":17,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T08:16:20.917Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://docs.vixcpp.com","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/vixcpp.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-03T11:10:39.000Z","updated_at":"2026-06-08T07:53:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vixcpp/pico","commit_stats":null,"previous_names":["vixcpp/pico"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/vixcpp/pico","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vixcpp%2Fpico","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vixcpp%2Fpico/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vixcpp%2Fpico/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vixcpp%2Fpico/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vixcpp","download_url":"https://codeload.github.com/vixcpp/pico/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vixcpp%2Fpico/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34345688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"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":[],"created_at":"2026-06-15T03:07:49.881Z","updated_at":"2026-06-15T03:07:52.601Z","avatar_url":"https://github.com/vixcpp.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pico\n\nPico is a production-style runtime validation application built with **Vix.cpp**.\n\n**Website:** https://pico.vixcpp.com\n**Runtime:** Vix.cpp\n**Purpose:** validate Vix.cpp modules inside one real C++ backend application\n\nPico is not a framework and it is not a separate runtime. It is a real backend application used to verify that Vix.cpp modules work together under a practical application shape.\n\nIt connects HTTP routing, middleware, static files, durable KV storage, SQLite events, ThreadPool jobs, WebSocket runtime behavior, runtime metrics, time utilities, filesystem utilities, Rix CSV export, Rix Auth diagnostics, and Rix PDF generation.\n\n## Why Pico exists\n\nVix.cpp modules should not only compile independently. They should also work together inside a running application with shared configuration, lifecycle, routing, persistence, observability, and diagnostics.\n\nPico exists for that purpose.\n\nIt is intentionally small, but it is not a toy example. It is structured like a real backend application:\n\n```txt\nHTTP app\n  -\u003e middleware\n  -\u003e routes\n  -\u003e controllers\n  -\u003e application services\n  -\u003e infrastructure wrappers\n  -\u003e Vix KV\n  -\u003e SQLite\n  -\u003e ThreadPool\n  -\u003e WebSocket\n  -\u003e runtime dashboard\n```\n\nPico is used as a production-oriented integration target for Vix.cpp.\n\n## What Pico validates\n\nPico currently exercises:\n\n- `vix::App`\n- HTTP routing\n- middleware\n- public static files\n- `.env` configuration\n- SQLite persistence\n- durable KV storage\n- runtime metrics\n- `vix/time`\n- `vix/fs`\n- ThreadPool jobs\n- WebSocket runtime\n- Vix AttachedRuntime\n- paginated runtime events API\n- Rix CSV export\n- Rix Auth with database-backed users and sessions\n- Rix PDF generation\n- browser-based runtime dashboard\n\n## Quick start\n\n```bash\ncd pico\ncp .env.example .env\nvix dev\n```\n\nOpen:\n\n```txt\nhttp://127.0.0.1:8080\nhttp://127.0.0.1:8080/status.html\n```\n\nCheck the API:\n\n```bash\ncurl http://127.0.0.1:8080/api\ncurl http://127.0.0.1:8080/health\ncurl http://127.0.0.1:8080/api/health\ncurl http://127.0.0.1:8080/api/status\n```\n\n## Status dashboard\n\nPico includes a browser dashboard:\n\n```txt\n/status.html\n```\n\nThe dashboard observes and tests:\n\n- application health\n- uptime\n- boot count\n- HTTP request count\n- latest heartbeat\n- WebSocket message count\n- SQLite event count\n- ThreadPool metrics\n- KV write/read behavior\n- background job execution\n- Rix Auth register/login/session/logout/account deletion checks\n- Rix PDF download checks\n- WebSocket ping/pong behavior\n- paginated runtime event loading\n- CSV export of runtime events\n\nThe dashboard is served from `public/` through the Vix static file handler.\n\n## Project layout\n\n```txt\ninclude/pico/\n  app/\n    AppBootstrap.hpp\n\n  application/\n    services/\n      EventService.hpp\n      JobService.hpp\n      RuntimeStatusService.hpp\n      AuthService.hpp\n      PdfService.hpp\n\n  domain/\n    models/\n      Event.hpp\n\n  infrastructure/\n    database/\n      DatabaseProvider.hpp\n      EventRepository.hpp\n\n    kv/\n      PicoKvStore.hpp\n\n    threadpool/\n      PicoThreadPool.hpp\n\n    websocket/\n      PicoWebSocketServer.hpp\n\n  presentation/\n    controllers/\n      EventController.hpp\n      HealthController.hpp\n      HomeController.hpp\n      JobController.hpp\n      KvController.hpp\n      StatusController.hpp\n      WebSocketController.hpp\n      AuthController.hpp\n      PdfController.hpp\n\n    middleware/\n      MiddlewareRegistry.hpp\n\n    routes/\n      RouteRegistry.hpp\n\n  support/\n    HttpResponses.hpp\n    JsonHelpers.hpp\n    HttpQuery.hpp\n\nsrc/\n  main.cpp\n\n  pico/\n    app/\n      AppBootstrap.cpp\n\n    application/\n      services/\n        AuthService.cpp\n        EventService.cpp\n        JobService.cpp\n        PdfService.cpp\n        RuntimeStatusService.cpp\n\n    domain/\n      models/\n        Event.cpp\n\n    infrastructure/\n      database/\n        DatabaseProvider.cpp\n        EventRepository.cpp\n\n      kv/\n        PicoKvStore.cpp\n\n      threadpool/\n        PicoThreadPool.cpp\n\n      websocket/\n        PicoWebSocketServer.cpp\n\n    presentation/\n      controllers/\n        AuthController.cpp\n        EventController.cpp\n        HealthController.cpp\n        HomeController.cpp\n        JobController.cpp\n        KvController.cpp\n        PdfController.cpp\n        StatusController.cpp\n        WebSocketController.cpp\n\n      middleware/\n        MiddlewareRegistry.cpp\n\n      routes/\n        RouteRegistry.cpp\n\n    support/\n      HttpResponses.cpp\n      JsonHelpers.cpp\n\nmigrations/\n  2026_06_08_000000_create_events.up.sql\n  2026_06_08_000000_create_events.down.sql\n\npublic/\n  index.html\n  status.html\n  app.css\n  app.js\n\nstorage/\n\n.env.example\nvix.app\nvix.json\nREADME.md\n```\n\n## Architecture\n\nPico uses a layered backend structure.\n\n```txt\ndomain\n  Pure application models.\n\napplication\n  Services that coordinate runtime behavior.\n\ninfrastructure\n  Vix-backed technical components such as SQLite, KV, ThreadPool, filesystem,\n  time, and WebSocket runtime.\n\npresentation\n  HTTP controllers, middleware, and route registration.\n\napp\n  Application bootstrap and dependency wiring.\n\nsupport\n  Shared JSON and HTTP helpers.\n```\n\nThis keeps the runtime wiring explicit while avoiding a monolithic `main.cpp`.\n\n## Entry point\n\n`main.cpp` stays intentionally small:\n\n```cpp\n#include \u003cpico/app/AppBootstrap.hpp\u003e\n\nint main()\n{\n  pico::app::AppBootstrap bootstrap;\n  return bootstrap.run();\n}\n```\n\nApplication setup lives in:\n\n```txt\npico::app::AppBootstrap\n```\n\n## Application bootstrap\n\n`AppBootstrap` owns the startup sequence.\n\nIt creates and connects:\n\n- `vix::config::Config`\n- `vix::App`\n- `DatabaseProvider`\n- `EventRepository`\n- `PicoKvStore`\n- `PicoThreadPool`\n- `EventService`\n- `RuntimeStatusService`\n- `JobService`\n- `PicoWebSocketServer`\n- middleware\n- routes\n- static files\n- templates\n- `AuthService`\n- `PdfService`\n\nStartup flow:\n\n```txt\nmain.cpp\n  -\u003e AppBootstrap\n      -\u003e load .env\n      -\u003e create vix::App\n      -\u003e open SQLite database\n      -\u003e open durable KV store\n      -\u003e create ThreadPool\n      -\u003e initialize event schema\n      -\u003e mark boot count\n      -\u003e configure static files\n      -\u003e configure optional compression\n      -\u003e register middleware\n      -\u003e register runtime metrics\n      -\u003e register routes\n      -\u003e run HTTP\n      -\u003e optionally run HTTP + WebSocket together\n      -\u003e create AuthService with database-backed Rix Auth\n      -\u003e create PdfService for Rix PDF generation\n```\n\n## Runtime metrics\n\nPico stores lightweight runtime state in Vix KV.\n\nCurrent runtime counters include:\n\n```txt\napp/boot_count\napp/last_heartbeat\nhttp/requests\nws/messages\njobs/run_count\njobs/slow_run_count\n```\n\n`RuntimeStatusService` exposes the current runtime snapshot through:\n\n```txt\nGET /api/status\n```\n\nExample response:\n\n```json\n{\n  \"ok\": true,\n  \"app\": \"pico\",\n  \"runtime\": \"vix.cpp\",\n  \"status\": \"running\",\n  \"uptime_seconds\": 79,\n  \"boot_count\": 21,\n  \"last_heartbeat\": \"2026-06-08T09:36:55Z\",\n  \"http_requests\": 55,\n  \"ws_messages\": 6,\n  \"job_runs\": 4,\n  \"slow_job_runs\": 0,\n  \"events\": {\n    \"total\": 53\n  },\n  \"threadpool\": {\n    \"running\": true\n  }\n}\n```\n\nThe heartbeat is updated through runtime middleware and formatted with `vix/time`.\n\n## Heartbeat model\n\nPico separates heartbeat state from heartbeat events.\n\n`heartbeat()` updates the durable KV value only.\n\n`record_heartbeat_event()` records a SQLite event when explicit event history is needed.\n\nThis avoids polluting the SQLite event table with one heartbeat event per HTTP request while still keeping the latest heartbeat visible in `/api/status`.\n\n## KV corruption recovery\n\nPico uses Vix KV for diagnostic counters. Since these counters are operational state and not business data, a corrupted local KV store should not permanently prevent Pico from starting.\n\nWhen the KV store fails to open because of corruption, Pico can move the corrupted store to a backup path and create a fresh KV store.\n\nExpected behavior:\n\n```txt\nstorage/kv\n  -\u003e open fails because the KV log is corrupted\n  -\u003e move to storage/kv.corrupted.\u003ctimestamp\u003e\n  -\u003e create fresh storage/kv\n  -\u003e continue startup\n```\n\nThis protects the runtime validation app from being blocked by local diagnostic-state corruption.\n\nThe SQLite database is separate:\n\n```txt\nstorage/pico.db\n```\n\nKV recovery should not delete or modify the SQLite event database.\n\n## SQLite events\n\nPico stores runtime events in SQLite.\n\nThe event model contains:\n\n```txt\nid\nsource\ntype\npayload\ncreated_at\n```\n\nCommon event types:\n\n```txt\nsystem / app.boot\nkv     / kv.write\nkv     / kv.delete\njob    / job.completed\njob    / job.slow.completed\nws     / ws.open\nws     / ws.ping\nws     / ws.message\nws     / ws.close\nws     / ws.error\n```\n\nThe latest events are available through:\n\n```txt\nGET /api/events\n```\n\nExample:\n\n```bash\ncurl http://127.0.0.1:8080/api/events\n```\n\n## Rix CSV export\n\nPico uses **Rix CSV** to export SQLite runtime events as CSV.\n\nRix is the optional userland library layer for Vix.cpp projects. It is separate from the Vix runtime and CLI, but belongs to the same ecosystem.\n\nVix.cpp provides the runtime, application workflow, and core modules.\n\nRix provides optional libraries that applications can add when needed.\n\nIn Pico:\n\n```txt\nVix.cpp\n  -\u003e HTTP runtime\n  -\u003e middleware\n  -\u003e KV\n  -\u003e SQLite access\n  -\u003e ThreadPool\n  -\u003e WebSocket\n  -\u003e time\n  -\u003e filesystem\n\nRix\n  -\u003e CSV export\n\nPico\n  -\u003e real C++ backend using Vix.cpp + Rix CSV\n```\n\nCSV export endpoint:\n\n```txt\nGET /api/events.csv\n```\n\nExample:\n\n```bash\ncurl -i http://127.0.0.1:8080/api/events.csv\n```\n\nOr save it to a file:\n\n```bash\ncurl -L http://127.0.0.1:8080/api/events.csv -o pico-events.csv\n```\n\nThe endpoint returns:\n\n```txt\nContent-Type: text/csv; charset=utf-8\nContent-Disposition: attachment; filename=\"pico-events.csv\"\n```\n\n## Durable KV\n\nPico uses Vix KV to persist small runtime values.\n\nWrite a value:\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/kv \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\":\"demo\",\"value\":\"hello\"}'\n```\n\nRead a value:\n\n```bash\ncurl http://127.0.0.1:8080/api/kv/demo\n```\n\nDelete a value:\n\n```bash\ncurl -X DELETE http://127.0.0.1:8080/api/kv/demo\n```\n\nThe status dashboard also performs a KV write/read test from the browser.\n\n## Rix Auth diagnostics\n\nPico uses **Rix Auth** to validate authentication workflows through a real Vix.cpp backend.\n\nThe auth diagnostics use database-backed Rix Auth stores, so users and sessions are persisted through Pico's SQLite database instead of memory-only storage.\n\nPico currently exposes diagnostic auth routes for:\n\n```txt\nregister\nlogin\nsession validation\nlogout\naccount deletion\n```\n\n### Auth endpoints\n\n```txt\nPOST   /api/auth/register\nPOST   /api/auth/login\nPOST   /api/auth/check\nPOST   /api/auth/logout\nDELETE /api/auth/account\n```\n\n### Register a user\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/auth/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"pico-demo@example.com\",\"password\":\"correct-password\"}'\n```\n\n### Login\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/auth/login \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"pico-demo@example.com\",\"password\":\"correct-password\"}'\n```\n\n### Check a session\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/auth/check \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"session_id\":\"session_xxx\"}'\n```\n\n### Logout\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/auth/logout \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"session_id\":\"session_xxx\"}'\n```\n\n### Delete the authenticated diagnostic account\n\n```bash\ncurl -X DELETE http://127.0.0.1:8080/api/auth/account \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"session_id\":\"session_xxx\"}'\n```\n\nThe account deletion route authenticates the session first, revokes the user's sessions, then removes the user through the Rix Auth user store API.\n\n### Security note\n\nPico's auth routes are diagnostic routes. They are useful for validating `rix/auth` in a real production-style app, but they are not a complete product account system.\n\nA real application should add stronger account flows, CSRF/session handling, email verification, password reset, and authorization rules.\n\n## Rix PDF generation\n\nPico uses **Rix PDF** to validate PDF generation through the Vix HTTP runtime.\n\n### PDF endpoints\n\n```txt\nGET /api/pdf/basic\nGET /api/pdf/events\n```\n\n### Generate a basic diagnostic PDF\n\n```bash\ncurl -L http://127.0.0.1:8080/api/pdf/basic -o pico-basic.pdf\n```\n\n### Generate a PDF containing recent runtime events\n\n```bash\ncurl -L http://127.0.0.1:8080/api/pdf/events -o pico-events.pdf\n```\n\nThe PDF routes generate documents through the unified Rix facade:\n\n```cpp\nrix.pdf.document()\nrix.pdf.write(...)\n```\n\nThe events PDF reads recent SQLite runtime events and renders them into a PDF table.\n\n## Background jobs\n\nPico uses the Vix ThreadPool through `PicoThreadPool`.\n\nRun a diagnostic job:\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/jobs \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"demo-job\",\"value\":21}'\n```\n\nRun a slow timeout-observation job:\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/jobs/slow\n```\n\nThreadPool metrics are available through:\n\n```txt\nGET /api/threadpool\n```\n\nThe metrics include values such as:\n\n```txt\nworkers\npending\nactive\nidle_workers\nbusy_workers\nsubmitted\ncompleted\nfailed\ncancelled\ntimed_out\nrejected\n```\n\n## WebSocket\n\nPico can run HTTP and WebSocket together through Vix AttachedRuntime.\n\nWhen WebSocket is enabled, Pico exposes a WebSocket runtime on the configured WebSocket port.\n\nThe status dashboard can test WebSocket behavior by sending a typed `ping` message and expecting a `pong` response.\n\nDiagnostic routes:\n\n```txt\nGET /api/ws/info\nGET /api/ws/metrics\n```\n\nSupported WebSocket behavior includes:\n\n- client open events\n- raw echo messages\n- typed `ping` / `pong`\n- room join\n- room broadcast\n- close events\n- error events\n\n## Routes\n\nRoutes are registered from:\n\n```txt\nsrc/pico/presentation/routes/RouteRegistry.cpp\n```\n\nCurrent routes:\n\n```txt\nGET    /api\nGET    /health\nGET    /api/health\n\nGET    /api/status\nGET    /api/threadpool\n\nPOST   /api/kv\nPOST   /api/kv/read\nGET    /api/kv/:key\nDELETE /api/kv/:key\n\nGET    /api/events\nPOST   /api/events\nGET    /api/events.csv\n\nPOST   /api/auth/register\nPOST   /api/auth/login\nPOST   /api/auth/check\nPOST   /api/auth/logout\nDELETE /api/auth/account\n\nPOST   /api/jobs\nPOST   /api/jobs/slow\n\nGET    /api/pdf/basic\nGET    /api/pdf/events\n\nGET    /api/ws/info\nGET    /api/ws/metrics\n```\n\nThe `/` route is served from:\n\n```txt\npublic/index.html\n```\n\nThe status page is served from:\n\n```txt\npublic/status.html\n```\n\n## Middleware\n\nMiddleware is registered from:\n\n```txt\nsrc/pico/presentation/middleware/MiddlewareRegistry.cpp\n```\n\nCurrent middleware includes:\n\n- CORS for local development\n- rate limiting for `/api`\n- request logging\n- security headers\n- body size limits for write routes\n- custom API headers\n- runtime metrics middleware\n\nRecommended middleware order:\n\n```txt\nCORS\n  -\u003e rate limit\n  -\u003e request logging\n  -\u003e security headers\n  -\u003e body limits\n  -\u003e runtime metrics\n  -\u003e routes\n```\n\n## Static files\n\nStatic files live in:\n\n```txt\npublic/\n```\n\nThe app mounts `public/` at `/`.\n\nCurrent public files:\n\n```txt\npublic/index.html\npublic/status.html\npublic/app.css\npublic/app.js\n```\n\nThe frontend is intentionally framework-free. It uses plain HTML, CSS, and JavaScript to inspect the runtime through the HTTP and WebSocket APIs.\n\n## Configuration\n\nStart by copying the example environment file:\n\n```bash\ncp .env.example .env\n```\n\nImportant local values:\n\n```dotenv\nAPP_NAME=pico\nAPP_ENV=development\n\nSERVER_PORT=8080\n\nDATABASE_ENGINE=sqlite\nDATABASE_SQLITE_PATH=storage/pico.db\n\nVIX_ORM_DIR=migrations\n\nWEBSOCKET_ENABLED=true\nWEBSOCKET_PORT=9090\n```\n\nRuntime values and secrets belong in:\n\n```txt\n.env\n```\n\nDocumented expected variables belong in:\n\n```txt\n.env.example\n```\n\n## Vix configuration files\n\nPico uses two important Vix files:\n\n```txt\nvix.app\nvix.json\n```\n\n`vix.app` describes the application build manifest.\n\n`vix.json` describes Vix orchestration and project metadata.\n\nRule:\n\n```txt\nvix.app   -\u003e application build manifest\nvix.json  -\u003e Vix project/orchestration config\n.env      -\u003e local runtime values and secrets\n```\n\nVix generates an internal build project under:\n\n```txt\n.vix/generated/app/\n```\n\nDo not edit generated files manually. Edit `vix.app` and source files instead.\n\n## Migrations\n\nPico includes a `migrations/` directory.\n\nCurrent migration:\n\n```txt\n2026_06_08_000000_create_events.up.sql\n2026_06_08_000000_create_events.down.sql\n```\n\nORM commands:\n\n```bash\nvix orm status\nvix orm migrate\nvix orm rollback --steps 1\n```\n\nPico also ensures the events table exists at startup through `EventRepository::ensure_schema()`.\n\n## Templates\n\nTemplates can be placed in:\n\n```txt\nviews/\n```\n\nThe app configures the template directory through:\n\n```cpp\napp.templates(views_path);\n```\n\n## Common commands\n\n```bash\nvix dev\nvix build\nvix run\nvix tests\n```\n\nFor stronger local validation:\n\n```bash\nvix check --tests --run\n```\n\n## Manual checks\n\nHealth:\n\n```bash\ncurl http://127.0.0.1:8080/health\ncurl http://127.0.0.1:8080/api/health\n```\n\nRuntime status:\n\n```bash\ncurl http://127.0.0.1:8080/api/status\n```\n\nThreadPool metrics:\n\n```bash\ncurl http://127.0.0.1:8080/api/threadpool\n```\n\nEvents:\n\n```bash\ncurl http://127.0.0.1:8080/api/events\n```\n\nCSV export:\n\n```bash\ncurl -L http://127.0.0.1:8080/api/events.csv -o pico-events.csv\n```\n\n### Paginated events\n\n```bash\ncurl \"http://127.0.0.1:8080/api/events?limit=20\u0026offset=0\"\ncurl \"http://127.0.0.1:8080/api/events?limit=20\u0026offset=20\"\n```\n\n### Auth diagnostics\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/auth/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"pico-demo@example.com\",\"password\":\"correct-password\"}'\n\ncurl -X POST http://127.0.0.1:8080/api/auth/login \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"pico-demo@example.com\",\"password\":\"correct-password\"}'\n```\n\n### PDF generation\n\n```bash\ncurl -L http://127.0.0.1:8080/api/pdf/basic -o pico-basic.pdf\ncurl -L http://127.0.0.1:8080/api/pdf/events -o pico-events.pdf\n```\n\nKV write/read:\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/kv \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\":\"demo\",\"value\":\"hello\"}'\n\ncurl http://127.0.0.1:8080/api/kv/demo\n```\n\nJob execution:\n\n```bash\ncurl -X POST http://127.0.0.1:8080/api/jobs \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"demo-job\",\"value\":21}'\n```\n\nWebSocket diagnostics:\n\n```bash\ncurl http://127.0.0.1:8080/api/ws/info\ncurl http://127.0.0.1:8080/api/ws/metrics\n```\n\n## Design constraints\n\nPico should remain small, but real.\n\nIt should not become a large framework example or a business application. Its purpose is to keep validating Vix.cpp runtime behavior under realistic conditions.\n\nKeep these rules:\n\n- keep `main.cpp` minimal\n- keep startup wiring in `AppBootstrap`\n- register routes through `RouteRegistry`\n- register middleware through `MiddlewareRegistry`\n- keep HTTP logic inside controllers\n- keep runtime coordination inside services\n- keep database, KV, filesystem, time, ThreadPool, and WebSocket wrappers under `infrastructure`\n- keep reusable JSON and HTTP helpers under `support`\n- use Vix modules where they exist\n- use Rix for optional userland libraries\n- do not mix Rix into the Vix core runtime identity\n\n## How to read Pico\n\nFor reviewers and contributors, the most important files are:\n\n```txt\nsrc/main.cpp\nsrc/pico/app/AppBootstrap.cpp\nsrc/pico/presentation/routes/RouteRegistry.cpp\nsrc/pico/presentation/middleware/MiddlewareRegistry.cpp\nsrc/pico/application/services/RuntimeStatusService.cpp\nsrc/pico/infrastructure/kv/PicoKvStore.cpp\nsrc/pico/infrastructure/database/EventRepository.cpp\nsrc/pico/infrastructure/websocket/PicoWebSocketServer.cpp\npublic/status.html\npublic/app.js\n```\n\nThese files show the core runtime flow from process startup to browser-visible diagnostics.\n\n## Summary\n\nPico is the Vix.cpp runtime validation app.\n\nIt proves that a native C++ backend can be structured, observed, and exercised through Vix.cpp while remaining explicit and understandable.\n\nIt validates the runtime in a real application shape:\n\n```txt\nC++ source\n  -\u003e Vix.cpp runtime\n  -\u003e HTTP app\n  -\u003e middleware\n  -\u003e services\n  -\u003e KV + SQLite\n  -\u003e ThreadPool\n  -\u003e WebSocket\n  -\u003e runtime dashboard\n  -\u003e Rix CSV export\n  -\u003e Rix Auth diagnostics\n  -\u003e Rix PDF generation\n```\n\nPico should stay focused: small enough to understand, real enough to catch integration problems.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvixcpp%2Fpico","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvixcpp%2Fpico","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvixcpp%2Fpico/lists"}