{
  "_id": "6ae6bc332e87f76f20acc242",
  "Package": "sideview",
  "Title": "Explore and Join Many Tables on a Zoomable Canvas",
  "Version": "0.4.0",
  "Authors@R": "c(\nperson(\"Yee How\", \"Lau\", email = \"lauyeehow1986@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"))\n)",
  "Description": "Lays out many data frames side by side as cards on a\npan-and-zoom canvas, either as a 'shiny' gadget for 'RStudio'\nor as an 'htmlwidgets' widget for 'R Markdown' and 'Quarto'\npages. Drawing a line between two columns writes the 'dplyr'\njoin and checks it first: match rates, unmatched keys and the\nkey relationship. Sorts, filters and other steps build up a\nreadable pipeline of R code, and a column inspector exports a\ndata dictionary. An optional large language model (LLM)\nassistant, using 'Ollama' or an 'OpenAI'-compatible service,\nsuggests 'tidyverse' code from the table schema only, never the\ndata rows.",
  "URL": "https://lauyeehow1986-hub.github.io/sideview/,\nhttps://github.com/lauyeehow1986-hub/sideview",
  "BugReports": "https://github.com/lauyeehow1986-hub/sideview/issues",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.3",
  "Config/testthat/edition": "3",
  "Config/pak/sysreqs": "cmake make libuv1-dev libssl-dev zlib1g-dev",
  "Repository": "https://lauyeehow1986-hub.r-universe.dev",
  "Date/Publication": "2026-11-01 03:24:54 UTC",
  "RemoteUrl": "https://github.com/lauyeehow1986-hub/sideview",
  "RemoteRef": "main",
  "RemoteSha": "68869b2c4a209fb2b369937b402b9ffa30424501",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-11-01 03:30:51 UTC",
    "User": "root"
  },
  "Author": "Yee How Lau [aut, cre, cph]",
  "Maintainer": "Yee How Lau <lauyeehow1986@gmail.com>",
  "_user": "lauyeehow1986-hub",
  "_type": "src",
  "_file": "sideview_0.4.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/fe391e1ad37f32d30b93896cea83fadc75f3b34161c5ff5a3be0822f7a63bbd0",
  "_filesize": 802754,
  "_sha256": "fe391e1ad37f32d30b93896cea83fadc75f3b34161c5ff5a3be0822f7a63bbd0",
  "_expires": "2027-02-09T04:12:33.000Z",
  "_created": "2026-11-01T03:30:51.000Z",
  "_published": "2026-11-01T04:12:35.301Z",
  "_upstream": "https://github.com/lauyeehow1986-hub/sideview",
  "_status": "success",
  "_maintainer": {
    "name": "Yee How Lau",
    "email": "lauyeehow1986@gmail.com",
    "login": "lauyeehow1986-hub",
    "description": "",
    "uuid": 249935955
  },
  "_jobs": [
    {
      "job": 124739179538,
      "time": 759,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13068887892"
    },
    {
      "job": 124739179590,
      "time": 766,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "13068683654"
    },
    {
      "job": 124739179673,
      "time": 2446,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "13069891846"
    },
    {
      "job": 124739179523,
      "time": 466,
      "config": "macos-release-arm64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13068627933"
    },
    {
      "job": 124738506542,
      "time": 199,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "13068374713"
    },
    {
      "job": 124739179567,
      "time": 128,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "13069075578"
    },
    {
      "job": 124739179533,
      "time": 790,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13068733351"
    },
    {
      "job": 124739179573,
      "time": 516,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "13069081409"
    },
    {
      "job": 124739179534,
      "time": 790,
      "config": "windows-release-x86_64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13069240687"
    }
  ],
  "_buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402",
  "_commit": {
    "id": "68869b2c4a209fb2b369937b402b9ffa30424501",
    "author": "lauyeehow1986-hub <lauyeehow1986@gmail.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "Merge pull request #5 from lauyeehow1986-hub/docs/memory-0.4.0-release\n\ndocs(memory): record v0.4.0 tag, release and r-universe status",
    "time": 1793503494
  },
  "_distro": "resolute",
  "_host": "GitHub-Actions",
  "_registered": true,
  "_dependencies": [
    {
      "package": "shiny",
      "role": "Imports"
    },
    {
      "package": "htmltools",
      "role": "Imports"
    },
    {
      "package": "htmlwidgets",
      "role": "Imports"
    },
    {
      "package": "dplyr",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "httr2",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "later",
      "role": "Imports"
    },
    {
      "package": "rstudioapi",
      "role": "Imports"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "shinytest2",
      "role": "Suggests"
    },
    {
      "package": "arrow",
      "role": "Suggests"
    },
    {
      "package": "duckdb",
      "role": "Suggests"
    },
    {
      "package": "DBI",
      "role": "Suggests"
    },
    {
      "package": "gt",
      "role": "Suggests"
    },
    {
      "package": "flextable",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "writexl",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "bslib",
      "role": "Suggests"
    },
    {
      "package": "dbplyr",
      "role": "Suggests"
    },
    {
      "package": "stringr",
      "role": "Suggests"
    },
    {
      "package": "callr",
      "role": "Suggests"
    },
    {
      "package": "chromote",
      "role": "Suggests"
    },
    {
      "package": "httpuv",
      "role": "Suggests"
    },
    {
      "package": "pkgload",
      "role": "Suggests"
    },
    {
      "package": "lubridate",
      "role": "Suggests"
    }
  ],
  "_owner": "lauyeehow1986-hub",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-43",
      "n": 129
    },
    {
      "week": "2026-44",
      "n": 27
    }
  ],
  "_tags": [
    {
      "name": "v0.4.0",
      "date": "2026-11-01"
    }
  ],
  "_stars": 0,
  "_contributors": [
    {
      "user": "lauyeehow1986-hub",
      "count": 4,
      "uuid": 249935955
    }
  ],
  "_userbio": {
    "uuid": 249935955,
    "type": "user",
    "name": "lauyeehow1986-hub",
    "followers": 2
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/sideview"
  },
  "_devurl": "https://github.com/lauyeehow1986-hub/sideview",
  "_pkgdown": "https://lauyeehow1986-hub.github.io/sideview/",
  "_searchresults": 0,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/sideview.html",
    "LICENSE"
  ],
  "_cranurl": false,
  "_exports": [
    "new_sideview_state",
    "renderSideview",
    "save_sideview",
    "sideview",
    "sideview_addin",
    "sideview_server",
    "sideview_ui",
    "sideview_widget",
    "sideviewOutput",
    "sideviewProxy",
    "sideviewServer",
    "sideviewUI",
    "sv_add_card",
    "sv_auto_clean_rules",
    "sv_build_chat_prompt",
    "sv_build_prompt",
    "sv_build_schema_context",
    "sv_call_llm",
    "sv_code_arrange",
    "sv_code_auto_clean",
    "sv_code_filter",
    "sv_code_group_summarize",
    "sv_code_join",
    "sv_code_mutate",
    "sv_code_pivot_longer",
    "sv_code_pivot_wider",
    "sv_code_recode",
    "sv_code_rename",
    "sv_code_select",
    "sv_codebook",
    "sv_column_profile",
    "sv_detect_discrepancies",
    "sv_escape_ident",
    "sv_extract_code",
    "sv_find_tables",
    "sv_highlight",
    "sv_insert_code",
    "sv_is_rstudio_available",
    "sv_join_diagnostics",
    "sv_llm_models",
    "sv_load_state",
    "sv_normalize",
    "sv_remove_card",
    "sv_replace_card",
    "sv_save_state",
    "sv_send_to_console",
    "sv_set_state",
    "sv_suggest_mappings",
    "sv_theme"
  ],
  "_help": [
    {
      "page": "new_sideview_state",
      "title": "Create a New Sideview Canvas State Object",
      "topics": [
        "new_sideview_state"
      ]
    },
    {
      "page": "print.sideview_state",
      "title": "Print Method for Sideview State Objects",
      "topics": [
        "print.sideview_state"
      ]
    },
    {
      "page": "renderSideview",
      "title": "Shiny Render Function for Sideview Widget",
      "topics": [
        "renderSideview"
      ]
    },
    {
      "page": "save_sideview",
      "title": "Save Sideview Widget to a Standalone HTML File",
      "topics": [
        "save_sideview"
      ]
    },
    {
      "page": "sideview",
      "title": "Multi-Table 2D Infinite Canvas Interactive Gadget",
      "topics": [
        "sideview"
      ]
    },
    {
      "page": "sideview_addin",
      "title": "RStudio Addin for Sideview",
      "topics": [
        "sideview_addin"
      ]
    },
    {
      "page": "sideview_server",
      "title": "Sideview Server Logic",
      "topics": [
        "sideview_server"
      ]
    },
    {
      "page": "sideview_ui",
      "title": "Sideview User Interface",
      "topics": [
        "sideview_ui"
      ]
    },
    {
      "page": "sideview_widget",
      "title": "Create a Standalone Sideview HTMLWidget",
      "topics": [
        "sideview_widget"
      ]
    },
    {
      "page": "sideviewOutput",
      "title": "Shiny Output Container for Sideview Widget",
      "topics": [
        "sideviewOutput"
      ]
    },
    {
      "page": "sideviewProxy",
      "title": "Reach the proxy of a canvas from elsewhere in the session",
      "topics": [
        "sideviewProxy"
      ]
    },
    {
      "page": "sideviewUI",
      "title": "Sideview canvas as a Shiny module",
      "topics": [
        "sideviewServer",
        "sideviewUI"
      ]
    },
    {
      "page": "sv_add_card",
      "title": "Add, replace or remove a card, set the workspace or highlight columns",
      "topics": [
        "sv_add_card",
        "sv_highlight",
        "sv_remove_card",
        "sv_replace_card",
        "sv_set_state"
      ]
    },
    {
      "page": "sv_auto_clean_rules",
      "title": "Generate tidyverse Code for Automatic Discrepancy Cleaning and Crosswalks",
      "topics": [
        "sv_auto_clean_rules",
        "sv_code_auto_clean"
      ]
    },
    {
      "page": "sv_build_chat_prompt",
      "title": "Build Structured Multi-Turn Prompt for Conversational Copilot",
      "topics": [
        "sv_build_chat_prompt"
      ]
    },
    {
      "page": "sv_build_prompt",
      "title": "Build Structured Prompt for Tidyverse LLM Code Generation",
      "topics": [
        "sv_build_prompt"
      ]
    },
    {
      "page": "sv_build_schema_context",
      "title": "Build a Privacy-Safe Schema Context from Sideview Cards",
      "topics": [
        "sv_build_schema_context"
      ]
    },
    {
      "page": "sv_call_llm",
      "title": "Call Local Ollama or OpenAI-Compatible LLM Endpoint",
      "topics": [
        "sv_call_llm"
      ]
    },
    {
      "page": "sv_code_arrange",
      "title": "Generate tidyverse Code for Arranging (Sorting) Rows",
      "topics": [
        "sv_code_arrange"
      ]
    },
    {
      "page": "sv_code_filter",
      "title": "Generate tidyverse Code for Filtering Rows",
      "topics": [
        "sv_code_filter"
      ]
    },
    {
      "page": "sv_code_group_summarize",
      "title": "Generate tidyverse Code for Grouping and Aggregating Data",
      "topics": [
        "sv_code_group_summarize"
      ]
    },
    {
      "page": "sv_code_join",
      "title": "Generate tidyverse Code for Relational Table Joins",
      "topics": [
        "sv_code_join"
      ]
    },
    {
      "page": "sv_code_mutate",
      "title": "Generate tidyverse Code for Column Mutation",
      "topics": [
        "sv_code_mutate"
      ]
    },
    {
      "page": "sv_code_pivot_longer",
      "title": "Generate tidyverse Code for Reshaping Data from Wide to Long",
      "topics": [
        "sv_code_pivot_longer"
      ]
    },
    {
      "page": "sv_code_pivot_wider",
      "title": "Generate tidyverse Code for Reshaping Data from Long to Wide",
      "topics": [
        "sv_code_pivot_wider"
      ]
    },
    {
      "page": "sv_code_recode",
      "title": "Generate tidyverse Code for Categorical Recoding and Discrepancy Crosswalks",
      "topics": [
        "sv_code_recode"
      ]
    },
    {
      "page": "sv_code_rename",
      "title": "Generate tidyverse Code for Column Renaming",
      "topics": [
        "sv_code_rename"
      ]
    },
    {
      "page": "sv_code_select",
      "title": "Generate tidyverse Code for Selecting Columns",
      "topics": [
        "sv_code_select"
      ]
    },
    {
      "page": "sv_codebook",
      "title": "Codebook (Data Dictionary)",
      "topics": [
        "sv_codebook"
      ]
    },
    {
      "page": "sv_column_profile",
      "title": "Column Profile",
      "topics": [
        "sv_column_profile"
      ]
    },
    {
      "page": "sv_detect_discrepancies",
      "title": "Detect Exact Matches, Discrepancies, and Fuzzy Near-Matches",
      "topics": [
        "sv_detect_discrepancies"
      ]
    },
    {
      "page": "sv_escape_ident",
      "title": "Escape R Identifiers with Backticks If Non-Syntactic",
      "topics": [
        "sv_escape_ident"
      ]
    },
    {
      "page": "sv_extract_code",
      "title": "Extract Executable R Code from LLM Response Text",
      "topics": [
        "sv_extract_code"
      ]
    },
    {
      "page": "sv_find_tables",
      "title": "Find Tabular Data Objects in an Environment",
      "topics": [
        "sv_find_tables"
      ]
    },
    {
      "page": "sv_insert_code",
      "title": "Insert Generated Code into the Active RStudio Editor",
      "topics": [
        "sv_insert_code"
      ]
    },
    {
      "page": "sv_is_rstudio_available",
      "title": "Check if RStudio API is Available",
      "topics": [
        "sv_is_rstudio_available"
      ]
    },
    {
      "page": "sv_join_diagnostics",
      "title": "Join Diagnostics",
      "topics": [
        "sv_join_diagnostics"
      ]
    },
    {
      "page": "sv_llm_models",
      "title": "List the models available from an LLM backend",
      "topics": [
        "sv_llm_models"
      ]
    },
    {
      "page": "sv_load_state",
      "title": "Load Canvas State from File",
      "topics": [
        "sv_load_state"
      ]
    },
    {
      "page": "sv_normalize",
      "title": "Universal Normalization Engine for Sideview Cards",
      "topics": [
        "sv_normalize"
      ]
    },
    {
      "page": "sv_save_state",
      "title": "Save Canvas State to File",
      "topics": [
        "sv_save_state"
      ]
    },
    {
      "page": "sv_send_to_console",
      "title": "Send Generated Code to the RStudio Console",
      "topics": [
        "sv_send_to_console"
      ]
    },
    {
      "page": "sv_suggest_mappings",
      "title": "Suggest Foreign Key Mappings Across Canvas Cards",
      "topics": [
        "sv_suggest_mappings"
      ]
    },
    {
      "page": "sv_theme",
      "title": "Canvas Theme",
      "topics": [
        "sv_theme"
      ]
    }
  ],
  "_pkglogo": "https://github.com/lauyeehow1986-hub/sideview/raw/main/man/figures/logo.png",
  "_readme": "https://github.com/lauyeehow1986-hub/sideview/raw/main/README.md",
  "_rundeps": [
    "askpass",
    "base64enc",
    "bslib",
    "cachem",
    "cli",
    "commonmark",
    "curl",
    "digest",
    "dplyr",
    "evaluate",
    "fastmap",
    "fontawesome",
    "fs",
    "generics",
    "glue",
    "highr",
    "htmltools",
    "htmlwidgets",
    "httpuv",
    "httr2",
    "jquerylib",
    "jsonlite",
    "knitr",
    "later",
    "lifecycle",
    "magrittr",
    "memoise",
    "mime",
    "openssl",
    "otel",
    "pillar",
    "pkgconfig",
    "promises",
    "R6",
    "rappdirs",
    "Rcpp",
    "rlang",
    "rmarkdown",
    "rstudioapi",
    "sass",
    "shiny",
    "sourcetools",
    "sys",
    "tibble",
    "tidyselect",
    "tinytex",
    "utf8",
    "vctrs",
    "withr",
    "xfun",
    "xtable",
    "yaml"
  ],
  "_score": 2,
  "_indexed": true,
  "_nocasepkg": "sideview",
  "_universes": [
    "lauyeehow1986-hub"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.4.0",
      "date": "2026-11-01T03:33:18.000Z",
      "distro": "resolute",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/f4a653d78c05bfb91bc42424ce496d98bde5a9f0ef19e313adf2b0a9d25988da",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.4.0",
      "date": "2026-11-01T03:33:17.000Z",
      "distro": "resolute",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/cee0e987ea3b86279cb91fc6863a1a2c2595ba9149ac30c8ae2e7c0cdff2e22f",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.4.0",
      "date": "2026-11-01T04:05:18.000Z",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/29f034738ba54ba78a8c87ae53d8d746f717e3a2a48dfd774ca56fcb9cd5484d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    },
    {
      "r": "4.6.2",
      "os": "mac",
      "version": "0.4.0",
      "date": "2026-11-01T03:32:34.000Z",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/eeca48c52423f0160aaa433a8bcd29172ff3610c176823468458bdb9991fe41c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.4.0",
      "date": "2026-11-01T03:33:19.000Z",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/811df638b080bfd4aeee4e7fc817a156899cca46f00b9e3a18c561055771b43d",
      "status": "success",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.4.0",
      "date": "2026-11-01T03:32:16.000Z",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/8aeafadf7d91ace913b79a347055adcd9b1acc3613891e1c06ad58c1ddc1f903",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.4.0",
      "date": "2026-11-01T03:32:00.000Z",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/1db9f9a1823df6d19950e73591d6c63e2aff140c91bdbd6e6a0bdfa150ea1534",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    },
    {
      "r": "4.6.2",
      "os": "win",
      "version": "0.4.0",
      "date": "2026-11-01T03:32:15.000Z",
      "commit": "68869b2c4a209fb2b369937b402b9ffa30424501",
      "fileid": "https://r2.ropensci.org/430ed0d4be28bd7b80e18b1566ea02d20a875273260dcad61860bf392f1fe118",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/lauyeehow1986-hub/actions/runs/41269257402"
    }
  ]
}