An operating function (Prototype)
Go to file
2016-06-07 18:28:34 -05:00
.d descriptive names for c files 2015-06-23 21:29:11 -04:00
debian update reference 2015-09-10 00:56:13 -04:00
extras Improve sublime arm name indexing. 2015-11-16 18:15:32 -05:00
include Merge remote-tracking branches 'philipcmonk/new-lens' and 'galenwp/arch' 2016-04-14 15:09:15 -04:00
jets Fix ++lune corner cases for real 2016-03-03 17:34:37 -05:00
noun Merge remote-tracking branches 'frodwith/nomugbuf', 'torchhound/torchhound', 'freekh/master' and 'davis68/master' 2016-06-02 13:24:29 -04:00
outside Add outside/libuv-v1.7.5 2015-11-16 17:34:48 -05:00
Spec Some naming improvements. 2016-02-06 22:44:56 -08:00
tests descriptive names for c files 2015-06-23 21:29:11 -04:00
vere Call uv_close() on UV_EOF in _cttp_ccon_kick_read_cryp_cb() and _cttp_ccon_kick_read_clyr_cb(). This addresses https://github.com/urbit/urbit/issues/254. 2016-06-07 18:28:34 -05:00
.gitignore Look for pill in build dir, arvo in arvo/ 2016-02-15 06:06:56 -05:00
.travis.yml Support for GCC and CLANG 2014-03-07 13:56:16 -05:00
CONTRIBUTING.md Fix up README and CONTRIBUTING for new world order 2016-02-15 06:07:17 -05:00
LIBUV-v1.7.5.md Build with libuv-v1.7.5 2015-11-16 17:34:49 -05:00
LICENSE.txt MIT LICENSE 2015-02-10 12:19:37 -08:00
Makefile Activate ++lune jet 2016-03-03 00:06:24 -05:00
README.md Update README.md for https pill 2016-06-02 16:02:04 -07:00

Urbit

Urbit is a clean-slate system software stack defined as a deterministic computer. An encrypted P2P network, %ames, runs on a functional operating system, Arvo, written in a strict, typed functional language, Hoon, which compiles itself to a combinator interpreter, Nock, whose spec gzips to 340 bytes.

What is this for? Most directly, Urbit is designed as a personal cloud server for self-hosted web apps. It also uses HTTP APIs to manage data stuck in traditional web applications.

More broadly, Urbit's network tackles identity and security problems which the Internet can't easily address. Programming for a deterministic single-level store is also a different experience from Unix programming, regardless of language.

Install

Urbit is designed to run on any Unix box with an internet connection. Debian (jessie), OS X, FreeBSD and Fedora all work well.

Urbit is alpha software. Its not yet completely stable, its crypto hasnt been audited, and there are plenty of rough edges. Urbit is lots of fun to play with, but not quite ready for your important or sensitive data.

Build from source

Dependencies

Urbit depends on:

gcc (or clang)
gmp
libsigsegv
openssl
automake
autoconf
ragel
cmake
re2c
libtool
libssl-dev (Linux only)
ncurses (Linux only)

Which can usually be installed with the following one-liners:

# Mac OS X [Homebrew]
brew install git gmp libsigsegv openssl libtool autoconf automake cmake

# Mac OS X [Macports]
sudo port install git gmp libsigsegv openssl autoconf automake cmake

# Ubuntu or Debian
sudo apt-get install libgmp3-dev libsigsegv-dev openssl libssl-dev libncurses5-dev git make exuberant-ctags automake autoconf libtool g++ ragel cmake re2c

# Fedora
sudo dnf install gcc gcc-c++ git gmp-devel openssl-devel openssl ncurses-devel libsigsegv-devel ctags automake autoconf libtool ragel cmake re2c

# FreeBSD
pkg install git gmake gmp libsigsegv openssl automake autoconf ragel cmake re2c libtool

# Arch
pacman -S gcc gmp libsigsegv openssl automake autoconf ragel cmake re2c libtool ncurses

# AWS
sudo yum —enablerepo epel install gcc gcc-c++ git gmp-devel openssl-devel ncurses-devel libsigsegv-devel ctags automake autoconf libtool cmake re2c

Setting up swap

Urbit wants to map 2GB of memory when it boots up. We wont necessarily use all this memory, we just want to see it. On a normal modern PC or Mac, this is not an issue. On some small cloud virtual machines (Amazon or Digital Ocean), the default memory configuration is smaller than this, and you need to manually configure a swapfile.

Digital Ocean has a post on adding swap here. For Amazon theres a StackOverflow thread here.

Dont spend a lot of time tweaking these settings; the simplest thing is fine.

Clone and make

Once your dependencies are installed the rest is easy:

git clone https://github.com/urbit/urbit
cd urbit
make
curl -o urbit.pill https://bootstrap.urbit.org/latest.pill

After running make, your Urbit executable lives at bin/urbit. The .pill file is a compiled binary of Arvo that Urbit uses to bootstrap itself.

Getting started

On disk your Urbit is an append-only log and a checkpoint. Or, in simpler terms, a directory where we keep all of your Urbits state. We call this a pier.

Initialize

When you first start an Urbit we create this pier directory and write to it.

To start with a planet (~fintud-macrep) and ticket (~fortyv-tombyt-tabsen-sonres):

bin/urbit -w fintud-macrep -t fortyv-tombyt-tabsen-sonres

This will create a directory fintud-macrep/ and begin the initialization process for that planet. Be patient, it can take a few minutes.

Without a planet anyone can create a comet:

bin/urbit -c comet

This will create a directory comet/ and start up a random 128-bit comet. You can specify any name you like.

Orientation

When your Urbit is finished booting you should see a dojo> prompt. Welcome!

By default your Urbit is quite bare bones. Let's take a very short stroll through what's running by default:

Shell — :dojo

The command prompt in front of you is a simple shell and Hoon REPL. Let's make sure it works:

~fitund-macrep:dojo> (add 2 2)

Should produce:

> (add 2 2)
4

Good.

Messaging — :talk

Use ^X to change your prompt. Let's join the main Urbit chat channel:

~fitund-macrep:talk() ;join ~doznec/urbit-meta

This may take a bit as :talk is stateful so your Urbit will download some backlog. /urbit-meta is the place to ask questions, get help and talk about anything Urbit related.

Web — :tree

Urbit is also accessible through the web. Try opening:

http://localhost:8080/

in your favorite browser. You'll be prompted to use +code. This page was generated by :tree, the basic Urbit web interface. You can also access your Urbit through http://fintud-macrep.urbit.org (where fintud-macrep is your planet name).

Filesystem — %clay

%clay, the Urbit filesystem, isn't mounted to unix by default. Switch to the :dojo prompt and run:

~fitund-macrep:dojo> |mount %

This should produce:

> |mount %
>=

which indicates the command was processed.

|mount % will cause a home/ directory to appear inside your pier folder. Changes to these files are automatically synced into your Urbit.

Learn more

If this is your first time using Urbit, and you've followed the instructions above, we'd recommend continuing the sequence here.

Docs

urbit.org/docs is the public documentation site.

The source is also in its own repo: urbit/docs.

About

urbit.org/posts contains some essays on the theory and future of urbit.

Keep in touch

  • Check out the urbit-dev mailing list for long-form discussion.
  • Follow @urbit_ on Twitter.
  • Email urbit@urbit.org. We're happy to answer questions and chat.

Code of conduct

Everyone involved in the Urbit project needs to understand and respect our code of conduct, which is: "don't be rude."

Contributing

The first step in contributing to urbit is to come and join us on :talk.

For more detailed instructions check out CONTRIBUTING.md.