{"id":19212622,"url":"https://github.com/fasterthanlime/jsw","last_synced_at":"2025-11-14T10:07:28.507Z","repository":{"id":1482653,"uuid":"1729269","full_name":"fasterthanlime/jsw","owner":"fasterthanlime","description":"Client-side Wiki, jQuery/Sinatra, generates static content on the server","archived":false,"fork":false,"pushed_at":"2011-07-18T14:33:16.000Z","size":928,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-04T17:31:30.048Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fasterthanlime.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-05-10T17:56:43.000Z","updated_at":"2019-08-13T14:45:11.000Z","dependencies_parsed_at":"2022-07-29T17:49:21.776Z","dependency_job_id":null,"html_url":"https://github.com/fasterthanlime/jsw","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/fasterthanlime%2Fjsw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fasterthanlime%2Fjsw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fasterthanlime%2Fjsw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fasterthanlime%2Fjsw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fasterthanlime","download_url":"https://codeload.github.com/fasterthanlime/jsw/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240286520,"owners_count":19777353,"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-09T13:47:31.234Z","updated_at":"2025-11-14T10:07:28.459Z","avatar_url":"https://github.com/fasterthanlime.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Description\n\n### What's a wiki?\n\nA wiki is a collaborative editing platform, allowing many to cooperate in writing a website.\n\nHowever, the term has been extended to mean anything that can be edited from the web with minimal effort,\nand making page creation extremely easy. That's exactly what jsw is.\n\n### How do wikis usually work?\n\nUsually, wikis allow users to edit the source files and then it's sent to the servers\nso that they can generate HTML markup from the Wiki markup, and back to the browser for\npreview.\n\nOften, HTML pages are generated on-the-fly from source. Sometimes they are cached, so that\nthe computation doesn't need to occur everytime. But most importantly, it's usually the\n**server** that does the markup translation. jsw is different.\n\n### How is jsw different?\n\njsw is a **client-side wiki**, which means the HTML generation occurs in your browser,\nwhile you type. Not only does this allow instant preview, it also means that your website\nis now a simple collection of static HTML files, that you can drop on any web space.\n\nIn addition, all uploads are done on the background, it feels like a native text editor\nthanks to HTML5 + JavaScript, and uses extended Markdown by default, which is a human-friendly\nmarkup language.\n\n### Isn't that less flexible than classic wiki solutions?\n\nWell yes. Since the end result is just static pages, you can't do dynamic stuff like\nprinting the date or fancy database stuf. But who does wants that in a wiki anyway?\n\n## Installing\n\n### DISCLAIMER\n\nAT THE TIME OF THIS WRITING, JSW'S SECURITY IS EQUIVALENT TO SWISS CHEESE GONE THROUGH\nAN INDUSTRIAL MIXER. IF SOMEONE DECIDES TO SNIFF YOUR CONNECTION TO RETRIEVE YOUR FTP\nIDENTIFIERS, YOU'RE ON YOUR OWN. I WILL ASSUME NO RESPONSIBILITIES FOR ANY DAMAGE CAUSED\nBY YOUR USE OF JSW. I HOPE THAT'S CLEAR.\n\n### Serving\n\nFor the admin frontend, just serve the project's directory with Apache or nginx, and configure\nURL rewriting so that every subpath is served via index.htm\n\nHere's a sample nginx configuration that works well for me:\n\n  location / {\n    root   html;\n    index  index.html index.htm;\n\n    rewrite ^/admin/(.*)$ /jsw-frontend/index.htm break;\n\t}\n    \nA similar Apache configuration can be obtained via a .htaccess and mod_rewrite\n\nFor the user frontend, here's a sample .htaccess used to serve pages without .htm:\n\n    RewriteEngine on\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_FILENAME}\\.htm -f\n    RewriteRule ^(.*)$ $1.htm\n    \nA similar nginx configuration can be used\n\nFor the backend, if you want to run it locally, just launch `ruby app.rb` - it\nwill listen on http://localhost:4567/ by default.\n\nIf you want to deploy it on Heroku (they have free hostings that are more than\nenough for a jsw backend), run `heroku create [name]` in the backend folder,\nthen `git push heroku master`.\n\n## Configuration\n\nDon't forget to update jsw.js with your own paths. They're documented in the source,\nso knock yourself out. \n\n## Usage\n\nPretty basic, eh.\n\nSo far, SFTP is the only backend, so the login box asks for your SFTP login and password.\n\nPress enter in the password box to log in.\n\nCtrl+L focuses jsw's URL bar so you can quickly switch between pages (you can also use\nthe browser's URL bar but it's slower).\n\nPress enter in the URL bar to go to a given page.\n\nCtrl+S saves the current page (or rather, queues it for upload).\n\nThe URL bar becomes red when there are unsaved changes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffasterthanlime%2Fjsw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffasterthanlime%2Fjsw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffasterthanlime%2Fjsw/lists"}