| 
									
										
										
										
											2025-02-03 12:39:23 -05:00
										 |  |  | # App Development Cheat Sheet
 | 
					
						
							| 
									
										
										
										
											2025-02-02 22:39:55 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | Making apps for the impatient tilde friend. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Prerequisites
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - either run your own instance or use [tildefriends.net](https://www.tildefriends.net/) | 
					
						
							|  |  |  | - register and login | 
					
						
							|  |  |  | - [optional] use the `ssb` app to create yourself an SSB identity | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Development Process
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1.  hit the `edit` link from any app or new app URL | 
					
						
							|  |  |  | 2.  make sure the path in the text box is under your username: `/~username/app/` | 
					
						
							|  |  |  | 3.  write server-side code in `app.js` | 
					
						
							|  |  |  | 4.  click the `save` button or press the save hotkey (Alt+S or _[browser-specific modifiers]_+S) | 
					
						
							|  |  |  | 5.  see the app reload on the right side | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Output
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - `app.setDocument(html)` - send HTML to the browser | 
					
						
							|  |  |  | - `print(...)` - send values to the browser's developer console | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Persistence
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - `app.localStorageGet(key)` -> `value` | 
					
						
							|  |  |  | - `app.localStorageSet(key, value)` | 
					
						
							|  |  |  | - `database()`, `shared_database(key)`, `my_shared_database(package, key)` | 
					
						
							|  |  |  |   - `db.get(key)` -> `value` | 
					
						
							|  |  |  |   - `db.set(key, value)` | 
					
						
							|  |  |  |   - `db.exchange(key, expected, value)` -> `exchanged` | 
					
						
							|  |  |  |   - `db.remove(key)` | 
					
						
							|  |  |  |   - `db.getAll()` -> `[key1, ...]` | 
					
						
							|  |  |  |   - `db.getLike(pattern)` -> `{key1: value1, ...}` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## SSB
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - `ssb.createIdentity()` -> `id` | 
					
						
							|  |  |  | - `ssb.getIdentities()` -> `[id1, ...]` | 
					
						
							|  |  |  | - `ssb.appendMessageWithIdentity(id, content)` -> `message_id` | 
					
						
							|  |  |  | - `ssb.blobStore(blob)` -> `blob_id` | 
					
						
							|  |  |  | - `ssb.blobGet(id)` -> `blob` | 
					
						
							|  |  |  | - `ssb.sqlAsync(query, args, row_callback)` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## TF-RPC
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Stock helper code for calling functions across the web server and browser boundary. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - on the server: `import * as tfrpc from "/tfrpc.js";` | 
					
						
							| 
									
										
										
										
											2025-02-03 12:39:23 -05:00
										 |  |  | - in the browser: `import * as tfrpc from "/static/tfrpc.js";` | 
					
						
							| 
									
										
										
										
											2025-02-02 22:39:55 -05:00
										 |  |  | - either direction: | 
					
						
							|  |  |  |   - register a function: `tfrpc.register(function my_function() {});` | 
					
						
							|  |  |  |   - call a remote function: `let promise = tfrpc.rpc.my_function();` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Share
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - give out web links: [https://www.tildefriends.net/~cory/screwble/](https://www.tildefriends.net/~cory/screwble/) | 
					
						
							|  |  |  | - use the `Attach App` button when composing a post in [the SSB app](https://www.tildefriends.net/~core/ssb/) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## More Docs
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - [api reference](https://www.tildefriends.net/~cory/api/) | 
					
						
							|  |  |  | - [source code](https://dev.tildefriends.net/cory/tildefriends/releases) |