{"id":18355387,"url":"https://github.com/charto/charto","last_synced_at":"2025-04-10T01:37:21.718Z","repository":{"id":57196437,"uuid":"110137398","full_name":"charto/charto","owner":"charto","description":"Charto monorepo","archived":false,"fork":false,"pushed_at":"2018-10-30T11:41:38.000Z","size":209,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-03T11:12:49.885Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/charto.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}},"created_at":"2017-11-09T16:11:23.000Z","updated_at":"2018-04-03T16:55:28.000Z","dependencies_parsed_at":"2022-09-16T12:22:33.342Z","dependency_job_id":null,"html_url":"https://github.com/charto/charto","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charto%2Fcharto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charto%2Fcharto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charto%2Fcharto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charto%2Fcharto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/charto","download_url":"https://codeload.github.com/charto/charto/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247595327,"owners_count":20963943,"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":[],"created_at":"2024-11-05T22:06:44.373Z","updated_at":"2025-04-10T01:37:21.689Z","avatar_url":"https://github.com/charto.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Charto\n======\n\n[![build status](https://travis-ci.org/charto/charto.svg?branch=master)](http://travis-ci.org/charto/charto)\n\nThis is an online JavaScript-based GIS platform under heavy development, with these goals:\n\n\u003cdetails\u003e\u003csummary\u003eSmall, efficient and MIT-licensed.\u003c/summary\u003e\n\n  - No bloat. Keep entire `dependencies` hierarchy minimal.\n  - Same applies to `devDependencies`.\n  - Use suitable caching, compression, data structures and algorithms.\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eEasy to use.\u003c/summary\u003e\n\n  - Targeting users who could handle desktop GIS software.\n  - Convention over configuration. Allow, but don't require changing settings.\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eNo need to install, register or login.\u003c/summary\u003e\n\n  - Back-end is optional, anything serving static files over HTTP is enough.\n  - Compute everything client-side when possible.\n  - Support local file import and export.\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eEasy to extend or use parts in other projects.\u003c/summary\u003e\n\n  - Aggressively split everything into general-purpose NPM packages.\n  - Simplest possible monorepo structure allows heavy overall customization for specific projects.\n  - Keep all parts small and documented.\n  - Tooling choice criteria:\n    1. Compatibility with other goals and tooling.\n    2. Size and efficiency. Is the tool actually needed?\n    3. Developer ease of use.\n    4. Popularity.\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eLatest and greatest technologies (as of Q1 2018).\u003c/summary\u003e\n\n  - ES6 syntax, statically typed using TypeScript.\n  - [mobx-state-tree](https://github.com/mobxjs/mobx-state-tree) and [classy-mst](https://github.com/charto/classy-mst) for easy state management without boilerplate.\n  - Leaflet maps with vector tiles and WebGL rendering.\n  - [PhosphorJS](https://github.com/phosphorjs/phosphor) and [phosphor-float-area](https://github.com/charto/phosphor-float-area) for easy UI customization by end users.\n  - [SystemJS](https://github.com/systemjs/systemjs) and [cbuild](https://github.com/charto/cbuild) for ES6 imports and bundling without backend requirements.\n  - [dgrid](http://dgrid.io/) for one tree grid widget with all the bells and whistles, because there's still no suitably licensed alternative.\n  - React for easy custom UI components.\u003c/details\u003e\n\nClick on the goals to see what they mean in practice.\n\nThis is a single repository containing several Charto packages. It follows the [alle](https://github.com/boennemann/alle)\nmodel, with packages under `packages/node_modules`.\nMost `devDependencies` are only in the top-level `package.json`.\n\nContents:\n\n| Package | NPM | Description |\n----------|-----|--------------\n[cgeo](packages/node_modules/cgeo) | [![npm version](https://img.shields.io/npm/v/cgeo.svg)](https://www.npmjs.com/package/cgeo) | Geographic data types\n[cgeo-calc](packages/node_modules/cgeo-calc) | [![npm version](https://img.shields.io/npm/v/cgeo-calc.svg)](https://www.npmjs.com/package/cgeo-calc) | computational geometry algorithms for cgeo types\n[cgeo-cpak](packages/node_modules/cgeo-cpak) | [![npm version](https://img.shields.io/npm/v/cgeo-cpak.svg)](https://www.npmjs.com/package/cgeo-cpak) | cpak import/export for cgeo types\n[cgeo-wkb](packages/node_modules/cgeo-wkb) | [![npm version](https://img.shields.io/npm/v/cgeo-wkb.svg)](https://www.npmjs.com/package/cgeo-wkb) | WKB import/export for cgeo types\n[cgeo-wkt](packages/node_modules/cgeo-wkt) | [![npm version](https://img.shields.io/npm/v/cgeo-wkt.svg)](https://www.npmjs.com/package/cgeo-wkt) | WKT export for cgeo types\n[charto-3d](packages/node_modules/charto-3d) | [![npm version](https://img.shields.io/npm/v/charto-3d.svg)](https://www.npmjs.com/package/charto-3d) | Small WebGL helper library\n[charto-leaflet](packages/node_modules/charto-leaflet) | [![npm version](https://img.shields.io/npm/v/charto-leaflet.svg)](https://www.npmjs.com/package/charto-leaflet) | Useful classes for Leaflet\n[charto-model](packages/node_modules/charto-model) | [![npm version](https://img.shields.io/npm/v/charto-model.svg)](https://www.npmjs.com/package/charto-model) | Geodata model using mobx-state-tree\n[charto-render](packages/node_modules/charto-render) | [![npm version](https://img.shields.io/npm/v/charto-render.svg)](https://www.npmjs.com/package/charto-render) | Geodata renderer\n[geotree](packages/node_modules/geotree) | [![npm version](https://img.shields.io/npm/v/geotree.svg)](https://www.npmjs.com/package/geotree) | Geodata storage\n[mst-dstore](packages/node_modules/mst-dstore) | [![npm version](https://img.shields.io/npm/v/mst-dstore.svg)](https://www.npmjs.com/package/mst-dstore) | dstore implementation backed by mobx-state-tree\n[phosphor-dgrid](packages/node_modules/phosphor-dgrid) | [![npm version](https://img.shields.io/npm/v/phosphor-dgrid.svg)](https://www.npmjs.com/package/phosphor-dgrid) | Full-featured Dojo-based grid widget for PhosphorJS\n[phosphor-leaflet](packages/node_modules/phosphor-leaflet) | [![npm version](https://img.shields.io/npm/v/phosphor-leaflet.svg)](https://www.npmjs.com/package/phosphor-leaflet) | Leaflet widget for PhosphorJS\n\nGetting started\n---------------\n\n```bash\ngit clone https://github.com/charto/charto.git\ncd charto\nnpm install\nnpm run build\nnpm start\n```\n\nThen navigate to: [http://localhost:8080/](http://localhost:8080/)\n\nThe frontend uses [SystemJS](https://github.com/systemjs/systemjs).\nIt works directly from the public directory of any HTTP server.\nWith an IDE that supports `compileOnSave`\n(eg. [`atom-typescript`](https://atom.io/packages/atom-typescript) or\n[TypeScript for VS Code](https://github.com/mrcrowl/vscode/releases/tag/13.10.8))\nthe frontend page always stays up to date while editing TypeScript source code.\n\nContributing\n------------\n\n### Adding new files\n\nSource code file extensions should always be `.ts` or `.tsx` or the compiler\nmay ignore the code, breaking references to it from elsewhere.\n\nFiles containing classes or types intended as part of the public API, should\nbe referenced in the package's `index.ts` like this:\n\n```TypeScript\nexport { MyClass } from './MyClass';\n```\n\nThe corresponding file may be named `MyClass.ts` or `MyClass.tsx`.\n\n### Adding new external NPM packages\n\nAccording to [alle](https://github.com/boennemann/alle#define-dependencies-globally),\npackages are installed in the repository top-level `node_modules` directory.\n\nSince the project uses TypeScript, usually you also want to install typings. For example:\n\n```bash\nnpm install --save react-leaflet\nnpm install --save @types/react-leaflet\n```\n\nNext, you should use the package. Easiest way is to add somewhere:\n\n```TypeScript\nexport * from 'react-leaflet';\n```\n\nExporting the package contents causes it to be used in transpiled JSON.\nIf you use a TypeScript IDE, saving the file will already have transpiled it.\nOtherwise re-build the frontend from the command line:\n\n```bash\nnpm run build:frontend\n```\n\nNow, `config-npm.js` needs updating so SystemJS can find files in the new\npackage. Creating a production bundle updates it automatically. Run the commands:\n\n```bash\ncd bundler\nnpm install\ncd ..\nnpm run bundle\n```\n\nNow that the bundler is installed, next time the first 3 commands\n(`cd` and `npm install`) are not needed.\n\nIt's important that the new package is somehow used in the code, or the bundler\nwill still ignore it and not update the necessary config paths.\n\nThis also bundles the software for production, meaning that reloading the page\nin a browser will load the bundle instead of any more recent changes.\nTo fix that, delete or rename `dist/bundle.js`.\n\nLicense\n=======\n\n[The MIT License](https://raw.githubusercontent.com/charto/charto/master/LICENSE)\n\nCopyright (c) 2017-2018 BusFaster Ltd\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharto%2Fcharto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcharto%2Fcharto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharto%2Fcharto/lists"}