{"id":13394167,"url":"https://github.com/theodi/comma-chameleon","last_synced_at":"2026-02-01T03:11:27.543Z","repository":{"id":36179004,"uuid":"40483136","full_name":"theodi/comma-chameleon","owner":"theodi","description":"A desktop CSV editor for data publishers","archived":false,"fork":false,"pushed_at":"2023-07-21T15:38:50.000Z","size":5636,"stargazers_count":280,"open_issues_count":48,"forks_count":27,"subscribers_count":18,"default_branch":"master","last_synced_at":"2024-12-06T20:46:00.549Z","etag":null,"topics":["csv","csvlint","data-publication","desktop-csv-editor","electron","nodejs"],"latest_commit_sha":null,"homepage":"https://comma-chameleon.io/","language":"JavaScript","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/theodi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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":"2015-08-10T13:10:56.000Z","updated_at":"2024-11-14T04:53:32.000Z","dependencies_parsed_at":"2024-10-25T10:16:52.464Z","dependency_job_id":"0c7dee7c-3903-4f22-b289-0c464a01d8f9","html_url":"https://github.com/theodi/comma-chameleon","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodi%2Fcomma-chameleon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodi%2Fcomma-chameleon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodi%2Fcomma-chameleon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theodi%2Fcomma-chameleon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/theodi","download_url":"https://codeload.github.com/theodi/comma-chameleon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243478051,"owners_count":20297184,"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":["csv","csvlint","data-publication","desktop-csv-editor","electron","nodejs"],"created_at":"2024-07-30T17:01:11.205Z","updated_at":"2026-02-01T03:11:27.517Z","avatar_url":"https://github.com/theodi.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","electron","Apps"],"sub_categories":["Open Source"],"readme":"[![Stories in Ready](https://badge.waffle.io/theodi/edward-csvhands.svg?label=ready\u0026title=Ready)](http://waffle.io/theodi/edward-csvhands)\n[![Build Status](https://travis-ci.org/theodi/comma-chameleon.svg?branch=master)](https://travis-ci.org/theodi/comma-chameleon)\n[![Dependency Status](https://dependencyci.com/github/theodi/comma-chameleon/badge)](https://dependencyci.com/github/theodi/comma-chameleon)\n\n# Comma Chameleon\n\n[Comma Chameleon](https://comma-chameleon.io/) is a desktop CSV editor (built with [Electron.js](electron.atom.io)) that provides a simple interface for editing data. \n\nDeveloped by the ODI as a proof of concept, it has now been replaced by [Data Curator](https://theodi.org.au/data-curator/) ([GitHub](https://github.com/ODIQueensland/data-curator)).\n\n## Summary of features\n\nValidate your CSV on the fly using [CSVlint](http://csvlint.io/), so you can be sure your data is reuse-ready before you publish it  \nComma Chameleon lets you export your data as a [Data Package](http://data.okfn.org/doc/data-package), ready for publication and reuse  \nIntegrate with [Octopub](https://octopub.io/) and publish your data to Github  \n\n## Download and Install App\n\nChoose a platform from the [Releases page](https://github.com/theodi/comma-chameleon/releases/latest).\n\nDrag the application to your applications folder. If you encounter a warning message informing you the application cannot be opened due to emanating from an unknown developer try the following. This occurs due to Mac OS quarantining applications where it cannot determine the certificate used to sign the application.  \nSteps:\n\nRight click the app, then option+click on Open.\n\n### Development\n\n#### Requirements\n\n[`node` and `npm`](https://nodejs.org/en/download/)\n\nYou can use npm to install all relevant packages and development dependencies using the following set of commands.  Node and Bower install the dependencies contained in `package.json` and `bower.json` respectively\n\n```\nnpm install -g bower electron\nnpm install\nbower install\n```\n\n#### External (non-JS) dependencies\n\nComma Chameleon relies on [CSVlint.sh](https://github.com/theodi/csvlint.sh) to carry out CSV validation. This is not included in the repo, and is downloaded and installed by the [build.js](https://github.com/theodi/comma-chameleon/blob/master/scripts/build.js) script. As with the page build script, this script is also run when the app is started with the `npm start` command.\n\n#### Development: Running the full application locally\n\nTo open the app run:\n\n```\nnpm start\n```\n\nThis will download the non-JS dependencies (namely [CSVlint.sh](https://github.com/theodi/csvlint.sh)), build the [handlebars](http://handlebarsjs.com/) views (from `comma-chameleon/views-content`) and start the app.\n\n\n#### Application Architecture\n\nComma Chameleon is built using [Electron.js](electron.atom.io), a framework that allows developers to build desktop applications using web technology.\n\nThere are two parts of the application, the main process and the renderer process. The main process deals with things like carrying out file operations, validating CSVs, rendering views, and exporting to Github. The renderer acts very much like client side JS in a web browser, dealing with things like presentation, and user interactions.\n\n##### IPC messaging\n\nElectron passes and listens for messages between main and renderer using the IPC module, one for the [main process](https://github.com/electron/electron/blob/master/docs/api/ipc-main.md) and one for the [renderer process](https://github.com/electron/electron/blob/master/docs/api/ipc-renderer.md).\n\nFor example, when importing an Excel file, the main process [reads the Excel file](https://github.com/theodi/comma-chameleon/blob/master/main/excel.js#L7) and [opens a new window in the renderer process](https://github.com/theodi/comma-chameleon/blob/master/main/excel.js#L12). Once the window has opened, the main process [sends the worksheet names to the renderer process](https://github.com/theodi/comma-chameleon/blob/master/main/excel.js#L14), which are then [displayed to the user](https://github.com/theodi/comma-chameleon/blob/master/views/views-content/select_worksheet.html#L18). Once a user selects a worksheet, the renderer process [sends a message back to the main process](https://github.com/theodi/comma-chameleon/blob/master/views/views-content/select_worksheet.html#L27), and the main process [converts the relevant worksheet to CSV and loads it into a new window](https://github.com/theodi/comma-chameleon/blob/master/main/excel.js#L17).\n\n##### Views\n\nTo keep things [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself), the HTML views are written using [Handlebars](http://handlebarsjs.com/), see the [`views-content`](https://github.com/theodi/comma-chameleon/blob/master/views/views-content) folder. The views are then built using the [page-build.js](https://github.com/theodi/comma-chameleon/blob/master/scripts/page-build.js) script, which also gets run when the app is started with the `npm start` command.\n\n### Tests\n\n[Electron-Mocha](https://github.com/jprichardson/electron-mocha) has been adopted for testing, it enables both DOM and node.js testing and provides command line options to enable testing of both.\n\nAssuming you have installed `electron-mocha` globally (via `npm i electron-mocha -g`), you can run the tests like this:\n\n```\nnpm test\n```\n\nOr to run the main and renderer tests separately, you can run:\n\n```\nnpm run test-main  # run tests for the runtime components provided by Electron\nnpm run test-renderer # run tests that execute client side\n```\n\nOtherwise you can run:\n\n```\nelectron-mocha test/main/\nelectron-mocha --renderer test/renderer/ # run tests that execute client side\n```\n\n### Deployment: Packaging\n\n#### Building a new package\n\n(This assumes you're running OSX)\n\n[Install gulp](https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md)\n```\nbrew install wine # This allows us to specify the icon for Windows pacakges\nnpm i electron-packager -g\ngulp build\n```\n\nYou can also build a package for a specific platform by running `gulp build --platform={one of 'linux', 'darwin' or 'win32'}`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheodi%2Fcomma-chameleon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheodi%2Fcomma-chameleon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheodi%2Fcomma-chameleon/lists"}