{"id":25667248,"url":"https://github.com/nostackapp/no-stack-cli","last_synced_at":"2025-10-17T02:40:14.200Z","repository":{"id":98916539,"uuid":"209719316","full_name":"NoStackApp/no-stack-cli","owner":"NoStackApp","description":"cli for creating no-stack apps","archived":false,"fork":false,"pushed_at":"2019-09-20T07:59:25.000Z","size":142,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-24T09:33:56.962Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.nostack.net","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/NoStackApp.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}},"created_at":"2019-09-20T06:19:40.000Z","updated_at":"2019-09-20T10:31:53.000Z","dependencies_parsed_at":"2023-03-10T09:45:19.849Z","dependency_job_id":null,"html_url":"https://github.com/NoStackApp/no-stack-cli","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NoStackApp/no-stack-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoStackApp%2Fno-stack-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoStackApp%2Fno-stack-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoStackApp%2Fno-stack-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoStackApp%2Fno-stack-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NoStackApp","download_url":"https://codeload.github.com/NoStackApp/no-stack-cli/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoStackApp%2Fno-stack-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270781393,"owners_count":24643820,"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","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"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":"2025-02-24T09:28:28.889Z","updated_at":"2025-10-17T02:40:09.137Z","avatar_url":"https://github.com/NoStackApp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"@nostack/no-stack-cli\n============\n\nTools for stack generation from templates and an api.\n\n## Getting Started\nIf you are ever confused about the commands, run `nostack --help`. \nIf you want to know the parameters for any command, just run the command with '--help'.\nBut relax--if you are missing one you will be told.  :) \n\nThe four standard steps for creating an app are the following:\n1. create a no-stack-app `nostack newapp -a \u003cappName\u003e`\n2. create a new moderator and stack `nostack quickstarter -e \u003cmoderatorEmail\u003e -w \u003cpassword\u003e -l \u003clicenceId\u003e  -u \u003cmoderatorName\u003e -s \u003cstackName\u003e`\n3. spin up stack (call from the same directory as step 1): `nostack spinstack -u \u003cmoderatorName\u003e -t dir/to/template/\u003ctemplateFile\u003e -s \u003cstackName\u003e -e \u003cemailFor Moderator\u003e`\n4. generate code (call from the same directory as step 1): `nostack makecode -a \u003cappName\u003e`\n\nThere is also a recommended shortcut command to get started:\n`nostack quickStarter -e ${email} -w ${password} -l ${license}  -u ${moderator} -s ${stackName} -a${appName} -t ${appTemplate}`\n\nThat will give you everything you need for your first app.  Note that\nyou will need to provide a license and a template.  You can apply for a license at www.nostack.net. Documentation for\ncreating templates is in the pipeline right now.\n\nThe test directory contains a few sample templates in /test/testData/.\n\n## NoStack Concepts\nIt is useful to understand two things:\n1. NoStack stores types of data and their instances.  Instances contain an\n  autogenerated id and a value.  For instance, you might have in your application a type\n`restaurant` and it may have 300 instances, each of which has a name and\nan autogenerated id.\n2. types are declared and used in \"sources\".  A source is fundamentally\na hierarchy of types.  For instance, a source might contain at its\nroot restaurant, with cuisine and rating as children.\n\nAlso, every source is assigned to a given user class, and a generated\nserver has auth built in.\n\nMore details are given in the \"Creating Templates\" section below.\n\n## Creating Templates\n\nThe templates are text files which contain series of declarations\n using the NoStack Flow Specification language (NFS).  \n\nAn template file treats each line as a different declaration.\nAny line that does not begin with a reserved command word is ignored.\n\n### NFS Commands\nThe commands are expected to change soon, but currently these are available:\n* newUserClass \\\u003cclass\\\u003e\n* newSource  \\\u003csource\\\u003e \\\u003cclass\\\u003e\n* newType \\\u003ctype\\\u003e \\\u003csource\\\u003e \\\u003cparent\\\u003e \\[\\\u003cdata type\u003e ] \\[\\\u003cassociation type\u003e] \n* newSelection \\\u003csource\u003e \\\u003cselected type\u003e\n* newConstraint \\\u003cconstraint value\u003e \\\u003csource\u003e \\\u003ctype\u003e ID|Value\n* connectSources \\\u003cchildSource\\\u003e \\\u003cparentSource\\\u003e \\\u003cconnecting type\\\u003e\n\n## Command Explanations\n*newUserClass* A user class is a type of user.  A source is an interface unit that\nis permitted to a user class.  A source contains a hierarchy of\ntypes, starting from some root type.  A source also can include\nactions that can be performed with data.\n\nTypes are loosely data entities and/or properties.  A type\ndeclaration contains the name of the type and a parent type.\n\\[Important note: a user class declaration also results in a \ntype being created for the user class.  In other words, each\nuser is an instance of their class or classes.] By default,\na type is a string.  But optionally a type can be set.  \nCurrently, only booleans and strings are supported, but that\nwill change soon.  \n\nA type declaration can also optionally \ncontain a association type.  Association types can specify whether \na child is required for the parent (always exists) or not,\nand the number of children for a type.  The default is not \nrequired and multiple.  Currently, the only declarable\nassociation type is singleRequired, which is useful for \ndeclaring properties.\n\nA selection means a type in a source that gets returned to \nthe front end.  It is analagous to a field that shows up in \nthe \"SELECT\" clause of an SQL query.\n\nA constraint limits the data returned. A source and the type\n  to be constrained must be specified.  Also, a constraint value\n  is required.  That is normally a variable name which can\n  then be set in front end code.  There are two types of\n  costraints: ID and Value.  Constraining by id returns the\n  instance having the id specified.  Constraining by value\n  will return any instances that satisfy the condition\n  provided.\n  There are a few reserved words for constraints.  The main\n  one is __currentUser__, which is the id for the current user.\n  If you set the constraint value to __currentUser__, then\n  the code generated will set it as such.  Otherwise, it's \n  just a string used for a variable name that gets set in\n  the code. \\[Note: the name that you give for the constraint\n  value for an ID contraint is purely for code readability.]\n  \nTwo sources can be \"connected\", which will affect frontend\ncode generated.  A connecting type must be shared between the\nsources.  Usually, a connecting type will be a constrained\n type for the child source.  When a source A is connected to parent source\nB, a component generated for B will contain A as a subcomponent\nwith an instance for every instance of the connecting type.\n\n\n[![Version](https://img.shields.io/npm/v/no-stack-cli.svg)](https://npmjs.org/package/no-stack-cli)\n[![Downloads/week](https://img.shields.io/npm/dw/no-stack-cli.svg)](https://npmjs.org/package/no-stack-cli)\n[![License](https://img.shields.io/npm/l/no-stack-cli.svg)](https://github.com/YizYah/no-stack-cli/blob/master/package.json)\n\n\u003c!-- toc --\u003e\n* [Usage](#usage)\n* [Commands](#commands)\n\u003c!-- tocstop --\u003e\n# Usage\n\u003c!-- usage --\u003e\n```sh-session\n$ npm install -g @nostack/no-stack-cli\n$ nostack COMMAND\nrunning command...\n$ nostack (-v|--version|version)\n@nostack/no-stack-cli/0.0.0-semantically-released linux-x64 node-v10.16.3\n$ nostack --help [COMMAND]\nUSAGE\n  $ nostack COMMAND\n...\n```\n\u003c!-- usagestop --\u003e\n# Commands\n\u003c!-- commands --\u003e\n* [`nostack callapi`](#nostack-callapi)\n* [`nostack createstack`](#nostack-createstack)\n* [`nostack help [COMMAND]`](#nostack-help-command)\n* [`nostack makecode`](#nostack-makecode)\n* [`nostack newapp`](#nostack-newapp)\n* [`nostack quickstarter`](#nostack-quickstarter)\n* [`nostack spinstack`](#nostack-spinstack)\n\n## `nostack callapi`\n\nMake a call to the nostack api. Takes care of auth for the user. You need to specify a file with the graphql query and another one with a json of the variables, if anyare used.\n\n```\nUSAGE\n  $ nostack callapi\n\nOPTIONS\n  -h, --help                         show CLI help\n  -q, --queryFile=queryFile          graphql file containing a single query\n  -s, --stack=stack                  stack\n  -u, --user=user                    moderator for stack\n  -v, --variablesFile=variablesFile  json file with query variables\n\nEXAMPLE\n  $ nostack callapi -u irnold1y -s TestStack1y -q ~/projects/no-stack-queries/queries/sourceData1y.graphql -v \n  ~/projects/no-stack-queries/variables/sourceData1y.json\n```\n\n_See code: [src/commands/callapi.ts](https://github.com/NoStackApp/no-stack-cli/blob/v0.0.0-semantically-released/src/commands/callapi.ts)_\n\n## `nostack createstack`\n\nCreates a new moderator and stack.  Also logs in the moderator locally.\n\n```\nUSAGE\n  $ nostack createstack\n\nOPTIONS\n  -e, --email=email          moderator email\n  -f, --force\n  -h, --help                 show CLI help\n  -l, --licenseId=licenseId  license id for the organization of the user\n  -s, --stack=stack          stack\n  -u, --user=user            moderator to create\n  -w, --password=password    moderator password\n\nEXAMPLE\n  $ nostack createStack -u franky -s tempstack, -e franky@gmail.com -w franky12$\n```\n\n_See code: [src/commands/createstack.ts](https://github.com/NoStackApp/no-stack-cli/blob/v0.0.0-semantically-released/src/commands/createstack.ts)_\n\n## `nostack help [COMMAND]`\n\ndisplay help for nostack\n\n```\nUSAGE\n  $ nostack help [COMMAND]\n\nARGUMENTS\n  COMMAND  command to show help for\n\nOPTIONS\n  --all  see all commands in CLI\n```\n\n_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v2.2.1/src/commands/help.ts)_\n\n## `nostack makecode`\n\ngenerates a starter app from a json provided by NoStack\n\n```\nUSAGE\n  $ nostack makecode\n\nOPTIONS\n  -a, --appName=appName  application name\n  -f, --force\n  -h, --help             show CLI help\n```\n\n_See code: [src/commands/makecode.ts](https://github.com/NoStackApp/no-stack-cli/blob/v0.0.0-semantically-released/src/commands/makecode.ts)_\n\n## `nostack newapp`\n\ncreate an empty new no-stack app.  Effectively combines create-react-app with apollo stuff and the no stack package.\n\n```\nUSAGE\n  $ nostack newapp\n\nOPTIONS\n  -a, --appName=appName  name of application\n  -h, --help             show CLI help\n```\n\n_See code: [src/commands/newapp.ts](https://github.com/NoStackApp/no-stack-cli/blob/v0.0.0-semantically-released/src/commands/newapp.ts)_\n\n## `nostack quickstarter`\n\nCreates a new moderator and stack.  Also logs in the moderator locally.\n\n```\nUSAGE\n  $ nostack quickstarter\n\nOPTIONS\n  -a, --appName=appName      name of application\n  -e, --email=email          moderator email\n  -f, --force\n  -h, --help                 show CLI help\n  -l, --licenseId=licenseId  license id for the organization of the user\n  -s, --stack=stack          stack\n  -t, --template=template    template from which to spin up a stack\n  -u, --user=user            moderator to create\n  -w, --password=password    moderator password\n\nEXAMPLE\n  $ nostack quickstarter -u franky -s tempstack, -e franky@gmail.com -w franky12$\n```\n\n_See code: [src/commands/quickstarter.ts](https://github.com/NoStackApp/no-stack-cli/blob/v0.0.0-semantically-released/src/commands/quickstarter.ts)_\n\n## `nostack spinstack`\n\nSpins up a fully functional backend from a provided template.  The same template can then be used to generate front end code using the command 'makeCode'.\n\n```\nUSAGE\n  $ nostack spinstack\n\nOPTIONS\n  -a, --appName=appName          application name\n  -e, --email=email              email to be used by sample users\n  -h, --help                     show CLI help\n  -s, --stack=stack              stack\n  -t, --template=template        template from which to spin up a stack\n  -u, --user=user                moderator for stack\n  -x, --addedSuffix=addedSuffix  added suffix for sample instances generated\n```\n\n_See code: [src/commands/spinstack.ts](https://github.com/NoStackApp/no-stack-cli/blob/v0.0.0-semantically-released/src/commands/spinstack.ts)_\n\u003c!-- commandsstop --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnostackapp%2Fno-stack-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnostackapp%2Fno-stack-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnostackapp%2Fno-stack-cli/lists"}