The intention is to be extremely permissive in accepting patches. For commit privileges, just submit your first pull request or ask on Arc Language Forum.
First install Racket (v7.7 or later), then
$ raco pkg install sha $ git clone http://github.com/arclanguage/anarki $ cd anarki $ ./arc.sh # start the interactive repl $ cd apps/news $ ./run-news # or start News (also with the repl)
If you're new to Arc, or Lisp in general, a good starting point is the Tutorial.
Documentation and help
If you run into trouble, check
- Arc Language Forum
- Arc Language Wiki
- Arc Language Documentation
- Arc's built-in help system by typing
(help)at the repl
Anarki comes bundled with News, a Hacker News style app.
To run News, first pick your (the admin's) username,
$ cd anarki/apps/news $ mkdir www $ echo __username__ > www/admins
You can have multiple admins. Add them all to
www/admins, separated by whitespace.
Starting the server
Warning: If you are already running a News site, migrating to this fork might mess up your site's data. Come talk to us first, and be sure to make a backup before the migration.
Now bring up the server,
There'll be a pause while the server loads up, with some messages, then you'll
Go to http://localhost:8080. Click on login, and create the account for your username. You should now be logged in as an admin.
(Don't worry about
user break or
error writing messages.)
To customize News, change the variables at the top of
apps/news/news.arc. To change the port your server runs at, modify
Any interactive changes to the prompt will be reflected immediately in the server, without needing to restart it. Hence if you make any changes to
apps/news/news.arc, you can load them, by typing
(load "apps/news/news.arc") in the repl. If you stop the server or it dies for some reason, previously entered commands are available in the command history (at least if you have Readline installed).
You may want to serve News securely over HTTPS. An example configuration for running Nginx with SSL as a reverse proxy for News can be found in
For password reset mails to be sent out, your must set up an email account to send these from,
$ echo "email@example.com" > www/app-email ; email $ echo "smtp.example.com" >> www/app-email ; smtp server $ echo "firstname.lastname@example.org" >> www/app-email ; user $ echo "1234" >> www/app-email ; password
Anarki has thorough automated tests.
# start in the anarki directory $ ./arc.sh arc> (load "tests.arc")
Anarki is explicitly not constrained to maintain compatibility with upstream
releases, and compatibility status may swing wildly from commit to commit
depending on who takes an interest. To see a list of what's different, type
(incompatibilities) at the repl. If you make an incompatible change, please
update this list.
Anybody is welcome to make changes to Anarki, but please make sure the tests continue to pass. Since we rely on the unit-test.arc test harness, please also run its tests before committing any changes:
$ ./arc.sh (require 'lib/unit-test.arc/unit-test.arc) (load "unit-test.arc/tests.arc") (test-and-error-on-failure)
Racket expressions can be evaluated with the
($ ...) syntax. For instance,
(($ crypto-random-bytes) 16) obtains the
crypto-random-bytes function from Racket and makes a call to it.
If you write lots of Racket code and you just want to use Anarki for part of a bigger project, you can
raco pkg install anarki and use Anarki to write Racket modules:
#lang anarki (:provide function-for-use-in-racket) (= racket-import ($.dynamic-require ...)) (load "relative/path.arc") (def utility-for-use-in-racket (x) (* x (racket-import x))
Note that Anarki does not have private module scopes; the
(:provide ...) section is just there to make it easy to
require an Anarki-based library from Racket.
Anarki has some issues passing keyword arguments to Racket functions, but Racket's
keyword-apply can be used for that.